Add files via upload

This commit is contained in:
ShadowLibraries 2023-08-22 21:47:05 -03:00 committed by GitHub
parent c4cf3e02aa
commit 960f9988b0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
31 changed files with 1507 additions and 2 deletions

25
404.html Normal file
View File

@ -0,0 +1,25 @@
<!DOCTYPE html>
<html lang="en" class="no-js">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Shadow Libraries</title>
<meta name="description" content="Pirate libraries archive">
<meta name="keywords" content="books, libraries, library, shadowlibraries" />
<meta name="author" content="kato" />
<link rel="shortcut icon" href="favicon.ico">
<!-- demo styles -->
<link rel="stylesheet" type="text/css" href="css/demo.css" />
<!-- menu styles -->
<link rel="stylesheet" type="text/css" href="css/component.css" />
</head>
<body>
<div class="contentnf">
<p class="info">Are you lost?<br><br><img src="./img/notfound.png" class="map"/></p>
<p class="infonf">You might want to go back <a href="https://shadowlibraries.github.io/">home.</a></p>
</div>
</body>
</html>

View File

@ -1,2 +1,10 @@
# shadowlibraries.github.io
Pirate Libraries Archive
Shadow Libraries
=========
A pirate libraries archive.
The name of this site comes from the [homonym book edited by Joe Karaganis](https://mitpress.mit.edu/books/shadow-libraries).
**Shadow libraries**, sometimes called pirate libraries, consist of texts aggregated outside the legal framework of copyright. The purpose of this channel, then, is to have all these libraries at our fingertips when in need of a certain text or book.
**Contribute:** Am I missing some other important libraries that should be there? Please send me an e-mail to shadowlibraries [@] protonmail.com

BIN
bookviol.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

378
css/component.css Normal file
View File

@ -0,0 +1,378 @@
/* Icons (made with Icomoon.io) */
@font-face {
font-family: 'feather';
font-weight: normal;
font-style: normal;
src: url('../fonts/feather/feather.eot?1gafuo');
src: url('../fonts/feather/feather.eot?1gafuo#iefix') format('embedded-opentype'), url('../fonts/feather/feather.woff2?1gafuo') format('woff2'), url('../fonts/feather/feather.ttf?1gafuo') format('truetype'), url('../fonts/feather/feather.woff?1gafuo') format('woff'), url('../fonts/feather/feather.svg?1gafuo#feather') format('svg');
}
.icon {
font-family: 'feather';
font-weight: normal;
font-style: normal;
font-variant: normal;
line-height: 1;
text-transform: none;
/* Better Font Rendering =========== */
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
speak: none;
}
.icon--arrow-left:before {
content: '\e901';
}
.icon--menu:before {
content: '\e903';
}
.icon--cross:before {
content: '\e117';
}
/* Menu styles */
.menu {
position: fixed;
top: 120px;
left: 0;
width: 300px;
height: calc(100vh - 120px);
background: #1c1d22;
}
.menu__wrap {
position: absolute;
top: 3.5em;
bottom: 0;
overflow: hidden;
width: 100%;
}
.menu__level {
position: absolute;
top: 0;
left: 0;
visibility: hidden;
overflow: hidden;
overflow-y: scroll;
width: calc(100% + 50px);
height: 100%;
margin: 0;
padding: 0;
list-style-type: none;
}
.menu__level:focus {
outline: none;
}
.menu__level--current {
visibility: visible;
}
.menu__item {
display: block;
width: calc(100% - 50px);
}
.menu__link {
font-weight: 600;
position: relative;
display: block;
padding: 1em 2.5em 1em 1.5em;
color: #bdbdbd;
-webkit-transition: color 0.1s;
transition: color 0.1s;
}
.menu__link[data-submenu]::after {
content: '\e904';
font-family: 'feather';
position: absolute;
right: 0;
padding: 0.25em 1.25em;
color: #2a2b30;
}
.menu__link:hover,
.menu__link:focus,
.menu__link[data-submenu]:hover::after,
.menu__link[data-submenu]:focus::after {
color: #5c5edc;
}
.menu__link--current::before {
content: '\00B7';
font-size: 1.5em;
line-height: 0;
position: absolute;
top: 50%;
left: 0.5em;
height: 4px;
color: #5c5edc;
}
[class^='animate-'],
[class*=' animate-'] {
visibility: visible;
}
.animate-outToRight .menu__item {
-webkit-animation: outToRight 0.6s both cubic-bezier(0.7, 0, 0.3, 1);
animation: outToRight 0.6s both cubic-bezier(0.7, 0, 0.3, 1);
}
#random-image {
width:360px;
height:275px;
}
.titunotf {
text-align:center;
color:#a480ff;
font-size: 3rem;
padding: 10vh 1em 0;
}
.map {
width: 15rem;
height: 15rem;
}
@-webkit-keyframes outToRight {
to {
opacity: 0;
-webkit-transform: translate3d(100%, 0, 0);
transform: translate3d(100%, 0, 0);
}
}
@keyframes outToRight {
to {
opacity: 0;
-webkit-transform: translate3d(100%, 0, 0);
transform: translate3d(100%, 0, 0);
}
}
.animate-outToLeft .menu__item {
-webkit-animation: outToLeft 0.6s both cubic-bezier(0.7, 0, 0.3, 1);
animation: outToLeft 0.6s both cubic-bezier(0.7, 0, 0.3, 1);
}
@-webkit-keyframes outToLeft {
to {
opacity: 0;
-webkit-transform: translate3d(-100%, 0, 0);
transform: translate3d(-100%, 0, 0);
}
}
@keyframes outToLeft {
to {
opacity: 0;
-webkit-transform: translate3d(-100%, 0, 0);
transform: translate3d(-100%, 0, 0);
}
}
.animate-inFromLeft .menu__item {
-webkit-animation: inFromLeft 0.6s both cubic-bezier(0.7, 0, 0.3, 1);
animation: inFromLeft 0.6s both cubic-bezier(0.7, 0, 0.3, 1);
}
@-webkit-keyframes inFromLeft {
from {
opacity: 0;
-webkit-transform: translate3d(-100%, 0, 0);
transform: translate3d(-100%, 0, 0);
}
to {
opacity: 1;
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
}
}
@keyframes inFromLeft {
from {
opacity: 0;
-webkit-transform: translate3d(-100%, 0, 0);
transform: translate3d(-100%, 0, 0);
}
to {
opacity: 1;
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
}
}
.animate-inFromRight .menu__item {
-webkit-animation: inFromRight 0.6s both cubic-bezier(0.7, 0, 0.3, 1);
animation: inFromRight 0.6s both cubic-bezier(0.7, 0, 0.3, 1);
}
@-webkit-keyframes inFromRight {
from {
opacity: 0;
-webkit-transform: translate3d(100%, 0, 0);
transform: translate3d(100%, 0, 0);
}
to {
opacity: 1;
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
}
}
@keyframes inFromRight {
from {
opacity: 0;
-webkit-transform: translate3d(100%, 0, 0);
transform: translate3d(100%, 0, 0);
}
to {
opacity: 1;
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
}
}
.menu__breadcrumbs {
font-size: 0.65em;
line-height: 1;
position: relative;
padding: 2.5em 3.75em 1.5em 2.5em;
}
.menu__breadcrumbs a {
font-weight: bold;
display: inline-block;
cursor: pointer;
vertical-align: middle;
letter-spacing: 1px;
text-transform: uppercase;
color: #5c5edc;
}
.menu__breadcrumbs a:last-child {
pointer-events: none;
}
.menu__breadcrumbs a:hover,
.menu__breadcrumbs a:focus {
color: #8182e0;
}
.menu__breadcrumbs a:not(:last-child)::after {
content: '\e902';
font-family: 'feather';
display: inline-block;
padding: 0 0.5em;
color: #33353e;
}
.menu__breadcrumbs a:not(:last-child):hover::after,
.menu__breadcrumbs a:not(:last-child):focus::after {
color: #33353e;
}
.menu__back {
font-size: 1.05em;
position: absolute;
z-index: 100;
top: 0;
right: 2.25em;
margin: 0;
padding: 1.365em 0.65em 0 0;
cursor: pointer;
color: #2a2b30;
border: none;
background: none;
}
.menu__back--hidden {
pointer-events: none;
opacity: 0;
}
.menu__back:hover,
.menu__back:focus {
color: #fff;
outline: none;
}
/* Open and close buttons */
.action {
position: absolute;
display: block;
margin: 0;
padding: 0;
cursor: pointer;
border: none;
background: none;
}
.action:focus {
outline: none;
}
.action--open {
font-size: 1.5em;
top: 1em;
left: 1em;
display: none;
color: #fff;
position: fixed;
z-index: 1000;
}
.action--close {
font-size: 1.1em;
top: 1.25em;
right: 1em;
display: none;
color: #45464e;
}
@media screen and (max-width: 40em) {
.action--open,
.action--close {
display: block;
}
.menu {
z-index: 1000;
top: 0;
width: 100%;
height: 100vh;
-webkit-transform: translate3d(-100%, 0, 0);
transform: translate3d(-100%, 0, 0);
-webkit-transition: -webkit-transform 0.3s;
transition: transform 0.3s;
}
.menu--open {
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
}
#random-image {
width: 90%;
height: auto;
}
.map {
max-width: 15rem;
width: 80%;
height: auto;
}
}
.subtitulo {
text-align:left;
color:#a480ff;
font-weight: bold;
}

332
css/demo.css Normal file
View File

