fix(extractor): gracefully handle deleted files for SaveFiles
This commit is contained in:
parent
55983990fb
commit
48c7735165
4 changed files with 881 additions and 1 deletions
|
|
@ -26,6 +26,10 @@ describe('SafeFiles', () => {
|
|||
expect(await extractorRegistry.handle(ctx, new URL('https://savefiles.com/omqq55i59nvv'))).toMatchSnapshot();
|
||||
});
|
||||
|
||||
test('savefiles deleted file', async () => {
|
||||
expect(await extractorRegistry.handle(ctx, new URL('https://savefiles.com/bejqk3vlsv02'))).toMatchSnapshot();
|
||||
});
|
||||
|
||||
test('streamhls /e/', async () => {
|
||||
expect(await extractorRegistry.handle(ctx, new URL('https://streamhls.to/e/ip0k0dj2g0i3'))).toMatchSnapshot();
|
||||
});
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ export class SaveFiles extends Extractor {
|
|||
protected async extractInternal(ctx: Context, url: URL, meta: Meta): Promise<UrlResult[]> {
|
||||
const html = await this.fetcher.text(ctx, url);
|
||||
|
||||
if (/File was locked by administrator/.test(html)) {
|
||||
if (/file was locked|file was deleted/i.test(html)) {
|
||||
throw new NotFoundError();
|
||||
}
|
||||
|
||||
|
|
|
|||
874
src/extractor/__fixtures__/SaveFiles/https:savefiles.combejqk3vlsv02
generated
Normal file
874
src/extractor/__fixtures__/SaveFiles/https:savefiles.combejqk3vlsv02
generated
Normal file
|
|
@ -0,0 +1,874 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<script
|
||||
async
|
||||
src="//c.adsco.re"
|
||||
type="text/javascript"
|
||||
onload='AdscoreInit("QqqjAwAAAAAAUxOiVL7BXE1Q-0rem2afDIIu58k",
|
||||
{async_callback:
|
||||
1});'></script>
|
||||
<meta name="clickaine-site-verification" content="a69e90bd40058593b1be57650d744df11bc135f445ce76006aea0dc91216d2c9b234be3296a229dc2578ba81fb65e726214a782bf20cbe6e511993740ae85d7e">
|
||||
<script type="text/javascript">
|
||||
aclib.runAutoTag({
|
||||
zoneId: 'mnhqk0ohii',
|
||||
});
|
||||
</script>
|
||||
<!-- Google tag (gtag.js) -->
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id=G-YB6PM6K2VF"></script>
|
||||
<script>
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
|
||||
gtag('config', 'G-YB6PM6K2VF');
|
||||
</script>
|
||||
<meta name="af44ae67e397b9fbe3a80f3f94b2097937d40019" content="af44ae67e397b9fbe3a80f3f94b2097937d40019" />
|
||||
|
||||
<meta charset="utf-8">
|
||||
<title>Watch alien earth s01e01 1080p web h264 successfulcrab mp4</title>
|
||||
<META NAME="description" CONTENT="Watch video alien earth s01e01 1080p web h264 successfulcrab mp4">
|
||||
<META NAME="keywords" CONTENT="alien, earth, s01e01, 1080p, web, h264, successfulcrab, mp4">
|
||||
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<meta name="theme-color" content="#FFF">
|
||||
<link rel="apple-touch-icon" href="https://savefiles.com/images2/favicon/apple-touch-icon.png" sizes="180x180">
|
||||
<link rel="icon" href="https://savefiles.com/images2/favicon/favicon-32x32.png" sizes="32x32">
|
||||
<link rel="icon" href="https://savefiles.com/images2/favicon/favicon-16x16.png" sizes="16x16">
|
||||
<link rel="manifest" href="https://savefiles.com/images2/favicon/site.webmanifest" crossorigin="use-credentials">
|
||||
<link rel="icon" href="https://savefiles.com/images2/favicon/favicon.ico">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Manrope:wght@400..800&display=swap" rel="stylesheet">
|
||||
<link href="https://savefiles.com/css2/bootstrap.css?v=16" rel="stylesheet">
|
||||
|
||||
<!-- Added footer background color -->
|
||||
<style>
|
||||
main {
|
||||
background: url('/images/dashboard-bg.png') center/cover no-repeat;
|
||||
}
|
||||
.col-auto {
|
||||
color: #fff !important;
|
||||
}
|
||||
.block {
|
||||
background-color: #1c263e !important;
|
||||
padding: 15px; /* Add spacing for readability */
|
||||
margin: 10px 0;
|
||||
}
|
||||
|
||||
.subtitle {
|
||||
color: #ffffff !important;
|
||||
}
|
||||
/* Optional: If subtitles are in main/footer */
|
||||
main, footer {
|
||||
color: white; /* Inherit text color */
|
||||
}
|
||||
html, body {
|
||||
background-color: #192337;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.table,
|
||||
.table thead,
|
||||
.table tbody,
|
||||
.table tfoot,
|
||||
.table tr,
|
||||
.table th,
|
||||
.table td {
|
||||
border: none !important;
|
||||
box-shadow: none !important;
|
||||
outline: none !important;
|
||||
}
|
||||
|
||||
.table th,
|
||||
.table td {
|
||||
border-left: none !important;
|
||||
border-right: none !important;
|
||||
}
|
||||
|
||||
/* Optional: Keep horizontal borders */
|
||||
.table th,
|
||||
.table td {
|
||||
border-bottom: 1px solid #2d3748 !important; /* Dark theme color */
|
||||
}
|
||||
.text-center.text-dark.mb-4.fs-3 {
|
||||
color: #ffffff !important;
|
||||
}
|
||||
.text-center.text-dark.mb-4 {
|
||||
color: #ffffff !important;
|
||||
text-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); /* Optional: improve readability */
|
||||
}
|
||||
|
||||
.fs-3.text-dark.mb-3 {
|
||||
color: #ffffff !important;
|
||||
}
|
||||
body {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
min-height: 100vh;
|
||||
}
|
||||
.form-control-plaintext {
|
||||
color: #000000 !important;
|
||||
opacity: 1; /* Ensure full visibility */
|
||||
}
|
||||
|
||||
main {
|
||||
flex: 1;
|
||||
}
|
||||
footer {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.nav-tabs .nav-link.active,
|
||||
.nav.nav-tabs .nav-link.active {
|
||||
color: #0d6efd !important;
|
||||
font-weight: 700 !important;
|
||||
background-color: transparent;
|
||||
border-color: transparent transparent #0d6efd !important;
|
||||
}
|
||||
/* Main form controls */
|
||||
.form-control {
|
||||
background-color: #36405a !important;
|
||||
color: #ffffff !important; /* White text */
|
||||
border-color: #4a5568 !important; /* Border color */
|
||||
}
|
||||
|
||||
/* Focus state */
|
||||
.form-control:focus {
|
||||
background-color: #36405a !important;
|
||||
border-color: #66738f !important;
|
||||
box-shadow: 0 0 0 0.25rem rgba(102, 115, 143, 0.25) !important;
|
||||
}
|
||||
|
||||
/* Placeholder text */
|
||||
.form-control::placeholder {
|
||||
color: rgba(255, 255, 255, 0.6) !important;
|
||||
}
|
||||
|
||||
/* Disabled state */
|
||||
.form-control:disabled {
|
||||
background-color: #2d364d !important;
|
||||
opacity: 0.7 !important;
|
||||
}
|
||||
|
||||
/* Select dropdowns */
|
||||
.form-select {
|
||||
background-color: #36405a !important;
|
||||
color: #ffffff !important;
|
||||
border-color: #4a5568 !important;
|
||||
}
|
||||
.control-buttons {
|
||||
background-color: #111827 !important;
|
||||
color: #fff !important; /* Optional: set text to white */
|
||||
padding: 8px 12px; /* Optional: adjust spacing */
|
||||
border: none !important; /* Remove borders if needed */
|
||||
}
|
||||
|
||||
/* If there are child elements (like buttons) */
|
||||
.control-buttons * {
|
||||
color: #fff !important; /* Force white text for all children */
|
||||
}
|
||||
|
||||
.btn.btn-primary {
|
||||
background-image: linear-gradient(
|
||||
90deg,
|
||||
#0a5dc2 0%, /* Deep navy-blue */
|
||||
#127eff 25%, /* Base blue */
|
||||
#4fa0ff 75%, /* Bright sky blue */
|
||||
#9fd1ff 100% /* Pale ice blue */
|
||||
) !important;
|
||||
border: none !important;
|
||||
color: white !important;
|
||||
background-size: 100%;
|
||||
transition: all 0.4s ease;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
.btn.btn-danger {
|
||||
background-image: linear-gradient(
|
||||
90deg,
|
||||
#ff4b4b 0%, /* Soft coral red */
|
||||
#ff7b7b 25%, /* Warm salmon */
|
||||
#ffa1a1 75%, /* Light pink-red */
|
||||
#f54040 100% /* Pale blush */
|
||||
) !important;
|
||||
border: none !important;
|
||||
color: #ffffff !important;
|
||||
background-size: 200%;
|
||||
text-shadow: 0 1px 2px rgba(150, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
/* Hover effect */
|
||||
.btn-danger:hover {
|
||||
background-position: right center;
|
||||
filter: brightness(1.05);
|
||||
box-shadow: 0 4px 15px rgba(255, 75, 75, 0.3);
|
||||
}
|
||||
|
||||
/* Active state */
|
||||
.btn-danger:active {
|
||||
filter: brightness(0.95);
|
||||
transform: scale(0.98);
|
||||
}
|
||||
|
||||
.btn.btn-success {
|
||||
background-image: linear-gradient(
|
||||
90deg,
|
||||
#006b3c 0%, /* Deep emerald */
|
||||
#00a86b 25%, /* Vibrant jade */
|
||||
#2ecc71 75%, /* Fresh lime */
|
||||
#a2f0c0 100% /* Soft mint */
|
||||
) !important;
|
||||
border: none !important;
|
||||
color: #ffffff !important;
|
||||
background-size: 200%;
|
||||
text-shadow: 0 1px 2px rgba(0, 60, 30, 0.3);
|
||||
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
||||
}
|
||||
|
||||
/* Hover effect */
|
||||
.btn-success:hover {
|
||||
background-position: right center;
|
||||
box-shadow: 0 4px 15px rgba(0, 168, 107, 0.3);
|
||||
}
|
||||
|
||||
/* Active state */
|
||||
.btn-success:active {
|
||||
background-image: linear-gradient(
|
||||
90deg,
|
||||
#005a32 0%,
|
||||
#009157 25%,
|
||||
#27b562 75%,
|
||||
#90e0b0 100%
|
||||
) !important;
|
||||
transform: scale(0.98);
|
||||
}
|
||||
|
||||
/* Hover effect with intensified colors */
|
||||
.btn-primary:hover {
|
||||
background-size: 200%;
|
||||
background-position: right center;
|
||||
filter: brightness(0.9);
|
||||
}
|
||||
|
||||
/* Active state effect */
|
||||
.btn-primary:active {
|
||||
filter: brightness(0.8);
|
||||
transform: scale(0.98);
|
||||
}
|
||||
|
||||
/* Optional: Add subtle text shadow */
|
||||
.btn-primary {
|
||||
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
/* Remove default black color from Bootstrap */
|
||||
.nav-link.active {
|
||||
color: #0d6efd !important;
|
||||
}
|
||||
.text-dark.fs-6 {
|
||||
color: #ffffff !important;
|
||||
}
|
||||
.top-bar {
|
||||
background-color: #111827 !important;
|
||||
}
|
||||
.row.header-row.align-items-center.flex-nowrap {
|
||||
background-color: transparent !important;
|
||||
padding-left: 0 !important;
|
||||
padding-right: 0 !important;
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
}
|
||||
.container-fluid.px-lg-4.px-xxl-5 {
|
||||
background-color: #071629 !important;
|
||||
color: #fff !important; /* White text for contrast */
|
||||
}
|
||||
/* Target table with all classes */
|
||||
.table.table-hover.shadow-sm.align-middle {
|
||||
background-color: #1c263e !important;
|
||||
color: #ffffff !important;
|
||||
}
|
||||
|
||||
.table-responsive.mb-4 {
|
||||
background-color: #1c263e !important;
|
||||
border-radius: 8px; /* Optional: rounded corners */
|
||||
padding: 1rem; /* Optional: internal spacing */
|
||||
}
|
||||
|
||||
.table-hover tbody tr:hover,
|
||||
.table-hover tbody tr:hover td,
|
||||
.table-hover tbody tr:hover th {
|
||||
background-color: transparent !important;
|
||||
transition: none !important; /* Remove fade effect */
|
||||
}
|
||||
/* For the table inside the container */
|
||||
.table-responsive.mb-4 .table {
|
||||
background-color: transparent !important;
|
||||
color: #ffffff !important; /* White text */
|
||||
margin-bottom: 0 !important; /* Override mb-4 on the table itself */
|
||||
}
|
||||
|
||||
/* Style table headers and cells */
|
||||
.table-responsive.mb-4 .table th,
|
||||
.table-responsive.mb-4 .table td {
|
||||
background-color: transparent !important;
|
||||
}
|
||||
|
||||
|
||||
/* Also ensure the table itself has no bottom margin */
|
||||
.table-responsive table {
|
||||
margin-bottom: 0 !important;
|
||||
}
|
||||
|
||||
/* Hover effect for rows */
|
||||
.table-responsive.mb-4 .table-hover tbody tr:hover {
|
||||
background-color: #252f49 !important; /* Subtle hover */
|
||||
}
|
||||
.table-responsive,
|
||||
.table-responsive table,
|
||||
.table-responsive th,
|
||||
.table-responsive td {
|
||||
background-color: #1c263e;
|
||||
color: #ffffff;
|
||||
border-color: #2d3748; /* Optional border color */
|
||||
}
|
||||
.fs-2.text-dark {
|
||||
color: #ffffff !important;
|
||||
}
|
||||
.input-group-text {
|
||||
background-color: #071629 !important;
|
||||
color: #ffffff !important;
|
||||
border: none !important; /* Removes border */
|
||||
}
|
||||
.table thead {
|
||||
background-color: #071629 !important;
|
||||
color: #ffffff !important; /* White text for contrast */
|
||||
border-color: #071629 !important; /* Match border to background */
|
||||
}
|
||||
/* Main modal content */
|
||||
.modal-content.border-0 {
|
||||
background-color: #071629 !important;
|
||||
color: #ffffff !important;
|
||||
outline: 1px solid #ffffff !important; /* White outline */
|
||||
}
|
||||
|
||||
/* Modal footer */
|
||||
.modal-content.border-0 .modal-footer {
|
||||
background-color: #071629 !important;
|
||||
border-top: none !important; /* Remove default top border */
|
||||
outline: 1px solid #ffffff !important; /* White outline */
|
||||
color: #ffffff !important; /* Ensure text remains white */
|
||||
}
|
||||
|
||||
/* Optional: Style header and body for consistency */
|
||||
.modal-content.border-0 .modal-header {
|
||||
border-bottom: none !important; /* Remove default header border */
|
||||
color: #ffffff !important;
|
||||
}
|
||||
|
||||
.modal-content.border-0 .modal-body {
|
||||
border-color: transparent !important; /* Remove body borders if any */
|
||||
}
|
||||
.modal-content {
|
||||
background-color: #071629 !important;
|
||||
outline: 1px solid #ffffff !important; /* White outline */
|
||||
color: #ffffff !important; /* Ensure text remains white */
|
||||
}
|
||||
.modal-footer {
|
||||
background-color: #071629 !important;
|
||||
outline: 1px solid #ffffff !important; /* White outline */
|
||||
color: #ffffff !important; /* Ensure text remains white */
|
||||
}
|
||||
|
||||
|
||||
.alert.alert-success {
|
||||
background-image: linear-gradient(
|
||||
135deg,
|
||||
var(--bs-success) 0%,
|
||||
#198754 30%,
|
||||
#157347 100%
|
||||
) !important;
|
||||
background-color: transparent !important;
|
||||
color: #fff !important;
|
||||
border-color: var(--bs-success-border-subtle) !important;
|
||||
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
|
||||
}
|
||||
.btn.btn-outline-light.btn-more:hover,
|
||||
.btn.btn-outline-light.btn-more:active,
|
||||
.btn.btn-outline-light.btn-more:focus {
|
||||
background-color: transparent !important;
|
||||
border-color: #f8f9fa !important; /* Original outline-light color */
|
||||
color: #f8f9fa !important; /* Original text color */
|
||||
box-shadow: none !important;
|
||||
}
|
||||
.btn.btn-outline-light:hover,
|
||||
.btn.btn-outline-light:focus,
|
||||
.btn.btn-outline-light:active {
|
||||
background-color: transparent !important;
|
||||
border-color: #f8f9fa !important;
|
||||
color: #f8f9fa !important;
|
||||
box-shadow: none !important;
|
||||
}
|
||||
.table.table-rounded.align-middle.table-justify {
|
||||
border: 1px solid #ffffff !important;
|
||||
border-radius: 0.5rem !important;
|
||||
border-collapse: separate !important;
|
||||
border-spacing: 0 !important;
|
||||
overflow: hidden; /* Ensures rounded corners clip content */
|
||||
}
|
||||
|
||||
/* Reduce horizontal padding in cells */
|
||||
.table.table-rounded.align-middle.table-justify th,
|
||||
.table.table-rounded.align-middle.table-justify td {
|
||||
padding-left: 0.75rem !important; /* Reduced from Bootstrap's 1rem */
|
||||
padding-right: 0.75rem !important; /* Reduced from Bootstrap's 1rem */
|
||||
}
|
||||
|
||||
/* Optional: Style inner borders */
|
||||
.table.table-rounded.align-middle.table-justify th,
|
||||
.table.table-rounded.align-middle.table-justify td {
|
||||
border-bottom: 1px solid #2d3748 !important; /* Subtle inner borders */
|
||||
}
|
||||
|
||||
|
||||
/* Cell and header styling */
|
||||
.table.table-hover.shadow-sm.align-middle th,
|
||||
.table.table-hover.shadow-sm.align-middle td {
|
||||
background-color: transparent !important;
|
||||
border-color: #2d3748 !important;
|
||||
}
|
||||
/* Table styling */
|
||||
.table.table-rounded.table-justify {
|
||||
background-color: #1c263e !important;
|
||||
color: #ffffff !important; /* Black text */
|
||||
border-radius: 8px; /* For rounded corners */
|
||||
overflow: hidden; /* Contain rounded corners */
|
||||
}
|
||||
|
||||
/* Cell styling */
|
||||
.table.table-rounded.table-justify th,
|
||||
.table.table-rounded.table-justify td {
|
||||
background-color: transparent !important;
|
||||
color: #ffffff !important;
|
||||
border-color: #2d3748 !important; /* Dark border color */
|
||||
padding: 12px 15px; /* Adjust cell padding */
|
||||
}
|
||||
|
||||
/* Header specific styling */
|
||||
.table.table-rounded.table-justify thead th {
|
||||
background-color: #151b2d !important; /* Slightly darker header */
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
/* Hover effect */
|
||||
.table.table-rounded.table-justify tbody tr:hover {
|
||||
background-color: #252f49 !important; /* Slightly lighter hover */
|
||||
}
|
||||
|
||||
/* Alert Secondary Override */
|
||||
.alert.alert-secondary {
|
||||
background-color: #1c263e !important;
|
||||
color: #ffffff !important; /* White text */
|
||||
border-color: #2d3748 !important; /* Darker border */
|
||||
}
|
||||
|
||||
/* Close Button Color */
|
||||
.alert.alert-secondary .btn-close {
|
||||
filter: invert(1) !important; /* White close icon */
|
||||
}
|
||||
|
||||
/* Links within Alert */
|
||||
.alert.alert-secondary a {
|
||||
color: #9fd1ff !important; /* Light blue links */
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
/* Optional: Hover/Focus States */
|
||||
.alert.alert-secondary:hover {
|
||||
background-color: #252f49 !important;
|
||||
}
|
||||
|
||||
|
||||
/* Optional: Ensure child elements inherit text color */
|
||||
.container-fluid.px-lg-4.px-xxl-5 * {
|
||||
color: inherit !important;
|
||||
}
|
||||
|
||||
/* If using Bootstrap gutters */
|
||||
.row.header-row.align-items-center.flex-nowrap > [class^="col"] {
|
||||
padding-left: 0 !important;
|
||||
padding-right: 0 !important;
|
||||
}
|
||||
/* White text for all elements in header row */
|
||||
.row.header-row.align-items-center.flex-nowrap,
|
||||
.row.header-row.align-items-center.flex-nowrap .text-dark {
|
||||
color: #fff !important;
|
||||
}
|
||||
|
||||
/* Force white text for all children (including text-dark elements) */
|
||||
.container-fluid.px-lg-4.px-xxl-5,
|
||||
.container-fluid.px-lg-4.px-xxl-5 .text-dark {
|
||||
color: #fff !important;
|
||||
}
|
||||
.text-lg-end {
|
||||
color: #fff !important;
|
||||
}
|
||||
.fs-2.fw-bold.text-dark {
|
||||
color: #ffffff !important; /* Bootstrap's primary blue */
|
||||
}
|
||||
|
||||
.text-reset {
|
||||
color: #ffffff !important; /* Bootstrap's primary blue */
|
||||
}
|
||||
.copy-source {
|
||||
background-color: transparent !important;
|
||||
color: #ffffff !important;
|
||||
}
|
||||
.table-hover > tbody > tr:hover > * {
|
||||
--bs-table-accent-bg: transparent !important;
|
||||
background-color: transparent !important;
|
||||
color: inherit !important;
|
||||
}
|
||||
</style>
|
||||
|
||||
|
||||
<link href="https://savefiles.com/css2/style.css?v=16" rel="stylesheet">
|
||||
|
||||
<script src="https://savefiles.com/js2/jquery.min.js?v=16"></script>
|
||||
<script src="https://savefiles.com/js2/bootstrap.bundle.min.js?v=16"></script>
|
||||
<script src="https://savefiles.com/js2/app.js?v=16"></script>
|
||||
<script src="https://savefiles.com/js2/xupload.js?v=16"></script>
|
||||
</head>
|
||||
<body class="">
|
||||
|
||||
|
||||
|
||||
|
||||
<style>
|
||||
.header {
|
||||
/* Existing styles */
|
||||
border-bottom: none;
|
||||
background: #111827 !important;
|
||||
top: 0;
|
||||
z-index: 9999;
|
||||
color: white;
|
||||
|
||||
/* Add these to reduce bottom spacing */
|
||||
padding-bottom: 0 !important;
|
||||
margin-bottom: 0 !important;
|
||||
}
|
||||
|
||||
|
||||
/* If there's a container inside header */
|
||||
.header .container {
|
||||
padding-bottom: 0 !important;
|
||||
margin-bottom: 0 !important;
|
||||
}
|
||||
|
||||
.header .nav-link {
|
||||
color: white !important;
|
||||
}
|
||||
|
||||
.header .nav-link:hover {
|
||||
color: #1C63BB !important;
|
||||
}
|
||||
.header .nav-link[href="/make_money"],
|
||||
.header .nav-link[href="/api.html"] {
|
||||
color: #9ca3af !important;
|
||||
}
|
||||
|
||||
.header .dropdown-item {
|
||||
color: white !important;
|
||||
}
|
||||
|
||||
.header .btn,
|
||||
.header .icon-btn {
|
||||
color: white !important;
|
||||
}
|
||||
|
||||
.header svg path {
|
||||
fill: currentColor;
|
||||
}
|
||||
|
||||
/* Login button (outline version) */
|
||||
.btn_box {
|
||||
background: transparent !important;
|
||||
border: 2px solid #3B82F6 !important; /* Blue border */
|
||||
color: #3B82F6 !important; /* Blue text */
|
||||
border-radius: 8px !important;
|
||||
transition: all 0.2s ease;
|
||||
}
|
||||
|
||||
.btn_box:hover {
|
||||
border-color: #1C63BB !important; /* Darker blue border on hover */
|
||||
color: #1C63BB !important; /* Darker text on hover */
|
||||
background: rgba(28, 99, 187, 0.05) !important; /* Subtle hover background */
|
||||
}
|
||||
|
||||
.reg-btn {
|
||||
background: linear-gradient(120deg, #60a5fa, #3B82F6, #1D4ED8) !important;
|
||||
border: none !important;
|
||||
color: white !important;
|
||||
border-radius: 8px !important;
|
||||
transition: all 0.3s ease;
|
||||
box-shadow: 0 4px 6px -1px rgba(59, 130, 246, 0.2);
|
||||
}
|
||||
|
||||
.reg-btn:hover {
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 6px 12px -1px rgba(59, 130, 246, 0.3);
|
||||
animation: gradient-pulse 1.5s infinite alternate;
|
||||
}
|
||||
|
||||
.set_justify {
|
||||
text-align: justify;
|
||||
}
|
||||
|
||||
/* Additional hover states */
|
||||
.header .dropdown-item:hover {
|
||||
background: rgba(255, 255, 255, 0.1);
|
||||
}
|
||||
|
||||
/* Bootstrap dropdown menu adjustment */
|
||||
.header .dropdown-menu {
|
||||
background: #1f2937;
|
||||
border: 1px solid rgba(255, 255, 255, 0.1);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<!-- Header section -->
|
||||
<header class="header">
|
||||
<div class="container">
|
||||
<div class="row header-row align-items-center flex-nowrap">
|
||||
<div class="col-auto flex-grow-1 flex-shrink-1">
|
||||
<div class="row align-items-center">
|
||||
<div class="col-auto d-lg-none">
|
||||
<div class="dropdown">
|
||||
<button class="btn icon-btn" data-bs-toggle="dropdown" data-bs-offset="0, 16">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="22" height="16" viewBox="0 0 22 16">
|
||||
<path d="M0 0h22v2H0V0zm0 7h22v2H0V7zm0 7h22v2H0v-2z"></path>
|
||||
</svg>
|
||||
</button>
|
||||
<ul class="dropdown-menu dropdown-menu-end">
|
||||
<a href="/make_money" class="dropdown-item">
|
||||
Make Money
|
||||
</a>
|
||||
<a href="/check_files" class="dropdown-item">
|
||||
Link Checker
|
||||
</a>
|
||||
|
||||
<a href="/api.html" class="dropdown-item">API</a>
|
||||
<a href="/tos" class="dropdown-item">
|
||||
Terms of service
|
||||
</a>
|
||||
|
||||
<a href="/contact" class="dropdown-item">
|
||||
Contact Us
|
||||
</a>
|
||||
<a href="/faq" class="dropdown-item">
|
||||
FAQ
|
||||
</a>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-auto me-lg-4">
|
||||
<a href="/" class="logo">
|
||||
<img src="https://savefiles.com/images/logo-white.svg?16" alt="">
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-auto d-none d-lg-block">
|
||||
<nav class="nav">
|
||||
|
||||
<a class="nav-link link-body-emphasis" href="/make_money">
|
||||
Make Money
|
||||
</a>
|
||||
<a href="/api.html" class="nav-link link-body-emphasis">API Docs</a>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="col-auto d-none d-lg-block">
|
||||
<a href="/login.html" class="btn me-2 login-btn link-body-emphasis btn_box">
|
||||
Login
|
||||
</a>
|
||||
<a href="/?op=registration" class="btn btn-primary reg-btn">
|
||||
Sign Up
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-auto d-lg-none">
|
||||
<div class="dropdown">
|
||||
<button class="btn icon-btn" data-bs-toggle="dropdown" data-bs-offset="0, 16">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="22" height="22"
|
||||
viewBox="0 0 22 22">
|
||||
<path
|
||||
d="M11 22C4.9 22 0 17.1 0 11S4.9 0 11 0s11 4.9 11 11-4.9 11-11 11zm0-20c-5 0-9 4-9 9s4 9 9 9 9-4 9-9-4-9-9-9z">
|
||||
</path>
|
||||
<path
|
||||
d="M11 15.3c-3 0-5.4-2.4-5.4-5.4S8 4.4 11 4.4s5.4 2.4 5.4 5.4-2.4 5.5-5.4 5.5zm0-8.9c-1.9 0-3.4 1.5-3.4 3.4s1.5 3.4 3.4 3.4 3.4-1.5 3.4-3.4-1.5-3.4-3.4-3.4z">
|
||||
</path>
|
||||
<path
|
||||
d="M4.9 19.8c-.2 0-.3 0-.5-.1-.5-.3-.6-.9-.4-1.4 1.5-2.5 3.9-3.8 7-3.8s5.5 1.3 7 3.8c.3.5.1 1.1-.3 1.4-.5.3-1.1.1-1.4-.3-1.1-1.9-2.9-2.8-5.2-2.8-2.4 0-4.1.9-5.3 2.8-.2.2-.6.4-.9.4z">
|
||||
</path>
|
||||
</svg>
|
||||
</button>
|
||||
<div class="dropdown-menu dropdown-menu-end">
|
||||
<a class="dropdown-item " href="/login.html">
|
||||
Login
|
||||
</a>
|
||||
<a class="dropdown-item" href="/?op=registration">
|
||||
Sign Up
|
||||
</a>
|
||||
<a class="dropdown-item" href="/?op=forgot_pass">
|
||||
Forgot your password?
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
|
||||
|
||||
|
||||
<main>
|
||||
|
||||
<div class="notfound">
|
||||
<div class="mb-4">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="61" height="65" viewBox="0 0 61 65" fill="none">
|
||||
<path
|
||||
d="M54.8333 29.9667C44.1667 24.9 31.5 29.4333 26.4333 40.1C23.1 47.0333 23.7667 55.1667 28.1667 61.4333H3.09999C1.49999 61.4333 0.0333252 60.1 0.0333252 58.3667V3.56667C0.0333252 1.83333 1.36666 0.5 3.09999 0.5H39.6333L54.8333 15.7V29.9667ZM45.7667 64.5C37.3667 64.5 30.5667 57.7 30.5667 49.3C30.5667 40.9 37.3667 34.1 45.7667 34.1C54.1667 34.1 60.9667 40.9 60.9667 49.3C60.9667 57.7 54.1667 64.5 45.7667 64.5ZM41.7667 57.5667C46.3 59.7 51.7667 57.8333 53.9 53.3C55.1 50.7667 55.1 47.9667 53.9 45.4333L41.7667 57.5667ZM37.5 53.1667L49.6333 41.0333C45.1 38.9 39.6333 40.7667 37.5 45.3C36.3 47.8333 36.3 50.7667 37.5 53.1667Z"
|
||||
fill="#3586FF"></path>
|
||||
</svg>
|
||||
</div>
|
||||
<h1 class="fs-2 text-dark">
|
||||
The file was deleted by administration because it didn't comply with our Terms of Use
|
||||
</h1>
|
||||
<p class="text-muted mb-5">
|
||||
alien.earth.s01e01.1080p.web.h264-successfulcrab.mp4
|
||||
</p>
|
||||
<div class="block border-danger py-3 small">
|
||||
<h6>
|
||||
Reason for deletion:
|
||||
</h6>
|
||||
DMCA request
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</main>
|
||||
|
||||
|
||||
<footer style="background-color: #192337;">
|
||||
<style>
|
||||
.footer {
|
||||
background-color: #111827 !important; /* Match header color */
|
||||
box-shadow: 0px -1px 10px 0px rgb(0 0 0 / 12%);
|
||||
color: white;
|
||||
}
|
||||
|
||||
.footer-bottom {
|
||||
background: #111827 !important; /* Match header color */
|
||||
}
|
||||
|
||||
/* White headings */
|
||||
.footer .text-uppercase.text-dark {
|
||||
color: white !important;
|
||||
}
|
||||
|
||||
/* White links */
|
||||
.footer .nav-link {
|
||||
color: #9ca3af !important;
|
||||
}
|
||||
|
||||
/* Logo white version */
|
||||
.footer .logo img {
|
||||
content: url("https://savefiles.com/images/logo-white.svg?16");
|
||||
}
|
||||
|
||||
/* Optional: Link hover states */
|
||||
.footer .nav-link:hover {
|
||||
color: #9ca3af !important;
|
||||
}
|
||||
</style>
|
||||
|
||||
<footer class="footer">
|
||||
<div class="container">
|
||||
<div class="footer-main">
|
||||
<div class="row justify-content-center justify-content-lg-start">
|
||||
<div class="col-12 col-lg-4 col-xl-3 text-center text-lg-start">
|
||||
<div class="mb-4">
|
||||
<a href="https://savefiles.com/" class="logo">
|
||||
<img src="https://savefiles.com/images/logo-white.svg?16" alt="">
|
||||
</a>
|
||||
</div>
|
||||
<div class="mb-2 text-uppercase"><!--Share us: --></div>
|
||||
<div class="mb-3">
|
||||
<!-- Social media icons commented out -->
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-8 col-xl-7">
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<div class="text-uppercase text-dark large fw-bold">Info</div>
|
||||
<div class="nav flex-column">
|
||||
<a href="https://savefiles.com/" class="nav-link">Home</a>
|
||||
<a href="/api.html" class="nav-link">API</a>
|
||||
<a href="/tos" class="nav-link">Terms of service</a>
|
||||
<a href="/copyright-policy" class="nav-link">Copyright Policy</a>
|
||||
<a href="/privacy-policy" class="nav-link">Privacy Policy</a>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="col">
|
||||
<div class="text-uppercase text-dark large fw-bold">Features</div>
|
||||
<div class="nav flex-column">
|
||||
<a href="/make_money" class="nav-link">Make Money</a>
|
||||
<a href="/check_files" class="nav-link">Link Checker</a>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="col">
|
||||
<div class="text-uppercase text-dark large fw-bold">Support</div>
|
||||
<div class="nav flex-column">
|
||||
<a href="/contact" class="nav-link">Contact Us</a>
|
||||
<a href="/faq" class="nav-link">FAQ</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="col-xl-auto text-nowrap text-end d-none d-xl-block">
|
||||
<a href="https://savefiles.com/login.html" class="btn btn-light login-btn me-2 btn_box">Login</a>
|
||||
<a href="https://savefiles.com/?op=registration" class="btn btn-primary reg-btn">Sign Up</a>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer-bottom small">
|
||||
<div class="container">
|
||||
<div class="row align-items-center justify-content-between">
|
||||
<div class="col-auto">
|
||||
<div class="text-light">© 2025 SaveFiles</div>
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<!-- Optional additional footer content -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</footer>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -51,6 +51,8 @@ exports[`SafeFiles savefiles 1`] = `
|
|||
]
|
||||
`;
|
||||
|
||||
exports[`SafeFiles savefiles deleted file 1`] = `[]`;
|
||||
|
||||
exports[`SafeFiles savefiles locked file 1`] = `[]`;
|
||||
|
||||
exports[`SafeFiles streamhls /e/ 1`] = `
|
||||
|
|
|
|||
Loading…
Reference in a new issue