Upload files to "/"

This commit is contained in:
Mohammed Nuseirat 2024-10-26 02:05:26 +03:00
commit 1d2cf1de3f
5 changed files with 1745 additions and 0 deletions

27
README.md Normal file
View File

@ -0,0 +1,27 @@
# CertifyMaster
Try it: [CertifyMaster](https://certifymaster.netlify.app/)
CertifyMaster is an online platform dedicated to providing a curated list of free educational resources, certifications, and training programs across various technologies and fields. Our goal is to help learners and professionals advance their skills, enhance their knowledge, and gain valuable certifications to boost their careers.
![لقطة شاشة 2024-10-24 234230](https://github.com/user-attachments/assets/ee5575a9-3fac-43ad-82e5-500c755e51f5)
## Features
- **Curated List of Resources**: A comprehensive collection of free courses, certifications, and training programs from top providers.
- **Collapsible Sections**: Organized content with collapsible sections for easy navigation and a clean interface.
- **Filtering System**: Advanced filtering options to help users quickly find relevant resources based on technology, provider, or certification type.
- **Search Functionality**: Robust search functionality to locate specific courses or certifications efficiently.
- **Up-to-Date Information**: Regular updates to ensure the latest and most relevant resources are available.
- **Back to Top Button**: Convenient navigation with a back-to-top button for easy access to the main menu.
## Footer Information
This GPA Calculator was created by **Mohammed Nuseirat**. Connect with me on [LinkedIn](https://www.linkedin.com/in/mohammednuseirat/) and [X](https://x.com/MohaNuseirat).
## License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
CertifyMaster is open-source and available under the MIT License. See the LICENSE file for more details.
By using CertifyMaster, you are taking a significant step towards enhancing your professional skills and knowledge with access to some of the best free educational resources available online.

135
certifications.js Normal file
View File

@ -0,0 +1,135 @@
fetch('data.json')
.then(response => response.json())
.then(data => {
// Access the parsed data
console.log(data);
// Populate General certifications
populateCertifications(data.general, '#general', 5);
// Populate Security certifications
populateCertifications(data.security, '#security', 4);
// Populate Databases certifications
populateCertifications(data.databases, '#databases', 4);
// Populate Project Management certifications
populateCertifications(data['project-management'], '#project-management', 4);
// Populate Marketing certifications
populateCertifications(data.marketing, '#marketing', 4);
})
.catch(error => {
console.error('Error fetching data:', error);
});
// Function to populate certifications for a specific section
function populateCertifications(certifications, sectionId, columnCount) {
const tableBody = document.querySelector(`${sectionId} tbody`);
certifications.forEach(certification => {
const row = createTableRow(certification, columnCount);
tableBody.appendChild(row);
});
}
// Function to create table row
function createTableRow(certification, columnCount) {
const row = document.createElement('tr');
if (columnCount === 5) {
row.innerHTML = `
<td>${certification.technology}</td>
<td>${certification.provider}</td>
<td>${certification.description}</td>
<td><a href="${certification.link}" target="_blank">Link</a></td>
<td>${certification.expiration}</td>
`;
} else if (columnCount === 4) {
row.innerHTML = `
<td>${certification.provider}</td>
<td>${certification.description}</td>
<td><a href="${certification.link}" target="_blank">Link</a></td>
<td>${certification.expiration}</td>
`;
}
return row;
}
// Function to filter certifications based on expiration date
function filterByExpiration(section, expiration) {
const rows = document.querySelectorAll(`#${section} tbody tr`);
rows.forEach(row => {
const expirationCell = row.querySelector('td:last-child');
const expirationText = expirationCell.textContent.trim();
row.style.display = expiration === "" || expirationText.includes(expiration) ? '' : 'none';
});
}
// Function to filter certifications based on provider name
function filterByProvider(section, provider) {
const rows = document.querySelectorAll(`#${section} tbody tr`);
rows.forEach(row => {
const providerCell = row.querySelector('td:nth-child(2)');
const providerText = providerCell.textContent.trim().toLowerCase();
row.style.display = providerText.includes(provider) ? '' : 'none';
});
}
// Event listeners for filtering options
document.querySelectorAll('.filter-options select').forEach(selectElement => {
const section = selectElement.id.split('-')[2];
selectElement.addEventListener('change', (event) => {
const expiration = event.target.value;
filterByExpiration(section, expiration);
});
});
document.querySelectorAll('.filter-options input').forEach(inputElement => {
const section = inputElement.id.split('-')[2];
inputElement.addEventListener('input', (event) => {
const provider = event.target.value.toLowerCase();
filterByProvider(section, provider);
});
});
// Function to toggle the visibility of sections
function toggleSection(sectionId) {
const section = document.getElementById(sectionId);
const sectionBody = section.querySelector('tbody');
// Toggle the display style
sectionBody.style.display = sectionBody.style.display === 'none' ? 'table-row-group' : 'none';
}
// event listeners to the section headers for toggling
document.addEventListener('DOMContentLoaded', () => {
const sectionHeaders = document.querySelectorAll('.section > h2');
sectionHeaders.forEach(header => {
header.addEventListener('click', () => {
const sectionId = header.parentElement.id;
toggleSection(sectionId);
});
});
});
// Call the functions to populate the tables
populateCertifications();

1000
data.json Normal file

File diff suppressed because it is too large Load Diff

148
index.html Normal file
View File

@ -0,0 +1,148 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CertifyMaster - Free Courses & Certifications</title>
<!-- Link to the external CSS file -->
<link rel="stylesheet" href="styles.css">
<!-- Link to Font Awesome for icons -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css">
</head>
<body>
<!-- Header section containing the title and description -->
<header class="glass">
<h1>CertifyMaster</h1>
<p>A curated list of free courses & certifications.<br>By CloudStudyNet, Site created by Mohammed Nuseirat.</p>
</header>
<!-- Navigation menu -->
<nav>
<ul>
<li><a href="#general">General</a></li>
<li><a href="#security">Security</a></li>
<li><a href="#databases">Databases</a></li>
</ul>
</nav>
<!-- Main content container -->
<div class="container">
<!-- General Section -->
<section id="general" class="section glass-card">
<h2>General <span class="arrow">&#9660;</span></h2>
<div class="filter-options">
<!-- Filter options for expiration and provider -->
<label for="expiration-filter-general">Expiration:</label>
<select id="expiration-filter-general">
<option value="">All</option>
<option value="None">No Expiration</option>
<option value="Limited">Limited Expiration</option>
<option value="Unknown">Unknown Expiration</option>
<option value="Unlimited">Unlimited Expiration</option>
</select>
<label for="provider-filter-general">Provider:</label>
<input type="text" id="provider-filter-general" placeholder="Filter by provider...">
</div>
<!-- Table to display certification details -->
<div class="table-wrapper">
<table>
<thead>
<tr>
<th>Technology</th>
<th>Provider</th>
<th>Description</th>
<th>Link</th>
<th>Expiration</th>
</tr>
</thead>
<tbody></tbody>
</table>
</div>
</section>
<!-- Security Section -->
<section id="security" class="section glass-card">
<h2>Security <span class="arrow">&#9660;</span></h2>
<div class="filter-options">
<label for="expiration-filter-security">Expiration:</label>
<select id="expiration-filter-security">
<option value="">All</option>
<option value="None">No Expiration</option>
<option value="Limited">Limited Expiration</option>
<option value="Unknown">Unknown Expiration</option>
<option value="Unlimited">Unlimited Expiration</option>
</select>
<label for="provider-filter-security">Provider:</label>
<input type="text" id="provider-filter-security" placeholder="Filter by provider...">
</div>
<div class="table-wrapper">
<table>
<thead>
<tr>
<th>Provider</th>
<th>Description</th>
<th>Link</th>
<th>Expiration</th>
</tr>
</thead>
<tbody></tbody>
</table>
</div>
</section>
<!-- Databases Section -->
<section id="databases" class="section glass-card">
<h2>Databases <span class="arrow">&#9660;</span></h2>
<div class="filter-options">
<label for="expiration-filter-databases">Expiration:</label>
<select id="expiration-filter-databases">
<option value="">All</option>
<option value="None">No Expiration</option>
<option value="Limited">Limited Expiration</option>
<option value="Unknown">Unknown Expiration</option>
<option value="Unlimited">Unlimited Expiration</option>
</select>
<label for="provider-filter-databases">Provider:</label>
<input type="text" id="provider-filter-databases" placeholder="Filter by provider...">
</div>
<div class="table-wrapper">
<table>
<thead>
<tr>
<th>Provider</th>
<th>Description</th>
<th>Link</th>
<th>Expiration</th>
</tr>
</thead>
<tbody></tbody>
</table>
</div>
</section>
</div>
<!-- Back to top link -->
<p align="center"><a href="#general"><i class="fas fa-arrow-up"></i> <br></a></p>
<!-- Footer -->
<footer class="glass">
<div class="footer-content">
<h3>Devoloped by Mohammed Nuseirat</h3>
<ul class="socials">
<li><a href="https://www.linkedin.com/in/mohammednuseirat/"><i class="fab fa-linkedin fa-2x"></i></a></li>
<li><a href="https://github.com/nuseirat"><i class="fab fa-github fa-2x"></i></a></li>
<li><a href="https://nuseirat.github.io/"><i class="fas fa-globe fa-2x"></i></a></li>
<li><a href="https://x.com/mohanuseirat"><i class="fa-brands fa-x-twitter fa-2x"></i></a></li>
</ul>
</div>
<div class="footer-bottom">
</div>
</footer>
<!-- Link to external JavaScript file -->
<script src="certifications.js"></script>
<!-- Font Awesome kit -->
<script src="https://kit.fontawesome.com/86e812f22e.js" crossorigin="anonymous"></script>
</body>
</html>

435
styles.css Normal file
View File

@ -0,0 +1,435 @@
/* General body styling */
body {
font-family: 'Poppins', sans-serif;
background: linear-gradient(135deg, #020617, #1e293b);
margin: 0;
padding: 20px;
overflow-x: hidden;
}
/* Container to prevent touching borders */
.container {
max-width: 1200px;
margin: 0 auto;
padding: 0 20px;
}
/* Glass effect for containers */
.glass {
background: #ffffff10;
backdrop-filter: blur(15px);
-webkit-backdrop-filter: blur(15px);
border: 1px solid #ffffff4d;
box-shadow: 0 8px 32px #23243325;
border-radius: 20px;
padding: 1.5rem;
margin: 1rem 0;
}
/* Glass effect for cards */
.glass-card {
background: #ffffff0a;
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
border: 1px solid #ffffff33;
transition: all 0.3s ease;
border-radius: 20px;
padding: 1.5rem;
margin-bottom: 1rem;
box-shadow: 0 15px 25px #1819254d;
}
.glass-card:hover {
transform: translateY(-5px);
background: rgba(255, 255, 255, 0.075);
box-shadow: 0 20px 45px #1a1a2466;
}
/* Header styling */
header {
color: white;
text-align: center;
padding: 2rem 0;
margin-bottom: 2rem;
border-radius: 20px;
background: rgba(255, 255, 255, 0.2);
}
/* Headings */
h1 {
font-size: 3.5rem;
font-weight: 700;
margin: 0;
}
h2 {
font-size: 2.5rem;
color: #fff;
font-weight: 600;
margin-bottom: 1rem;
}
/* Navigation */
nav {
text-align: center;
margin-bottom: 2rem;
}
ul {
list-style-type: none;
padding: 0;
margin: 0;
display: flex;
flex-wrap: wrap;
justify-content: center;
gap: 10px;
}
li {
display: inline-block;
}
a {
color: #fff;
text-decoration: none;
padding: 10px 15px;
border-radius: 20px;
background: rgba(255, 255, 255, 0.15);
transition: background-color 0.3s, color 0.3s;
font-weight: 500;
display: block;
}
a:hover {
background-color: rgba(255, 255, 255, 0.3);
}
/* Section styling */
.section {
margin-bottom: 2rem;
padding: 2rem;
border-radius: 20px;
overflow: hidden;
}
/* Description section */
.description {
max-height: 0;
overflow: hidden;
transition: max-height 0.3s ease-out;
}
.description.expanded {
max-height: 500px;
}
.description-trigger {
cursor: pointer;
color: #fff;
background: rgba(255, 255, 255, 0.2);
padding: 10px;
border-radius: 10px;
text-align: center;
margin: 10px 0;
transition: background-color 0.3s;
}
.description-trigger:hover {
background: rgba(255, 255, 255, 0.3);
}
/* Filter section */
.filter-options {
display: flex;
gap: 1rem;
margin-bottom: 1rem;
background: rgba(255, 255, 255, 0.2);
padding: 1rem;
border-radius: 20px;
box-shadow: 0 5px 20px rgba(31, 38, 135, 0.15);
}
.filter-group {
display: flex;
gap: 1rem;
width: 100%;
}
.expiration-filter,
.provider-filter {
flex: 1;
}
.filter-options label {
font-size: 1.2rem;
color: white;
margin-right: 0.5rem;
display: block;
margin-bottom: 0.5rem;
}
/* Improved dropdown styling */
.filter-options select,
.filter-options input {
padding: 0.8rem;
border: none;
border-radius: 20px;
background: #252638b3;
color: white;
width: 100%;
font-size: 1rem;
outline: none;
box-shadow: 0 2px 10px rgba(31, 38, 135, 0.1);
transition: all 0.3s ease;
}
.filter-options select option {
background-color: #5f6999;
color: white;
padding: 10px;
}
.filter-options select:hover,
.filter-options input:hover,
.filter-options select:focus,
.filter-options input:focus {
background: #636670cc;
box-shadow: 0 5px 20px #1c1e334d;
}
/* Table styling */
.table-wrapper {
overflow-x: auto;
margin: 1rem 0;
}
table {
width: 100%;
border-collapse: collapse;
background: rgba(255, 255, 255, 0.1);
border-radius: 20px;
overflow: hidden;
}
th, td {
padding: 12px 15px;
text-align: left;
color: white;
}
th {
background-color: #1f268780;
white-space: nowrap;
}
td {
background-color: #ffffff1a;
}
.provider-name {
font-weight: 700;
color: #fff;
}
.description-text {
font-style: italic;
}
.expiration-text {
font-weight: 600;
color: #FFD700;
}
/* Footer */
footer {
background-color: rgba(255, 255, 255, 0.1);
padding: 20px 0;
text-align: center;
border-radius: 20px;
margin-top: 2rem;
color: #fff;
}
/* Styling for the arrow icon including float, font size, transition effects, and cursor */
.arrow {
float: right;
font-size: 2rem;
transition: transform 0.3s, color 0.3s;
cursor: pointer;
}
/* Arrow hover effect for color and rotation */
.arrow:hover {
color: #fdfdfd;
transform: rotate(180deg);
}
/* Responsive styles */
@media (max-width: 768px) {
body {
padding: 10px;
}
.container {
padding: 0 10px;
}
h1 {
font-size: 2.5rem;
}
h2 {
font-size: 2rem;
}
.section {
padding: 1rem;
}
.filter-options {
flex-direction: column;
}
.filter-group {
flex-direction: column;
}
.filter-options select,
.filter-options input {
width: 95%;
}
}
.arrow {
font-size: 1.5rem;
transition: transform 0.3s ease;
}
/* Unique text styles */
.provider-name {
font-weight: 700;
color: #FFD700;
font-size: 1.1rem;
letter-spacing: 0.5px;
}
.description-text {
font-style: italic;
color: #E0E0E0;
line-height: 1.4;
font-size: 0.95rem;
}
.link-text {
color: #00FF00;
font-weight: 600;
text-decoration: underline;
font-size: 1rem;
}
.expiration-text {
font-weight: 600;
color: #FF69B4;
font-size: 0.9rem;
text-transform: uppercase;
}
.technology-text {
color: #87CEEB;
font-weight: 500;
font-size: 1rem;
letter-spacing: 0.3px;
}
/* Enhanced mobile styles */
@media (max-width: 480px) {
h1 {
font-size: 2rem;
}
h2 {
font-size: 1.5rem;
}
.glass-card {
padding: 1rem;
}
/* Mobile-optimized table layout */
table {
border: 0;
background: none;
}
table thead {
display: none;
}
table tr {
margin-bottom: 1rem;
display: block;
background: rgba(255, 255, 255, 0.1);
border-radius: 10px;
padding: 1rem;
}
table td {
display: block;
text-align: left;
padding: 0.5rem;
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
position: relative;
background: none;
}
table td:last-child {
border-bottom: none;
}
/* Add labels for mobile view */
table td::before {
content: attr(data-label);
font-weight: bold;
text-transform: uppercase;
display: block;
margin-bottom: 0.5rem;
font-size: 0.8rem;
color: #FFD700;
}
.provider-name {
font-size: 1rem;
margin: 0.5rem 0;
}
.description-text {
font-size: 0.9rem;
margin: 0.5rem 0;
line-height: 1.3;
}
.link-text {
font-size: 0.9rem;
margin: 0.5rem 0;
}
.expiration-text {
font-size: 0.85rem;
margin: 0.5rem 0;
}
.technology-text {
font-size: 0.95rem;
margin: 0.5rem 0;
}
/* Remove horizontal scroll */
.table-wrapper {
margin: 0;
padding: 0;
}
}