@ -0,0 +1,332 @@
/* General Blueprint Style */
@font-face {
font-family: 'bpicons';
font-weight: normal;
font-style: normal;
src: url('../fonts/bpicons/bpicons.eot');
src: url('../fonts/bpicons/bpicons.eot?#iefix') format('embedded-opentype'), url('../fonts/bpicons/bpicons.woff') format('woff'), url('../fonts/bpicons/bpicons.ttf') format('truetype'), url('../fonts/bpicons/bpicons.svg#bpicons') format('svg');
}/* Made with http://icomoon.io/ */
/* Resets */
*,
*:after,
*:before {
box-sizing: border-box;
}
/* Helper classes */
.cf:before,
.cf:after {
content: ' ';
display: table;
}
.cf:after {
clear: both;
}
/* Main styles */
body {
font-family: 'Avenir Next', Avenir, 'Helvetica Neue', 'Lato', 'Segoe UI', Helvetica, Arial, sans-serif;
overflow: hidden;
margin: 0;
color: #cecece;
background: #2a2b30;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
a {
text-decoration: none;
color: #fff;
outline: none;
}
a:hover {
color: #ddd;
}
.container {
overflow-y: auto;
height: 100vh;
}
/* Blueprint header */
.bp-header {
display: -webkit-flex;
display: flex;
}
.bp-header__main {
margin: 0 0 0 auto;
padding: 2em 3em 0;
text-align: right;
}
.bp-header__title {
font-size: 1.3em;
font-weight: 400;
line-height: 1.3;
margin: 0.25em 0 0;
}
h4 {
font-size: 1.2em;
font-weight: 400;
line-height: 1.3;
margin: 0.1em 0 0;
color: #696b74;
}
.bp-header__present {
font-size: 0.75em;
font-weight: 700;
position: relative;
z-index: 100;
display: block;
margin: 0 -8px 0 0;
padding: 0 0 0.6em 0;
text-indent: 3px;
letter-spacing: 3px;
text-transform: uppercase;
color: #5c5edc;
}
.bp-tooltip:after {
position: relative;
top: -8px;
left: -8px;
display: inline-block;
width: 0;
height: 0;
}
.bp-tooltip:hover:before {
content: attr(data-content);
font-size: 110%;
font-weight: 700;
line-height: 1.2;
position: absolute;
top: 1.5em;
right: 0;
width: 50vw;
padding: 0.8em 1em;
text-align: right;
text-indent: 0;
letter-spacing: 0;
text-transform: none;
color: #fff;
background: #5c5edc;
}
.bp-nav {
margin: 0.5em 0 0 auto;
text-align: right;
}
.bp-nav__item {
position: relative;
display: inline-block;
width: 2.5em;
height: 2.5em;
margin: 0 0.1em;
text-align: left;
border-radius: 50%;
}
.bp-nav__item > span {
display: none;
}
.bp-nav__item:hover:before {
content: attr(data-info);
font-size: 0.85em;
font-weight: bold;
position: absolute;
top: 120%;
right: 0;
width: 600%;
text-align: right;
pointer-events: none;
color: #595a5f;
}
.bp-nav__item:hover {
background: #5c5edc;
}
.bp-icon:after {
font-family: 'bpicons';
font-weight: normal;
font-style: normal;
font-variant: normal;
text-align: center;
text-transform: none;
color: #5c5edc;
-webkit-font-smoothing: antialiased;
speak: none;
}
.bp-nav .bp-icon:after {
line-height: 2.4;
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
text-indent: 0;
}
.bp-nav a:hover:after {
color: #fff;
}
.bp-icon--next:after {
content: '\e000';
}
.bp-icon--drop:after {
content: '\e001';
}
.bp-icon--archive:after {
content: '\e002';
}
.bp-icon--about:after {
content: '\e003';
}
.bp-icon--prev:after {
content: '\e004';
}
.dummy-logo {
position: fixed;
top: 0;
left: 0;
width: 300px;
height: 120px;
padding: 1em 0 0 0;
text-align: center;
color: #3b3d4a;
background: #1c1d22;
}
.dummy-icon {
font-size: 4em;
}
.dummy-heading {
font-size: 0.75em;
letter-spacing: 2px;
text-transform: uppercase;
}
.content {
position: relative;
min-height: 300px;
margin: 0 150px 0 350px;
}
.contentnf {
position: relative;
min-height: 300px;
margin: 0 1%;
}
.content--loading {
background: url(../img/loading.svg) no-repeat 50% 50%;
}
.products {
margin: 0;
padding: 2em;
text-align: center;
}
.product {
display: inline-block;
width: 200px;
height: 200px;
margin: 10px;
border-radius: 5px;
background: #1c1d22;
}
.product .foodicon {
font-size: 4em;
line-height: 190px;
color: #3b3d4a;
}
.info {
font-size: 1.1em;
font-weight: bold;
padding: 20vh 1em 0;
text-align: center;
color: #47484c;
}
.infonf {
font-size: 1.1em;
font-weight: bold;
padding: 1% 0;
text-align: center;
color: #47484c;
}
body #cdawrap {
top: auto;
bottom: 15px;
background: rgba(0, 0, 0, 0.1);
}
body #cdawrap .carbon-text {
color: #505158;
}
body #cdawrap a.carbon-poweredby {
color: #7883c4;
}
body #cdawrap a:hover.carbon-poweredby {
color: #fff;
}
@media screen and (max-width: 40em) {
.bp-header {
padding-top: 3em;
}
.bp-header__main,
.bp-nav {
width: 100%;
text-align: center;
}
.dummy-logo {
display: none;
}
.content {
margin: 0;
}
body,
.container {
height: auto;
overflow: auto;
}
.contentnf {
position: relative;
min-height: 1%;
margin: 0 1%;
}
}

BIN
favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

BIN
fonts/bpicons/bpicons.eot Normal file

Binary file not shown.

24
fonts/bpicons/bpicons.svg Normal file
View File

@ -0,0 +1,24 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<metadata>
This is a custom SVG font generated by IcoMoon.
<iconset grid="14"></iconset>
</metadata>
<defs>
<font id="bpicons" horiz-adv-x="448" >
<font-face units-per-em="448" ascent="384" descent="-64" />
<missing-glyph horiz-adv-x="448" />
<glyph unicode="&#xe000;" d="M 368.00,144.00q0.00-13.50 -9.25-22.75l-162.75-162.75q-9.75-9.25 -22.75-9.25q-12.75,0.00 -22.50,9.25l-18.75,18.75q-9.50,9.50 -9.50,22.75t 9.50,22.75l 73.25,73.25l-176.00,0.00 q-13.00,0.00 -21.125,9.375t-8.125,22.625l0.00,32.00 q0.00,13.25 8.125,22.625t 21.125,9.375l 176.00,0.00 l-73.25,73.50q-9.50,9.00 -9.50,22.50t 9.50,22.50l 18.75,18.75q 9.50,9.50 22.50,9.50q 13.25,0.00 22.75-9.50l 162.75-162.75q 9.25-8.75 9.25-22.50z" horiz-adv-x="384" />
<glyph unicode="&#xe001;" d="M 221.657,359.485 ,m0.00,0.00,c 0.00,0.00 -132.984-182.838 -132.205-286.236 0.515-68.522 61.089-123.688 135.314-123.218 74.202,0.479 133.943,56.421 133.428,124.943 C 357.414,178.368 221.657,359.485 221.657,359.485 z" />
<glyph unicode="&#xe002;" d="M 407.273-23.273c0.00,0.00-325.818,0.00-366.545,0.00s-40.727,40.727-40.727,40.727l0.00,142.545 l 101.818,183.273l 244.364,0.00 l 101.818-183.273c0.00,0.00,0.00-101.818,0.00-142.545S 407.273-23.273, 407.273-23.273z M 325.818,302.545L 122.182,302.545
l-71.273-142.545L 142.545,160.00 c0.00,0.00, 40.727,0.00, 40.727-40.727l0.00-20.364 l 81.455,0.00 l0.00,20.364 c0.00,0.00,0.00,40.727, 40.727,40.727l 91.636,0.00 L 325.818,302.545z M 407.273,119.273l-96.911,0.00 C 307.532,113.917, 305.455,107.503, 305.455,98.909c0.00-40.727-40.727-40.727-40.727-40.727L 183.273,58.182 c0.00,0.00-40.727,0.00-40.727,40.727
c0.00,8.593-2.077,15.008-4.908,20.364L 40.727,119.273 l0.00-101.818 l 366.545,0.00 L 407.273,119.273 z M 132.364,221.091l 183.273,0.00 L 325.818,200.727L 122.182,200.727 L 132.364,221.091z M 152.727,261.818l 142.545,0.00 L 305.455,241.455L 142.545,241.455 L 152.727,261.818z" />
<glyph unicode="&#xe003;" d="M 224.00-64.00C 100.291-64.00,0.00,36.291,0.00,160.00S 100.291,384.00, 224.00,384.00s 224.00-100.291, 224.00-224.00S 347.709-64.00, 224.00-64.00z
M 224.00,343.273c-101.228,0.00-183.273-82.045-183.273-183.273s 82.045-183.273, 183.273-183.273s 183.273,82.045, 183.273,183.273S 325.228,343.273, 224.00,343.273z M 244.364,122.164C 244.364,111.005, 244.364,98.909, 244.364,98.909l-40.727,0.00 c0.00,0.00,0.00,29.466,0.00,40.727
s 9.123,20.364, 20.364,20.364l0.00,0.00c 22.481,0.00, 40.727,18.246, 40.727,40.727s-18.246,40.727-40.727,40.727S 183.273,223.209, 183.273,200.727c0.00-7.453, 2.138-14.356, 5.641-20.364L 145.437,180.364 C 143.727,186.90, 142.545,193.661, 142.545,200.727
c0.00,44.983, 36.471,81.455, 81.455,81.455s 81.455-36.471, 81.455-81.455C 305.455,162.831, 279.45,131.247, 244.364,122.164z M 244.364,37.818l-40.727,0.00 l0.00,40.727 l 40.727,0.00 L 244.364,37.818 z" />
<glyph unicode="&#xe004;" d="M 384.00,160.00l0.00-32.00 q0.00-13.25 -8.125-22.625t-21.125-9.375l-176.00,0.00 l 73.25-73.50q 9.50-9.00 9.50-22.50t-9.50-22.50l-18.75-19.00q-9.25-9.25 -22.50-9.25q-13.00,0.00 -22.75,9.25l-162.75,163.00q-9.25,9.25 -9.25,22.50q0.00,13.00 9.25,22.75l 162.75,162.50q 9.50,9.50 22.75,9.50q 13.00,0.00 22.50-9.50l 18.75-18.50q 9.50-9.50 9.50-22.75t-9.50-22.75l-73.25-73.25l 176.00,0.00 q 13.00,0.00 21.125-9.375 t 8.125-22.625z" horiz-adv-x="384" />
<glyph unicode="&#x20;" horiz-adv-x="224" />
<glyph class="hidden" unicode="&#xf000;" d="M0,384L 448 -64L0 -64 z" horiz-adv-x="0" />
</font></defs></svg>

After

Width:  |  Height:  |  Size: 3.5 KiB

BIN
fonts/bpicons/bpicons.ttf Normal file

Binary file not shown.

BIN
fonts/bpicons/bpicons.woff Normal file

Binary file not shown.

View File

@ -0,0 +1,6 @@
Icon Set: Font Awesome -- http://fortawesome.github.com/Font-Awesome/
License: SIL -- http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL
Icon Set: Eco Ico -- http://dribbble.com/shots/665585-Eco-Ico
License: CC0 -- http://creativecommons.org/publicdomain/zero/1.0/

BIN
fonts/feather/feather.eot Normal file

Binary file not shown.

16
fonts/feather/feather.svg Normal file
View File

@ -0,0 +1,16 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<metadata>Generated by IcoMoon</metadata>
<defs>
<font id="feather" horiz-adv-x="1024">
<font-face units-per-em="1024" ascent="960" descent="-64" />
<missing-glyph horiz-adv-x="1024" />
<glyph unicode="&#x20;" horiz-adv-x="512" d="" />
<glyph unicode="&#xe117;" glyph-name="cross" d="M810.667 768q18.333 0 30.5-12.167t12.167-30.5q0-18-12.333-30.333l-268.667-268.333 268.667-268.333q12.333-12.333 12.333-30.333 0-18.333-12.167-30.5t-30.5-12.167q-18 0-30.333 12.333l-268.333 268.667-268.333-268.667q-12.333-12.333-30.333-12.333-18.333 0-30.5 12.167t-12.167 30.5q0 18 12.333 30.333l268.667 268.333-268.667 268.333q-12.333 12.333-12.333 30.333 0 18.333 12.167 30.5t30.5 12.167q18 0 30.333-12.333l268.333-268.667 268.333 268.667q12.333 12.333 30.333 12.333z" />
<glyph unicode="&#xe900;" glyph-name="fast-forward" d="M469.333 768q17.667 0 30-12.333l298.667-298.667q12.667-12.667 12.667-30.333t-12.667-30.333l-298.667-298.667q-12.333-12.333-30-12.333t-30.167 12.5-12.5 30.167q0 18 12.333 30.333l268.333 268.333-268.333 268.333q-12.333 12.333-12.333 30.333 0 18.333 12.167 30.5t30.5 12.167zM213.333 768q17.667 0 30-12.333l298.667-298.667q12.667-12.667 12.667-30.333t-12.667-30.333l-298.667-298.667q-12.333-12.333-30-12.333t-30.167 12.5-12.5 30.167q0 18 12.333 30.333l268.333 268.333-268.333 268.333q-12.333 12.333-12.333 30.333 0 18.333 12.167 30.5t30.5 12.167z" />
<glyph unicode="&#xe901;" glyph-name="arrow-left" d="M426.667 768q17.667 0 30.167-12.5t12.5-30.167q0-18-12.667-30.333l-225.667-225.667h665q17.667 0 30.167-12.5t12.5-30.167-12.5-30.167-30.167-12.5h-665l225.667-225.667q12.667-12.333 12.667-30.333 0-17.667-12.5-30.167t-30.167-12.5q-18 0-30.333 12.333l-298.667 298.667q-12.333 13-12.333 30.333t12.333 30.333l298.667 298.667q12.667 12.333 30.333 12.333z" />
<glyph unicode="&#xe902;" glyph-name="arrow-right" d="M597.333 768q18 0 30.333-12.333l298.667-298.667q12.333-12.333 12.333-30.333t-12.333-30.333l-298.667-298.667q-12.333-12.333-30.333-12.333-18.333 0-30.5 12.167t-12.167 30.5q0 18 12.333 30.333l226 225.667h-665q-17.667 0-30.167 12.5t-12.5 30.167 12.5 30.167 30.167 12.5h665l-226 225.667q-12.333 12.333-12.333 30.333 0 18.333 12.167 30.5t30.5 12.167z" />
<glyph unicode="&#xe903;" glyph-name="menu" d="M128 725.334h768q17.667 0 30.167-12.5t12.5-30.167-12.5-30.167-30.167-12.5h-768q-17.667 0-30.167 12.5t-12.5 30.167 12.5 30.167 30.167 12.5zM128 213.334h768q17.667 0 30.167-12.5t12.5-30.167-12.5-30.167-30.167-12.5h-768q-17.667 0-30.167 12.5t-12.5 30.167 12.5 30.167 30.167 12.5zM128 469.334h768q17.667 0 30.167-12.5t12.5-30.167-12.5-30.167-30.167-12.5h-768q-17.667 0-30.167 12.5t-12.5 30.167 12.5 30.167 30.167 12.5z" />
<glyph unicode="&#xe904;" glyph-name="ellipsis" d="M853.333 554.667q53 0 90.5-37.5t37.5-90.5-37.5-90.5-90.5-37.5-90.5 37.5-37.5 90.5 37.5 90.5 90.5 37.5zM170.667 554.667q53 0 90.5-37.5t37.5-90.5-37.5-90.5-90.5-37.5-90.5 37.5-37.5 90.5 37.5 90.5 90.5 37.5zM170.667 469.334q-17.667 0-30.167-12.5t-12.5-30.167 12.5-30.167 30.167-12.5 30.167 12.5 12.5 30.167-12.5 30.167-30.167 12.5zM512 554.667q53 0 90.5-37.5t37.5-90.5-37.5-90.5-90.5-37.5-90.5 37.5-37.5 90.5 37.5 90.5 90.5 37.5zM512 469.334q-17.667 0-30.167-12.5t-12.5-30.167 12.5-30.167 30.167-12.5 30.167 12.5 12.5 30.167-12.5 30.167-30.167 12.5zM853.333 469.334q-17.667 0-30.167-12.5t-12.5-30.167 12.5-30.167 30.167-12.5 30.167 12.5 12.5 30.167-12.5 30.167-30.167 12.5z" />
</font></defs></svg>

After

Width:  |  Height:  |  Size: 3.5 KiB

BIN
fonts/feather/feather.ttf Normal file

Binary file not shown.

BIN
fonts/feather/feather.woff Normal file

Binary file not shown.

BIN
fonts/feather/feather.woff2 Normal file

Binary file not shown.

BIN
img/floppysl.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 KiB

33
img/loading.svg Normal file
View File

@ -0,0 +1,33 @@
<!-- By Sam Herbert (@sherb), for everyone. More @ http://goo.gl/7AJzbL -->
<svg width="60" height="15" viewBox="0 0 120 30" xmlns="http://www.w3.org/2000/svg" fill="#1c1d22">
<circle cx="15" cy="15" r="15">
<animate attributeName="r" from="15" to="15"
begin="0s" dur="0.8s"
values="15;9;15" calcMode="linear"
repeatCount="indefinite" />
<animate attributeName="fill-opacity" from="1" to="1"
begin="0s" dur="0.8s"
values="1;.5;1" calcMode="linear"
repeatCount="indefinite" />
</circle>
<circle cx="60" cy="15" r="9" fill-opacity="0.3">
<animate attributeName="r" from="9" to="9"
begin="0s" dur="0.8s"
values="9;15;9" calcMode="linear"
repeatCount="indefinite" />
<animate attributeName="fill-opacity" from="0.5" to="0.5"
begin="0s" dur="0.8s"
values=".5;1;.5" calcMode="linear"
repeatCount="indefinite" />
</circle>
<circle cx="105" cy="15" r="15">
<animate attributeName="r" from="15" to="15"
begin="0s" dur="0.8s"
values="15;9;15" calcMode="linear"
repeatCount="indefinite" />
<animate attributeName="fill-opacity" from="1" to="1"
begin="0s" dur="0.8s"
values="1;.5;1" calcMode="linear"
repeatCount="indefinite" />
</circle>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
img/missingno.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 155 KiB

BIN
img/notfound.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 128 KiB

BIN
img/pirate-logo-color.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 KiB

BIN
img/pirates-history.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 MiB

144
index.html Normal file
View File

@ -0,0 +1,144 @@
<!DOCTYPE html>
<html lang="en" class="no-js">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Shadow Libraries</title>
<meta name="description" content="Pirate libraries archive">
<meta name="keywords" content="books, libraries, library, shadowlibraries" />
<meta name="author" content="kato" />
<link rel="shortcut icon" href="favicon.ico">
<!-- demo styles -->
<link rel="stylesheet" type="text/css" href="css/demo.css" />
<!-- menu styles -->
<link rel="stylesheet" type="text/css" href="css/component.css" />
<script src="js/modernizr-custom.js"></script>
<script src="https://kit.fontawesome.com/82ff3170c5.js" crossorigin="anonymous"></script>
</head>
<body>
<!-- Main container -->
<div class="container">
<!-- Blueprint header -->
<header class="bp-header cf">
<div class="dummy-logo">
<img src="bookviol.png" style=width:75px;height:75px>
<h2 class="dummy-heading">Shadow Libraries</h2>
</div>
<div class="bp-header__main">
<h4>A pirate libraries archive</h4>
<h1 class="bp-header__title">Shadow Libraries</h1>
<nav class="bp-nav">
<p><a href="https://shadowlibraries.github.io/"><img src="uk-flag.png"></a> <a href="https://shadowlibraries.github.io/esp/"><img src="spain-flag.png"></a> </p>
<p>Mirror: <a href="https://shadowlibraries.neocities.org/"><i class="fa-solid fa-1"></i></a> | <a href="https://github.com/ShadowLibraries/shadowlibraries.github.io/"><i class="fa-brands fa-github fa-light fa-lg"></i></a></p>
</nav>
</div>
</header>
<button class="action action--open" aria-label="Open Menu"><span class="icon icon--menu"></span></button>
<nav id="ml-menu" class="menu">
<button class="action action--close" aria-label="Close Menu"><span class="icon icon--cross"></span></button>
<div class="menu__wrap">
<ul data-menu="main" class="menu__level" tabindex="-1" role="menu" aria-label="All">
<li class="menu__item" role="menuitem"><a class="menu__link" data-submenu="submenu-1" aria-owns="submenu-1" href="#">Direct Downloads</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" data-submenu="submenu-2" aria-owns="submenu-2" href="#">Torrents</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" data-submenu="submenu-3" aria-owns="submenu-3" href="#">IRC Channels</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" data-submenu="submenu-4" aria-owns="submenu-4" href="#">Telegram Bots</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" data-submenu="submenu-5" aria-owns="submenu-5" href="#">Reading online [English]</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" data-submenu="submenu-6" aria-owns="submenu-6" href="#">About this site</a></li>
</ul>
<!-- Submenu 1 -->
<ul data-menu="submenu-1" id="submenu-1" class="menu__level" tabindex="-1" role="menu" aria-label="Direct Downloads">
<li class="menu__item" role="menuitem"><a class="menu__link" href="#">Anna's archive</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="#">LibGen [Multi-Lang]</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="#">Sci-Hub [Multi-Lang]</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="#">Internet Archive [Multi-Lang]</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="#">Trantor [Multi-Lang]</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="#">Memory of the World [Multi-Lang]</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="#">AAAAARG [Multi-Lang]</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="#">Forcoder.su [English]</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="#">Lectulandia [Spanish]</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="#">Ebiblioteca [Spanish]</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="#">Pirateca [Spanish]</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="#">Ebookelo [Spanish]</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="#">Rave Book Seach</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="#">Other Websites</a></li>
</ul>
<!-- Submenu 2 -->
<ul data-menu="submenu-2" id="submenu-2" class="menu__level" tabindex="-1" role="menu" aria-label="Torrents">
<li class="menu__item" role="menuitem"><a class="menu__link" href="#">Academic Torrents [English]</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="#">Epublibre [Spanish]</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="#">Torrent packs</a></li>
</ul>
<!-- Submenu 3 -->
<ul data-menu="submenu-3" id="submenu-3" class="menu__level" tabindex="-1" role="menu" aria-label="IRC Channels">
<li class="menu__item" role="menuitem"><a class="menu__link" href="#">Getting books from IRC Channels</a></li>
</ul>
</div>
</nav>
<div class="content">
<p class="info">Please select your download method</br></br><img id="random-image"/></p>
<!-- Ajax loaded content here -->
</div>
</div>
<!-- /view -->
<script src="js/classie.js"></script>
<script src="js/dummydata.js"></script>
<script src="js/main.js"></script>
<script>
(function() {
var menuEl = document.getElementById('ml-menu'),
mlmenu = new MLMenu(menuEl, {
// breadcrumbsCtrl : true, // show breadcrumbs
// initialBreadcrumb : 'all', // initial breadcrumb text
backCtrl : false, // show back button
// itemsDelayInterval : 60, // delay between each menu item sliding animation
onItemClick: loadDummyData // callback: item that doesn´t have a submenu gets clicked - onItemClick([event], [inner HTML of the clicked item])
});
// mobile menu toggle
var openMenuCtrl = document.querySelector('.action--open'),
closeMenuCtrl = document.querySelector('.action--close');
openMenuCtrl.addEventListener('click', openMenu);
closeMenuCtrl.addEventListener('click', closeMenu);
function openMenu() {
classie.add(menuEl, 'menu--open');
closeMenuCtrl.focus();
}
function closeMenu() {
classie.remove(menuEl, 'menu--open');
openMenuCtrl.focus();
}
// simulate grid content loading
var gridWrapper = document.querySelector('.content');
function loadDummyData(ev, itemName) {
ev.preventDefault();
closeMenu();
gridWrapper.innerHTML = '';
classie.add(gridWrapper, 'content--loading');
setTimeout(function() {
classie.remove(gridWrapper, 'content--loading');
gridWrapper.innerHTML = '<ul class="products">' + dummyData[itemName] + '<ul>';
}, 700);
}
})();
</script>
<script src="js/randomimg.js"></script>
</body>
</html>

85
js/classie.js Normal file
View File

@ -0,0 +1,85 @@
/*!
* classie v1.0.1
* class helper functions
* from bonzo https://github.com/ded/bonzo
* MIT license
*
* classie.has( elem, 'my-class' ) -> true/false
* classie.add( elem, 'my-new-class' )
* classie.remove( elem, 'my-unwanted-class' )
* classie.toggle( elem, 'my-class' )
*/
/*jshint browser: true, strict: true, undef: true, unused: true */
/*global define: false, module: false */
( function( window ) {
'use strict';
// class helper functions from bonzo https://github.com/ded/bonzo
function classReg( className ) {
return new RegExp("(^|\\s+)" + className + "(\\s+|$)");
}
// classList support for class management
// altho to be fair, the api sucks because it won't accept multiple classes at once
var hasClass, addClass, removeClass;
if ( 'classList' in document.documentElement ) {
hasClass = function( elem, c ) {
return elem.classList.contains( c );
};
addClass = function( elem, c ) {
elem.classList.add( c );
};
removeClass = function( elem, c ) {
elem.classList.remove( c );
};
}
else {
hasClass = function( elem, c ) {
return classReg( c ).test( elem.className );
};
addClass = function( elem, c ) {
if ( !hasClass( elem, c ) ) {
elem.className = elem.className + ' ' + c;
}
};
removeClass = function( elem, c ) {
elem.className = elem.className.replace( classReg( c ), ' ' );
};
}
function toggleClass( elem, c ) {
var fn = hasClass( elem, c ) ? removeClass : addClass;
fn( elem, c );
}
var classie = {
// full names
hasClass: hasClass,
addClass: addClass,
removeClass: removeClass,
toggleClass: toggleClass,
// short names
has: hasClass,
add: addClass,
remove: removeClass,
toggle: toggleClass
};
// transport
if ( typeof define === 'function' && define.amd ) {
// AMD
define( classie );
} else if ( typeof exports === 'object' ) {
// CommonJS
module.exports = classie;
} else {
// browser global
window.classie = classie;
}
})( window );

45
js/dummydata.js Normal file
View File

@ -0,0 +1,45 @@
// grid dummy data
var dummyData = {
"Anna's archive":"<li><div><p class='subtitulo'>Links:</p></div></li><div><p style=text-align:left><u><a href=https://annas-archive.org/ target=_blank>Anna's Archive</a></u></p><p style=text-align:left><u><a href=https://annas-archive.gs/ target=_blank>Mirror 1</a></u></p></div><li><div><p class='subtitulo'>Summary:</p></li></div><div> <p style=text-align:left> Anna's Archive is a free non-profit online shadow library metasearch engine (purportedly via IPFS) providing access to a variety of book resources, created by a team of anonymous archivists, and launched in direct response to law enforcement efforts, formally assisted by The Publishers Association and the Authors Guild, to close down the Z-Library website in November 2022.</p></div> ",
"LibGen [Multi-Lang]":"<li><div><p class='subtitulo'>Links and Mirrors:</p></div></li><div><p style=text-align:left><u><a href=http://gen.lib.rus.ec/ target=_blank>Gen.lib.rus.ec</a></p></div><div><p style=text-align:left> <a href=http://genotypeinczgrxr.onion/ target=_blank>Tor mirror (files only)</u></a> (In order to access the dark web site you will need <a href=https://www.torproject.org/ target=_blank><u>Tor Browser).</a> </p></div><div><p style=text-align:left> <a href=http://libgen.lc/ target=_blank>Libgen.lc</a></p></div><div><p style=text-align:left> <a href=http://bookfi.net/ target=_blank>BookFI.net</a></p></div><div><p style=text-align:left><a href=http://libgen.pw/ target=_blank>Libgen.pw</a></p></div><br><br></u><li><div><p class='subtitulo'>Summary:</p></li></div> <div> <p style=text-align:left> Multiple languages and file extentions. <br><br> Library Genesis (Libgen) is a file-sharing website for scholarly journal articles, academic and general-interest books, images, comics, and magazines. In part, the site enables free access to content that is otherwise paywalled or not digitized elsewhere. Libgen describes itself as a &#34;links aggregator&#34; providing a searchable database of articles, books, and images &#34;collected from publicly available public Internet resources&#34;, as well as uploaded &#34;items from users&#34;.</p><p style=text-align:left> Started around 2008 by Russian scientists, it absorbed the contents of, and became the functional successor to, library.nu, which was shut down by legal action in 2012.</p></div>",
"Sci-Hub [Multi-Lang]":"<li><div><p class='subtitulo'>Links and Mirrors:</p></div></li><div><p style=text-align:left><u><a href=http://sci-hub.st target=_blank>sci-hub.st</a></p></div><div><p style=text-align:left> <a href=http://sci-hub.ru target=_blank>sci-hub.ru</a> </p></div><div><p style=text-align:left> <a href=http://sci-hub.tw target=_blank>sci-hub.tw</a></u></p></div><br><li><div><p class='subtitulo'>Summary:</p></li></div> <div> <p style=text-align:left> The first pirate website in the world to provide mass and public access to tens of millions of research papers.At this time the widest possible distribution of research papers, as well as of other scientific or educational sources, is artificially restricted by copyright laws. Such laws effectively slow down the development of science in human society. The Sci-Hub project, running from 5th September 2011, is challenging the status quo. At the moment, Sci-Hub provides access to hundreds of thousands research papers every day, effectively bypassing any paywalls and restrictions.</p><p style=text-align:left> Sci-Hub was founded by Alexandra Elbakyan in 2011 in Kazakhstan in response to the high cost of research papers behind paywalls. The site is extensively used worldwide In September 2019, the site's owners said that it served approximately 400,000 requests per day. The number of articles claimed is frequently updated on the site's home page, being over 81 million in April 2020.Sci-Hub and Elbakyan were sued twice for copyright infringement in the United States in 2015 and 2017, and lost both cases by default, leading to loss of some of its Internet domain names. The site has cycled through different domain names since then.</p><br><img src=https://i.imgur.com/NcJAVwV.png style=float:center> </p></div>",
"Internet Archive [Multi-Lang]":"<li><div><p class='subtitulo'>Link:</p></div></li><div><p style=text-align:left><a href=https://archive.org target=_blank><u>archive.org</a></u></p></div><li><div><p class='subtitulo'>Summary:</p></li></div><div> <p style=text-align:left> <b>The Internet Archive</b> is building a digital library of Internet sites and other cultural artifacts in digital form. Like a paper library, we provide free access to researchers, historians, scholars, the print disabled, and the general public. Our mission is to provide Universal Access to All Knowledge.</p><q><p style=text-align:left> Because we are a library, we pay special attention to books. Not everyone has access to a public or academic library with a good collection, so to provide universal access we need to provide digital versions of books. We began a program to digitize books in 2005 and today we scan 1,000 books per day in 28 locations around the world. Books published prior to 1923 are available for download, and hundreds of thousands of modern books can be borrowed through our Open Library site. Some of our digitized books are only available to the print disabled.</q> </p> </div>",
"Trantor [Multi-Lang]":"<li><div><p class='subtitulo'>Links and Mirrors:</p></div></li><div><p style=text-align:left><a href=https://trantor.is/ target=_blank><u>trantor.is</u></a></p></div><div><p style=text-align:left><a href=https://xfmro77i3lixucja.onion.sh/ target=_blank><u>https://xfmro77i3lixucja.onion.sh/</u></a> (In order to access the dark web site you will need <a href=https://www.torproject.org/ target=_blank><u>Tor Browser).</u></a></p></div><br><li><div><p class='subtitulo'>Summary:</p></li></div><div> <p style=text-align:left> <b>The Imperial Library of Trantor</b> (also known as Galactic Library) is a repository of DRM-free ebooks on ePub format.<br><p> <i> <p style=text-align:left> Any help is welcome. You can write us comments to our email address (zenow@riseup.net), upload your epubs, download our source code [https://gitlab.com/trantor] hack it and send us patches, <br>...<br> <b>Copyright</b> Copyright laws are obsolete. With the technology to copy books without cost we can finally have universal access to the culture. We can provide the tools to allow everybody read any book without dependence on their monetary resources. Of course we have to feed the authors, but with the capitalist way of commercialize culture now we are doing a really bad job at that. We are feeding big corporations, not the authors. The Imperial Library of Trantor won't listen to any content remove request from corporations, editorials, right management organizations or any other blood-suckers.</i></p></div>",
"Ebiblioteca [Spanish]":"<li><div><p class='subtitulo'>Link:</p></div></li><div><p style=text-align:left><a href=http://ebiblioteca.org/ target=_blank><u>ebiblioteca.org</u></a></p></div><br><li><div><p class='subtitulo'>Summary:</p></li></div> <div> <p style=text-align:left> Only books in Spanish. Multiple file formats, but mostly pdf. </p></div>",
"Lectulandia [Spanish]":"<li><div><p class='subtitulo'>Links and Mirrors:</p></div></li><div><p style=text-align:left><a href=http://lectulandia.cc/ target=_blank><u>lectulandia.cc/</u></a></p><p style=text-align:left><a href=https://www.lectulandia2.com/ target=_blank><u>lectulandia2.com/</u></a></p></div><br><li><div><p class='subtitulo'>Summary:</p></li></div> <div> <p style=text-align:left> Only epub books in Spanish. </p></div>",
"Memory of the World [Multi-Lang]":"<li><div><p class='subtitulo'>Link:</p></div></li><div><p style=text-align:left><u><a href=https://library.memoryoftheworld.org/ target=_blank>memoryoftheworld.org</a></u></p></div> <br><li><div><p class='subtitulo'>Summary:</p></li></div> <div> <p style=text-align:left> Memory of the World is a network of interconnected shadow libraries, each maintained locally and independently from the others. It is modelled after the concept of the public library, extended to the digital realm: with books ready to be shared, meticulously cataloged, everyone is a librarian.</p></div>",
"AAAAARG [Multi-Lang]":"<li><div><p class='subtitulo'>Link:</p></div></li><div><p style=text-align:left><u><a href=https://aaaaarg.fail/ target=_blank>aaaaarg.fail</a></u></p></div><br><li><div><p class='subtitulo'>Summary:</p></li></div> <div> <p style=text-align:left> AAAAARG (originally AAARG, the acronym of Artists, Architects, and Activists Reading Group) is an online text repository. It was created by the artist Sean Dockray and serves as a library for The Public School, a framework supporting autodidact activities. Aaaaarg has grown into a community of researchers and enthusiasts from contemporary art, critical theory, philosophy, and related fields who maintain, catalog, annotate and run discussions relevant to their research interests.</p></div>",
"Pirateca [Spanish]":"<li><div><p class='subtitulo'>Link:</p></div></li><div><p style=text-align:left><u><a href=https://lapirateca.com/ target=_blank>lapirateca.com</a></u></p></div><div><p style=text-align:left> <a href=http://6upyqoz4kgpmteheo5w6paysqmz3wfo5s6jvknkwfsn5zwuzz3wbnhqd.onion/ target=_blank><u>Tor mirror</u></a> (In order to access the dark web site you will need <a href=https://www.torproject.org/ target=_blank><u>Tor Browser</u>).</a> </p></div><br><li><div><p class='subtitulo'>Summary:</p></li></div> <div> <p style=text-align:left> Only books in Spanish. Mostly pdf format.</p> <br> <img src=https://pirateca.com/wp-content/uploads/2019/11/logopirateca-02.png style=float:center> </p></div>",
"Forcoder.su [English]":"<li><div><p class='subtitulo'>Link:</p></div></li><div><p style=text-align:left><a href=https://forcoder.su/ target=_blank><u>forcoder.su</u></a></p></div><li><div><p class='subtitulo'>Summary:</p></li></div><div> <p style=text-align:left>Ebooks & Elearning For Programming. Mostly ebooks in multiple formats, but also other resources such as video courses.</p></div>",
"Epublibre [Spanish]":"<li><div><p class='subtitulo'>Link:</p></div></li><div><p style=text-align:left><a href=https://www.epublibre.org/ target=_blank><u>Epublibre.org</u></a></p></div><li><div><p class='subtitulo'>Summary:</p></li></div><div> <p style=text-align:left> Probably the biggest Spanish books library. There are some books in English too. They can be downloaded only via Torrent. </p> <p style=text-align:left> <i>Este proyecto nace del deseo de lectores anónimos de compartir sus libros favoritos con todo aquel que sienta ansias de lectura, ya que la cultura debe ser un bien universal accesible a todo el mundo. En nuestra biblioteca encontrarás desde grandes clásicos de la literatura hasta best sellers, pasando por toda clase de volúmenes; descatalogados unos, prácticamente desconocidos otros. Nuestra comunidad se caracteriza por la búsqueda de la mayor calidad y compatibilidad posible en los libros, de forma que puedan disfrutarse en prácticamente todos los dispositivos. Además, los editores realizamos todo este trabajo sin pedir nada a cambio, y sin más deseos de recompensa que tu disfrute. Jamás con ánimo de lucro. Si te gusta algún libro, no te olvides de apoyar a su autor, bien comprando sus obras o regalándoselas a tus seres queridos, para que también ellos puedan disfrutar con ellas.</i></p></div>",
"Academic Torrents [English]":"<li><div><p class='subtitulo'>Link:</p></div></li><div><p style=text-align:left><a href=https://academictorrents.com/ target=_blank><u>academictorrents.com</u></a></p></div><br><li><div><p class='subtitulo'>Summary:</p></li></div><div> <p style=text-align:left> This service is designed to facilitate storage of all the data used in research, including datasets as well as publications. One aim of this site is to create the infrastructure to allow open access journals to operate at low cost. By facilitating file transfers, the journal can focus on its core mission of providing world class research. After peer review the paper can be indexed on this site and disseminated throughout our system.</p></div>",
"Ebookelo [Spanish]":"<li><div><p class='subtitulo'>Link:</p></div></li><div><p style=text-align:left><a href=https://www.ebookelo.com/ target=_blank><u>ebookelo.com</u></a></p></div><br><li><div><p class='subtitulo'>Summary:</p></li></div><div> <p style=text-align:left> Mostly spanish books, but some other languages too. Multiple download methods. Seems to be an ePubLibre mirror.</p></div>",
"Torrent packs":"<div><p class='subtitulo'><u>ACM Digital Library</u></p></div><li><div><p class='subtitulo'>Magnet Link:</p></div></li><div><p style=text-align:left><a href=magnet:?xt=urn:btih:bb4367aad41569636a1100dc97df2e7368c0de7c&dn=ACM%20Digital%20Library%202020&tr=udp%3a%2f%2ftracker.opentrackr.org%3a1337%2fannounce&tr=udp%3a%2f%2ftracker.torrent.eu.org%3a451%2fannounce&tr=udp%3a%2f%2ftracker.tiny-vps.com%3a6969%2fannounce&tr=udp%3a%2f%2ftracker.coppersurfer.tk%3a6969%2fannounce&tr=udp%3a%2f%2fexodus.desync.com%3a6969%2fannounce&tr=udp%3a%2f%2ftracker.openbittorrent.com%3a80%2fannounce&tr=udp%3a%2f%2ftracker.leechers-paradise.org%3a6969%2fannounce&tr=udp%3a%2f%2f9.rarbg.to%3a2710%2fannounce target=_blank><u>ACM Library</u></a></p></div><li><div><p class='subtitulo'>Summary:</p></li></div><div> <p style=text-align:left> The <a href=https://dl.acm.org target=_blank><u>ACM digital library</u> </a> is arguably the most important collection of computer science literature in existence. It covers almost the entire history of the field and includes many of the most influential papers dating from the 1950s to today.</p></div><br><div><p class='subtitulo'><u> The All-Embracing Library</u></p></div><li><div><p class='subtitulo'>Magnet Link:</p></div></li><div><p style=text-align:left><a href=magnet:?xt=urn:btih:fd06ba966877724e5c896f89607ecaae93618d59&dn=The+All-Embracing+Library&tr=udp://tracker.coppersurfer.tk:6969/announce&tr=udp://tracker.open-internet.nl:6969/announce&tr=udp://tracker.leechers-paradise.org:6969/announce&tr=udp://tracker.internetwarriors.net:1337/announce&tr=udp://tracker.opentrackr.org:1337/announce&tr=udp://9.rarbg.to:2710/announce&tr=udp://9.rarbg.me:2710/announce&tr=udp://open.demonii.si:1337/announce&tr=udp://zephir.monocul.us:6969/announce target=_blank><u>The All-Embracing Library</u></a></p></div><li><div><p class='subtitulo'>Summary:</p></li></div><div> <p style=text-align:left>More than 500 GB of books. Topics: Natural sciences (mathematics, chemistry, physics), Humanities (philosophy, politics, linguistics, psychology, occultism), Computers (programming, GNU+Linux, networking, web dev, hardware), Languages (french, german, japanese, etc.), History (western, eastern, art history, etc.), Arts (calligraphy, drawing, writing, etc.), Self Improvement (critical thinking, meditation, communication, etc.), Survivalism (cooking, agriculture, privacy, security, etc.), Fiction (novels, plays, etc.), Comics, mangas, magazines, etc., and more.</p></div>",
"Getting books from IRC Channels":"<li><div><p class='subtitulo'>Summary:</p></li></div> <div> <p style=text-align:left>The mission of #ebooks has always been to have a nice, friendly irc channel for trading ebooks and chatting with others of the same interests. To create a fun loving, helpful environment without the typical amount of rudeness and disdain that seems to pervade the IRC and Newsgroup community.</p><p style=text-align:left> We are located on irc server <b>irc.irchighway.net</b>. The <b>#ebooks</b> channel is primarily for fiction ebooks while its brother channel <b>#bookz</b> on the same network is for tech books, audiobooks and basically all the larger book related files.</p></div><li><div><p class='subtitulo'>Guide:</p></div></li><div><div> <p style=text-align:left> <b>What's IRC?</b></p> <p style=text-align:left>Internet Relay Chat (IRC) is an application layer protocol that facilitates communication in the form of text. The chat process works on a client/server networking model. IRC clients are computer programs that users can install on their system or web based applications running either locally in the browser or on a 3rd party server. These clients communicate with chat servers to transfer messages to other clients. IRC is mainly designed for group communication in discussion forums, called channels, but also allows one-on-one communication via private messages as well as chat and data transfer, including file sharing.</p> <p style=text-align:left><b>What do I need?</b></p> <p style=text-align:left>IRC users use a client application to connect to a server. In this guide we will use the free client <a href=https://hexchat.github.io/downloads.html target=_blank><u>HEXCHAT.</u></a></p> <p style=text-align:left><b><u>📖 Setup 📖</u></b> <p style=text-align:left>When you open the program, we will be asked for different nickname options that we would like to use. And below that we must select the network that we will use. In this case it is IRCHighWay.</p><br><img src=https://i.imgur.com/vghS2Hd.png class=center><br><p>Once the network is selected, we must press Edit and check the option Accept invalid SSL certificates.</p><br><img src=https://i.imgur.com/g4h9rkn.png class=center><br><p>If everything is fine, a window should appear asking which channel we would like to join. As previously stated the #ebooks channel is primarily for fiction e-books, while its sister channel #bookz on the same network is for technology books, audiobooks, and basically all the larger files.</p><p>In this case we will use <b>#ebooks</b>.</p><br><img src=https://i.imgur.com/pm7SArE.png class=center><br><p>Once we are in the channel we may search for ebooks using the command <b>@search</b> and the desired search term. Those can be book titles or authors. In this example I'll be searching for Hamlet.</p><br><img src=https://i.imgur.com/FdPpqgU.png class=center><br><p>The bot will perform a search (it usually takes no more than a few seconds) and, in case of obtaining results, it will send us a .zip file with a list of books that meet the search criteria.</p><br><img src=https://i.imgur.com/qUbKVvV.png class=center><br><br><img src=https://i.imgur.com/32HoZCv.png class=center><br><p>The list includes author's name, the title of the book and the file format in which it is found. Once we have chosen the one we want to download, simply copy that line of text <b>WITHOUT</b> the :: INFO :: part.</p> <p> In our case it would be !DukeLupus William Shakespeare - Hamlet [RSC] (retail).epub</p><p>Finally we send that line of text in the chat channel and we will receive the desired file.</p><br><img src=https://i.imgur.com/a4RumR8.png class=center><br></p></div>",
"Telegram Bots":"<li><div><p class='subtitulo'>Links:</p></div></li><div><p style=text-align:left><a href=https://t.me/bookdownbot target=_blank><u>@bookdownbot</u></a> (Books in English)</p></div><br><li><div><p class='subtitulo'>Alternatives:</p></div></li><div><p style=text-align:left><a href=http://bibliotecasecreta.nl target=_blank><u>BibliotecaSecreta</u></a> (Contains up-to-date Telegram bots)</p></div><div><p><img src=https://i.imgur.com/Qu05N6D.png class=center style=width:370px;height:300px> </p></div>",
"Reading online [English]":"<li><div><p class='subtitulo'>Links:</p></div></li><div><p style=text-align:left><a href=https://readanybook.com/ target=_blank><u>ReadAnyBook</u></a></p></div><div><p style=text-align:left> <a href=https://novels80.com/ target=_blank><u>Novels80</u></a> </p></div>",
"About this site":"<li><div><p class='subtitulo'>Summary:</p></div></li><div><p style=text-align:justify>The name of this site comes from the <a href=https://mitpress.mit.edu/books/shadow-libraries target=_blank><u>homonym book</u></a> edited by Joe Karaganis.</p><p style=text-align:justify><b>Shadow libraries</b>, sometimes called pirate libraries, consist of texts aggregated outside the legal framework of copyright.</p><hr><p style=text-align:justify>Today's pirate libraries have their roots in the work of Russian academics to digitize texts in the 1990s. Scholars in that part of the world had long had a thriving practice of passing literature and scientific information underground, in opposition to government censorship—part of the samizdat culture, in which banned documents were copied and passed hand to hand through illicit channels. Those first digital collections were passed freely around, but when their creators started running into problems with copyright, their collections “retreated from the public view,&#34; <a href=https://pure.uva.nl/ws/files/2341818/162448_Libraries_in_the_post_scarcity_era.pdf target=_blank><u>writes Balázs Bodó</u></a>, a piracy researcher based at the University of Amsterdam. &#34;The text collections were far too valuable to simply delete,&#34; he writes, and instead migrated to &#34;closed, membership-only FTP servers.&#34;</p><p style=text-align:left>More recently, though, those collections have moved online, where they are available to anyone who knows where to look.</p><p style=text-align:left>The <b>purpose</b> of this site, then, is to have all these libraries at our fingertips when in need of a certain text or book.</p><br><p style=text-align:left><b>As Aaron Swartz put it:</b></p><p style=text-align:center><i> Information is power. But like all power, there are those who want to keep it for themselves. </p></i><p style=text-align:center><i> (…)</p></i><p style=text-align:center><i> We need to take information, wherever it is stored, make our copies and share them with the world. We need to take stuff that's out of copyright and add it to the archive. We need to buy secret databases and put them on the Web. We need to download scientific journals and upload them to file sharing networks. We need to fight for Guerilla Open Access.</p></i><p style=text-align:center><i> With enough of us, around the world, we'll not just send a strong message opposing the privatization of knowledge — we'll make it a thing of the past. Will you join us?</p></i><p style=text-align:left> Read the full text of the <a href=https://archive.org/stream/GuerillaOpenAccessManifesto/Goamjuly2008_djvu.txt target=_blank><u>Guerilla Open Access Manifesto</u></a></p><hr><li><div><p class='subtitulo'>Contribute:</p></div></li><p style=text-align:left> Am I missing some libraries that should be here? Please write to shadowlibraries [@] protonmail.com.</p></div>",
"Rave Book Seach":"<li><div><p class='subtitulo'>Links:</p></div></li><div><p style=text-align:left><u><a href=https://ravebooksearch.com/#gsc.tab=0 target=_blank>Rave Book Seach</a></u></p><p class='subtitulo'>Summary:</p></li></div><div> <p style=text-align:left>Rave Book Seach Engine assists users in discovering free eBook and Audiobook downloads. It has a list of sources that are regularly updated and verified for safety as well as new eBook/Audiobook download links. All of the websites listed and indexed by the Rave Book Search Engine have been thoroughly verified to ensure their safety.</p></div>",
"Other Websites":"<li><div><p class='subtitulo'>Summary:</p></div></li><div><p style=text-align:left>If you still couldn't find what you were looking for, you may want to try some of these:</p></div><div><p style=text-align:left><a href=https://literariness.org/Ebooks/ target=_blank><u>literariness.org [MULTI-LANG]</u></a></p></div><div><p style=text-align:left><a href=https://forum.mobilism.org/viewforum.php?f=120&sid=686b0720ef91c8d7a0e720fdcd66738a target=_blank><u>mobilism.org [English]</u></a></p></div><div><p style=text-align:left><a href=https://ebook-hunter.org/ target=_blank><u>ebook-hunter [MULTI-LANG]</u></a></p></div>",
}

387
js/main.js Normal file
View File

@ -0,0 +1,387 @@
/**
* main.js
* http://www.codrops.com
*
* Licensed under the MIT license.
* http://www.opensource.org/licenses/mit-license.php
*
* Copyright 2015, Codrops
* http://www.codrops.com
*/
;(function(window) {
'use strict';
var support = { animations : Modernizr.cssanimations },
animEndEventNames = { 'WebkitAnimation' : 'webkitAnimationEnd', 'OAnimation' : 'oAnimationEnd', 'msAnimation' : 'MSAnimationEnd', 'animation' : 'animationend' },
animEndEventName = animEndEventNames[ Modernizr.prefixed( 'animation' ) ],
onEndAnimation = function( el, callback ) {
var onEndCallbackFn = function( ev ) {
if( support.animations ) {
if( ev.target != this ) return;
this.removeEventListener( animEndEventName, onEndCallbackFn );
}
if( callback && typeof callback === 'function' ) { callback.call(); }
};
if( support.animations ) {
el.addEventListener( animEndEventName, onEndCallbackFn );
}
else {
onEndCallbackFn();
}
};
function extend( a, b ) {
for( var key in b ) {
if( b.hasOwnProperty( key ) ) {
a[key] = b[key];
}
}
return a;
}
function MLMenu(el, options) {
this.el = el;
this.options = extend( {}, this.options );
extend( this.options, options );
// the menus (<ul>´s)
this.menus = [].slice.call(this.el.querySelectorAll('.menu__level'));
// index of current menu
// Each level is actually a different menu so 0 is root, 1 is sub-1, 2 sub-2, etc.
this.current_menu = 0;
/* Determine what current menu actually is */
var current_menu;
this.menus.forEach(function(menuEl, pos) {
var items = menuEl.querySelectorAll('.menu__item');
items.forEach(function(itemEl, iPos) {
var currentLink = itemEl.querySelector('.menu__link--current');
if (currentLink) {
// This is the actual menu__level that should have current
current_menu = pos;
}
});
});
if (current_menu) {
this.current_menu = current_menu;
}
this._init();
}
MLMenu.prototype.options = {
// show breadcrumbs
breadcrumbsCtrl : true,
// initial breadcrumb text
initialBreadcrumb : 'all',
// show back button
backCtrl : true,
// delay between each menu item sliding animation
itemsDelayInterval : 60,
// direction
direction : 'r2l',
// callback: item that doesn´t have a submenu gets clicked
// onItemClick([event], [inner HTML of the clicked item])
onItemClick : function(ev, itemName) { return false; }
};
MLMenu.prototype._init = function() {
// iterate the existing menus and create an array of menus,
// more specifically an array of objects where each one holds the info of each menu element and its menu items
this.menusArr = [];
this.breadCrumbs = false;
var self = this;
var submenus = [];
/* Loops over root level menu items */
this.menus.forEach(function(menuEl, pos) {
var menu = {menuEl : menuEl, menuItems : [].slice.call(menuEl.querySelectorAll('.menu__item'))};
self.menusArr.push(menu);
// set current menu class
if( pos === self.current_menu ) {
classie.add(menuEl, 'menu__level--current');
}
var menu_x = menuEl.getAttribute('data-menu');
var links = menuEl.querySelectorAll('.menu__link');
links.forEach(function(linkEl, lPos) {
var submenu = linkEl.getAttribute('data-submenu');
if (submenu) {
var pushMe = {"menu":submenu, "name": linkEl.innerHTML };
if (submenus[pos]) {
submenus[pos].push(pushMe);
} else {
submenus[pos] = []
submenus[pos].push(pushMe);
}
}
});
});
/* For each MENU, find their parent MENU */
this.menus.forEach(function(menuEl, pos) {
var menu_x = menuEl.getAttribute('data-menu');
submenus.forEach(function(subMenuEl, menu_root) {
subMenuEl.forEach(function(subMenuItem, subPos) {
if (subMenuItem.menu == menu_x) {
self.menusArr[pos].backIdx = menu_root;
self.menusArr[pos].name = subMenuItem.name;
}
});
});
});
// create breadcrumbs
if( self.options.breadcrumbsCtrl ) {
this.breadcrumbsCtrl = document.createElement('nav');
this.breadcrumbsCtrl.className = 'menu__breadcrumbs';
this.breadcrumbsCtrl.setAttribute('aria-label', 'You are here');
this.el.insertBefore(this.breadcrumbsCtrl, this.el.firstChild);
// add initial breadcrumb
this._addBreadcrumb(0);
// Need to add breadcrumbs for all parents of current submenu
if (self.menusArr[self.current_menu].backIdx != 0 && self.current_menu != 0) {
this._crawlCrumbs(self.menusArr[self.current_menu].backIdx, self.menusArr);
this.breadCrumbs = true;
}
// Create current submenu breadcrumb
if (self.current_menu != 0) {
this._addBreadcrumb(self.current_menu);
this.breadCrumbs = true;
}
}
// create back button
if (this.options.backCtrl) {
this.backCtrl = document.createElement('button');
if (this.breadCrumbs) {
this.backCtrl.className = 'menu__back';
} else {
this.backCtrl.className = 'menu__back menu__back--hidden';
}
this.backCtrl.setAttribute('aria-label', 'Go back');
this.backCtrl.innerHTML = '<span class="icon icon--arrow-left"></span>';
this.el.insertBefore(this.backCtrl, this.el.firstChild);
}
// event binding
this._initEvents();
};
MLMenu.prototype._initEvents = function() {
var self = this;
for(var i = 0, len = this.menusArr.length; i < len; ++i) {
this.menusArr[i].menuItems.forEach(function(item, pos) {
item.querySelector('a').addEventListener('click', function(ev) {
var submenu = ev.target.getAttribute('data-submenu'),
itemName = ev.target.innerHTML,
subMenuEl = self.el.querySelector('ul[data-menu="' + submenu + '"]');
// check if there's a sub menu for this item
if( submenu && subMenuEl ) {
ev.preventDefault();
// open it
self._openSubMenu(subMenuEl, pos, itemName);
}
else {
// add class current
var currentlink = self.el.querySelector('.menu__link--current');
if( currentlink ) {
classie.remove(self.el.querySelector('.menu__link--current'), 'menu__link--current');
}
classie.add(ev.target, 'menu__link--current');
// callback
self.options.onItemClick(ev, itemName);
}
});
});
}
// back navigation
if( this.options.backCtrl ) {
this.backCtrl.addEventListener('click', function() {
self._back();
});
}
};
MLMenu.prototype._openSubMenu = function(subMenuEl, clickPosition, subMenuName) {
if( this.isAnimating ) {
return false;
}
this.isAnimating = true;
// save "parent" menu index for back navigation
this.menusArr[this.menus.indexOf(subMenuEl)].backIdx = this.current_menu;
// save "parent" menu´s name
this.menusArr[this.menus.indexOf(subMenuEl)].name = subMenuName;
// current menu slides out
this._menuOut(clickPosition);
// next menu (submenu) slides in
this._menuIn(subMenuEl, clickPosition);
};
MLMenu.prototype._back = function() {
if( this.isAnimating ) {
return false;
}
this.isAnimating = true;
// current menu slides out
this._menuOut();
// next menu (previous menu) slides in
var backMenu = this.menusArr[this.menusArr[this.current_menu].backIdx].menuEl;
this._menuIn(backMenu);
// remove last breadcrumb
if( this.options.breadcrumbsCtrl ) {
this.breadcrumbsCtrl.removeChild(this.breadcrumbsCtrl.lastElementChild);
}
};
MLMenu.prototype._menuOut = function(clickPosition) {
// the current menu
var self = this,
currentMenu = this.menusArr[this.current_menu].menuEl,
isBackNavigation = typeof clickPosition == 'undefined' ? true : false;
// slide out current menu items - first, set the delays for the items
this.menusArr[this.current_menu].menuItems.forEach(function(item, pos) {
item.style.WebkitAnimationDelay = item.style.animationDelay = isBackNavigation ? parseInt(pos * self.options.itemsDelayInterval) + 'ms' : parseInt(Math.abs(clickPosition - pos) * self.options.itemsDelayInterval) + 'ms';
});
// animation class
if( this.options.direction === 'r2l' ) {
classie.add(currentMenu, !isBackNavigation ? 'animate-outToLeft' : 'animate-outToRight');
}
else {
classie.add(currentMenu, isBackNavigation ? 'animate-outToLeft' : 'animate-outToRight');
}
};
MLMenu.prototype._menuIn = function(nextMenuEl, clickPosition) {
var self = this,
// the current menu
currentMenu = this.menusArr[this.current_menu].menuEl,
isBackNavigation = typeof clickPosition == 'undefined' ? true : false,
// index of the nextMenuEl
nextMenuIdx = this.menus.indexOf(nextMenuEl),
nextMenu = this.menusArr[nextMenuIdx],
nextMenuEl = nextMenu.menuEl,
nextMenuItems = nextMenu.menuItems,
nextMenuItemsTotal = nextMenuItems.length;
// slide in next menu items - first, set the delays for the items
nextMenuItems.forEach(function(item, pos) {
item.style.WebkitAnimationDelay = item.style.animationDelay = isBackNavigation ? parseInt(pos * self.options.itemsDelayInterval) + 'ms' : parseInt(Math.abs(clickPosition - pos) * self.options.itemsDelayInterval) + 'ms';
// we need to reset the classes once the last item animates in
// the "last item" is the farthest from the clicked item
// let's calculate the index of the farthest item
var farthestIdx = clickPosition <= nextMenuItemsTotal/2 || isBackNavigation ? nextMenuItemsTotal - 1 : 0;
if( pos === farthestIdx ) {
onEndAnimation(item, function() {
// reset classes
if( self.options.direction === 'r2l' ) {
classie.remove(currentMenu, !isBackNavigation ? 'animate-outToLeft' : 'animate-outToRight');
classie.remove(nextMenuEl, !isBackNavigation ? 'animate-inFromRight' : 'animate-inFromLeft');
}
else {
classie.remove(currentMenu, isBackNavigation ? 'animate-outToLeft' : 'animate-outToRight');
classie.remove(nextMenuEl, isBackNavigation ? 'animate-inFromRight' : 'animate-inFromLeft');
}
classie.remove(currentMenu, 'menu__level--current');
classie.add(nextMenuEl, 'menu__level--current');
//reset current
self.current_menu = nextMenuIdx;
// control back button and breadcrumbs navigation elements
if( !isBackNavigation ) {
// show back button
if( self.options.backCtrl ) {
classie.remove(self.backCtrl, 'menu__back--hidden');
}
// add breadcrumb
self._addBreadcrumb(nextMenuIdx);
}
else if( self.current_menu === 0 && self.options.backCtrl ) {
// hide back button
classie.add(self.backCtrl, 'menu__back--hidden');
}
// we can navigate again..
self.isAnimating = false;
// focus retention
nextMenuEl.focus();
});
}
});
// animation class
if( this.options.direction === 'r2l' ) {
classie.add(nextMenuEl, !isBackNavigation ? 'animate-inFromRight' : 'animate-inFromLeft');
}
else {
classie.add(nextMenuEl, isBackNavigation ? 'animate-inFromRight' : 'animate-inFromLeft');
}
};
MLMenu.prototype._addBreadcrumb = function(idx) {
if( !this.options.breadcrumbsCtrl ) {
return false;
}
var bc = document.createElement('a');
bc.href = '#'; // make it focusable
bc.innerHTML = idx ? this.menusArr[idx].name : this.options.initialBreadcrumb;
this.breadcrumbsCtrl.appendChild(bc);
var self = this;
bc.addEventListener('click', function(ev) {
ev.preventDefault();
// do nothing if this breadcrumb is the last one in the list of breadcrumbs
if( !bc.nextSibling || self.isAnimating ) {
return false;
}
self.isAnimating = true;
// current menu slides out
self._menuOut();
// next menu slides in
var nextMenu = self.menusArr[idx].menuEl;
self._menuIn(nextMenu);
// remove breadcrumbs that are ahead
var siblingNode;
while (siblingNode = bc.nextSibling) {
self.breadcrumbsCtrl.removeChild(siblingNode);
}
});
};
MLMenu.prototype._crawlCrumbs = function(currentMenu, menuArray) {
if (menuArray[currentMenu].backIdx != 0) {
this._crawlCrumbs(menuArray[currentMenu].backIdx, menuArray);
}
// create breadcrumb
this._addBreadcrumb(currentMenu);
}
window.MLMenu = MLMenu;
})(window);

3
js/modernizr-custom.js Normal file
View File

@ -0,0 +1,3 @@
/*! modernizr 3.2.0 (Custom Build) | MIT *
* http://modernizr.com/download/?-cssanimations-prefixed !*/
!function(e,n,t){function r(e,n){return typeof e===n}function o(){var e,n,t,o,i,s,a;for(var f in C)if(C.hasOwnProperty(f)){if(e=[],n=C[f],n.name&&(e.push(n.name.toLowerCase()),n.options&&n.options.aliases&&n.options.aliases.length))for(t=0;t<n.options.aliases.length;t++)e.push(n.options.aliases[t].toLowerCase());for(o=r(n.fn,"function")?n.fn():n.fn,i=0;i<e.length;i++)s=e[i],a=s.split("."),1===a.length?Modernizr[a[0]]=o:(!Modernizr[a[0]]||Modernizr[a[0]]instanceof Boolean||(Modernizr[a[0]]=new Boolean(Modernizr[a[0]])),Modernizr[a[0]][a[1]]=o),g.push((o?"":"no-")+a.join("-"))}}function i(e){var n=w.className,t=Modernizr._config.classPrefix||"";if(x&&(n=n.baseVal),Modernizr._config.enableJSClass){var r=new RegExp("(^|\\s)"+t+"no-js(\\s|$)");n=n.replace(r,"$1"+t+"js$2")}Modernizr._config.enableClasses&&(n+=" "+t+e.join(" "+t),x?w.className.baseVal=n:w.className=n)}function s(e){return e.replace(/([a-z])-([a-z])/g,function(e,n,t){return n+t.toUpperCase()}).replace(/^-/,"")}function a(e,n){return!!~(""+e).indexOf(n)}function f(){return"function"!=typeof n.createElement?n.createElement(arguments[0]):x?n.createElementNS.call(n,"http://www.w3.org/2000/svg",arguments[0]):n.createElement.apply(n,arguments)}function l(e,n){return function(){return e.apply(n,arguments)}}function u(e,n,t){var o;for(var i in e)if(e[i]in n)return t===!1?e[i]:(o=n[e[i]],r(o,"function")?l(o,t||n):o);return!1}function p(e){return e.replace(/([A-Z])/g,function(e,n){return"-"+n.toLowerCase()}).replace(/^ms-/,"-ms-")}function d(){var e=n.body;return e||(e=f(x?"svg":"body"),e.fake=!0),e}function c(e,t,r,o){var i,s,a,l,u="modernizr",p=f("div"),c=d();if(parseInt(r,10))for(;r--;)a=f("div"),a.id=o?o[r]:u+(r+1),p.appendChild(a);return i=f("style"),i.type="text/css",i.id="s"+u,(c.fake?c:p).appendChild(i),c.appendChild(p),i.styleSheet?i.styleSheet.cssText=e:i.appendChild(n.createTextNode(e)),p.id=u,c.fake&&(c.style.background="",c.style.overflow="hidden",l=w.style.overflow,w.style.overflow="hidden",w.appendChild(c)),s=t(p,e),c.fake?(c.parentNode.removeChild(c),w.style.overflow=l,w.offsetHeight):p.parentNode.removeChild(p),!!s}function m(n,r){var o=n.length;if("CSS"in e&&"supports"in e.CSS){for(;o--;)if(e.CSS.supports(p(n[o]),r))return!0;return!1}if("CSSSupportsRule"in e){for(var i=[];o--;)i.push("("+p(n[o])+":"+r+")");return i=i.join(" or "),c("@supports ("+i+") { #modernizr { position: absolute; } }",function(e){return"absolute"==getComputedStyle(e,null).position})}return t}function v(e,n,o,i){function l(){p&&(delete z.style,delete z.modElem)}if(i=r(i,"undefined")?!1:i,!r(o,"undefined")){var u=m(e,o);if(!r(u,"undefined"))return u}for(var p,d,c,v,h,y=["modernizr","tspan"];!z.style;)p=!0,z.modElem=f(y.shift()),z.style=z.modElem.style;for(c=e.length,d=0;c>d;d++)if(v=e[d],h=z.style[v],a(v,"-")&&(v=s(v)),z.style[v]!==t){if(i||r(o,"undefined"))return l(),"pfx"==n?v:!0;try{z.style[v]=o}catch(g){}if(z.style[v]!=h)return l(),"pfx"==n?v:!0}return l(),!1}function h(e,n,t,o,i){var s=e.charAt(0).toUpperCase()+e.slice(1),a=(e+" "+b.join(s+" ")+s).split(" ");return r(n,"string")||r(n,"undefined")?v(a,n,o,i):(a=(e+" "+N.join(s+" ")+s).split(" "),u(a,n,t))}function y(e,n,r){return h(e,t,t,n,r)}var g=[],C=[],_={_version:"3.2.0",_config:{classPrefix:"",enableClasses:!0,enableJSClass:!0,usePrefixes:!0},_q:[],on:function(e,n){var t=this;setTimeout(function(){n(t[e])},0)},addTest:function(e,n,t){C.push({name:e,fn:n,options:t})},addAsyncTest:function(e){C.push({name:null,fn:e})}},Modernizr=function(){};Modernizr.prototype=_,Modernizr=new Modernizr;var w=n.documentElement,x="svg"===w.nodeName.toLowerCase(),S="Moz O ms Webkit",b=_._config.usePrefixes?S.split(" "):[];_._cssomPrefixes=b;var E=function(n){var r,o=prefixes.length,i=e.CSSRule;if("undefined"==typeof i)return t;if(!n)return!1;if(n=n.replace(/^@/,""),r=n.replace(/-/g,"_").toUpperCase()+"_RULE",r in i)return"@"+n;for(var s=0;o>s;s++){var a=prefixes[s],f=a.toUpperCase()+"_"+r;if(f in i)return"@-"+a.toLowerCase()+"-"+n}return!1};_.atRule=E;var N=_._config.usePrefixes?S.toLowerCase().split(" "):[];_._domPrefixes=N;var P={elem:f("modernizr")};Modernizr._q.push(function(){delete P.elem});var z={style:P.elem.style};Modernizr._q.unshift(function(){delete z.style}),_.testAllProps=h;_.prefixed=function(e,n,t){return 0===e.indexOf("@")?E(e):(-1!=e.indexOf("-")&&(e=s(e)),n?h(e,n,t):h(e,"pfx"))};_.testAllProps=y,Modernizr.addTest("cssanimations",y("animationName","a",!0)),o(),i(g),delete _.addTest,delete _.addAsyncTest;for(var T=0;T<Modernizr._q.length;T++)Modernizr._q[T]();e.Modernizr=Modernizr}(window,document);

19
js/randomimg.js Normal file
View File

@ -0,0 +1,19 @@
// Get a list of all the files in the folder
const fileNames = [
'img/pirate-logo-color.png',
'img/pirate-logo-color-new.png',
'img/missingno.png',
'img/floppysl.png',
];
// Get a random index from the list of file names
const randomIndex = Math.floor(Math.random() * fileNames.length);
// Get the file name at the random index
const randomFileName = fileNames[randomIndex];
// Get the image element
const imageElement = document.getElementById('random-image');
// Set the src attribute of the image element to the random file name
imageElement.src = randomFileName;

BIN
spain-flag.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
uk-flag.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB