You've already forked ProfessionalWebsite
767
Export/my-work/projects-for-education/bitbox.html
Normal file
767
Export/my-work/projects-for-education/bitbox.html
Normal file
@@ -0,0 +1,767 @@
|
||||
<!DOCTYPE html>
|
||||
<html data-bs-theme="auto" lang="en-gb">
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<!-- Matomo -->
|
||||
<script>
|
||||
var _paq = window._paq = window._paq || [];
|
||||
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
|
||||
_paq.push(['trackPageView']);
|
||||
_paq.push(['enableLinkTracking']);
|
||||
(function() {
|
||||
var u="//analytics.adcmnetworks.co.uk/";
|
||||
_paq.push(['setTrackerUrl', u+'matomo.php']);
|
||||
_paq.push(['setSiteId', '1']);
|
||||
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
|
||||
g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
|
||||
})();
|
||||
</script>
|
||||
<!-- End Matomo Code -->
|
||||
|
||||
<script src="https://kit.fontawesome.com/8970d94f9b.js" crossorigin="anonymous"></script>
|
||||
|
||||
<meta name="fediverse:creator" content="@MrDavisCSIT@mstdn.social">
|
||||
<script src="https://cms.tahdah.me/scripts/publicbadge.js"></script>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
|
||||
<title>Bit:Box</title>
|
||||
<link rel="canonical" href="https://www.mrlyall.uk/my-work/projects-for-education/bitbox.html">
|
||||
<meta property="og:url" content="https://www.mrlyall.uk/my-work/projects-for-education/bitbox.html">
|
||||
<meta name="twitter:description" content="The website of Mr. A. Lyall, featuring a portfolio of work in computing education, digital projects, and curriculum resources. Explore blog posts, classroom tools, and professional insights focused on innovation, inclusion, and effective IT teaching.">
|
||||
<meta name="twitter:card" content="summary">
|
||||
<meta property="og:type" content="website">
|
||||
<meta name="twitter:title" content="Mr Lyall">
|
||||
<meta property="og:image" content="https://www.mrlyall.uk/assets/img/projects/for_education/bit_box/bit_box_logo.webp">
|
||||
<meta name="description" content="Educational device, app, and website using switches and lights to visually demonstrate binary logic.">
|
||||
<script>
|
||||
(function() {
|
||||
|
||||
// JavaScript snippet handling Dark/Light mode switching
|
||||
|
||||
const getStoredTheme = () => localStorage.getItem('theme');
|
||||
const setStoredTheme = theme => localStorage.setItem('theme', theme);
|
||||
const forcedTheme = document.documentElement.getAttribute('data-bss-forced-theme');
|
||||
|
||||
const getPreferredTheme = () => {
|
||||
|
||||
if (forcedTheme) return forcedTheme;
|
||||
|
||||
const storedTheme = getStoredTheme();
|
||||
if (storedTheme) {
|
||||
return storedTheme;
|
||||
}
|
||||
|
||||
const pageTheme = document.documentElement.getAttribute('data-bs-theme');
|
||||
|
||||
if (pageTheme) {
|
||||
return pageTheme;
|
||||
}
|
||||
|
||||
return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
|
||||
}
|
||||
|
||||
const setTheme = theme => {
|
||||
if (theme === 'auto' && window.matchMedia('(prefers-color-scheme: dark)').matches) {
|
||||
document.documentElement.setAttribute('data-bs-theme', 'dark');
|
||||
} else {
|
||||
document.documentElement.setAttribute('data-bs-theme', theme);
|
||||
}
|
||||
}
|
||||
|
||||
setTheme(getPreferredTheme());
|
||||
|
||||
const showActiveTheme = (theme, focus = false) => {
|
||||
const themeSwitchers = [].slice.call(document.querySelectorAll('.theme-switcher'));
|
||||
|
||||
if (!themeSwitchers.length) return;
|
||||
|
||||
document.querySelectorAll('[data-bs-theme-value]').forEach(element => {
|
||||
element.classList.remove('active');
|
||||
element.setAttribute('aria-pressed', 'false');
|
||||
});
|
||||
|
||||
for (const themeSwitcher of themeSwitchers) {
|
||||
|
||||
const btnToActivate = themeSwitcher.querySelector('[data-bs-theme-value="' + theme + '"]');
|
||||
|
||||
if (btnToActivate) {
|
||||
btnToActivate.classList.add('active');
|
||||
btnToActivate.setAttribute('aria-pressed', 'true');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => {
|
||||
const storedTheme = getStoredTheme();
|
||||
if (storedTheme !== 'light' && storedTheme !== 'dark') {
|
||||
setTheme(getPreferredTheme());
|
||||
}
|
||||
});
|
||||
|
||||
window.addEventListener('DOMContentLoaded', () => {
|
||||
showActiveTheme(getPreferredTheme());
|
||||
|
||||
document.querySelectorAll('[data-bs-theme-value]')
|
||||
.forEach(toggle => {
|
||||
toggle.addEventListener('click', (e) => {
|
||||
e.preventDefault();
|
||||
const theme = toggle.getAttribute('data-bs-theme-value');
|
||||
setStoredTheme(theme);
|
||||
setTheme(theme);
|
||||
showActiveTheme(theme);
|
||||
})
|
||||
})
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
|
||||
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_white.webp?h=7cd31e9469bb0f9d3a4e704b3c0b1445" media="(prefers-color-scheme: dark)">
|
||||
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
|
||||
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_white.webp?h=7cd31e9469bb0f9d3a4e704b3c0b1445" media="(prefers-color-scheme: dark)">
|
||||
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
|
||||
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
|
||||
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
|
||||
<link rel="stylesheet" href="../../assets/bootstrap/css/bootstrap.min.css?h=c9d969cca6f72ca8d4dfd457f2e8eff8">
|
||||
<link rel="stylesheet" href="../../assets/css/Lato.css?h=69bc5b06794edd4ca9a38642d36c83d0">
|
||||
<link rel="stylesheet" href="../../assets/css/bss-overrides.css?h=15b91a8988c8fc6448a8989802a159de">
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.css">
|
||||
<link rel="stylesheet" href="../../assets/css/styles.css?h=7c67e1bb3df4cb41abaceaf312f03dfa">
|
||||
<link rel="stylesheet" href="../../assets/css/pikaday.min.css?h=a9ab8ca627aa6e8f64b730ca9c2c781d">
|
||||
<link rel="stylesheet" href="../../assets/css/CookieConsentComponent.css?h=39af3305e95f4d2a8883e97d7e0cdb14">
|
||||
<link rel="stylesheet" href="../../assets/css/animations.compiled.css?h=49917e33fe831aa33e24fb1e8124fdd9">
|
||||
<link rel="stylesheet" href="../../assets/css/Carousel---Slider-With-Animation.css?h=63f5768f05d2ae91446ac010bcd4844a">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<nav class="navbar navbar-expand-md fixed-top portfolio-navbar gradient navbar-dark">
|
||||
<div class="container-fluid"><a class="navbar-brand logo" href="../../"><img alt="Stylised white microchip icon on a black background, designed as a modern tech-themed logo for ADCM" src="../../assets/img/brand/adcm_logo_white.webp?h=7cd31e9469bb0f9d3a4e704b3c0b1445" width="50" height="50" class="mobile-padding-left"></a><button data-bs-toggle="collapse" class="navbar-toggler" data-bs-target="#navbarNav" style="margin-right: 0.5em;"><span class="visually-hidden">Toggle navigation</span><span class="navbar-toggler-icon"></span></button>
|
||||
<div class="collapse navbar-collapse" id="navbarNav">
|
||||
<ul class="navbar-nav ms-auto">
|
||||
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../">Home</a></li>
|
||||
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../about">About</a></li>
|
||||
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../projects">My Work</a></li>
|
||||
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../my-work/showreel">Showreel</a></li>
|
||||
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../blog">Blog</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
<main class="page">
|
||||
<section class="portfolio-block block-intro">
|
||||
<div class="container center-everything">
|
||||
<!-- Start: portfolio heading -->
|
||||
<div class="align-content-center heading blog-heading bitbox-various">
|
||||
<h2>Bit:Box</h2>
|
||||
<p>Educational device, app, and website using switches and lights to visually demonstrate binary logic.</p>
|
||||
</div><!-- End: portfolio heading -->
|
||||
</div>
|
||||
</section>
|
||||
<section class="portfolio-block project">
|
||||
<div class="container center-everything">
|
||||
<div class="carousel slide carousel-fade project-carousel" data-bs-ride="carousel" id="carousel-1">
|
||||
<div class="carousel-inner">
|
||||
<div class="carousel-item active"><img class="img-fluid w-100 d-block slider-image-fit" alt="Square logo with the text "Bit:Box" and a pixelated lightbulb icon." width="1080" height="1080" src="../../assets/img/projects/for_education/bit_box/bit_box_logo.webp?h=36b5ef1a4c9f880d65df48518293999f"></div>
|
||||
</div>
|
||||
<div>
|
||||
<!-- Start: Previous --><a class="carousel-control-prev" href="#carousel-1" role="button" data-bs-slide="prev"><span class="carousel-control-prev-icon"></span><span class="visually-hidden">Previous</span></a><!-- End: Previous -->
|
||||
<!-- Start: Next --><a class="carousel-control-next" href="#carousel-1" role="button" data-bs-slide="next"><span class="carousel-control-next-icon"></span><span class="visually-hidden">Next</span></a><!-- End: Next -->
|
||||
</div>
|
||||
<div class="carousel-indicators focus-ring"><button type="button" data-bs-target="#carousel-1" data-bs-slide-to="0" class="active"></button></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col info">
|
||||
<p>Bit:Box is an evolution of the Binary Light Box concept, a device which used lightbulbs and an Arduino microcontroller to visually demonstrate how binary numbers work and the values assigned to each binary column. By interacting with the light switches, students could better understand the concepts of binary counting, place values, and logic.</p>
|
||||
<h3>Bit:Box Vs Binary Light Box</h3>
|
||||
<p>The Binary Light Box was created to teach SEND students how binary works using physical lightbulbs and switches. The device was comprised of an MDF body with a black vinyl layer on the top. Inside the box was a micro:bit and several breakout boards to allow the device to sense when a switch was toggled and update a seven segment display to show the user the output.</p>
|
||||
</div>
|
||||
<div class="col-auto meta project-details">
|
||||
<div class="tags"><span class="meta-heading">Project Status</span><span>Ongoing - in code maintenance phase</span><span class="meta-heading">Launched</span><span>Original Binary Light Box Code - June 2021<br>Bit:Box (Arduino) Code - January 2022<br>Bit:Box (Web) Code - October 2022</span><span class="meta-heading">Products Created</span><span>Physical Binary Light Box using micro:bit V1<br>Physical Binary Light Box using Arduino Mega<br>Microsoft Windows Application using Visual Basic .NET<br>Website using Bootstrap Studio and original JavaScript code.</span><a class="btn btn-primary project-buttons" role="button" href="https://gitea.adcmnetworks.co.uk/MrDavisCSIT/Binary-Light-Box" target="_blank"> View Binary Light Box on Gitea</a><a class="btn btn-primary project-buttons" role="button" href="https://gitea.adcmnetworks.co.uk/MrDavisCSIT/BitBox" target="_blank"> View Bit:Box (Arduino) on Gitea</a><a class="btn btn-primary project-buttons" role="button" href="https://gitea.adcmnetworks.co.uk/MrDavisCSIT/BitBox-Windows" target="_blank"> View Bit:Box (Windows) on Gitea</a><a class="btn btn-primary project-buttons" role="button" href="https://gitea.adcmnetworks.co.uk/MrDavisCSIT/BitBox-Web" target="_blank"> View Bit:Box (Web) on Gitea</a></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="more-projects">
|
||||
<h3 class="text-center more-projects-heading">More Projects</h3>
|
||||
<div data-bss-type="blog-loop" data-bss-perpage="3" style="display: none !important;">
|
||||
<div class="row gy-4 row-cols-1 row-cols-sm-2 row-cols-md-2 row-cols-lg-3 mt-0" data-bss-type="blog-loop-base">
|
||||
<div class="post-tag-projects-for-education col" data-bss-type="blog-loop-item">
|
||||
<div class="card"><a href="csbox.html"><img class="img-fluid card-img-top rainbow-border" alt="A stylised cube logo with the letters "CS" on the left face and "BX" on the right face. The cube is surrounded by vibrant icons and patterns referencing computer science, including binary digits (e.g. 111101, 10101), hexadecimal numbers, colour pencils, and graphical representations of data." width="500" height="500" src="../../assets/img/projects/for_education/cs_box/csbox_logo.webp?h=487f527cf87df0dba11b6f4d4993a80d"></a>
|
||||
<div class="card-body"><a href="csbox.html">
|
||||
<h4 class="text-body">CS:Box</h4>
|
||||
</a>
|
||||
<p class="card-text">Interactive educational tool expanding Bit:Box to include additional UK Computing Curriculum topics.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="post-tag-projects-for-education col" data-bss-type="blog-loop-item">
|
||||
<div class="card"><a href="my-mind.html"><img class="img-fluid card-img-top rainbow-border" alt="Polygonal-style graphic of a human brain in shades of pink and red on a purple background." width="338" height="338" src="../../assets/img/projects/for_education/my_mind/my_mind_logo.webp?h=4e299b8017d1483b6dfb87ea14d502aa"></a>
|
||||
<div class="card-body"><a href="my-mind.html">
|
||||
<h4 class="text-body">My Mind</h4>
|
||||
</a>
|
||||
<p class="card-text">App simplifying BCU mental health support, linking students to counsellors, emergency calls, forums.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="post-tag-projects-for-education col" data-bss-type="blog-loop-item">
|
||||
<div class="card"><a href="nature-findings.html"><img class="img-fluid card-img-top rainbow-border" alt="Interface of the Nature Findings app showing options to add new findings, edit a life list, and access a knowledge base search, with a pale blue background and stylised headings." width="940" height="500" src="../../assets/img/projects/for_education/nature_findings/naturefindingspreview.webp?h=a1d20406f8862370fbf569a75cf95af9"></a>
|
||||
<div class="card-body"><a href="nature-findings.html">
|
||||
<h4 class="text-body">Nature Findings</h4>
|
||||
</a>
|
||||
<p class="card-text">Windows app to record bird sightings during walks. Submitted as a final year computing project task.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="post-tag-projects-for-education col" data-bss-type="blog-loop-item" style="display: none !important;">
|
||||
<div class="card"><a href="task-master-ios.html"><img class="img-fluid card-img-top rainbow-border" alt="Square cropped version of the Task Master logo, showing the checkbox with the tick and the “Task Master” label on a bright green background." width="940" height="500" src="../../assets/img/projects/for_education/taskmaster_for%20ios/taskmasteriospreview.webp?h=b62eff0bef2a6734f8e4ac9ad05f103c"></a>
|
||||
<div class="card-body"><a href="task-master-ios.html">
|
||||
<h4 class="text-body">Task Master for iOS</h4>
|
||||
</a>
|
||||
<p class="card-text">iOS app based on BrumHack 5.0 entry. Helps businesses manage, assign, and track their project tasks.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<nav class="d-flex justify-content-center mt-3" data-bss-type="blog-loop-pagination">
|
||||
<ul class="pagination">
|
||||
<li class="page-item disabled" data-type="prev" data-page="1"><a class="page-link" aria-label="Previous" href="#"><span aria-hidden="true">«</span></a></li>
|
||||
<li class="page-item active" data-type="regular" data-page="1"><a class="page-link" href="#">1</a></li>
|
||||
<li class="page-item" data-type="regular" data-page="2"><a class="page-link" href="#">2</a></li>
|
||||
<li class="page-item" data-type="next" data-page="2"><a class="page-link" aria-label="Next" href="#"><span aria-hidden="true">»</span></a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</main><!-- Start: Footer Multi Column -->
|
||||
<footer class="text-body bg-body" id="Light-Footer">
|
||||
<div class="container py-4 py-lg-5 center-everything">
|
||||
<div class="row justify-content-center">
|
||||
<!-- Start: Accreditations -->
|
||||
<div class="col-sm-3 col-md-6 text-center text-lg-start d-none d-sm-none d-md-none d-lg-flex flex-column">
|
||||
<h3 class="fs-6 text-center text-body accreditations-title">Accreditations</h3>
|
||||
<div class="swiper text-body w-100" id="light-swiper" data-bss-swiper="{"direction":"horizontal","loop":true,"autoplay":{"pauseOnMouseEnter":true},"autoHeight":true,"effect":"fade","fadeEffect":{"crossFade":true}}">
|
||||
<div class="swiper-wrapper">
|
||||
<!-- Start: Mountain Training -->
|
||||
<div class="swiper-slide d-flex justify-content-center center-everything">
|
||||
<div class="tahdah-badge" data-candidateid="1466454"></div>
|
||||
</div><!-- End: Mountain Training -->
|
||||
<!-- Start: Canva Essentials -->
|
||||
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/canva-essentials" target="_blank"><img class="img-fluid w-100 accreditation" width="692" height="692" src="../../assets/img/accreditations/canva-essentials-badge.webp?h=bc157efb7620e733f43b4b00981978ea"></a></div><!-- End: Canva Essentials -->
|
||||
<!-- Start: Canva Essentials for Mobile -->
|
||||
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/canva-essentials-mobile" target="_blank"><img class="img-fluid w-100 accreditation" width="692" height="692" src="../../assets/img/accreditations/canva-essentials-for-mobile-badge.webp?h=93513f8f560a2e346c12aeb9fb0c18ec"></a></div><!-- End: Canva Essentials for Mobile -->
|
||||
<!-- Start: Canva Graphic Design Essentials -->
|
||||
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/graphic-design-essentials" target="_blank"><img class="img-fluid w-100 accreditation" width="692" height="692" src="../../assets/img/accreditations/graphic-design-essentials-badge.webp?h=f5406331e45433f0d8bd6b929f9d113b"></a></div><!-- End: Canva Graphic Design Essentials -->
|
||||
<!-- Start: Marketing with Canva -->
|
||||
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/marketing-with-canva" target="_blank"><img class="img-fluid w-100 accreditation" width="1080" height="1080" src="../../assets/img/accreditations/mr-a-davis-marketing-with-canva-badge.webp?h=f0b802da597c825b7e03378130d94aca"></a></div><!-- End: Marketing with Canva -->
|
||||
<!-- Start: Canva for Work -->
|
||||
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/canva-for-work" target="_blank"><img class="img-fluid w-100 accreditation" width="2160" height="2160" src="../../assets/img/accreditations/mr-a-davis-canva-for-work-badge.webp?h=b3617633e9d2de429288704f75b304f4"></a></div><!-- End: Canva for Work -->
|
||||
<!-- Start: Canva Teacher Essentials -->
|
||||
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/teacher-essentials" target="_blank"><img class="img-fluid w-100 accreditation" width="692" height="692" src="../../assets/img/accreditations/teacher-essentials-badge.webp?h=d2d6f962e0b1bbebc68f987d6f156028"></a></div><!-- End: Canva Teacher Essentials -->
|
||||
<!-- Start: Canva AI in the Classroom -->
|
||||
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/ai-in-the-classroom" target="_blank"><img class="img-fluid w-100 accreditation" width="1080" height="1080" src="../../assets/img/accreditations/ai-in-the-classroom-badge.webp?h=769458ef2c323729c209855a3cde7312"></a></div><!-- End: Canva AI in the Classroom -->
|
||||
<!-- Start: Adobe Creative Educator Level 1 -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/3a49b473-4af9-4c5a-ab38-1c754f181c6e/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Adobe Creative Educator Level 1"" width="600" height="600" src="../../assets/img/accreditations/3_hours_adobe_creative_educator_level_1.webp?h=45de0c4e8984e885b1153e344e794beb"></a></div><!-- End: Adobe Creative Educator Level 1 -->
|
||||
<!-- Start: Minecraft Education -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/53745c80-7d0a-4428-906a-839e905c139c/public_url" target="_blank"><img class="img-fluid w-100 accreditation" width="600" height="600" src="../../assets/img/accreditations/minecraft-education-ambassador.webp?h=5c614dffa9ab6d6fd77cd805b8397ffd"></a></div><!-- End: Minecraft Education -->
|
||||
<!-- Start: MCE -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/9c9dd6cd-2703-4539-adc9-366069cbc3a9/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " MCE: Microsoft Certified Educator"" width="352" height="352" src="../../assets/img/accreditations/mce_microsoft_certified_educator.webp?h=3e67f154a356cd1ef15c31b0fb42c0c4"></a></div><!-- End: MCE -->
|
||||
<!-- Start: MIEE 2023-2024 -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/b5ac17a1-0914-496f-9d85-9608966259ee/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Microsoft Innovative Educator Expert 2023-2024"" width="600" height="600" src="../../assets/img/accreditations/microsoft_innovative_educator_expert_2023_2024.webp?h=ee882aefba64b3e5b8ea9554eeea3847"></a></div><!-- End: MIEE 2023-2024 -->
|
||||
<!-- Start: MIEE 2024-2025 -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/ad92a7cb-3e4f-46e2-8e73-99dffd0eb69e/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Microsoft Innovative Educator Expert 2024-2025"" width="600" height="600" src="../../assets/img/accreditations/microsoft_innovative_educator_expert_2024_2025.webp?h=a0b5cb2a639caf0351a977146375667e"></a></div><!-- End: MIEE 2024-2025 -->
|
||||
<!-- Start: Pearson OSA Expert -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/44756f05-e727-41c8-a352-a656c033c9f0/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Onscreen Assessment Expert GCSE Computer Science"" width="800" height="800" src="../../assets/img/accreditations/pearson_onscreen_assessment_expert.webp?h=d4e00ea5bfad5a66c619238d7cbdd8db"></a></div><!-- End: Pearson OSA Expert -->
|
||||
<!-- Start: STEM 21-22 -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/52121ef6-0760-4870-91cc-1cb20001238b/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Establishing a STEM club - from creation to careers 2021/2022"" width="1200" height="1200" src="../../assets/img/accreditations/establishing_a_stem_club_from_creation_to_careers_2021_2022.webp?h=7f96a591bd4fb09f86da96af8a8a41ef"></a></div><!-- End: STEM 21-22 -->
|
||||
<!-- Start: NCCE Secondary 21-22 -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/60d50339-2dda-4991-90b5-7ff087975746/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Secondary Computer Science - Professional Development 2021-2022"" width="1200" height="1200" src="../../assets/img/accreditations/secondary_computer_science_professional_development_2021_2022.webp?h=813dd91393f904969bc3bf184007c8c2"></a></div><!-- End: NCCE Secondary 21-22 -->
|
||||
<!-- Start: NCCE Secondary 23-24 -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/e74f9011-4006-4570-824a-f483fdcb5b26/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Secondary Computing - Professional Development 2023-2024"" width="600" height="600" src="../../assets/img/accreditations/secondary_computing_professional_development_2023_2.webp?h=77ebf2880eb7d342016b83e098d92d23"></a></div><!-- End: NCCE Secondary 23-24 -->
|
||||
<!-- Start: NCCE GCSE Computer Science 19-20 -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/c73720d2-8208-4e2b-a1e5-c473961834d9/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " GCSE Computer Science: Professional Development 2019-2020"" width="1200" height="1200" src="../../assets/img/accreditations/gcse_computer_science_professional_development_2019_2020.webp?h=fef2cee3326aeff9e2f65e86cf5e4fee"></a></div><!-- End: NCCE GCSE Computer Science 19-20 -->
|
||||
<!-- Start: NCCE GCSE Computer Science 23-24 -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/c486279a-8e97-4779-90c1-56f09622e782/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " GCSE Computer Science - Professional Development 2022-2023"" width="2000" height="2000" src="../../assets/img/accreditations/gcse_computer_science_professional_development_2022_2023.webp?h=0a54c55717b61c0a0b4ed80582d7bfae"></a></div><!-- End: NCCE GCSE Computer Science 23-24 -->
|
||||
<!-- Start: NCCE GCSE Computer Science 23-24 -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/e76ed57f-2270-47f5-8e7e-4136baa261f3/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " GCSE Computer Science - Professional Development 2023-2024"" width="600" height="600" src="../../assets/img/accreditations/gcse_computer_science_professional_development_2023.webp?h=71b8c59772af539946fb49a210b05758"></a></div><!-- End: NCCE GCSE Computer Science 23-24 -->
|
||||
<!-- Start: NCCE A Level Computer Science 23-24 -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/418cfb22-3e37-4b24-b527-652b1ab6ea76/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " A-Level Computer Science - Professional Development 2023-2024"" width="600" height="600" src="../../assets/img/accreditations/a_level_computer_science_professional_development.webp?h=a9cc6f73abdf82ab49e5f8a8695cb557"></a></div><!-- End: NCCE A Level Computer Science 23-24 -->
|
||||
<!-- Start: MOS Master -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/0e46d6b8-1a1b-4d16-a5d5-3b95661fb290/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Microsoft Office Specialist: Master 2013"" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_master_2013.webp?h=70d957a5307d38f46b84b6462439afbc"></a></div><!-- End: MOS Master -->
|
||||
<!-- Start: MOS Word Expert -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/287d0ca4-bea1-4e18-b9e7-21f6a5d5d571/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Microsoft Office Specialist: Word 2013 Expert"" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_word_2013_expert.webp?h=5bd4ec8c82587201172a8b8e460ff4e6"></a></div><!-- End: MOS Word Expert -->
|
||||
<!-- Start: MOS Word -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/f1831f0e-776b-49aa-8a8d-05817d4b1410/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Microsoft Office Specialist: Word 2013"" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_word_2013.webp?h=2b90c5590b7b50f1891a9116fa38ac36"></a></div><!-- End: MOS Word -->
|
||||
<!-- Start: MOS Excel -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/2ab55353-3267-46cc-b3f4-3099af54d869/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Microsoft Office Specialist: Excel 2013"" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_excel_2013.webp?h=f016925633d0a52b862259a05b396b6a"></a></div><!-- End: MOS Excel -->
|
||||
<!-- Start: MOS PowerPoint -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/11162aa2-331a-4ec4-a612-665f3bc59cb1/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Microsoft Office Specialist: PowerPoint 2013"" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_powerpoint_2013.webp?h=26de9623c491661347998549e10d4353"></a></div><!-- End: MOS PowerPoint -->
|
||||
<!-- Start: MOS OneNote -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/cd328b1d-27b6-4410-be70-0792a99b72ea/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Microsoft Office Specialist: OneNote 2013"" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_onenote_2013.webp?h=2ffe41c2a6e37d602469f8158ef13d79"></a></div><!-- End: MOS OneNote -->
|
||||
<!-- Start: MTA Security -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/da3b3b4c-cec4-4537-bb5b-486ce9ee6ee7/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " MTA: Security Fundamentals - Certified 2016"" width="352" height="352" src="../../assets/img/accreditations/mta_security_fundamentals_certified_2016.webp?h=0df619419a5b6d0eb694dc9363870b20"></a></div><!-- End: MTA Security -->
|
||||
<!-- Start: MTA Networking -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/23194bfe-30e4-4f8e-b9ec-338d060136dd/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " MTA: Networking Fundamentals - Certified 2016"" width="352" height="352" src="../../assets/img/accreditations/mta_networking_fundamentals_certified_2016.webp?h=cdc4618c5e86d11aa304cae14c3942bc"></a></div><!-- End: MTA Networking -->
|
||||
<!-- Start: MTA Windows OS -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/f0f27d87-424b-49e8-a444-95086d640e66/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " MTA: Windows Operating System Fundamentals - Certified 2016"" width="352" height="352" src="../../assets/img/accreditations/mta_windows_operating_system_fundamentals_certified_2016.webp?h=44a6360480ef67ced301c697d31f9fa5"></a></div><!-- End: MTA Windows OS -->
|
||||
</div>
|
||||
</div>
|
||||
<div class="swiper-nav-standalone d-flex justify-content-center accreditations-navigation" data-bss-swiper-target="#light-swiper">
|
||||
<div class="swiper-button-prev"><button class="btn btn-primary btn-sm" type="button"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-arrow-left">
|
||||
<path fill-rule="evenodd" d="M15 8a.5.5 0 0 0-.5-.5H2.707l3.147-3.146a.5.5 0 1 0-.708-.708l-4 4a.5.5 0 0 0 0 .708l4 4a.5.5 0 0 0 .708-.708L2.707 8.5H14.5A.5.5 0 0 0 15 8"></path>
|
||||
</svg></button></div>
|
||||
<div class="swiper-button-next"><button class="btn btn-primary btn-sm" type="button"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-arrow-right">
|
||||
<path fill-rule="evenodd" d="M1 8a.5.5 0 0 1 .5-.5h11.793l-3.147-3.146a.5.5 0 0 1 .708-.708l4 4a.5.5 0 0 1 0 .708l-4 4a.5.5 0 0 1-.708-.708L13.293 8.5H1.5A.5.5 0 0 1 1 8"></path>
|
||||
</svg></button></div>
|
||||
</div>
|
||||
</div><!-- End: Accreditations -->
|
||||
<!-- Start: Spacer -->
|
||||
<div class="col-md-3 text-center text-lg-start d-flex flex-column"><a class="d-flex w-100 justify-content-center center-everything" href="https://client.brixly.uk/aff.php?aff=837" target="_blank"><img class="img-fluid object-fit-contain w-50" src="https://brixly.uk/wp-content/uploads/2022/06/Artboard-32.jpg"></a></div><!-- End: Spacer -->
|
||||
<div class="col-md-3 text-center text-lg-start d-flex flex-column align-items-center order-first align-items-lg-start order-lg-last">
|
||||
<div class="fw-bold d-flex align-items-center mb-2"><img alt="Stylised orange microchip icon on a black background, designed as a modern tech-themed logo for ADCM" src="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501" width="50" height="50" class="footer-logo"><span>Mr A Lyall</span></div>
|
||||
<p>IT professional and Head of Computing in the West Midlands</p>
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
<div class="d-flex justify-content-between align-items-center pt-3">
|
||||
<p class="mb-0 footer-copyright">Copyright © 2025 ADCM Networks</p>
|
||||
<ul class="list-inline mb-0">
|
||||
<!-- Start: Mastodon -->
|
||||
<li class="list-inline-item"><a rel="me" href="https://mstdn.social/@MrDavisCSIT"><svg class="text-body" xmlns="http://www.w3.org/2000/svg" viewBox="-32 0 512 512" width="1em" height="1em" fill="currentColor">
|
||||
<!--! Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. -->
|
||||
<path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"></path>
|
||||
</svg></a></li><!-- End: Mastodon -->
|
||||
<!-- Start: Bluesky -->
|
||||
<li class="list-inline-item"><a href="https://bsky.app/profile/adcmnetworks.co.uk"><i class="fa-brands fa-square-bluesky"></i></a></li><!-- End: Bluesky -->
|
||||
<!-- Start: LinkedIn -->
|
||||
<li class="list-inline-item"><a href="https://www.linkedin.com/in/MrDavisCSIT/"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-linkedin text-body">
|
||||
<path d="M0 1.146C0 .513.526 0 1.175 0h13.65C15.474 0 16 .513 16 1.146v13.708c0 .633-.526 1.146-1.175 1.146H1.175C.526 16 0 15.487 0 14.854V1.146zm4.943 12.248V6.169H2.542v7.225h2.401m-1.2-8.212c.837 0 1.358-.554 1.358-1.248-.015-.709-.52-1.248-1.342-1.248-.822 0-1.359.54-1.359 1.248 0 .694.521 1.248 1.327 1.248h.016zm4.908 8.212V9.359c0-.216.016-.432.08-.586.173-.431.568-.878 1.232-.878.869 0 1.216.662 1.216 1.634v3.865h2.401V9.25c0-2.22-1.184-3.252-2.764-3.252-1.274 0-1.845.7-2.165 1.193v.025h-.016a5.54 5.54 0 0 1 .016-.025V6.169h-2.4c.03.678 0 7.225 0 7.225h2.4"></path>
|
||||
</svg></a></li><!-- End: LinkedIn -->
|
||||
<!-- Start: GitHub -->
|
||||
<li class="list-inline-item"><a href="https://github.com/MrDavisCSIT"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-github text-body">
|
||||
<path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8"></path>
|
||||
</svg></a></li><!-- End: GitHub -->
|
||||
<!-- Start: Reddit -->
|
||||
<li class="list-inline-item"><a href="https://www.reddit.com/user/AlexanderEDavis95/"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-reddit text-body">
|
||||
<path d="M6.167 8a.831.831 0 0 0-.83.83c0 .459.372.84.83.831a.831.831 0 0 0 0-1.661m1.843 3.647c.315 0 1.403-.038 1.976-.611a.232.232 0 0 0 0-.306.213.213 0 0 0-.306 0c-.353.363-1.126.487-1.67.487-.545 0-1.308-.124-1.671-.487a.213.213 0 0 0-.306 0 .213.213 0 0 0 0 .306c.564.563 1.652.61 1.977.61zm.992-2.807c0 .458.373.83.831.83.458 0 .83-.381.83-.83a.831.831 0 0 0-1.66 0z"></path>
|
||||
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0m-3.828-1.165c-.315 0-.602.124-.812.325-.801-.573-1.9-.945-3.121-.993l.534-2.501 1.738.372a.83.83 0 1 0 .83-.869.83.83 0 0 0-.744.468l-1.938-.41a.203.203 0 0 0-.153.028.186.186 0 0 0-.086.134l-.592 2.788c-1.24.038-2.358.41-3.17.992-.21-.2-.496-.324-.81-.324a1.163 1.163 0 0 0-.478 2.224c-.02.115-.029.23-.029.353 0 1.795 2.091 3.256 4.669 3.256 2.577 0 4.668-1.451 4.668-3.256 0-.114-.01-.238-.029-.353.401-.181.688-.592.688-1.069 0-.65-.525-1.165-1.165-1.165z"></path>
|
||||
</svg></a></li><!-- End: Reddit -->
|
||||
<!-- Start: YouTube -->
|
||||
<li class="list-inline-item"><a href="https://www.youtube.com/channel/UCgDhiQMLbTemv2varDiW2rA"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-youtube text-body">
|
||||
<path d="M8.051 1.999h.089c.822.003 4.987.033 6.11.335a2.01 2.01 0 0 1 1.415 1.42c.101.38.172.883.22 1.402l.01.104.022.26.008.104c.065.914.073 1.77.074 1.957v.075c-.001.194-.01 1.108-.082 2.06l-.008.105-.009.104c-.05.572-.124 1.14-.235 1.558a2.007 2.007 0 0 1-1.415 1.42c-1.16.312-5.569.334-6.18.335h-.142c-.309 0-1.587-.006-2.927-.052l-.17-.006-.087-.004-.171-.007-.171-.007c-1.11-.049-2.167-.128-2.654-.26a2.007 2.007 0 0 1-1.415-1.419c-.111-.417-.185-.986-.235-1.558L.09 9.82l-.008-.104A31.4 31.4 0 0 1 0 7.68v-.123c.002-.215.01-.958.064-1.778l.007-.103.003-.052.008-.104.022-.26.01-.104c.048-.519.119-1.023.22-1.402a2.007 2.007 0 0 1 1.415-1.42c.487-.13 1.544-.21 2.654-.26l.17-.007.172-.006.086-.003.171-.007A99.788 99.788 0 0 1 7.858 2h.193zM6.4 5.209v4.818l4.157-2.408z"></path>
|
||||
</svg></a></li><!-- End: YouTube -->
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</footer><!-- End: Footer Multi Column -->
|
||||
<script>
|
||||
(function() {
|
||||
let collections = document.querySelectorAll('[data-bss-type="blog-loop"]');
|
||||
let tagNavs = document.querySelectorAll('[data-bss-type="tag-nav"]');
|
||||
let tagLoops = document.querySelectorAll('[data-bss-type="tag-loop"]');
|
||||
let authorLoops = document.querySelectorAll('[data-bss-type="author-loop"]');
|
||||
let authorNavs = document.querySelectorAll('[data-bss-type="author-nav"]');
|
||||
|
||||
window.addEventListener("popstate", (e) => {
|
||||
for (let collection of collections) {
|
||||
updateCollection(collection);
|
||||
}
|
||||
|
||||
for (let tagNav of tagNavs) {
|
||||
updateTagNav(tagNav);
|
||||
}
|
||||
|
||||
for (let authorNav of authorNavs) {
|
||||
updateAuthorNav(authorNav);
|
||||
}
|
||||
});
|
||||
|
||||
for (let collection of collections) {
|
||||
|
||||
updateCollection(collection);
|
||||
|
||||
if (!canPaginateCollection(collection)) continue;
|
||||
|
||||
let pagination = collection.querySelector('[data-bss-type="blog-loop-pagination"]');
|
||||
|
||||
pagination.addEventListener('click', function(e) {
|
||||
let paginationItem = e.target.closest('.page-item');
|
||||
if (!paginationItem) return;
|
||||
|
||||
e.preventDefault();
|
||||
|
||||
if (paginationItem.classList.contains('disabled') || paginationItem.classList.contains('active')) return;
|
||||
|
||||
let collection = paginationItem.closest('[data-bss-type="blog-loop"]');
|
||||
if (!collection) return;
|
||||
|
||||
let page = parseInt(paginationItem.dataset.page);
|
||||
if (!page) return;
|
||||
|
||||
let pageParam = getPageParameter(collection);
|
||||
|
||||
if (pageParam) {
|
||||
const url = new URL(window.location);
|
||||
url.searchParams.set(pageParam, page);
|
||||
history.pushState({
|
||||
[pageParam]: page
|
||||
}, document.title, url);
|
||||
|
||||
for (let c of collections) {
|
||||
let param = getPageParameter(c);
|
||||
if (param !== pageParam) continue;
|
||||
updateCollection(c);
|
||||
}
|
||||
} else {
|
||||
updateCollection(collection, page);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
for (let tagNav of tagNavs) {
|
||||
updateTagNav(tagNav);
|
||||
tagNav.addEventListener('click', onTagClick);
|
||||
}
|
||||
|
||||
for (let tagLoop of tagLoops) {
|
||||
tagLoop.addEventListener('click', onTagClick);
|
||||
}
|
||||
|
||||
for (let authorLoop of authorLoops) {
|
||||
authorLoop.addEventListener('click', onAuthorClick);
|
||||
}
|
||||
|
||||
for (let authorNav of authorNavs) {
|
||||
updateAuthorNav(authorNav);
|
||||
}
|
||||
|
||||
function onTagClick(e) {
|
||||
onBlogFilterClick(e);
|
||||
|
||||
for (let nav of tagNavs) {
|
||||
updateTagNav(nav);
|
||||
}
|
||||
}
|
||||
|
||||
function onAuthorClick(e) {
|
||||
onBlogFilterClick(e);
|
||||
|
||||
for (let authorNav of authorNavs) {
|
||||
updateAuthorNav(authorNav);
|
||||
}
|
||||
}
|
||||
|
||||
function onBlogFilterClick(e) {
|
||||
const item = e.target.closest('[data-bss-filter="blog"]');
|
||||
if (!item || !item.dataset.hasOwnProperty('bssHref') || !item.dataset.hasOwnProperty('bssFilterParam')) return;
|
||||
|
||||
const stateNode = item.dataset.hasOwnProperty('bssStateNode') ? item : item.querySelector('[data-bss-state-node]');
|
||||
|
||||
if (stateNode && (stateNode.classList.contains('disabled') || stateNode.classList.contains('active'))) {
|
||||
e.preventDefault();
|
||||
return;
|
||||
}
|
||||
|
||||
const link = item.dataset.bssHref;
|
||||
if (!linksToCurrentPage(link)) return;
|
||||
|
||||
e.preventDefault();
|
||||
|
||||
const url = new URL(window.location);
|
||||
const filterParam = item.dataset.bssFilterParam;
|
||||
const filterValue = item.dataset.bssFilterValue || '';
|
||||
|
||||
const collectionsToUpdate = [];
|
||||
const newQueryParams = {
|
||||
[filterParam]: filterValue
|
||||
};
|
||||
|
||||
for (let c of collections) {
|
||||
if (!canFilterCollection(c)) continue;
|
||||
collectionsToUpdate.push(c);
|
||||
|
||||
let pageParam = getPageParameter(c);
|
||||
let page = url.searchParams.get(pageParam);
|
||||
if (page === null || page == 1) continue;
|
||||
|
||||
newQueryParams[pageParam] = 1;
|
||||
}
|
||||
|
||||
for (let param in newQueryParams) {
|
||||
if (newQueryParams[param]) {
|
||||
url.searchParams.set(param, newQueryParams[param]);
|
||||
} else {
|
||||
url.searchParams.delete(param);
|
||||
}
|
||||
}
|
||||
|
||||
history.pushState(newQueryParams, document.title, url);
|
||||
|
||||
for (let c of collectionsToUpdate) {
|
||||
updateCollection(c);
|
||||
}
|
||||
}
|
||||
|
||||
function getCollectionFilters(collection) {
|
||||
let filters = [];
|
||||
|
||||
try {
|
||||
const parsed = JSON.parse(collection.dataset.bssFilters);
|
||||
|
||||
if (Array.isArray(parsed)) {
|
||||
filters = parsed;
|
||||
}
|
||||
} catch (e) {}
|
||||
|
||||
return filters;
|
||||
}
|
||||
|
||||
function getCollectionEmptyFilterAction(collection, filter = '') {
|
||||
let emptyFilterActions = [];
|
||||
|
||||
try {
|
||||
const parsed = JSON.parse(collection.dataset.bssEmptyFilterActions);
|
||||
|
||||
if (Array.isArray(parsed)) {
|
||||
emptyFilterActions = parsed;
|
||||
}
|
||||
} catch (e) {}
|
||||
|
||||
const action = emptyFilterActions.find(action => action.filter === filter);
|
||||
|
||||
return action ? action.value : '';
|
||||
}
|
||||
|
||||
function canFilterCollection(collection) {
|
||||
return !!getCollectionFilters(collection).length;
|
||||
}
|
||||
|
||||
function canFilterCollectionByTag(collection) {
|
||||
return getCollectionFilters(collection).includes('tag');
|
||||
}
|
||||
|
||||
function canFilterCollectionByAuthor(collection) {
|
||||
return getCollectionFilters(collection).includes('author');
|
||||
}
|
||||
|
||||
function shouldShowAllItemsForEmptyFilter(collection, filter = '') {
|
||||
return getCollectionEmptyFilterAction(collection, filter) === 'show-all';
|
||||
}
|
||||
|
||||
function canPaginateCollection(collection) {
|
||||
return !!getCollectionPagination(collection);
|
||||
}
|
||||
|
||||
function getCollectionPagination(collection) {
|
||||
return collection.querySelector('[data-bss-type="blog-loop-pagination"]');
|
||||
}
|
||||
|
||||
function getPageParameter(collection) {
|
||||
return collection.dataset.bssPageParam;
|
||||
}
|
||||
|
||||
function linksToCurrentPage(path = '') {
|
||||
let currentURL, url;
|
||||
|
||||
try {
|
||||
currentURL = new URL(window.location);
|
||||
url = new URL(path, window.location.href);
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
}
|
||||
|
||||
return currentURL.origin === url.origin && currentURL.pathname === url.pathname;
|
||||
}
|
||||
|
||||
function updateCollection(collection, page, activeTag = '', activeAuthor = '') {
|
||||
|
||||
const url = new URL(window.location.href);
|
||||
|
||||
if (canPaginateCollection(collection)) {
|
||||
if (!page) {
|
||||
let pageParam = getPageParameter(collection);
|
||||
page = (pageParam ? url.searchParams.get(pageParam) : 1) || 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (canFilterCollectionByTag(collection) && !activeTag) {
|
||||
let tagParam = 'tag';
|
||||
activeTag = url.searchParams.get(tagParam) || '';
|
||||
}
|
||||
|
||||
if (canFilterCollectionByAuthor(collection) && !activeAuthor) {
|
||||
let authorParam = 'author';
|
||||
activeAuthor = url.searchParams.get(authorParam) || '';
|
||||
}
|
||||
|
||||
renderCollectionPage(collection, page, activeTag, activeAuthor);
|
||||
}
|
||||
|
||||
function renderCollectionPage(collection, page = 1, activeTag = '', activeAuthor = '') {
|
||||
|
||||
page = Math.max(parseInt(page, 10), 1);
|
||||
|
||||
collection.style.removeProperty('display');
|
||||
|
||||
let loopBase = collection.querySelector('[data-bss-type="blog-loop-base"]');
|
||||
loopBase && loopBase.style.removeProperty('display');
|
||||
|
||||
let emptyState = collection.querySelector('[data-bss-type="empty-state"]');
|
||||
emptyState && emptyState.style.setProperty('display', 'none', 'important');
|
||||
|
||||
let listItems = [].slice.call(collection.querySelectorAll('[data-bss-type="blog-loop-item"]'));
|
||||
listItems.forEach(item => item.style.setProperty('display', 'none', 'important'));
|
||||
|
||||
if (canFilterCollectionByTag(collection)) {
|
||||
listItems = listItems.filter(item => activeTag ? item.classList.contains('post-tag-' + activeTag) : shouldShowAllItemsForEmptyFilter(collection, 'tag'));
|
||||
}
|
||||
|
||||
if (canFilterCollectionByAuthor(collection)) {
|
||||
listItems = listItems.filter(item => activeAuthor ? item.classList.contains('post-author-' + activeAuthor) : shouldShowAllItemsForEmptyFilter(collection, 'author'));
|
||||
}
|
||||
|
||||
let perPage = collection.dataset.bssPerpage || listItems.length;
|
||||
let visibleListItems = listItems.slice((page - 1) * perPage, page * perPage);
|
||||
visibleListItems.forEach(item => item.style.removeProperty('display'));
|
||||
|
||||
let isEmpty = !visibleListItems.length;
|
||||
|
||||
if (isEmpty) {
|
||||
loopBase && loopBase.style.setProperty('display', 'none', 'important');
|
||||
emptyState && emptyState.style.removeProperty('display');
|
||||
}
|
||||
|
||||
let itemCount = listItems.length;
|
||||
let pageCount = Math.max(Math.ceil(itemCount / perPage), 1);
|
||||
|
||||
updateCollectionPagination(collection, page, pageCount, isEmpty);
|
||||
|
||||
if (collection.dataset.bssScrollOnChange) {
|
||||
scrollToCollectionTop(collection);
|
||||
}
|
||||
}
|
||||
|
||||
function updateCollectionPagination(collection, page, pageCount, isEmpty) {
|
||||
let pagination = getCollectionPagination(collection);
|
||||
if (!pagination) return;
|
||||
|
||||
let paginationItems = [].slice.call(pagination.querySelectorAll('.page-item'));
|
||||
|
||||
if (pageCount === 1 || isEmpty) {
|
||||
pagination.style.setProperty('display', 'none', 'important');
|
||||
} else {
|
||||
pagination.style.removeProperty('display');
|
||||
}
|
||||
|
||||
let previousBtnDisabled = page - 1 <= 0;
|
||||
let previousPage = previousBtnDisabled ? 1 : page - 1;
|
||||
|
||||
let nextBtnDisabled = page + 1 > pageCount;
|
||||
let nextPage = nextBtnDisabled ? pageCount : page + 1;
|
||||
|
||||
for (let i = 0; i < paginationItems.length; i++) {
|
||||
let paginationItem = paginationItems[i];
|
||||
|
||||
paginationItem.classList.remove('active', 'disabled');
|
||||
|
||||
if (paginationItem.dataset.type === 'prev') {
|
||||
paginationItem.dataset.page = previousPage;
|
||||
|
||||
if (previousBtnDisabled) {
|
||||
paginationItem.classList.add('disabled');
|
||||
}
|
||||
} else if (paginationItem.dataset.type === 'next') {
|
||||
paginationItem.dataset.page = nextPage;
|
||||
|
||||
if (nextBtnDisabled) {
|
||||
paginationItem.classList.add('disabled');
|
||||
}
|
||||
} else {
|
||||
if (paginationItem.dataset.page > pageCount) {
|
||||
paginationItem.style.setProperty('display', 'none', 'important');
|
||||
} else {
|
||||
paginationItem.style.removeProperty('display');
|
||||
}
|
||||
|
||||
if (paginationItem.dataset.page == page) {
|
||||
paginationItem.classList.add('active');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function scrollToCollectionTop(collection) {
|
||||
const rect = collection.getBoundingClientRect();
|
||||
const viewHeight = Math.max(document.documentElement.clientHeight, window.innerHeight);
|
||||
const threshold = 100;
|
||||
|
||||
if (rect.top >= 0 && viewHeight - rect.top > threshold) return;
|
||||
|
||||
setTimeout(() => {
|
||||
collection.scrollIntoView({
|
||||
behavior: "smooth",
|
||||
block: "start",
|
||||
inline: "start"
|
||||
});
|
||||
}, 0);
|
||||
}
|
||||
|
||||
function updateTagNav(tagNav) {
|
||||
const url = new URL(window.location.href);
|
||||
|
||||
let tagParam = 'tag';
|
||||
let tag = url.searchParams.get(tagParam) || '';
|
||||
|
||||
renderTagNav(tagNav, tag);
|
||||
}
|
||||
|
||||
function renderTagNav(tagNav, activeTag = '') {
|
||||
if (!tagNav.dataset.bssSyncUrl) return;
|
||||
|
||||
let navItems = [].slice.call(tagNav.querySelectorAll('[data-bss-type="tag-loop-item"]'));
|
||||
|
||||
navItems.forEach(item => {
|
||||
const activeClassNode = item.dataset.hasOwnProperty('bssStateNode') ? item : item.querySelector('[data-bss-state-node]');
|
||||
if (!activeClassNode) return;
|
||||
|
||||
activeClassNode.classList.remove('active');
|
||||
|
||||
const link = item.dataset.bssHref;
|
||||
if (!linksToCurrentPage(link) || activeClassNode.classList.contains('disabled')) return;
|
||||
|
||||
if (item.dataset.bssTag === activeTag) {
|
||||
activeClassNode.classList.add('active');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function updateAuthorNav(authorNav) {
|
||||
const url = new URL(window.location.href);
|
||||
|
||||
let authorParam = 'author';
|
||||
let author = url.searchParams.get(authorParam) || '';
|
||||
|
||||
renderAuthorNav(authorNav, author);
|
||||
}
|
||||
|
||||
function renderAuthorNav(authorNav, activeAuthor = '') {
|
||||
if (!canFilterCollectionByAuthor(authorNav)) return;
|
||||
|
||||
authorNav.style.removeProperty('display');
|
||||
|
||||
let items = [].slice.call(authorNav.querySelectorAll('[data-bss-type="author-loop-item"]'));
|
||||
items.forEach(item => item.classList.contains('author-' + activeAuthor) ? item.style.removeProperty('display') : item.style.setProperty('display', 'none', 'important'));
|
||||
}
|
||||
})();
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.6/dist/js/bootstrap.bundle.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.js"></script>
|
||||
<script src="../../assets/js/bs-init.js?h=7c6b4c49b8ac0f383799ccb3d5def770"></script>
|
||||
<script src="../../assets/js/Carousel---Slider-With-Animation-slider_with_animation.js?h=948f8788fd189b5cc9df01ff4fce4152"></script>
|
||||
<script src="../../assets/js/CookieConsentComponent-cookieconsent.js?h=83fbb3192473604d72b00a854c6de4fd"></script>
|
||||
<script src="https://kit.fontawesome.com/8970d94f9b.js"></script>
|
||||
<script src="../../assets/js/pikaday.min.js?h=039feef26d52ebc5f1260a47208bfa38"></script>
|
||||
<script src="../../assets/js/text-carousel.js?h=992f402828c7806b1f3bb7f29232e972"></script>
|
||||
<script src="../../assets/js/theme.js?h=aeddb9c3ce5d77b8278c91c07acf30ad"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
776
Export/my-work/projects-for-education/csbox.html
Normal file
776
Export/my-work/projects-for-education/csbox.html
Normal file
@@ -0,0 +1,776 @@
|
||||
<!DOCTYPE html>
|
||||
<html data-bs-theme="auto" lang="en-gb">
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<!-- Matomo -->
|
||||
<script>
|
||||
var _paq = window._paq = window._paq || [];
|
||||
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
|
||||
_paq.push(['trackPageView']);
|
||||
_paq.push(['enableLinkTracking']);
|
||||
(function() {
|
||||
var u="//analytics.adcmnetworks.co.uk/";
|
||||
_paq.push(['setTrackerUrl', u+'matomo.php']);
|
||||
_paq.push(['setSiteId', '1']);
|
||||
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
|
||||
g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
|
||||
})();
|
||||
</script>
|
||||
<!-- End Matomo Code -->
|
||||
|
||||
<script src="https://kit.fontawesome.com/8970d94f9b.js" crossorigin="anonymous"></script>
|
||||
|
||||
<meta name="fediverse:creator" content="@MrDavisCSIT@mstdn.social">
|
||||
<script src="https://cms.tahdah.me/scripts/publicbadge.js"></script>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
|
||||
<title>CS:Box</title>
|
||||
<link rel="canonical" href="https://www.mrlyall.uk/my-work/projects-for-education/csbox.html">
|
||||
<meta property="og:url" content="https://www.mrlyall.uk/my-work/projects-for-education/csbox.html">
|
||||
<meta name="twitter:description" content="The website of Mr. A. Lyall, featuring a portfolio of work in computing education, digital projects, and curriculum resources. Explore blog posts, classroom tools, and professional insights focused on innovation, inclusion, and effective IT teaching.">
|
||||
<meta name="twitter:card" content="summary">
|
||||
<meta property="og:type" content="website">
|
||||
<meta name="twitter:title" content="Mr Lyall">
|
||||
<meta property="og:image" content="https://www.mrlyall.uk/assets/img/projects/for_education/cs_box/csbox_logo.webp">
|
||||
<meta name="description" content="Interactive educational tool expanding Bit:Box to include additional UK Computing Curriculum topics.">
|
||||
<script>
|
||||
(function() {
|
||||
|
||||
// JavaScript snippet handling Dark/Light mode switching
|
||||
|
||||
const getStoredTheme = () => localStorage.getItem('theme');
|
||||
const setStoredTheme = theme => localStorage.setItem('theme', theme);
|
||||
const forcedTheme = document.documentElement.getAttribute('data-bss-forced-theme');
|
||||
|
||||
const getPreferredTheme = () => {
|
||||
|
||||
if (forcedTheme) return forcedTheme;
|
||||
|
||||
const storedTheme = getStoredTheme();
|
||||
if (storedTheme) {
|
||||
return storedTheme;
|
||||
}
|
||||
|
||||
const pageTheme = document.documentElement.getAttribute('data-bs-theme');
|
||||
|
||||
if (pageTheme) {
|
||||
return pageTheme;
|
||||
}
|
||||
|
||||
return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
|
||||
}
|
||||
|
||||
const setTheme = theme => {
|
||||
if (theme === 'auto' && window.matchMedia('(prefers-color-scheme: dark)').matches) {
|
||||
document.documentElement.setAttribute('data-bs-theme', 'dark');
|
||||
} else {
|
||||
document.documentElement.setAttribute('data-bs-theme', theme);
|
||||
}
|
||||
}
|
||||
|
||||
setTheme(getPreferredTheme());
|
||||
|
||||
const showActiveTheme = (theme, focus = false) => {
|
||||
const themeSwitchers = [].slice.call(document.querySelectorAll('.theme-switcher'));
|
||||
|
||||
if (!themeSwitchers.length) return;
|
||||
|
||||
document.querySelectorAll('[data-bs-theme-value]').forEach(element => {
|
||||
element.classList.remove('active');
|
||||
element.setAttribute('aria-pressed', 'false');
|
||||
});
|
||||
|
||||
for (const themeSwitcher of themeSwitchers) {
|
||||
|
||||
const btnToActivate = themeSwitcher.querySelector('[data-bs-theme-value="' + theme + '"]');
|
||||
|
||||
if (btnToActivate) {
|
||||
btnToActivate.classList.add('active');
|
||||
btnToActivate.setAttribute('aria-pressed', 'true');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => {
|
||||
const storedTheme = getStoredTheme();
|
||||
if (storedTheme !== 'light' && storedTheme !== 'dark') {
|
||||
setTheme(getPreferredTheme());
|
||||
}
|
||||
});
|
||||
|
||||
window.addEventListener('DOMContentLoaded', () => {
|
||||
showActiveTheme(getPreferredTheme());
|
||||
|
||||
document.querySelectorAll('[data-bs-theme-value]')
|
||||
.forEach(toggle => {
|
||||
toggle.addEventListener('click', (e) => {
|
||||
e.preventDefault();
|
||||
const theme = toggle.getAttribute('data-bs-theme-value');
|
||||
setStoredTheme(theme);
|
||||
setTheme(theme);
|
||||
showActiveTheme(theme);
|
||||
})
|
||||
})
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
|
||||
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_white.webp?h=7cd31e9469bb0f9d3a4e704b3c0b1445" media="(prefers-color-scheme: dark)">
|
||||
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
|
||||
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_white.webp?h=7cd31e9469bb0f9d3a4e704b3c0b1445" media="(prefers-color-scheme: dark)">
|
||||
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
|
||||
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
|
||||
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
|
||||
<link rel="stylesheet" href="../../assets/bootstrap/css/bootstrap.min.css?h=c9d969cca6f72ca8d4dfd457f2e8eff8">
|
||||
<link rel="stylesheet" href="../../assets/css/Lato.css?h=69bc5b06794edd4ca9a38642d36c83d0">
|
||||
<link rel="stylesheet" href="../../assets/css/bss-overrides.css?h=15b91a8988c8fc6448a8989802a159de">
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.css">
|
||||
<link rel="stylesheet" href="../../assets/css/styles.css?h=7c67e1bb3df4cb41abaceaf312f03dfa">
|
||||
<link rel="stylesheet" href="../../assets/css/pikaday.min.css?h=a9ab8ca627aa6e8f64b730ca9c2c781d">
|
||||
<link rel="stylesheet" href="../../assets/css/CookieConsentComponent.css?h=39af3305e95f4d2a8883e97d7e0cdb14">
|
||||
<link rel="stylesheet" href="../../assets/css/animations.compiled.css?h=49917e33fe831aa33e24fb1e8124fdd9">
|
||||
<link rel="stylesheet" href="../../assets/css/Carousel---Slider-With-Animation.css?h=63f5768f05d2ae91446ac010bcd4844a">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<nav class="navbar navbar-expand-md fixed-top portfolio-navbar gradient navbar-dark">
|
||||
<div class="container-fluid"><a class="navbar-brand logo" href="../../"><img alt="Stylised white microchip icon on a black background, designed as a modern tech-themed logo for ADCM" src="../../assets/img/brand/adcm_logo_white.webp?h=7cd31e9469bb0f9d3a4e704b3c0b1445" width="50" height="50" class="mobile-padding-left"></a><button data-bs-toggle="collapse" class="navbar-toggler" data-bs-target="#navbarNav" style="margin-right: 0.5em;"><span class="visually-hidden">Toggle navigation</span><span class="navbar-toggler-icon"></span></button>
|
||||
<div class="collapse navbar-collapse" id="navbarNav">
|
||||
<ul class="navbar-nav ms-auto">
|
||||
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../">Home</a></li>
|
||||
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../about">About</a></li>
|
||||
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../projects">My Work</a></li>
|
||||
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../my-work/showreel">Showreel</a></li>
|
||||
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../blog">Blog</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
<main class="page">
|
||||
<section class="portfolio-block block-intro">
|
||||
<div class="container center-everything">
|
||||
<!-- Start: portfolio heading -->
|
||||
<div class="align-content-center heading blog-heading csbox-web">
|
||||
<h2>CS:Box</h2>
|
||||
<p>Interactive educational tool expanding Bit:Box to include additional UK Computing Curriculum topics.</p>
|
||||
</div><!-- End: portfolio heading -->
|
||||
</div>
|
||||
</section>
|
||||
<section class="portfolio-block project">
|
||||
<div class="container center-everything">
|
||||
<div class="carousel slide carousel-fade project-carousel" data-bs-ride="carousel" id="carousel-1">
|
||||
<div class="carousel-inner">
|
||||
<div class="carousel-item active"><img class="img-fluid w-100 d-block slider-image-fit" alt="Homepage of CS:Box showing navigation menu and overview of interactive computing tools." width="1788" height="1054" src="../../assets/img/projects/for_education/cs_box/csbox_homepage.webp?h=5f6153bff07499f4d1108de6fea419f5"></div>
|
||||
<div class="carousel-item"><img class="img-fluid w-100 d-block slider-image-fit" alt="Screenshot of CS:Box tool demonstrating unsigned binary number conversion." width="1788" height="966" src="../../assets/img/projects/for_education/cs_box/csbox_unsigned_binary.webp?h=5eb69e749af167f24a913749394d5fef"></div>
|
||||
<div class="carousel-item"><img class="img-fluid w-100 d-block slider-image-fit" alt="Screenshot of CS:Box hexadecimal tool designed for GCSE-level hexadecimal practice." width="1788" height="996" src="../../assets/img/projects/for_education/cs_box/csbox_gcse_hexadecimal.webp?h=7e7badf7ca8e86ba97c0fca68fa32e4f"></div>
|
||||
<div class="carousel-item"><img class="img-fluid w-100 d-block slider-image-fit" alt="Screenshot of CS:Box hexadecimal conversion interface tailored for A Level content." width="1788" height="966" src="../../assets/img/projects/for_education/cs_box/csbox_a_level_hexadecimal.webp?h=b16484ec8a4f2c67cb10abc298ffecb1"></div>
|
||||
<div class="carousel-item"><img class="img-fluid w-100 d-block slider-image-fit" alt="CS:Box interface showing hexadecimal colour codes and visual colour output." width="1788" height="1231" src="../../assets/img/projects/for_education/cs_box/csbox_hex_colours.webp?h=eddec35478699a812a6fe5ef1e87a615"></div>
|
||||
<div class="carousel-item"><img class="img-fluid w-100 d-block slider-image-fit" alt="Screenshot of CS:Box interface simulating a NOT gate with single input logic." width="1788" height="1000" src="../../assets/img/projects/for_education/cs_box/csbox_not_gate.webp?h=93d70cfde70f5da05178684b0a11d651"></div>
|
||||
<div class="carousel-item"><img class="img-fluid w-100 d-block slider-image-fit" alt="CS:Box logic simulator displaying an AND gate with input and output states." width="1788" height="1000" src="../../assets/img/projects/for_education/cs_box/csbox_and_gate.webp?h=4d5bef802d59008314a99fbc6a139940"></div>
|
||||
<div class="carousel-item"><img class="img-fluid w-100 d-block slider-image-fit" alt="CS:Box simulator showing an OR gate with dual inputs and visual output." width="1788" height="1000" src="../../assets/img/projects/for_education/cs_box/csbox_or_gate.webp?h=03710eb93b2bfc0e53a77100222e1588"></div>
|
||||
<div class="carousel-item"><img class="img-fluid w-100 d-block slider-image-fit" alt="CS:Box logic simulator displaying a NOR gate with its corresponding logic table." width="1788" height="1000" src="../../assets/img/projects/for_education/cs_box/csbox_nor_gate.webp?h=017db5863c1502c378e0d274abbd278e"></div>
|
||||
<div class="carousel-item"><img class="img-fluid w-100 d-block slider-image-fit" alt="CS:Box logic simulator view showing a NAND gate in use with logic inputs." width="1788" height="1000" src="../../assets/img/projects/for_education/cs_box/csbox_nand_gate.webp?h=2b708827766ee58c88d0d7ea987c1ddd"></div>
|
||||
<div class="carousel-item"><img class="img-fluid w-100 d-block slider-image-fit" alt="A dark-themed web interface displaying an XOR logic gate simulator. Two red toggle switches on the left are set to 0, leading into the gate, which outputs to a faded, unlit bulb on the right. A yellow "Reset" button sits below the gate. The navigation bar includes links to Home, About, Binary, Hexadecimal, Hex Colours, and Logic Gates." width="1788" height="1000" src="../../assets/img/projects/for_education/cs_box/csbox_xor_gate.webp?h=82a0b80343c662282adf370f58c88bc1"></div>
|
||||
<div class="carousel-item"><img class="img-fluid w-100 d-block slider-image-fit" alt="A dark-themed web interface showing an XNOR logic gate simulator. Two red input buttons on the left are set to 0, leading into the XNOR gate. On the right, a lit yellow lightbulb indicates the gate’s output. A yellow "Reset" button is below the gate. The same site navigation bar appears at the top." width="1788" height="1000" src="../../assets/img/projects/for_education/cs_box/csbox_xnor_gate.webp?h=f841913539eea69cea802e03dc7cb7ce"></div>
|
||||
</div>
|
||||
<div>
|
||||
<!-- Start: Previous --><a class="carousel-control-prev" href="#carousel-1" role="button" data-bs-slide="prev"><span class="carousel-control-prev-icon"></span><span class="visually-hidden">Previous</span></a><!-- End: Previous -->
|
||||
<!-- Start: Next --><a class="carousel-control-next" href="#carousel-1" role="button" data-bs-slide="next"><span class="carousel-control-next-icon"></span><span class="visually-hidden">Next</span></a><!-- End: Next -->
|
||||
</div>
|
||||
<div class="carousel-indicators focus-ring"><button type="button" data-bs-target="#carousel-1" data-bs-slide-to="0" class="active"></button> <button type="button" data-bs-target="#carousel-1" data-bs-slide-to="1"></button> <button type="button" data-bs-target="#carousel-1" data-bs-slide-to="2"></button> <button type="button" data-bs-target="#carousel-1" data-bs-slide-to="3"></button> <button type="button" data-bs-target="#carousel-1" data-bs-slide-to="4"></button> <button type="button" data-bs-target="#carousel-1" data-bs-slide-to="5"></button> <button type="button" data-bs-target="#carousel-1" data-bs-slide-to="6"></button> <button type="button" data-bs-target="#carousel-1" data-bs-slide-to="7"></button> <button type="button" data-bs-target="#carousel-1" data-bs-slide-to="8"></button> <button type="button" data-bs-target="#carousel-1" data-bs-slide-to="9"></button> <button type="button" data-bs-target="#carousel-1" data-bs-slide-to="10"></button> <button type="button" data-bs-target="#carousel-1" data-bs-slide-to="11"></button></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col info">
|
||||
<p>CS:Box is an innovative educational tool designed to support the teaching of key concepts from the UK Computing Curriculum. Building on the foundations of Bit:Box, CS:Box expands its scope to cover a wider range of essential computing topics, providing an interactive and engaging experience for students.<br><br>CS:Box is more than a collection of interactive tools — it is a guided learning experience for students to understand complex computing concepts. By combining hands-on manipulation with visual feedback, it provides a scaffolded learning approach for students at different stages of their educational journey.</p>
|
||||
</div>
|
||||
<div class="col-auto meta project-details">
|
||||
<div class="tags"><span class="meta-heading">Project Status</span><span>Ongoing</span><span class="meta-heading">Launched</span><span>April 2023</span><span class="meta-heading">Products Created</span><span>Website</span><a class="btn btn-primary project-buttons" role="button" href="https://csbox.mrdaviscsit.uk/" target="_blank">View Project Website</a><a class="btn btn-primary project-buttons" role="button" href="https://gitea.adcmnetworks.co.uk/MrDavisCSIT/CS-Box" target="_blank">View Project on Gitea</a></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="more-projects">
|
||||
<h3 class="text-center more-projects-heading">More Projects</h3>
|
||||
<div data-bss-type="blog-loop" data-bss-perpage="3" style="display: none !important;">
|
||||
<div class="row gy-4 row-cols-1 row-cols-sm-2 row-cols-md-2 row-cols-lg-3 mt-0" data-bss-type="blog-loop-base">
|
||||
<div class="post-tag-projects-for-education col" data-bss-type="blog-loop-item">
|
||||
<div class="card"><a href="bitbox.html"><img class="img-fluid card-img-top rainbow-border" alt="Square logo with the text "Bit:Box" and a pixelated lightbulb icon." width="1080" height="1080" src="../../assets/img/projects/for_education/bit_box/bit_box_logo.webp?h=36b5ef1a4c9f880d65df48518293999f"></a>
|
||||
<div class="card-body"><a href="bitbox.html">
|
||||
<h4 class="text-body">Bit:Box</h4>
|
||||
</a>
|
||||
<p class="card-text">Educational device, app, and website using switches and lights to visually demonstrate binary logic.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="post-tag-projects-for-education col" data-bss-type="blog-loop-item">
|
||||
<div class="card"><a href="my-mind.html"><img class="img-fluid card-img-top rainbow-border" alt="Polygonal-style graphic of a human brain in shades of pink and red on a purple background." width="338" height="338" src="../../assets/img/projects/for_education/my_mind/my_mind_logo.webp?h=4e299b8017d1483b6dfb87ea14d502aa"></a>
|
||||
<div class="card-body"><a href="my-mind.html">
|
||||
<h4 class="text-body">My Mind</h4>
|
||||
</a>
|
||||
<p class="card-text">App simplifying BCU mental health support, linking students to counsellors, emergency calls, forums.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="post-tag-projects-for-education col" data-bss-type="blog-loop-item">
|
||||
<div class="card"><a href="nature-findings.html"><img class="img-fluid card-img-top rainbow-border" alt="Interface of the Nature Findings app showing options to add new findings, edit a life list, and access a knowledge base search, with a pale blue background and stylised headings." width="940" height="500" src="../../assets/img/projects/for_education/nature_findings/naturefindingspreview.webp?h=a1d20406f8862370fbf569a75cf95af9"></a>
|
||||
<div class="card-body"><a href="nature-findings.html">
|
||||
<h4 class="text-body">Nature Findings</h4>
|
||||
</a>
|
||||
<p class="card-text">Windows app to record bird sightings during walks. Submitted as a final year computing project task.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="post-tag-projects-for-education col" data-bss-type="blog-loop-item" style="display: none !important;">
|
||||
<div class="card"><a href="task-master-ios.html"><img class="img-fluid card-img-top rainbow-border" alt="Square cropped version of the Task Master logo, showing the checkbox with the tick and the “Task Master” label on a bright green background." width="940" height="500" src="../../assets/img/projects/for_education/taskmaster_for%20ios/taskmasteriospreview.webp?h=b62eff0bef2a6734f8e4ac9ad05f103c"></a>
|
||||
<div class="card-body"><a href="task-master-ios.html">
|
||||
<h4 class="text-body">Task Master for iOS</h4>
|
||||
</a>
|
||||
<p class="card-text">iOS app based on BrumHack 5.0 entry. Helps businesses manage, assign, and track their project tasks.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<nav class="d-flex justify-content-center mt-3" data-bss-type="blog-loop-pagination">
|
||||
<ul class="pagination">
|
||||
<li class="page-item disabled" data-type="prev" data-page="1"><a class="page-link" aria-label="Previous" href="#"><span aria-hidden="true">«</span></a></li>
|
||||
<li class="page-item active" data-type="regular" data-page="1"><a class="page-link" href="#">1</a></li>
|
||||
<li class="page-item" data-type="regular" data-page="2"><a class="page-link" href="#">2</a></li>
|
||||
<li class="page-item" data-type="next" data-page="2"><a class="page-link" aria-label="Next" href="#"><span aria-hidden="true">»</span></a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</main><!-- Start: Footer Multi Column -->
|
||||
<footer class="text-body bg-body" id="Light-Footer">
|
||||
<div class="container py-4 py-lg-5 center-everything">
|
||||
<div class="row justify-content-center">
|
||||
<!-- Start: Accreditations -->
|
||||
<div class="col-sm-3 col-md-6 text-center text-lg-start d-none d-sm-none d-md-none d-lg-flex flex-column">
|
||||
<h3 class="fs-6 text-center text-body accreditations-title">Accreditations</h3>
|
||||
<div class="swiper text-body w-100" id="light-swiper" data-bss-swiper="{"direction":"horizontal","loop":true,"autoplay":{"pauseOnMouseEnter":true},"autoHeight":true,"effect":"fade","fadeEffect":{"crossFade":true}}">
|
||||
<div class="swiper-wrapper">
|
||||
<!-- Start: Mountain Training -->
|
||||
<div class="swiper-slide d-flex justify-content-center center-everything">
|
||||
<div class="tahdah-badge" data-candidateid="1466454"></div>
|
||||
</div><!-- End: Mountain Training -->
|
||||
<!-- Start: Canva Essentials -->
|
||||
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/canva-essentials" target="_blank"><img class="img-fluid w-100 accreditation" width="692" height="692" src="../../assets/img/accreditations/canva-essentials-badge.webp?h=bc157efb7620e733f43b4b00981978ea"></a></div><!-- End: Canva Essentials -->
|
||||
<!-- Start: Canva Essentials for Mobile -->
|
||||
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/canva-essentials-mobile" target="_blank"><img class="img-fluid w-100 accreditation" width="692" height="692" src="../../assets/img/accreditations/canva-essentials-for-mobile-badge.webp?h=93513f8f560a2e346c12aeb9fb0c18ec"></a></div><!-- End: Canva Essentials for Mobile -->
|
||||
<!-- Start: Canva Graphic Design Essentials -->
|
||||
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/graphic-design-essentials" target="_blank"><img class="img-fluid w-100 accreditation" width="692" height="692" src="../../assets/img/accreditations/graphic-design-essentials-badge.webp?h=f5406331e45433f0d8bd6b929f9d113b"></a></div><!-- End: Canva Graphic Design Essentials -->
|
||||
<!-- Start: Marketing with Canva -->
|
||||
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/marketing-with-canva" target="_blank"><img class="img-fluid w-100 accreditation" width="1080" height="1080" src="../../assets/img/accreditations/mr-a-davis-marketing-with-canva-badge.webp?h=f0b802da597c825b7e03378130d94aca"></a></div><!-- End: Marketing with Canva -->
|
||||
<!-- Start: Canva for Work -->
|
||||
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/canva-for-work" target="_blank"><img class="img-fluid w-100 accreditation" width="2160" height="2160" src="../../assets/img/accreditations/mr-a-davis-canva-for-work-badge.webp?h=b3617633e9d2de429288704f75b304f4"></a></div><!-- End: Canva for Work -->
|
||||
<!-- Start: Canva Teacher Essentials -->
|
||||
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/teacher-essentials" target="_blank"><img class="img-fluid w-100 accreditation" width="692" height="692" src="../../assets/img/accreditations/teacher-essentials-badge.webp?h=d2d6f962e0b1bbebc68f987d6f156028"></a></div><!-- End: Canva Teacher Essentials -->
|
||||
<!-- Start: Canva AI in the Classroom -->
|
||||
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/ai-in-the-classroom" target="_blank"><img class="img-fluid w-100 accreditation" width="1080" height="1080" src="../../assets/img/accreditations/ai-in-the-classroom-badge.webp?h=769458ef2c323729c209855a3cde7312"></a></div><!-- End: Canva AI in the Classroom -->
|
||||
<!-- Start: Adobe Creative Educator Level 1 -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/3a49b473-4af9-4c5a-ab38-1c754f181c6e/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Adobe Creative Educator Level 1"" width="600" height="600" src="../../assets/img/accreditations/3_hours_adobe_creative_educator_level_1.webp?h=45de0c4e8984e885b1153e344e794beb"></a></div><!-- End: Adobe Creative Educator Level 1 -->
|
||||
<!-- Start: Minecraft Education -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/53745c80-7d0a-4428-906a-839e905c139c/public_url" target="_blank"><img class="img-fluid w-100 accreditation" width="600" height="600" src="../../assets/img/accreditations/minecraft-education-ambassador.webp?h=5c614dffa9ab6d6fd77cd805b8397ffd"></a></div><!-- End: Minecraft Education -->
|
||||
<!-- Start: MCE -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/9c9dd6cd-2703-4539-adc9-366069cbc3a9/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " MCE: Microsoft Certified Educator"" width="352" height="352" src="../../assets/img/accreditations/mce_microsoft_certified_educator.webp?h=3e67f154a356cd1ef15c31b0fb42c0c4"></a></div><!-- End: MCE -->
|
||||
<!-- Start: MIEE 2023-2024 -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/b5ac17a1-0914-496f-9d85-9608966259ee/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Microsoft Innovative Educator Expert 2023-2024"" width="600" height="600" src="../../assets/img/accreditations/microsoft_innovative_educator_expert_2023_2024.webp?h=ee882aefba64b3e5b8ea9554eeea3847"></a></div><!-- End: MIEE 2023-2024 -->
|
||||
<!-- Start: MIEE 2024-2025 -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/ad92a7cb-3e4f-46e2-8e73-99dffd0eb69e/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Microsoft Innovative Educator Expert 2024-2025"" width="600" height="600" src="../../assets/img/accreditations/microsoft_innovative_educator_expert_2024_2025.webp?h=a0b5cb2a639caf0351a977146375667e"></a></div><!-- End: MIEE 2024-2025 -->
|
||||
<!-- Start: Pearson OSA Expert -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/44756f05-e727-41c8-a352-a656c033c9f0/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Onscreen Assessment Expert GCSE Computer Science"" width="800" height="800" src="../../assets/img/accreditations/pearson_onscreen_assessment_expert.webp?h=d4e00ea5bfad5a66c619238d7cbdd8db"></a></div><!-- End: Pearson OSA Expert -->
|
||||
<!-- Start: STEM 21-22 -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/52121ef6-0760-4870-91cc-1cb20001238b/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Establishing a STEM club - from creation to careers 2021/2022"" width="1200" height="1200" src="../../assets/img/accreditations/establishing_a_stem_club_from_creation_to_careers_2021_2022.webp?h=7f96a591bd4fb09f86da96af8a8a41ef"></a></div><!-- End: STEM 21-22 -->
|
||||
<!-- Start: NCCE Secondary 21-22 -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/60d50339-2dda-4991-90b5-7ff087975746/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Secondary Computer Science - Professional Development 2021-2022"" width="1200" height="1200" src="../../assets/img/accreditations/secondary_computer_science_professional_development_2021_2022.webp?h=813dd91393f904969bc3bf184007c8c2"></a></div><!-- End: NCCE Secondary 21-22 -->
|
||||
<!-- Start: NCCE Secondary 23-24 -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/e74f9011-4006-4570-824a-f483fdcb5b26/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Secondary Computing - Professional Development 2023-2024"" width="600" height="600" src="../../assets/img/accreditations/secondary_computing_professional_development_2023_2.webp?h=77ebf2880eb7d342016b83e098d92d23"></a></div><!-- End: NCCE Secondary 23-24 -->
|
||||
<!-- Start: NCCE GCSE Computer Science 19-20 -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/c73720d2-8208-4e2b-a1e5-c473961834d9/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " GCSE Computer Science: Professional Development 2019-2020"" width="1200" height="1200" src="../../assets/img/accreditations/gcse_computer_science_professional_development_2019_2020.webp?h=fef2cee3326aeff9e2f65e86cf5e4fee"></a></div><!-- End: NCCE GCSE Computer Science 19-20 -->
|
||||
<!-- Start: NCCE GCSE Computer Science 23-24 -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/c486279a-8e97-4779-90c1-56f09622e782/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " GCSE Computer Science - Professional Development 2022-2023"" width="2000" height="2000" src="../../assets/img/accreditations/gcse_computer_science_professional_development_2022_2023.webp?h=0a54c55717b61c0a0b4ed80582d7bfae"></a></div><!-- End: NCCE GCSE Computer Science 23-24 -->
|
||||
<!-- Start: NCCE GCSE Computer Science 23-24 -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/e76ed57f-2270-47f5-8e7e-4136baa261f3/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " GCSE Computer Science - Professional Development 2023-2024"" width="600" height="600" src="../../assets/img/accreditations/gcse_computer_science_professional_development_2023.webp?h=71b8c59772af539946fb49a210b05758"></a></div><!-- End: NCCE GCSE Computer Science 23-24 -->
|
||||
<!-- Start: NCCE A Level Computer Science 23-24 -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/418cfb22-3e37-4b24-b527-652b1ab6ea76/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " A-Level Computer Science - Professional Development 2023-2024"" width="600" height="600" src="../../assets/img/accreditations/a_level_computer_science_professional_development.webp?h=a9cc6f73abdf82ab49e5f8a8695cb557"></a></div><!-- End: NCCE A Level Computer Science 23-24 -->
|
||||
<!-- Start: MOS Master -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/0e46d6b8-1a1b-4d16-a5d5-3b95661fb290/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Microsoft Office Specialist: Master 2013"" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_master_2013.webp?h=70d957a5307d38f46b84b6462439afbc"></a></div><!-- End: MOS Master -->
|
||||
<!-- Start: MOS Word Expert -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/287d0ca4-bea1-4e18-b9e7-21f6a5d5d571/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Microsoft Office Specialist: Word 2013 Expert"" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_word_2013_expert.webp?h=5bd4ec8c82587201172a8b8e460ff4e6"></a></div><!-- End: MOS Word Expert -->
|
||||
<!-- Start: MOS Word -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/f1831f0e-776b-49aa-8a8d-05817d4b1410/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Microsoft Office Specialist: Word 2013"" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_word_2013.webp?h=2b90c5590b7b50f1891a9116fa38ac36"></a></div><!-- End: MOS Word -->
|
||||
<!-- Start: MOS Excel -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/2ab55353-3267-46cc-b3f4-3099af54d869/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Microsoft Office Specialist: Excel 2013"" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_excel_2013.webp?h=f016925633d0a52b862259a05b396b6a"></a></div><!-- End: MOS Excel -->
|
||||
<!-- Start: MOS PowerPoint -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/11162aa2-331a-4ec4-a612-665f3bc59cb1/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Microsoft Office Specialist: PowerPoint 2013"" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_powerpoint_2013.webp?h=26de9623c491661347998549e10d4353"></a></div><!-- End: MOS PowerPoint -->
|
||||
<!-- Start: MOS OneNote -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/cd328b1d-27b6-4410-be70-0792a99b72ea/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Microsoft Office Specialist: OneNote 2013"" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_onenote_2013.webp?h=2ffe41c2a6e37d602469f8158ef13d79"></a></div><!-- End: MOS OneNote -->
|
||||
<!-- Start: MTA Security -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/da3b3b4c-cec4-4537-bb5b-486ce9ee6ee7/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " MTA: Security Fundamentals - Certified 2016"" width="352" height="352" src="../../assets/img/accreditations/mta_security_fundamentals_certified_2016.webp?h=0df619419a5b6d0eb694dc9363870b20"></a></div><!-- End: MTA Security -->
|
||||
<!-- Start: MTA Networking -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/23194bfe-30e4-4f8e-b9ec-338d060136dd/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " MTA: Networking Fundamentals - Certified 2016"" width="352" height="352" src="../../assets/img/accreditations/mta_networking_fundamentals_certified_2016.webp?h=cdc4618c5e86d11aa304cae14c3942bc"></a></div><!-- End: MTA Networking -->
|
||||
<!-- Start: MTA Windows OS -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/f0f27d87-424b-49e8-a444-95086d640e66/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " MTA: Windows Operating System Fundamentals - Certified 2016"" width="352" height="352" src="../../assets/img/accreditations/mta_windows_operating_system_fundamentals_certified_2016.webp?h=44a6360480ef67ced301c697d31f9fa5"></a></div><!-- End: MTA Windows OS -->
|
||||
</div>
|
||||
</div>
|
||||
<div class="swiper-nav-standalone d-flex justify-content-center accreditations-navigation" data-bss-swiper-target="#light-swiper">
|
||||
<div class="swiper-button-prev"><button class="btn btn-primary btn-sm" type="button"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-arrow-left">
|
||||
<path fill-rule="evenodd" d="M15 8a.5.5 0 0 0-.5-.5H2.707l3.147-3.146a.5.5 0 1 0-.708-.708l-4 4a.5.5 0 0 0 0 .708l4 4a.5.5 0 0 0 .708-.708L2.707 8.5H14.5A.5.5 0 0 0 15 8"></path>
|
||||
</svg></button></div>
|
||||
<div class="swiper-button-next"><button class="btn btn-primary btn-sm" type="button"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-arrow-right">
|
||||
<path fill-rule="evenodd" d="M1 8a.5.5 0 0 1 .5-.5h11.793l-3.147-3.146a.5.5 0 0 1 .708-.708l4 4a.5.5 0 0 1 0 .708l-4 4a.5.5 0 0 1-.708-.708L13.293 8.5H1.5A.5.5 0 0 1 1 8"></path>
|
||||
</svg></button></div>
|
||||
</div>
|
||||
</div><!-- End: Accreditations -->
|
||||
<!-- Start: Spacer -->
|
||||
<div class="col-md-3 text-center text-lg-start d-flex flex-column"><a class="d-flex w-100 justify-content-center center-everything" href="https://client.brixly.uk/aff.php?aff=837" target="_blank"><img class="img-fluid object-fit-contain w-50" src="https://brixly.uk/wp-content/uploads/2022/06/Artboard-32.jpg"></a></div><!-- End: Spacer -->
|
||||
<div class="col-md-3 text-center text-lg-start d-flex flex-column align-items-center order-first align-items-lg-start order-lg-last">
|
||||
<div class="fw-bold d-flex align-items-center mb-2"><img alt="Stylised orange microchip icon on a black background, designed as a modern tech-themed logo for ADCM" src="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501" width="50" height="50" class="footer-logo"><span>Mr A Lyall</span></div>
|
||||
<p>IT professional and Head of Computing in the West Midlands</p>
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
<div class="d-flex justify-content-between align-items-center pt-3">
|
||||
<p class="mb-0 footer-copyright">Copyright © 2025 ADCM Networks</p>
|
||||
<ul class="list-inline mb-0">
|
||||
<!-- Start: Mastodon -->
|
||||
<li class="list-inline-item"><a rel="me" href="https://mstdn.social/@MrDavisCSIT"><svg class="text-body" xmlns="http://www.w3.org/2000/svg" viewBox="-32 0 512 512" width="1em" height="1em" fill="currentColor">
|
||||
<!--! Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. -->
|
||||
<path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"></path>
|
||||
</svg></a></li><!-- End: Mastodon -->
|
||||
<!-- Start: Bluesky -->
|
||||
<li class="list-inline-item"><a href="https://bsky.app/profile/adcmnetworks.co.uk"><i class="fa-brands fa-square-bluesky"></i></a></li><!-- End: Bluesky -->
|
||||
<!-- Start: LinkedIn -->
|
||||
<li class="list-inline-item"><a href="https://www.linkedin.com/in/MrDavisCSIT/"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-linkedin text-body">
|
||||
<path d="M0 1.146C0 .513.526 0 1.175 0h13.65C15.474 0 16 .513 16 1.146v13.708c0 .633-.526 1.146-1.175 1.146H1.175C.526 16 0 15.487 0 14.854V1.146zm4.943 12.248V6.169H2.542v7.225h2.401m-1.2-8.212c.837 0 1.358-.554 1.358-1.248-.015-.709-.52-1.248-1.342-1.248-.822 0-1.359.54-1.359 1.248 0 .694.521 1.248 1.327 1.248h.016zm4.908 8.212V9.359c0-.216.016-.432.08-.586.173-.431.568-.878 1.232-.878.869 0 1.216.662 1.216 1.634v3.865h2.401V9.25c0-2.22-1.184-3.252-2.764-3.252-1.274 0-1.845.7-2.165 1.193v.025h-.016a5.54 5.54 0 0 1 .016-.025V6.169h-2.4c.03.678 0 7.225 0 7.225h2.4"></path>
|
||||
</svg></a></li><!-- End: LinkedIn -->
|
||||
<!-- Start: GitHub -->
|
||||
<li class="list-inline-item"><a href="https://github.com/MrDavisCSIT"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-github text-body">
|
||||
<path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8"></path>
|
||||
</svg></a></li><!-- End: GitHub -->
|
||||
<!-- Start: Reddit -->
|
||||
<li class="list-inline-item"><a href="https://www.reddit.com/user/AlexanderEDavis95/"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-reddit text-body">
|
||||
<path d="M6.167 8a.831.831 0 0 0-.83.83c0 .459.372.84.83.831a.831.831 0 0 0 0-1.661m1.843 3.647c.315 0 1.403-.038 1.976-.611a.232.232 0 0 0 0-.306.213.213 0 0 0-.306 0c-.353.363-1.126.487-1.67.487-.545 0-1.308-.124-1.671-.487a.213.213 0 0 0-.306 0 .213.213 0 0 0 0 .306c.564.563 1.652.61 1.977.61zm.992-2.807c0 .458.373.83.831.83.458 0 .83-.381.83-.83a.831.831 0 0 0-1.66 0z"></path>
|
||||
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0m-3.828-1.165c-.315 0-.602.124-.812.325-.801-.573-1.9-.945-3.121-.993l.534-2.501 1.738.372a.83.83 0 1 0 .83-.869.83.83 0 0 0-.744.468l-1.938-.41a.203.203 0 0 0-.153.028.186.186 0 0 0-.086.134l-.592 2.788c-1.24.038-2.358.41-3.17.992-.21-.2-.496-.324-.81-.324a1.163 1.163 0 0 0-.478 2.224c-.02.115-.029.23-.029.353 0 1.795 2.091 3.256 4.669 3.256 2.577 0 4.668-1.451 4.668-3.256 0-.114-.01-.238-.029-.353.401-.181.688-.592.688-1.069 0-.65-.525-1.165-1.165-1.165z"></path>
|
||||
</svg></a></li><!-- End: Reddit -->
|
||||
<!-- Start: YouTube -->
|
||||
<li class="list-inline-item"><a href="https://www.youtube.com/channel/UCgDhiQMLbTemv2varDiW2rA"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-youtube text-body">
|
||||
<path d="M8.051 1.999h.089c.822.003 4.987.033 6.11.335a2.01 2.01 0 0 1 1.415 1.42c.101.38.172.883.22 1.402l.01.104.022.26.008.104c.065.914.073 1.77.074 1.957v.075c-.001.194-.01 1.108-.082 2.06l-.008.105-.009.104c-.05.572-.124 1.14-.235 1.558a2.007 2.007 0 0 1-1.415 1.42c-1.16.312-5.569.334-6.18.335h-.142c-.309 0-1.587-.006-2.927-.052l-.17-.006-.087-.004-.171-.007-.171-.007c-1.11-.049-2.167-.128-2.654-.26a2.007 2.007 0 0 1-1.415-1.419c-.111-.417-.185-.986-.235-1.558L.09 9.82l-.008-.104A31.4 31.4 0 0 1 0 7.68v-.123c.002-.215.01-.958.064-1.778l.007-.103.003-.052.008-.104.022-.26.01-.104c.048-.519.119-1.023.22-1.402a2.007 2.007 0 0 1 1.415-1.42c.487-.13 1.544-.21 2.654-.26l.17-.007.172-.006.086-.003.171-.007A99.788 99.788 0 0 1 7.858 2h.193zM6.4 5.209v4.818l4.157-2.408z"></path>
|
||||
</svg></a></li><!-- End: YouTube -->
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</footer><!-- End: Footer Multi Column -->
|
||||
<script>
|
||||
(function() {
|
||||
let collections = document.querySelectorAll('[data-bss-type="blog-loop"]');
|
||||
let tagNavs = document.querySelectorAll('[data-bss-type="tag-nav"]');
|
||||
let tagLoops = document.querySelectorAll('[data-bss-type="tag-loop"]');
|
||||
let authorLoops = document.querySelectorAll('[data-bss-type="author-loop"]');
|
||||
let authorNavs = document.querySelectorAll('[data-bss-type="author-nav"]');
|
||||
|
||||
window.addEventListener("popstate", (e) => {
|
||||
for (let collection of collections) {
|
||||
updateCollection(collection);
|
||||
}
|
||||
|
||||
for (let tagNav of tagNavs) {
|
||||
updateTagNav(tagNav);
|
||||
}
|
||||
|
||||
for (let authorNav of authorNavs) {
|
||||
updateAuthorNav(authorNav);
|
||||
}
|
||||
});
|
||||
|
||||
for (let collection of collections) {
|
||||
|
||||
updateCollection(collection);
|
||||
|
||||
if (!canPaginateCollection(collection)) continue;
|
||||
|
||||
let pagination = collection.querySelector('[data-bss-type="blog-loop-pagination"]');
|
||||
|
||||
pagination.addEventListener('click', function(e) {
|
||||
let paginationItem = e.target.closest('.page-item');
|
||||
if (!paginationItem) return;
|
||||
|
||||
e.preventDefault();
|
||||
|
||||
if (paginationItem.classList.contains('disabled') || paginationItem.classList.contains('active')) return;
|
||||
|
||||
let collection = paginationItem.closest('[data-bss-type="blog-loop"]');
|
||||
if (!collection) return;
|
||||
|
||||
let page = parseInt(paginationItem.dataset.page);
|
||||
if (!page) return;
|
||||
|
||||
let pageParam = getPageParameter(collection);
|
||||
|
||||
if (pageParam) {
|
||||
const url = new URL(window.location);
|
||||
url.searchParams.set(pageParam, page);
|
||||
history.pushState({
|
||||
[pageParam]: page
|
||||
}, document.title, url);
|
||||
|
||||
for (let c of collections) {
|
||||
let param = getPageParameter(c);
|
||||
if (param !== pageParam) continue;
|
||||
updateCollection(c);
|
||||
}
|
||||
} else {
|
||||
updateCollection(collection, page);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
for (let tagNav of tagNavs) {
|
||||
updateTagNav(tagNav);
|
||||
tagNav.addEventListener('click', onTagClick);
|
||||
}
|
||||
|
||||
for (let tagLoop of tagLoops) {
|
||||
tagLoop.addEventListener('click', onTagClick);
|
||||
}
|
||||
|
||||
for (let authorLoop of authorLoops) {
|
||||
authorLoop.addEventListener('click', onAuthorClick);
|
||||
}
|
||||
|
||||
for (let authorNav of authorNavs) {
|
||||
updateAuthorNav(authorNav);
|
||||
}
|
||||
|
||||
function onTagClick(e) {
|
||||
onBlogFilterClick(e);
|
||||
|
||||
for (let nav of tagNavs) {
|
||||
updateTagNav(nav);
|
||||
}
|
||||
}
|
||||
|
||||
function onAuthorClick(e) {
|
||||
onBlogFilterClick(e);
|
||||
|
||||
for (let authorNav of authorNavs) {
|
||||
updateAuthorNav(authorNav);
|
||||
}
|
||||
}
|
||||
|
||||
function onBlogFilterClick(e) {
|
||||
const item = e.target.closest('[data-bss-filter="blog"]');
|
||||
if (!item || !item.dataset.hasOwnProperty('bssHref') || !item.dataset.hasOwnProperty('bssFilterParam')) return;
|
||||
|
||||
const stateNode = item.dataset.hasOwnProperty('bssStateNode') ? item : item.querySelector('[data-bss-state-node]');
|
||||
|
||||
if (stateNode && (stateNode.classList.contains('disabled') || stateNode.classList.contains('active'))) {
|
||||
e.preventDefault();
|
||||
return;
|
||||
}
|
||||
|
||||
const link = item.dataset.bssHref;
|
||||
if (!linksToCurrentPage(link)) return;
|
||||
|
||||
e.preventDefault();
|
||||
|
||||
const url = new URL(window.location);
|
||||
const filterParam = item.dataset.bssFilterParam;
|
||||
const filterValue = item.dataset.bssFilterValue || '';
|
||||
|
||||
const collectionsToUpdate = [];
|
||||
const newQueryParams = {
|
||||
[filterParam]: filterValue
|
||||
};
|
||||
|
||||
for (let c of collections) {
|
||||
if (!canFilterCollection(c)) continue;
|
||||
collectionsToUpdate.push(c);
|
||||
|
||||
let pageParam = getPageParameter(c);
|
||||
let page = url.searchParams.get(pageParam);
|
||||
if (page === null || page == 1) continue;
|
||||
|
||||
newQueryParams[pageParam] = 1;
|
||||
}
|
||||
|
||||
for (let param in newQueryParams) {
|
||||
if (newQueryParams[param]) {
|
||||
url.searchParams.set(param, newQueryParams[param]);
|
||||
} else {
|
||||
url.searchParams.delete(param);
|
||||
}
|
||||
}
|
||||
|
||||
history.pushState(newQueryParams, document.title, url);
|
||||
|
||||
for (let c of collectionsToUpdate) {
|
||||
updateCollection(c);
|
||||
}
|
||||
}
|
||||
|
||||
function getCollectionFilters(collection) {
|
||||
let filters = [];
|
||||
|
||||
try {
|
||||
const parsed = JSON.parse(collection.dataset.bssFilters);
|
||||
|
||||
if (Array.isArray(parsed)) {
|
||||
filters = parsed;
|
||||
}
|
||||
} catch (e) {}
|
||||
|
||||
return filters;
|
||||
}
|
||||
|
||||
function getCollectionEmptyFilterAction(collection, filter = '') {
|
||||
let emptyFilterActions = [];
|
||||
|
||||
try {
|
||||
const parsed = JSON.parse(collection.dataset.bssEmptyFilterActions);
|
||||
|
||||
if (Array.isArray(parsed)) {
|
||||
emptyFilterActions = parsed;
|
||||
}
|
||||
} catch (e) {}
|
||||
|
||||
const action = emptyFilterActions.find(action => action.filter === filter);
|
||||
|
||||
return action ? action.value : '';
|
||||
}
|
||||
|
||||
function canFilterCollection(collection) {
|
||||
return !!getCollectionFilters(collection).length;
|
||||
}
|
||||
|
||||
function canFilterCollectionByTag(collection) {
|
||||
return getCollectionFilters(collection).includes('tag');
|
||||
}
|
||||
|
||||
function canFilterCollectionByAuthor(collection) {
|
||||
return getCollectionFilters(collection).includes('author');
|
||||
}
|
||||
|
||||
function shouldShowAllItemsForEmptyFilter(collection, filter = '') {
|
||||
return getCollectionEmptyFilterAction(collection, filter) === 'show-all';
|
||||
}
|
||||
|
||||
function canPaginateCollection(collection) {
|
||||
return !!getCollectionPagination(collection);
|
||||
}
|
||||
|
||||
function getCollectionPagination(collection) {
|
||||
return collection.querySelector('[data-bss-type="blog-loop-pagination"]');
|
||||
}
|
||||
|
||||
function getPageParameter(collection) {
|
||||
return collection.dataset.bssPageParam;
|
||||
}
|
||||
|
||||
function linksToCurrentPage(path = '') {
|
||||
let currentURL, url;
|
||||
|
||||
try {
|
||||
currentURL = new URL(window.location);
|
||||
url = new URL(path, window.location.href);
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
}
|
||||
|
||||
return currentURL.origin === url.origin && currentURL.pathname === url.pathname;
|
||||
}
|
||||
|
||||
function updateCollection(collection, page, activeTag = '', activeAuthor = '') {
|
||||
|
||||
const url = new URL(window.location.href);
|
||||
|
||||
if (canPaginateCollection(collection)) {
|
||||
if (!page) {
|
||||
let pageParam = getPageParameter(collection);
|
||||
page = (pageParam ? url.searchParams.get(pageParam) : 1) || 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (canFilterCollectionByTag(collection) && !activeTag) {
|
||||
let tagParam = 'tag';
|
||||
activeTag = url.searchParams.get(tagParam) || '';
|
||||
}
|
||||
|
||||
if (canFilterCollectionByAuthor(collection) && !activeAuthor) {
|
||||
let authorParam = 'author';
|
||||
activeAuthor = url.searchParams.get(authorParam) || '';
|
||||
}
|
||||
|
||||
renderCollectionPage(collection, page, activeTag, activeAuthor);
|
||||
}
|
||||
|
||||
function renderCollectionPage(collection, page = 1, activeTag = '', activeAuthor = '') {
|
||||
|
||||
page = Math.max(parseInt(page, 10), 1);
|
||||
|
||||
collection.style.removeProperty('display');
|
||||
|
||||
let loopBase = collection.querySelector('[data-bss-type="blog-loop-base"]');
|
||||
loopBase && loopBase.style.removeProperty('display');
|
||||
|
||||
let emptyState = collection.querySelector('[data-bss-type="empty-state"]');
|
||||
emptyState && emptyState.style.setProperty('display', 'none', 'important');
|
||||
|
||||
let listItems = [].slice.call(collection.querySelectorAll('[data-bss-type="blog-loop-item"]'));
|
||||
listItems.forEach(item => item.style.setProperty('display', 'none', 'important'));
|
||||
|
||||
if (canFilterCollectionByTag(collection)) {
|
||||
listItems = listItems.filter(item => activeTag ? item.classList.contains('post-tag-' + activeTag) : shouldShowAllItemsForEmptyFilter(collection, 'tag'));
|
||||
}
|
||||
|
||||
if (canFilterCollectionByAuthor(collection)) {
|
||||
listItems = listItems.filter(item => activeAuthor ? item.classList.contains('post-author-' + activeAuthor) : shouldShowAllItemsForEmptyFilter(collection, 'author'));
|
||||
}
|
||||
|
||||
let perPage = collection.dataset.bssPerpage || listItems.length;
|
||||
let visibleListItems = listItems.slice((page - 1) * perPage, page * perPage);
|
||||
visibleListItems.forEach(item => item.style.removeProperty('display'));
|
||||
|
||||
let isEmpty = !visibleListItems.length;
|
||||
|
||||
if (isEmpty) {
|
||||
loopBase && loopBase.style.setProperty('display', 'none', 'important');
|
||||
emptyState && emptyState.style.removeProperty('display');
|
||||
}
|
||||
|
||||
let itemCount = listItems.length;
|
||||
let pageCount = Math.max(Math.ceil(itemCount / perPage), 1);
|
||||
|
||||
updateCollectionPagination(collection, page, pageCount, isEmpty);
|
||||
|
||||
if (collection.dataset.bssScrollOnChange) {
|
||||
scrollToCollectionTop(collection);
|
||||
}
|
||||
}
|
||||
|
||||
function updateCollectionPagination(collection, page, pageCount, isEmpty) {
|
||||
let pagination = getCollectionPagination(collection);
|
||||
if (!pagination) return;
|
||||
|
||||
let paginationItems = [].slice.call(pagination.querySelectorAll('.page-item'));
|
||||
|
||||
if (pageCount === 1 || isEmpty) {
|
||||
pagination.style.setProperty('display', 'none', 'important');
|
||||
} else {
|
||||
pagination.style.removeProperty('display');
|
||||
}
|
||||
|
||||
let previousBtnDisabled = page - 1 <= 0;
|
||||
let previousPage = previousBtnDisabled ? 1 : page - 1;
|
||||
|
||||
let nextBtnDisabled = page + 1 > pageCount;
|
||||
let nextPage = nextBtnDisabled ? pageCount : page + 1;
|
||||
|
||||
for (let i = 0; i < paginationItems.length; i++) {
|
||||
let paginationItem = paginationItems[i];
|
||||
|
||||
paginationItem.classList.remove('active', 'disabled');
|
||||
|
||||
if (paginationItem.dataset.type === 'prev') {
|
||||
paginationItem.dataset.page = previousPage;
|
||||
|
||||
if (previousBtnDisabled) {
|
||||
paginationItem.classList.add('disabled');
|
||||
}
|
||||
} else if (paginationItem.dataset.type === 'next') {
|
||||
paginationItem.dataset.page = nextPage;
|
||||
|
||||
if (nextBtnDisabled) {
|
||||
paginationItem.classList.add('disabled');
|
||||
}
|
||||
} else {
|
||||
if (paginationItem.dataset.page > pageCount) {
|
||||
paginationItem.style.setProperty('display', 'none', 'important');
|
||||
} else {
|
||||
paginationItem.style.removeProperty('display');
|
||||
}
|
||||
|
||||
if (paginationItem.dataset.page == page) {
|
||||
paginationItem.classList.add('active');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function scrollToCollectionTop(collection) {
|
||||
const rect = collection.getBoundingClientRect();
|
||||
const viewHeight = Math.max(document.documentElement.clientHeight, window.innerHeight);
|
||||
const threshold = 100;
|
||||
|
||||
if (rect.top >= 0 && viewHeight - rect.top > threshold) return;
|
||||
|
||||
setTimeout(() => {
|
||||
collection.scrollIntoView({
|
||||
behavior: "smooth",
|
||||
block: "start",
|
||||
inline: "start"
|
||||
});
|
||||
}, 0);
|
||||
}
|
||||
|
||||
function updateTagNav(tagNav) {
|
||||
const url = new URL(window.location.href);
|
||||
|
||||
let tagParam = 'tag';
|
||||
let tag = url.searchParams.get(tagParam) || '';
|
||||
|
||||
renderTagNav(tagNav, tag);
|
||||
}
|
||||
|
||||
function renderTagNav(tagNav, activeTag = '') {
|
||||
if (!tagNav.dataset.bssSyncUrl) return;
|
||||
|
||||
let navItems = [].slice.call(tagNav.querySelectorAll('[data-bss-type="tag-loop-item"]'));
|
||||
|
||||
navItems.forEach(item => {
|
||||
const activeClassNode = item.dataset.hasOwnProperty('bssStateNode') ? item : item.querySelector('[data-bss-state-node]');
|
||||
if (!activeClassNode) return;
|
||||
|
||||
activeClassNode.classList.remove('active');
|
||||
|
||||
const link = item.dataset.bssHref;
|
||||
if (!linksToCurrentPage(link) || activeClassNode.classList.contains('disabled')) return;
|
||||
|
||||
if (item.dataset.bssTag === activeTag) {
|
||||
activeClassNode.classList.add('active');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function updateAuthorNav(authorNav) {
|
||||
const url = new URL(window.location.href);
|
||||
|
||||
let authorParam = 'author';
|
||||
let author = url.searchParams.get(authorParam) || '';
|
||||
|
||||
renderAuthorNav(authorNav, author);
|
||||
}
|
||||
|
||||
function renderAuthorNav(authorNav, activeAuthor = '') {
|
||||
if (!canFilterCollectionByAuthor(authorNav)) return;
|
||||
|
||||
authorNav.style.removeProperty('display');
|
||||
|
||||
let items = [].slice.call(authorNav.querySelectorAll('[data-bss-type="author-loop-item"]'));
|
||||
items.forEach(item => item.classList.contains('author-' + activeAuthor) ? item.style.removeProperty('display') : item.style.setProperty('display', 'none', 'important'));
|
||||
}
|
||||
})();
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.6/dist/js/bootstrap.bundle.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.js"></script>
|
||||
<script src="../../assets/js/bs-init.js?h=7c6b4c49b8ac0f383799ccb3d5def770"></script>
|
||||
<script src="../../assets/js/Carousel---Slider-With-Animation-slider_with_animation.js?h=948f8788fd189b5cc9df01ff4fce4152"></script>
|
||||
<script src="../../assets/js/CookieConsentComponent-cookieconsent.js?h=83fbb3192473604d72b00a854c6de4fd"></script>
|
||||
<script src="https://kit.fontawesome.com/8970d94f9b.js"></script>
|
||||
<script src="../../assets/js/pikaday.min.js?h=039feef26d52ebc5f1260a47208bfa38"></script>
|
||||
<script src="../../assets/js/text-carousel.js?h=992f402828c7806b1f3bb7f29232e972"></script>
|
||||
<script src="../../assets/js/theme.js?h=aeddb9c3ce5d77b8278c91c07acf30ad"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
776
Export/my-work/projects-for-education/my-mind.html
Normal file
776
Export/my-work/projects-for-education/my-mind.html
Normal file
@@ -0,0 +1,776 @@
|
||||
<!DOCTYPE html>
|
||||
<html data-bs-theme="auto" lang="en-gb">
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<!-- Matomo -->
|
||||
<script>
|
||||
var _paq = window._paq = window._paq || [];
|
||||
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
|
||||
_paq.push(['trackPageView']);
|
||||
_paq.push(['enableLinkTracking']);
|
||||
(function() {
|
||||
var u="//analytics.adcmnetworks.co.uk/";
|
||||
_paq.push(['setTrackerUrl', u+'matomo.php']);
|
||||
_paq.push(['setSiteId', '1']);
|
||||
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
|
||||
g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
|
||||
})();
|
||||
</script>
|
||||
<!-- End Matomo Code -->
|
||||
|
||||
<script src="https://kit.fontawesome.com/8970d94f9b.js" crossorigin="anonymous"></script>
|
||||
|
||||
<meta name="fediverse:creator" content="@MrDavisCSIT@mstdn.social">
|
||||
<script src="https://cms.tahdah.me/scripts/publicbadge.js"></script>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
|
||||
<title>My Mind</title>
|
||||
<link rel="canonical" href="https://www.mrlyall.uk/my-work/projects-for-education/my-mind.html">
|
||||
<meta property="og:url" content="https://www.mrlyall.uk/my-work/projects-for-education/my-mind.html">
|
||||
<meta name="twitter:description" content="The website of Mr. A. Lyall, featuring a portfolio of work in computing education, digital projects, and curriculum resources. Explore blog posts, classroom tools, and professional insights focused on innovation, inclusion, and effective IT teaching.">
|
||||
<meta name="twitter:card" content="summary">
|
||||
<meta property="og:type" content="website">
|
||||
<meta name="twitter:title" content="Mr Lyall">
|
||||
<meta property="og:image" content="https://www.mrlyall.uk/assets/img/projects/for_education/my_mind/my_mind_logo.webp">
|
||||
<meta name="description" content="App simplifying BCU mental health support, linking students to counsellors, emergency calls, forums.">
|
||||
<script>
|
||||
(function() {
|
||||
|
||||
// JavaScript snippet handling Dark/Light mode switching
|
||||
|
||||
const getStoredTheme = () => localStorage.getItem('theme');
|
||||
const setStoredTheme = theme => localStorage.setItem('theme', theme);
|
||||
const forcedTheme = document.documentElement.getAttribute('data-bss-forced-theme');
|
||||
|
||||
const getPreferredTheme = () => {
|
||||
|
||||
if (forcedTheme) return forcedTheme;
|
||||
|
||||
const storedTheme = getStoredTheme();
|
||||
if (storedTheme) {
|
||||
return storedTheme;
|
||||
}
|
||||
|
||||
const pageTheme = document.documentElement.getAttribute('data-bs-theme');
|
||||
|
||||
if (pageTheme) {
|
||||
return pageTheme;
|
||||
}
|
||||
|
||||
return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
|
||||
}
|
||||
|
||||
const setTheme = theme => {
|
||||
if (theme === 'auto' && window.matchMedia('(prefers-color-scheme: dark)').matches) {
|
||||
document.documentElement.setAttribute('data-bs-theme', 'dark');
|
||||
} else {
|
||||
document.documentElement.setAttribute('data-bs-theme', theme);
|
||||
}
|
||||
}
|
||||
|
||||
setTheme(getPreferredTheme());
|
||||
|
||||
const showActiveTheme = (theme, focus = false) => {
|
||||
const themeSwitchers = [].slice.call(document.querySelectorAll('.theme-switcher'));
|
||||
|
||||
if (!themeSwitchers.length) return;
|
||||
|
||||
document.querySelectorAll('[data-bs-theme-value]').forEach(element => {
|
||||
element.classList.remove('active');
|
||||
element.setAttribute('aria-pressed', 'false');
|
||||
});
|
||||
|
||||
for (const themeSwitcher of themeSwitchers) {
|
||||
|
||||
const btnToActivate = themeSwitcher.querySelector('[data-bs-theme-value="' + theme + '"]');
|
||||
|
||||
if (btnToActivate) {
|
||||
btnToActivate.classList.add('active');
|
||||
btnToActivate.setAttribute('aria-pressed', 'true');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => {
|
||||
const storedTheme = getStoredTheme();
|
||||
if (storedTheme !== 'light' && storedTheme !== 'dark') {
|
||||
setTheme(getPreferredTheme());
|
||||
}
|
||||
});
|
||||
|
||||
window.addEventListener('DOMContentLoaded', () => {
|
||||
showActiveTheme(getPreferredTheme());
|
||||
|
||||
document.querySelectorAll('[data-bs-theme-value]')
|
||||
.forEach(toggle => {
|
||||
toggle.addEventListener('click', (e) => {
|
||||
e.preventDefault();
|
||||
const theme = toggle.getAttribute('data-bs-theme-value');
|
||||
setStoredTheme(theme);
|
||||
setTheme(theme);
|
||||
showActiveTheme(theme);
|
||||
})
|
||||
})
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
|
||||
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_white.webp?h=7cd31e9469bb0f9d3a4e704b3c0b1445" media="(prefers-color-scheme: dark)">
|
||||
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
|
||||
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_white.webp?h=7cd31e9469bb0f9d3a4e704b3c0b1445" media="(prefers-color-scheme: dark)">
|
||||
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
|
||||
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
|
||||
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
|
||||
<link rel="stylesheet" href="../../assets/bootstrap/css/bootstrap.min.css?h=c9d969cca6f72ca8d4dfd457f2e8eff8">
|
||||
<link rel="stylesheet" href="../../assets/css/Lato.css?h=69bc5b06794edd4ca9a38642d36c83d0">
|
||||
<link rel="stylesheet" href="../../assets/css/bss-overrides.css?h=15b91a8988c8fc6448a8989802a159de">
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.css">
|
||||
<link rel="stylesheet" href="../../assets/css/styles.css?h=7c67e1bb3df4cb41abaceaf312f03dfa">
|
||||
<link rel="stylesheet" href="../../assets/css/pikaday.min.css?h=a9ab8ca627aa6e8f64b730ca9c2c781d">
|
||||
<link rel="stylesheet" href="../../assets/css/CookieConsentComponent.css?h=39af3305e95f4d2a8883e97d7e0cdb14">
|
||||
<link rel="stylesheet" href="../../assets/css/animations.compiled.css?h=49917e33fe831aa33e24fb1e8124fdd9">
|
||||
<link rel="stylesheet" href="../../assets/css/Carousel---Slider-With-Animation.css?h=63f5768f05d2ae91446ac010bcd4844a">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<nav class="navbar navbar-expand-md fixed-top portfolio-navbar gradient navbar-dark">
|
||||
<div class="container-fluid"><a class="navbar-brand logo" href="../../"><img alt="Stylised white microchip icon on a black background, designed as a modern tech-themed logo for ADCM" src="../../assets/img/brand/adcm_logo_white.webp?h=7cd31e9469bb0f9d3a4e704b3c0b1445" width="50" height="50" class="mobile-padding-left"></a><button data-bs-toggle="collapse" class="navbar-toggler" data-bs-target="#navbarNav" style="margin-right: 0.5em;"><span class="visually-hidden">Toggle navigation</span><span class="navbar-toggler-icon"></span></button>
|
||||
<div class="collapse navbar-collapse" id="navbarNav">
|
||||
<ul class="navbar-nav ms-auto">
|
||||
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../">Home</a></li>
|
||||
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../about">About</a></li>
|
||||
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../projects">My Work</a></li>
|
||||
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../my-work/showreel">Showreel</a></li>
|
||||
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../blog">Blog</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
<main class="page">
|
||||
<section class="portfolio-block block-intro">
|
||||
<div class="container center-everything">
|
||||
<!-- Start: portfolio heading -->
|
||||
<div class="align-content-center heading blog-heading mymind-ios">
|
||||
<h2>My Mind</h2>
|
||||
<p>App simplifying BCU mental health support, linking students to counsellors, emergency calls, forums.</p>
|
||||
</div><!-- End: portfolio heading -->
|
||||
</div>
|
||||
</section>
|
||||
<section class="portfolio-block project">
|
||||
<div class="container center-everything">
|
||||
<div class="carousel slide carousel-fade project-carousel" data-bs-ride="carousel" id="carousel-1">
|
||||
<div class="carousel-inner">
|
||||
<div class="carousel-item active"><img class="img-fluid w-100 d-block slider-image-fit" alt="Logo banner for the "My Mind" app featuring a geometric brain on the left and bold white text "My Mind" on a purple background to the right." width="940" height="500" src="../../assets/img/projects/for_education/my_mind/mymindpreview.webp?h=51456f3afb8e853313ac907b373730f4"></div>
|
||||
<div class="carousel-item"><img class="img-fluid w-100 d-block slider-image-fit" alt="System architecture diagram for a mobile application. It outlines components including Referral, Support Forum, and Appointments (split into staff/admin and student areas). Arrows show flow between these components and a central database containing UserTable, ForumTable, and Appointments Table." width="1082" height="893" src="../../assets/img/projects/for_education/my_mind/project_proposal___system_architecture.webp?h=b01957e233817ad77b623349bb654066"></div>
|
||||
<div class="carousel-item"><img class="img-fluid w-100 d-block slider-image-fit" alt="Flowchart showing a manual referral process for mental health support. A student encountering mental health issues is directed to iASK and iCity to find a support network, locates and fills in a referral form, which is stored in a database. The wellbeing team completes the registration, and the student is then contacted via email to book an appointment." width="569" height="854" src="../../assets/img/projects/for_education/my_mind/old_my_mind_process_flowchart.webp?h=3a6a3a9ae2755b3568f62b6a80bae60f"></div>
|
||||
<div class="carousel-item"><img class="img-fluid w-100 d-block slider-image-fit" alt="Simplified flowchart showing the user journey in the "My Mind" app, from experiencing mental health issues to downloading the app, filling in a referral, and attending appointments." width="369" height="817" src="../../assets/img/projects/for_education/my_mind/new_my_mind_process_flowchart.webp?h=81bbfe54d291eb621c6f90224c134b3c"></div>
|
||||
<div class="carousel-item"><img class="img-fluid w-100 d-block slider-image-fit" alt="A detailed user flow diagram for the "My Mind" app, mapping the user journey from launch and login to appointment booking, forum access, and referral processing." width="1153" height="1476" src="../../assets/img/projects/for_education/my_mind/my_mind_app_flowchart.webp?h=f7e7018678feeae7395e4739c0371efa"></div>
|
||||
<div class="carousel-item"><img class="img-fluid w-100 d-block slider-image-fit" alt="Diagram showing how the "My Mind" app and online forum interact with various data systems. It includes data flow from the app and forum to Referral Form Data, Appointments, and Emergency Contacts, all connected to their respective databases." width="567" height="304" src="../../assets/img/projects/for_education/my_mind/system_structure_diagram.webp?h=d1ec2f787a01ba3ef7ee71604d5e5fc2"></div>
|
||||
<div class="carousel-item"><img class="img-fluid w-100 d-block slider-image-fit" alt="Launch screen of the "My Mind" app featuring a green tick icon above the app name on a purple background with copyright text at the bottom." width="424" height="758" src="../../assets/img/projects/for_education/my_mind/final_launch_screen.webp?h=ef3bc114208c828696e706b577c52441"></div>
|
||||
<div class="carousel-item"><img class="img-fluid w-100 d-block slider-image-fit" alt="Series of three welcome screens for the "My Mind" app introducing its purpose, features, and signup process with white text on purple backgrounds and navigation dots." width="880" height="469" src="../../assets/img/projects/for_education/my_mind/final_welcome_screen.webp?h=99a641a115d3454e0f97c0a2bb5881b6"></div>
|
||||
<div class="carousel-item"><img class="img-fluid w-100 d-block slider-image-fit" alt="Interface mockups of the login, password reset, and signup screens for the "My Mind" app, using a purple theme with green buttons and white input fields." width="451" height="756" src="../../assets/img/projects/for_education/my_mind/final_design_login_screen.webp?h=6e14cd3485d55426ec2f6fdfb153a74c"></div>
|
||||
<div class="carousel-item"><img class="img-fluid w-100 d-block slider-image-fit" alt="Simple layout of a tab bar controller for the "My Mind" app, with five tabs at the bottom: Referrals, Appointments, Forum, Account, and Contacts." width="338" height="486" src="../../assets/img/projects/for_education/my_mind/main_tab_controller.webp?h=2e3b6e692312e320cb42ae38992ca2b2"></div>
|
||||
<div class="carousel-item"><img class="img-fluid w-100 d-block slider-image-fit" alt="Wireframes of various "My Mind" app sections including referrals, appointments, forum, account, and emergency contacts, with example data like contact numbers and appointment types." width="880" height="574" src="../../assets/img/projects/for_education/my_mind/main_app_design_1.webp?h=fae0ac8ff543f7b7dec2971d333988b6"></div>
|
||||
<div class="carousel-item"><img class="img-fluid w-100 d-block slider-image-fit" alt="Wireframe mockups of appointment-related screens from a mental health app named "My Mind", showing options for requesting, confirming, cancelling, and viewing appointments with map views and date/time details." width="880" height="784" src="../../assets/img/projects/for_education/my_mind/main_app_design_2.webp?h=ff7bcd4ed4bf4d5f0303964992129e46"></div>
|
||||
</div>
|
||||
<div>
|
||||
<!-- Start: Previous --><a class="carousel-control-prev" href="#carousel-1" role="button" data-bs-slide="prev"><span class="carousel-control-prev-icon"></span><span class="visually-hidden">Previous</span></a><!-- End: Previous -->
|
||||
<!-- Start: Next --><a class="carousel-control-next" href="#carousel-1" role="button" data-bs-slide="next"><span class="carousel-control-next-icon"></span><span class="visually-hidden">Next</span></a><!-- End: Next -->
|
||||
</div>
|
||||
<div class="carousel-indicators focus-ring"><button type="button" data-bs-target="#carousel-1" data-bs-slide-to="0" class="active"></button> <button type="button" data-bs-target="#carousel-1" data-bs-slide-to="1"></button> <button type="button" data-bs-target="#carousel-1" data-bs-slide-to="2"></button> <button type="button" data-bs-target="#carousel-1" data-bs-slide-to="3"></button> <button type="button" data-bs-target="#carousel-1" data-bs-slide-to="4"></button> <button type="button" data-bs-target="#carousel-1" data-bs-slide-to="5"></button> <button type="button" data-bs-target="#carousel-1" data-bs-slide-to="6"></button> <button type="button" data-bs-target="#carousel-1" data-bs-slide-to="7"></button> <button type="button" data-bs-target="#carousel-1" data-bs-slide-to="8"></button> <button type="button" data-bs-target="#carousel-1" data-bs-slide-to="9"></button> <button type="button" data-bs-target="#carousel-1" data-bs-slide-to="10"></button> <button type="button" data-bs-target="#carousel-1" data-bs-slide-to="11"></button></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col info">
|
||||
<p>The current BCU mental health and wellbeing service requires a lot of steps which can discourage students from reuqesting assistance.<br><br>My Mind simplifies this process and allows staff to easily manage their appointments and give the efficient support that both the university and students need.<br><br>The cuts from BCU towards the student affairs department will directly affect the current system and make it harder for students to get support.</p>
|
||||
</div>
|
||||
<div class="col-auto meta project-details">
|
||||
<div class="tags"><span class="meta-heading">Institution</span><span>Birmingham City University</span><span class="meta-heading">Qualification</span><span>Bachelor of Science with Honours in Computer Science</span><span class="meta-heading">Grade</span><span>2:1 (66.5%)</span><span class="meta-heading">Submitted</span><span>May 2017</span><span class="meta-heading">Products Created</span><span>iOS App</span><a class="btn btn-primary project-buttons" role="button" href="https://gitea.adcmnetworks.co.uk/MrDavisCSIT/FinalYearProject-MyMind" target="_blank"> View project on Gitea</a></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="more-projects">
|
||||
<h3 class="text-center more-projects-heading">More Projects</h3>
|
||||
<div data-bss-type="blog-loop" data-bss-perpage="3" style="display: none !important;">
|
||||
<div class="row gy-4 row-cols-1 row-cols-sm-2 row-cols-md-2 row-cols-lg-3 mt-0" data-bss-type="blog-loop-base">
|
||||
<div class="post-tag-projects-for-education col" data-bss-type="blog-loop-item">
|
||||
<div class="card"><a href="bitbox.html"><img class="img-fluid card-img-top rainbow-border" alt="Square logo with the text "Bit:Box" and a pixelated lightbulb icon." width="1080" height="1080" src="../../assets/img/projects/for_education/bit_box/bit_box_logo.webp?h=36b5ef1a4c9f880d65df48518293999f"></a>
|
||||
<div class="card-body"><a href="bitbox.html">
|
||||
<h4 class="text-body">Bit:Box</h4>
|
||||
</a>
|
||||
<p class="card-text">Educational device, app, and website using switches and lights to visually demonstrate binary logic.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="post-tag-projects-for-education col" data-bss-type="blog-loop-item">
|
||||
<div class="card"><a href="csbox.html"><img class="img-fluid card-img-top rainbow-border" alt="A stylised cube logo with the letters "CS" on the left face and "BX" on the right face. The cube is surrounded by vibrant icons and patterns referencing computer science, including binary digits (e.g. 111101, 10101), hexadecimal numbers, colour pencils, and graphical representations of data." width="500" height="500" src="../../assets/img/projects/for_education/cs_box/csbox_logo.webp?h=487f527cf87df0dba11b6f4d4993a80d"></a>
|
||||
<div class="card-body"><a href="csbox.html">
|
||||
<h4 class="text-body">CS:Box</h4>
|
||||
</a>
|
||||
<p class="card-text">Interactive educational tool expanding Bit:Box to include additional UK Computing Curriculum topics.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="post-tag-projects-for-education col" data-bss-type="blog-loop-item">
|
||||
<div class="card"><a href="nature-findings.html"><img class="img-fluid card-img-top rainbow-border" alt="Interface of the Nature Findings app showing options to add new findings, edit a life list, and access a knowledge base search, with a pale blue background and stylised headings." width="940" height="500" src="../../assets/img/projects/for_education/nature_findings/naturefindingspreview.webp?h=a1d20406f8862370fbf569a75cf95af9"></a>
|
||||
<div class="card-body"><a href="nature-findings.html">
|
||||
<h4 class="text-body">Nature Findings</h4>
|
||||
</a>
|
||||
<p class="card-text">Windows app to record bird sightings during walks. Submitted as a final year computing project task.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="post-tag-projects-for-education col" data-bss-type="blog-loop-item" style="display: none !important;">
|
||||
<div class="card"><a href="task-master-ios.html"><img class="img-fluid card-img-top rainbow-border" alt="Square cropped version of the Task Master logo, showing the checkbox with the tick and the “Task Master” label on a bright green background." width="940" height="500" src="../../assets/img/projects/for_education/taskmaster_for%20ios/taskmasteriospreview.webp?h=b62eff0bef2a6734f8e4ac9ad05f103c"></a>
|
||||
<div class="card-body"><a href="task-master-ios.html">
|
||||
<h4 class="text-body">Task Master for iOS</h4>
|
||||
</a>
|
||||
<p class="card-text">iOS app based on BrumHack 5.0 entry. Helps businesses manage, assign, and track their project tasks.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<nav class="d-flex justify-content-center mt-3" data-bss-type="blog-loop-pagination">
|
||||
<ul class="pagination">
|
||||
<li class="page-item disabled" data-type="prev" data-page="1"><a class="page-link" aria-label="Previous" href="#"><span aria-hidden="true">«</span></a></li>
|
||||
<li class="page-item active" data-type="regular" data-page="1"><a class="page-link" href="#">1</a></li>
|
||||
<li class="page-item" data-type="regular" data-page="2"><a class="page-link" href="#">2</a></li>
|
||||
<li class="page-item" data-type="next" data-page="2"><a class="page-link" aria-label="Next" href="#"><span aria-hidden="true">»</span></a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</main><!-- Start: Footer Multi Column -->
|
||||
<footer class="text-body bg-body" id="Light-Footer">
|
||||
<div class="container py-4 py-lg-5 center-everything">
|
||||
<div class="row justify-content-center">
|
||||
<!-- Start: Accreditations -->
|
||||
<div class="col-sm-3 col-md-6 text-center text-lg-start d-none d-sm-none d-md-none d-lg-flex flex-column">
|
||||
<h3 class="fs-6 text-center text-body accreditations-title">Accreditations</h3>
|
||||
<div class="swiper text-body w-100" id="light-swiper" data-bss-swiper="{"direction":"horizontal","loop":true,"autoplay":{"pauseOnMouseEnter":true},"autoHeight":true,"effect":"fade","fadeEffect":{"crossFade":true}}">
|
||||
<div class="swiper-wrapper">
|
||||
<!-- Start: Mountain Training -->
|
||||
<div class="swiper-slide d-flex justify-content-center center-everything">
|
||||
<div class="tahdah-badge" data-candidateid="1466454"></div>
|
||||
</div><!-- End: Mountain Training -->
|
||||
<!-- Start: Canva Essentials -->
|
||||
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/canva-essentials" target="_blank"><img class="img-fluid w-100 accreditation" width="692" height="692" src="../../assets/img/accreditations/canva-essentials-badge.webp?h=bc157efb7620e733f43b4b00981978ea"></a></div><!-- End: Canva Essentials -->
|
||||
<!-- Start: Canva Essentials for Mobile -->
|
||||
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/canva-essentials-mobile" target="_blank"><img class="img-fluid w-100 accreditation" width="692" height="692" src="../../assets/img/accreditations/canva-essentials-for-mobile-badge.webp?h=93513f8f560a2e346c12aeb9fb0c18ec"></a></div><!-- End: Canva Essentials for Mobile -->
|
||||
<!-- Start: Canva Graphic Design Essentials -->
|
||||
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/graphic-design-essentials" target="_blank"><img class="img-fluid w-100 accreditation" width="692" height="692" src="../../assets/img/accreditations/graphic-design-essentials-badge.webp?h=f5406331e45433f0d8bd6b929f9d113b"></a></div><!-- End: Canva Graphic Design Essentials -->
|
||||
<!-- Start: Marketing with Canva -->
|
||||
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/marketing-with-canva" target="_blank"><img class="img-fluid w-100 accreditation" width="1080" height="1080" src="../../assets/img/accreditations/mr-a-davis-marketing-with-canva-badge.webp?h=f0b802da597c825b7e03378130d94aca"></a></div><!-- End: Marketing with Canva -->
|
||||
<!-- Start: Canva for Work -->
|
||||
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/canva-for-work" target="_blank"><img class="img-fluid w-100 accreditation" width="2160" height="2160" src="../../assets/img/accreditations/mr-a-davis-canva-for-work-badge.webp?h=b3617633e9d2de429288704f75b304f4"></a></div><!-- End: Canva for Work -->
|
||||
<!-- Start: Canva Teacher Essentials -->
|
||||
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/teacher-essentials" target="_blank"><img class="img-fluid w-100 accreditation" width="692" height="692" src="../../assets/img/accreditations/teacher-essentials-badge.webp?h=d2d6f962e0b1bbebc68f987d6f156028"></a></div><!-- End: Canva Teacher Essentials -->
|
||||
<!-- Start: Canva AI in the Classroom -->
|
||||
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/ai-in-the-classroom" target="_blank"><img class="img-fluid w-100 accreditation" width="1080" height="1080" src="../../assets/img/accreditations/ai-in-the-classroom-badge.webp?h=769458ef2c323729c209855a3cde7312"></a></div><!-- End: Canva AI in the Classroom -->
|
||||
<!-- Start: Adobe Creative Educator Level 1 -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/3a49b473-4af9-4c5a-ab38-1c754f181c6e/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Adobe Creative Educator Level 1"" width="600" height="600" src="../../assets/img/accreditations/3_hours_adobe_creative_educator_level_1.webp?h=45de0c4e8984e885b1153e344e794beb"></a></div><!-- End: Adobe Creative Educator Level 1 -->
|
||||
<!-- Start: Minecraft Education -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/53745c80-7d0a-4428-906a-839e905c139c/public_url" target="_blank"><img class="img-fluid w-100 accreditation" width="600" height="600" src="../../assets/img/accreditations/minecraft-education-ambassador.webp?h=5c614dffa9ab6d6fd77cd805b8397ffd"></a></div><!-- End: Minecraft Education -->
|
||||
<!-- Start: MCE -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/9c9dd6cd-2703-4539-adc9-366069cbc3a9/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " MCE: Microsoft Certified Educator"" width="352" height="352" src="../../assets/img/accreditations/mce_microsoft_certified_educator.webp?h=3e67f154a356cd1ef15c31b0fb42c0c4"></a></div><!-- End: MCE -->
|
||||
<!-- Start: MIEE 2023-2024 -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/b5ac17a1-0914-496f-9d85-9608966259ee/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Microsoft Innovative Educator Expert 2023-2024"" width="600" height="600" src="../../assets/img/accreditations/microsoft_innovative_educator_expert_2023_2024.webp?h=ee882aefba64b3e5b8ea9554eeea3847"></a></div><!-- End: MIEE 2023-2024 -->
|
||||
<!-- Start: MIEE 2024-2025 -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/ad92a7cb-3e4f-46e2-8e73-99dffd0eb69e/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Microsoft Innovative Educator Expert 2024-2025"" width="600" height="600" src="../../assets/img/accreditations/microsoft_innovative_educator_expert_2024_2025.webp?h=a0b5cb2a639caf0351a977146375667e"></a></div><!-- End: MIEE 2024-2025 -->
|
||||
<!-- Start: Pearson OSA Expert -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/44756f05-e727-41c8-a352-a656c033c9f0/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Onscreen Assessment Expert GCSE Computer Science"" width="800" height="800" src="../../assets/img/accreditations/pearson_onscreen_assessment_expert.webp?h=d4e00ea5bfad5a66c619238d7cbdd8db"></a></div><!-- End: Pearson OSA Expert -->
|
||||
<!-- Start: STEM 21-22 -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/52121ef6-0760-4870-91cc-1cb20001238b/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Establishing a STEM club - from creation to careers 2021/2022"" width="1200" height="1200" src="../../assets/img/accreditations/establishing_a_stem_club_from_creation_to_careers_2021_2022.webp?h=7f96a591bd4fb09f86da96af8a8a41ef"></a></div><!-- End: STEM 21-22 -->
|
||||
<!-- Start: NCCE Secondary 21-22 -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/60d50339-2dda-4991-90b5-7ff087975746/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Secondary Computer Science - Professional Development 2021-2022"" width="1200" height="1200" src="../../assets/img/accreditations/secondary_computer_science_professional_development_2021_2022.webp?h=813dd91393f904969bc3bf184007c8c2"></a></div><!-- End: NCCE Secondary 21-22 -->
|
||||
<!-- Start: NCCE Secondary 23-24 -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/e74f9011-4006-4570-824a-f483fdcb5b26/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Secondary Computing - Professional Development 2023-2024"" width="600" height="600" src="../../assets/img/accreditations/secondary_computing_professional_development_2023_2.webp?h=77ebf2880eb7d342016b83e098d92d23"></a></div><!-- End: NCCE Secondary 23-24 -->
|
||||
<!-- Start: NCCE GCSE Computer Science 19-20 -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/c73720d2-8208-4e2b-a1e5-c473961834d9/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " GCSE Computer Science: Professional Development 2019-2020"" width="1200" height="1200" src="../../assets/img/accreditations/gcse_computer_science_professional_development_2019_2020.webp?h=fef2cee3326aeff9e2f65e86cf5e4fee"></a></div><!-- End: NCCE GCSE Computer Science 19-20 -->
|
||||
<!-- Start: NCCE GCSE Computer Science 23-24 -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/c486279a-8e97-4779-90c1-56f09622e782/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " GCSE Computer Science - Professional Development 2022-2023"" width="2000" height="2000" src="../../assets/img/accreditations/gcse_computer_science_professional_development_2022_2023.webp?h=0a54c55717b61c0a0b4ed80582d7bfae"></a></div><!-- End: NCCE GCSE Computer Science 23-24 -->
|
||||
<!-- Start: NCCE GCSE Computer Science 23-24 -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/e76ed57f-2270-47f5-8e7e-4136baa261f3/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " GCSE Computer Science - Professional Development 2023-2024"" width="600" height="600" src="../../assets/img/accreditations/gcse_computer_science_professional_development_2023.webp?h=71b8c59772af539946fb49a210b05758"></a></div><!-- End: NCCE GCSE Computer Science 23-24 -->
|
||||
<!-- Start: NCCE A Level Computer Science 23-24 -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/418cfb22-3e37-4b24-b527-652b1ab6ea76/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " A-Level Computer Science - Professional Development 2023-2024"" width="600" height="600" src="../../assets/img/accreditations/a_level_computer_science_professional_development.webp?h=a9cc6f73abdf82ab49e5f8a8695cb557"></a></div><!-- End: NCCE A Level Computer Science 23-24 -->
|
||||
<!-- Start: MOS Master -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/0e46d6b8-1a1b-4d16-a5d5-3b95661fb290/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Microsoft Office Specialist: Master 2013"" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_master_2013.webp?h=70d957a5307d38f46b84b6462439afbc"></a></div><!-- End: MOS Master -->
|
||||
<!-- Start: MOS Word Expert -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/287d0ca4-bea1-4e18-b9e7-21f6a5d5d571/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Microsoft Office Specialist: Word 2013 Expert"" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_word_2013_expert.webp?h=5bd4ec8c82587201172a8b8e460ff4e6"></a></div><!-- End: MOS Word Expert -->
|
||||
<!-- Start: MOS Word -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/f1831f0e-776b-49aa-8a8d-05817d4b1410/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Microsoft Office Specialist: Word 2013"" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_word_2013.webp?h=2b90c5590b7b50f1891a9116fa38ac36"></a></div><!-- End: MOS Word -->
|
||||
<!-- Start: MOS Excel -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/2ab55353-3267-46cc-b3f4-3099af54d869/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Microsoft Office Specialist: Excel 2013"" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_excel_2013.webp?h=f016925633d0a52b862259a05b396b6a"></a></div><!-- End: MOS Excel -->
|
||||
<!-- Start: MOS PowerPoint -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/11162aa2-331a-4ec4-a612-665f3bc59cb1/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Microsoft Office Specialist: PowerPoint 2013"" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_powerpoint_2013.webp?h=26de9623c491661347998549e10d4353"></a></div><!-- End: MOS PowerPoint -->
|
||||
<!-- Start: MOS OneNote -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/cd328b1d-27b6-4410-be70-0792a99b72ea/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Microsoft Office Specialist: OneNote 2013"" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_onenote_2013.webp?h=2ffe41c2a6e37d602469f8158ef13d79"></a></div><!-- End: MOS OneNote -->
|
||||
<!-- Start: MTA Security -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/da3b3b4c-cec4-4537-bb5b-486ce9ee6ee7/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " MTA: Security Fundamentals - Certified 2016"" width="352" height="352" src="../../assets/img/accreditations/mta_security_fundamentals_certified_2016.webp?h=0df619419a5b6d0eb694dc9363870b20"></a></div><!-- End: MTA Security -->
|
||||
<!-- Start: MTA Networking -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/23194bfe-30e4-4f8e-b9ec-338d060136dd/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " MTA: Networking Fundamentals - Certified 2016"" width="352" height="352" src="../../assets/img/accreditations/mta_networking_fundamentals_certified_2016.webp?h=cdc4618c5e86d11aa304cae14c3942bc"></a></div><!-- End: MTA Networking -->
|
||||
<!-- Start: MTA Windows OS -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/f0f27d87-424b-49e8-a444-95086d640e66/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " MTA: Windows Operating System Fundamentals - Certified 2016"" width="352" height="352" src="../../assets/img/accreditations/mta_windows_operating_system_fundamentals_certified_2016.webp?h=44a6360480ef67ced301c697d31f9fa5"></a></div><!-- End: MTA Windows OS -->
|
||||
</div>
|
||||
</div>
|
||||
<div class="swiper-nav-standalone d-flex justify-content-center accreditations-navigation" data-bss-swiper-target="#light-swiper">
|
||||
<div class="swiper-button-prev"><button class="btn btn-primary btn-sm" type="button"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-arrow-left">
|
||||
<path fill-rule="evenodd" d="M15 8a.5.5 0 0 0-.5-.5H2.707l3.147-3.146a.5.5 0 1 0-.708-.708l-4 4a.5.5 0 0 0 0 .708l4 4a.5.5 0 0 0 .708-.708L2.707 8.5H14.5A.5.5 0 0 0 15 8"></path>
|
||||
</svg></button></div>
|
||||
<div class="swiper-button-next"><button class="btn btn-primary btn-sm" type="button"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-arrow-right">
|
||||
<path fill-rule="evenodd" d="M1 8a.5.5 0 0 1 .5-.5h11.793l-3.147-3.146a.5.5 0 0 1 .708-.708l4 4a.5.5 0 0 1 0 .708l-4 4a.5.5 0 0 1-.708-.708L13.293 8.5H1.5A.5.5 0 0 1 1 8"></path>
|
||||
</svg></button></div>
|
||||
</div>
|
||||
</div><!-- End: Accreditations -->
|
||||
<!-- Start: Spacer -->
|
||||
<div class="col-md-3 text-center text-lg-start d-flex flex-column"><a class="d-flex w-100 justify-content-center center-everything" href="https://client.brixly.uk/aff.php?aff=837" target="_blank"><img class="img-fluid object-fit-contain w-50" src="https://brixly.uk/wp-content/uploads/2022/06/Artboard-32.jpg"></a></div><!-- End: Spacer -->
|
||||
<div class="col-md-3 text-center text-lg-start d-flex flex-column align-items-center order-first align-items-lg-start order-lg-last">
|
||||
<div class="fw-bold d-flex align-items-center mb-2"><img alt="Stylised orange microchip icon on a black background, designed as a modern tech-themed logo for ADCM" src="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501" width="50" height="50" class="footer-logo"><span>Mr A Lyall</span></div>
|
||||
<p>IT professional and Head of Computing in the West Midlands</p>
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
<div class="d-flex justify-content-between align-items-center pt-3">
|
||||
<p class="mb-0 footer-copyright">Copyright © 2025 ADCM Networks</p>
|
||||
<ul class="list-inline mb-0">
|
||||
<!-- Start: Mastodon -->
|
||||
<li class="list-inline-item"><a rel="me" href="https://mstdn.social/@MrDavisCSIT"><svg class="text-body" xmlns="http://www.w3.org/2000/svg" viewBox="-32 0 512 512" width="1em" height="1em" fill="currentColor">
|
||||
<!--! Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. -->
|
||||
<path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"></path>
|
||||
</svg></a></li><!-- End: Mastodon -->
|
||||
<!-- Start: Bluesky -->
|
||||
<li class="list-inline-item"><a href="https://bsky.app/profile/adcmnetworks.co.uk"><i class="fa-brands fa-square-bluesky"></i></a></li><!-- End: Bluesky -->
|
||||
<!-- Start: LinkedIn -->
|
||||
<li class="list-inline-item"><a href="https://www.linkedin.com/in/MrDavisCSIT/"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-linkedin text-body">
|
||||
<path d="M0 1.146C0 .513.526 0 1.175 0h13.65C15.474 0 16 .513 16 1.146v13.708c0 .633-.526 1.146-1.175 1.146H1.175C.526 16 0 15.487 0 14.854V1.146zm4.943 12.248V6.169H2.542v7.225h2.401m-1.2-8.212c.837 0 1.358-.554 1.358-1.248-.015-.709-.52-1.248-1.342-1.248-.822 0-1.359.54-1.359 1.248 0 .694.521 1.248 1.327 1.248h.016zm4.908 8.212V9.359c0-.216.016-.432.08-.586.173-.431.568-.878 1.232-.878.869 0 1.216.662 1.216 1.634v3.865h2.401V9.25c0-2.22-1.184-3.252-2.764-3.252-1.274 0-1.845.7-2.165 1.193v.025h-.016a5.54 5.54 0 0 1 .016-.025V6.169h-2.4c.03.678 0 7.225 0 7.225h2.4"></path>
|
||||
</svg></a></li><!-- End: LinkedIn -->
|
||||
<!-- Start: GitHub -->
|
||||
<li class="list-inline-item"><a href="https://github.com/MrDavisCSIT"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-github text-body">
|
||||
<path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8"></path>
|
||||
</svg></a></li><!-- End: GitHub -->
|
||||
<!-- Start: Reddit -->
|
||||
<li class="list-inline-item"><a href="https://www.reddit.com/user/AlexanderEDavis95/"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-reddit text-body">
|
||||
<path d="M6.167 8a.831.831 0 0 0-.83.83c0 .459.372.84.83.831a.831.831 0 0 0 0-1.661m1.843 3.647c.315 0 1.403-.038 1.976-.611a.232.232 0 0 0 0-.306.213.213 0 0 0-.306 0c-.353.363-1.126.487-1.67.487-.545 0-1.308-.124-1.671-.487a.213.213 0 0 0-.306 0 .213.213 0 0 0 0 .306c.564.563 1.652.61 1.977.61zm.992-2.807c0 .458.373.83.831.83.458 0 .83-.381.83-.83a.831.831 0 0 0-1.66 0z"></path>
|
||||
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0m-3.828-1.165c-.315 0-.602.124-.812.325-.801-.573-1.9-.945-3.121-.993l.534-2.501 1.738.372a.83.83 0 1 0 .83-.869.83.83 0 0 0-.744.468l-1.938-.41a.203.203 0 0 0-.153.028.186.186 0 0 0-.086.134l-.592 2.788c-1.24.038-2.358.41-3.17.992-.21-.2-.496-.324-.81-.324a1.163 1.163 0 0 0-.478 2.224c-.02.115-.029.23-.029.353 0 1.795 2.091 3.256 4.669 3.256 2.577 0 4.668-1.451 4.668-3.256 0-.114-.01-.238-.029-.353.401-.181.688-.592.688-1.069 0-.65-.525-1.165-1.165-1.165z"></path>
|
||||
</svg></a></li><!-- End: Reddit -->
|
||||
<!-- Start: YouTube -->
|
||||
<li class="list-inline-item"><a href="https://www.youtube.com/channel/UCgDhiQMLbTemv2varDiW2rA"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-youtube text-body">
|
||||
<path d="M8.051 1.999h.089c.822.003 4.987.033 6.11.335a2.01 2.01 0 0 1 1.415 1.42c.101.38.172.883.22 1.402l.01.104.022.26.008.104c.065.914.073 1.77.074 1.957v.075c-.001.194-.01 1.108-.082 2.06l-.008.105-.009.104c-.05.572-.124 1.14-.235 1.558a2.007 2.007 0 0 1-1.415 1.42c-1.16.312-5.569.334-6.18.335h-.142c-.309 0-1.587-.006-2.927-.052l-.17-.006-.087-.004-.171-.007-.171-.007c-1.11-.049-2.167-.128-2.654-.26a2.007 2.007 0 0 1-1.415-1.419c-.111-.417-.185-.986-.235-1.558L.09 9.82l-.008-.104A31.4 31.4 0 0 1 0 7.68v-.123c.002-.215.01-.958.064-1.778l.007-.103.003-.052.008-.104.022-.26.01-.104c.048-.519.119-1.023.22-1.402a2.007 2.007 0 0 1 1.415-1.42c.487-.13 1.544-.21 2.654-.26l.17-.007.172-.006.086-.003.171-.007A99.788 99.788 0 0 1 7.858 2h.193zM6.4 5.209v4.818l4.157-2.408z"></path>
|
||||
</svg></a></li><!-- End: YouTube -->
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</footer><!-- End: Footer Multi Column -->
|
||||
<script>
|
||||
(function() {
|
||||
let collections = document.querySelectorAll('[data-bss-type="blog-loop"]');
|
||||
let tagNavs = document.querySelectorAll('[data-bss-type="tag-nav"]');
|
||||
let tagLoops = document.querySelectorAll('[data-bss-type="tag-loop"]');
|
||||
let authorLoops = document.querySelectorAll('[data-bss-type="author-loop"]');
|
||||
let authorNavs = document.querySelectorAll('[data-bss-type="author-nav"]');
|
||||
|
||||
window.addEventListener("popstate", (e) => {
|
||||
for (let collection of collections) {
|
||||
updateCollection(collection);
|
||||
}
|
||||
|
||||
for (let tagNav of tagNavs) {
|
||||
updateTagNav(tagNav);
|
||||
}
|
||||
|
||||
for (let authorNav of authorNavs) {
|
||||
updateAuthorNav(authorNav);
|
||||
}
|
||||
});
|
||||
|
||||
for (let collection of collections) {
|
||||
|
||||
updateCollection(collection);
|
||||
|
||||
if (!canPaginateCollection(collection)) continue;
|
||||
|
||||
let pagination = collection.querySelector('[data-bss-type="blog-loop-pagination"]');
|
||||
|
||||
pagination.addEventListener('click', function(e) {
|
||||
let paginationItem = e.target.closest('.page-item');
|
||||
if (!paginationItem) return;
|
||||
|
||||
e.preventDefault();
|
||||
|
||||
if (paginationItem.classList.contains('disabled') || paginationItem.classList.contains('active')) return;
|
||||
|
||||
let collection = paginationItem.closest('[data-bss-type="blog-loop"]');
|
||||
if (!collection) return;
|
||||
|
||||
let page = parseInt(paginationItem.dataset.page);
|
||||
if (!page) return;
|
||||
|
||||
let pageParam = getPageParameter(collection);
|
||||
|
||||
if (pageParam) {
|
||||
const url = new URL(window.location);
|
||||
url.searchParams.set(pageParam, page);
|
||||
history.pushState({
|
||||
[pageParam]: page
|
||||
}, document.title, url);
|
||||
|
||||
for (let c of collections) {
|
||||
let param = getPageParameter(c);
|
||||
if (param !== pageParam) continue;
|
||||
updateCollection(c);
|
||||
}
|
||||
} else {
|
||||
updateCollection(collection, page);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
for (let tagNav of tagNavs) {
|
||||
updateTagNav(tagNav);
|
||||
tagNav.addEventListener('click', onTagClick);
|
||||
}
|
||||
|
||||
for (let tagLoop of tagLoops) {
|
||||
tagLoop.addEventListener('click', onTagClick);
|
||||
}
|
||||
|
||||
for (let authorLoop of authorLoops) {
|
||||
authorLoop.addEventListener('click', onAuthorClick);
|
||||
}
|
||||
|
||||
for (let authorNav of authorNavs) {
|
||||
updateAuthorNav(authorNav);
|
||||
}
|
||||
|
||||
function onTagClick(e) {
|
||||
onBlogFilterClick(e);
|
||||
|
||||
for (let nav of tagNavs) {
|
||||
updateTagNav(nav);
|
||||
}
|
||||
}
|
||||
|
||||
function onAuthorClick(e) {
|
||||
onBlogFilterClick(e);
|
||||
|
||||
for (let authorNav of authorNavs) {
|
||||
updateAuthorNav(authorNav);
|
||||
}
|
||||
}
|
||||
|
||||
function onBlogFilterClick(e) {
|
||||
const item = e.target.closest('[data-bss-filter="blog"]');
|
||||
if (!item || !item.dataset.hasOwnProperty('bssHref') || !item.dataset.hasOwnProperty('bssFilterParam')) return;
|
||||
|
||||
const stateNode = item.dataset.hasOwnProperty('bssStateNode') ? item : item.querySelector('[data-bss-state-node]');
|
||||
|
||||
if (stateNode && (stateNode.classList.contains('disabled') || stateNode.classList.contains('active'))) {
|
||||
e.preventDefault();
|
||||
return;
|
||||
}
|
||||
|
||||
const link = item.dataset.bssHref;
|
||||
if (!linksToCurrentPage(link)) return;
|
||||
|
||||
e.preventDefault();
|
||||
|
||||
const url = new URL(window.location);
|
||||
const filterParam = item.dataset.bssFilterParam;
|
||||
const filterValue = item.dataset.bssFilterValue || '';
|
||||
|
||||
const collectionsToUpdate = [];
|
||||
const newQueryParams = {
|
||||
[filterParam]: filterValue
|
||||
};
|
||||
|
||||
for (let c of collections) {
|
||||
if (!canFilterCollection(c)) continue;
|
||||
collectionsToUpdate.push(c);
|
||||
|
||||
let pageParam = getPageParameter(c);
|
||||
let page = url.searchParams.get(pageParam);
|
||||
if (page === null || page == 1) continue;
|
||||
|
||||
newQueryParams[pageParam] = 1;
|
||||
}
|
||||
|
||||
for (let param in newQueryParams) {
|
||||
if (newQueryParams[param]) {
|
||||
url.searchParams.set(param, newQueryParams[param]);
|
||||
} else {
|
||||
url.searchParams.delete(param);
|
||||
}
|
||||
}
|
||||
|
||||
history.pushState(newQueryParams, document.title, url);
|
||||
|
||||
for (let c of collectionsToUpdate) {
|
||||
updateCollection(c);
|
||||
}
|
||||
}
|
||||
|
||||
function getCollectionFilters(collection) {
|
||||
let filters = [];
|
||||
|
||||
try {
|
||||
const parsed = JSON.parse(collection.dataset.bssFilters);
|
||||
|
||||
if (Array.isArray(parsed)) {
|
||||
filters = parsed;
|
||||
}
|
||||
} catch (e) {}
|
||||
|
||||
return filters;
|
||||
}
|
||||
|
||||
function getCollectionEmptyFilterAction(collection, filter = '') {
|
||||
let emptyFilterActions = [];
|
||||
|
||||
try {
|
||||
const parsed = JSON.parse(collection.dataset.bssEmptyFilterActions);
|
||||
|
||||
if (Array.isArray(parsed)) {
|
||||
emptyFilterActions = parsed;
|
||||
}
|
||||
} catch (e) {}
|
||||
|
||||
const action = emptyFilterActions.find(action => action.filter === filter);
|
||||
|
||||
return action ? action.value : '';
|
||||
}
|
||||
|
||||
function canFilterCollection(collection) {
|
||||
return !!getCollectionFilters(collection).length;
|
||||
}
|
||||
|
||||
function canFilterCollectionByTag(collection) {
|
||||
return getCollectionFilters(collection).includes('tag');
|
||||
}
|
||||
|
||||
function canFilterCollectionByAuthor(collection) {
|
||||
return getCollectionFilters(collection).includes('author');
|
||||
}
|
||||
|
||||
function shouldShowAllItemsForEmptyFilter(collection, filter = '') {
|
||||
return getCollectionEmptyFilterAction(collection, filter) === 'show-all';
|
||||
}
|
||||
|
||||
function canPaginateCollection(collection) {
|
||||
return !!getCollectionPagination(collection);
|
||||
}
|
||||
|
||||
function getCollectionPagination(collection) {
|
||||
return collection.querySelector('[data-bss-type="blog-loop-pagination"]');
|
||||
}
|
||||
|
||||
function getPageParameter(collection) {
|
||||
return collection.dataset.bssPageParam;
|
||||
}
|
||||
|
||||
function linksToCurrentPage(path = '') {
|
||||
let currentURL, url;
|
||||
|
||||
try {
|
||||
currentURL = new URL(window.location);
|
||||
url = new URL(path, window.location.href);
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
}
|
||||
|
||||
return currentURL.origin === url.origin && currentURL.pathname === url.pathname;
|
||||
}
|
||||
|
||||
function updateCollection(collection, page, activeTag = '', activeAuthor = '') {
|
||||
|
||||
const url = new URL(window.location.href);
|
||||
|
||||
if (canPaginateCollection(collection)) {
|
||||
if (!page) {
|
||||
let pageParam = getPageParameter(collection);
|
||||
page = (pageParam ? url.searchParams.get(pageParam) : 1) || 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (canFilterCollectionByTag(collection) && !activeTag) {
|
||||
let tagParam = 'tag';
|
||||
activeTag = url.searchParams.get(tagParam) || '';
|
||||
}
|
||||
|
||||
if (canFilterCollectionByAuthor(collection) && !activeAuthor) {
|
||||
let authorParam = 'author';
|
||||
activeAuthor = url.searchParams.get(authorParam) || '';
|
||||
}
|
||||
|
||||
renderCollectionPage(collection, page, activeTag, activeAuthor);
|
||||
}
|
||||
|
||||
function renderCollectionPage(collection, page = 1, activeTag = '', activeAuthor = '') {
|
||||
|
||||
page = Math.max(parseInt(page, 10), 1);
|
||||
|
||||
collection.style.removeProperty('display');
|
||||
|
||||
let loopBase = collection.querySelector('[data-bss-type="blog-loop-base"]');
|
||||
loopBase && loopBase.style.removeProperty('display');
|
||||
|
||||
let emptyState = collection.querySelector('[data-bss-type="empty-state"]');
|
||||
emptyState && emptyState.style.setProperty('display', 'none', 'important');
|
||||
|
||||
let listItems = [].slice.call(collection.querySelectorAll('[data-bss-type="blog-loop-item"]'));
|
||||
listItems.forEach(item => item.style.setProperty('display', 'none', 'important'));
|
||||
|
||||
if (canFilterCollectionByTag(collection)) {
|
||||
listItems = listItems.filter(item => activeTag ? item.classList.contains('post-tag-' + activeTag) : shouldShowAllItemsForEmptyFilter(collection, 'tag'));
|
||||
}
|
||||
|
||||
if (canFilterCollectionByAuthor(collection)) {
|
||||
listItems = listItems.filter(item => activeAuthor ? item.classList.contains('post-author-' + activeAuthor) : shouldShowAllItemsForEmptyFilter(collection, 'author'));
|
||||
}
|
||||
|
||||
let perPage = collection.dataset.bssPerpage || listItems.length;
|
||||
let visibleListItems = listItems.slice((page - 1) * perPage, page * perPage);
|
||||
visibleListItems.forEach(item => item.style.removeProperty('display'));
|
||||
|
||||
let isEmpty = !visibleListItems.length;
|
||||
|
||||
if (isEmpty) {
|
||||
loopBase && loopBase.style.setProperty('display', 'none', 'important');
|
||||
emptyState && emptyState.style.removeProperty('display');
|
||||
}
|
||||
|
||||
let itemCount = listItems.length;
|
||||
let pageCount = Math.max(Math.ceil(itemCount / perPage), 1);
|
||||
|
||||
updateCollectionPagination(collection, page, pageCount, isEmpty);
|
||||
|
||||
if (collection.dataset.bssScrollOnChange) {
|
||||
scrollToCollectionTop(collection);
|
||||
}
|
||||
}
|
||||
|
||||
function updateCollectionPagination(collection, page, pageCount, isEmpty) {
|
||||
let pagination = getCollectionPagination(collection);
|
||||
if (!pagination) return;
|
||||
|
||||
let paginationItems = [].slice.call(pagination.querySelectorAll('.page-item'));
|
||||
|
||||
if (pageCount === 1 || isEmpty) {
|
||||
pagination.style.setProperty('display', 'none', 'important');
|
||||
} else {
|
||||
pagination.style.removeProperty('display');
|
||||
}
|
||||
|
||||
let previousBtnDisabled = page - 1 <= 0;
|
||||
let previousPage = previousBtnDisabled ? 1 : page - 1;
|
||||
|
||||
let nextBtnDisabled = page + 1 > pageCount;
|
||||
let nextPage = nextBtnDisabled ? pageCount : page + 1;
|
||||
|
||||
for (let i = 0; i < paginationItems.length; i++) {
|
||||
let paginationItem = paginationItems[i];
|
||||
|
||||
paginationItem.classList.remove('active', 'disabled');
|
||||
|
||||
if (paginationItem.dataset.type === 'prev') {
|
||||
paginationItem.dataset.page = previousPage;
|
||||
|
||||
if (previousBtnDisabled) {
|
||||
paginationItem.classList.add('disabled');
|
||||
}
|
||||
} else if (paginationItem.dataset.type === 'next') {
|
||||
paginationItem.dataset.page = nextPage;
|
||||
|
||||
if (nextBtnDisabled) {
|
||||
paginationItem.classList.add('disabled');
|
||||
}
|
||||
} else {
|
||||
if (paginationItem.dataset.page > pageCount) {
|
||||
paginationItem.style.setProperty('display', 'none', 'important');
|
||||
} else {
|
||||
paginationItem.style.removeProperty('display');
|
||||
}
|
||||
|
||||
if (paginationItem.dataset.page == page) {
|
||||
paginationItem.classList.add('active');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function scrollToCollectionTop(collection) {
|
||||
const rect = collection.getBoundingClientRect();
|
||||
const viewHeight = Math.max(document.documentElement.clientHeight, window.innerHeight);
|
||||
const threshold = 100;
|
||||
|
||||
if (rect.top >= 0 && viewHeight - rect.top > threshold) return;
|
||||
|
||||
setTimeout(() => {
|
||||
collection.scrollIntoView({
|
||||
behavior: "smooth",
|
||||
block: "start",
|
||||
inline: "start"
|
||||
});
|
||||
}, 0);
|
||||
}
|
||||
|
||||
function updateTagNav(tagNav) {
|
||||
const url = new URL(window.location.href);
|
||||
|
||||
let tagParam = 'tag';
|
||||
let tag = url.searchParams.get(tagParam) || '';
|
||||
|
||||
renderTagNav(tagNav, tag);
|
||||
}
|
||||
|
||||
function renderTagNav(tagNav, activeTag = '') {
|
||||
if (!tagNav.dataset.bssSyncUrl) return;
|
||||
|
||||
let navItems = [].slice.call(tagNav.querySelectorAll('[data-bss-type="tag-loop-item"]'));
|
||||
|
||||
navItems.forEach(item => {
|
||||
const activeClassNode = item.dataset.hasOwnProperty('bssStateNode') ? item : item.querySelector('[data-bss-state-node]');
|
||||
if (!activeClassNode) return;
|
||||
|
||||
activeClassNode.classList.remove('active');
|
||||
|
||||
const link = item.dataset.bssHref;
|
||||
if (!linksToCurrentPage(link) || activeClassNode.classList.contains('disabled')) return;
|
||||
|
||||
if (item.dataset.bssTag === activeTag) {
|
||||
activeClassNode.classList.add('active');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function updateAuthorNav(authorNav) {
|
||||
const url = new URL(window.location.href);
|
||||
|
||||
let authorParam = 'author';
|
||||
let author = url.searchParams.get(authorParam) || '';
|
||||
|
||||
renderAuthorNav(authorNav, author);
|
||||
}
|
||||
|
||||
function renderAuthorNav(authorNav, activeAuthor = '') {
|
||||
if (!canFilterCollectionByAuthor(authorNav)) return;
|
||||
|
||||
authorNav.style.removeProperty('display');
|
||||
|
||||
let items = [].slice.call(authorNav.querySelectorAll('[data-bss-type="author-loop-item"]'));
|
||||
items.forEach(item => item.classList.contains('author-' + activeAuthor) ? item.style.removeProperty('display') : item.style.setProperty('display', 'none', 'important'));
|
||||
}
|
||||
})();
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.6/dist/js/bootstrap.bundle.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.js"></script>
|
||||
<script src="../../assets/js/bs-init.js?h=7c6b4c49b8ac0f383799ccb3d5def770"></script>
|
||||
<script src="../../assets/js/Carousel---Slider-With-Animation-slider_with_animation.js?h=948f8788fd189b5cc9df01ff4fce4152"></script>
|
||||
<script src="../../assets/js/CookieConsentComponent-cookieconsent.js?h=83fbb3192473604d72b00a854c6de4fd"></script>
|
||||
<script src="https://kit.fontawesome.com/8970d94f9b.js"></script>
|
||||
<script src="../../assets/js/pikaday.min.js?h=039feef26d52ebc5f1260a47208bfa38"></script>
|
||||
<script src="../../assets/js/text-carousel.js?h=992f402828c7806b1f3bb7f29232e972"></script>
|
||||
<script src="../../assets/js/theme.js?h=aeddb9c3ce5d77b8278c91c07acf30ad"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
765
Export/my-work/projects-for-education/nature-findings.html
Normal file
765
Export/my-work/projects-for-education/nature-findings.html
Normal file
@@ -0,0 +1,765 @@
|
||||
<!DOCTYPE html>
|
||||
<html data-bs-theme="auto" lang="en-gb">
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<!-- Matomo -->
|
||||
<script>
|
||||
var _paq = window._paq = window._paq || [];
|
||||
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
|
||||
_paq.push(['trackPageView']);
|
||||
_paq.push(['enableLinkTracking']);
|
||||
(function() {
|
||||
var u="//analytics.adcmnetworks.co.uk/";
|
||||
_paq.push(['setTrackerUrl', u+'matomo.php']);
|
||||
_paq.push(['setSiteId', '1']);
|
||||
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
|
||||
g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
|
||||
})();
|
||||
</script>
|
||||
<!-- End Matomo Code -->
|
||||
|
||||
<script src="https://kit.fontawesome.com/8970d94f9b.js" crossorigin="anonymous"></script>
|
||||
|
||||
<meta name="fediverse:creator" content="@MrDavisCSIT@mstdn.social">
|
||||
<script src="https://cms.tahdah.me/scripts/publicbadge.js"></script>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
|
||||
<title>Nature Findings</title>
|
||||
<link rel="canonical" href="https://www.mrlyall.uk/my-work/projects-for-education/nature-findings.html">
|
||||
<meta property="og:url" content="https://www.mrlyall.uk/my-work/projects-for-education/nature-findings.html">
|
||||
<meta name="twitter:description" content="The website of Mr. A. Lyall, featuring a portfolio of work in computing education, digital projects, and curriculum resources. Explore blog posts, classroom tools, and professional insights focused on innovation, inclusion, and effective IT teaching.">
|
||||
<meta name="twitter:card" content="summary">
|
||||
<meta property="og:type" content="website">
|
||||
<meta name="twitter:title" content="Mr Lyall">
|
||||
<meta property="og:image" content="https://www.mrlyall.uk/assets/img/projects/for_education/nature_findings/naturefindingspreview.webp">
|
||||
<meta name="description" content="Windows app to record bird sightings during walks. Submitted as a final year computing project task.">
|
||||
<script>
|
||||
(function() {
|
||||
|
||||
// JavaScript snippet handling Dark/Light mode switching
|
||||
|
||||
const getStoredTheme = () => localStorage.getItem('theme');
|
||||
const setStoredTheme = theme => localStorage.setItem('theme', theme);
|
||||
const forcedTheme = document.documentElement.getAttribute('data-bss-forced-theme');
|
||||
|
||||
const getPreferredTheme = () => {
|
||||
|
||||
if (forcedTheme) return forcedTheme;
|
||||
|
||||
const storedTheme = getStoredTheme();
|
||||
if (storedTheme) {
|
||||
return storedTheme;
|
||||
}
|
||||
|
||||
const pageTheme = document.documentElement.getAttribute('data-bs-theme');
|
||||
|
||||
if (pageTheme) {
|
||||
return pageTheme;
|
||||
}
|
||||
|
||||
return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
|
||||
}
|
||||
|
||||
const setTheme = theme => {
|
||||
if (theme === 'auto' && window.matchMedia('(prefers-color-scheme: dark)').matches) {
|
||||
document.documentElement.setAttribute('data-bs-theme', 'dark');
|
||||
} else {
|
||||
document.documentElement.setAttribute('data-bs-theme', theme);
|
||||
}
|
||||
}
|
||||
|
||||
setTheme(getPreferredTheme());
|
||||
|
||||
const showActiveTheme = (theme, focus = false) => {
|
||||
const themeSwitchers = [].slice.call(document.querySelectorAll('.theme-switcher'));
|
||||
|
||||
if (!themeSwitchers.length) return;
|
||||
|
||||
document.querySelectorAll('[data-bs-theme-value]').forEach(element => {
|
||||
element.classList.remove('active');
|
||||
element.setAttribute('aria-pressed', 'false');
|
||||
});
|
||||
|
||||
for (const themeSwitcher of themeSwitchers) {
|
||||
|
||||
const btnToActivate = themeSwitcher.querySelector('[data-bs-theme-value="' + theme + '"]');
|
||||
|
||||
if (btnToActivate) {
|
||||
btnToActivate.classList.add('active');
|
||||
btnToActivate.setAttribute('aria-pressed', 'true');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => {
|
||||
const storedTheme = getStoredTheme();
|
||||
if (storedTheme !== 'light' && storedTheme !== 'dark') {
|
||||
setTheme(getPreferredTheme());
|
||||
}
|
||||
});
|
||||
|
||||
window.addEventListener('DOMContentLoaded', () => {
|
||||
showActiveTheme(getPreferredTheme());
|
||||
|
||||
document.querySelectorAll('[data-bs-theme-value]')
|
||||
.forEach(toggle => {
|
||||
toggle.addEventListener('click', (e) => {
|
||||
e.preventDefault();
|
||||
const theme = toggle.getAttribute('data-bs-theme-value');
|
||||
setStoredTheme(theme);
|
||||
setTheme(theme);
|
||||
showActiveTheme(theme);
|
||||
})
|
||||
})
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
|
||||
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_white.webp?h=7cd31e9469bb0f9d3a4e704b3c0b1445" media="(prefers-color-scheme: dark)">
|
||||
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
|
||||
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_white.webp?h=7cd31e9469bb0f9d3a4e704b3c0b1445" media="(prefers-color-scheme: dark)">
|
||||
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
|
||||
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
|
||||
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
|
||||
<link rel="stylesheet" href="../../assets/bootstrap/css/bootstrap.min.css?h=c9d969cca6f72ca8d4dfd457f2e8eff8">
|
||||
<link rel="stylesheet" href="../../assets/css/Lato.css?h=69bc5b06794edd4ca9a38642d36c83d0">
|
||||
<link rel="stylesheet" href="../../assets/css/bss-overrides.css?h=15b91a8988c8fc6448a8989802a159de">
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.css">
|
||||
<link rel="stylesheet" href="../../assets/css/styles.css?h=7c67e1bb3df4cb41abaceaf312f03dfa">
|
||||
<link rel="stylesheet" href="../../assets/css/pikaday.min.css?h=a9ab8ca627aa6e8f64b730ca9c2c781d">
|
||||
<link rel="stylesheet" href="../../assets/css/CookieConsentComponent.css?h=39af3305e95f4d2a8883e97d7e0cdb14">
|
||||
<link rel="stylesheet" href="../../assets/css/animations.compiled.css?h=49917e33fe831aa33e24fb1e8124fdd9">
|
||||
<link rel="stylesheet" href="../../assets/css/Carousel---Slider-With-Animation.css?h=63f5768f05d2ae91446ac010bcd4844a">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<nav class="navbar navbar-expand-md fixed-top portfolio-navbar gradient navbar-dark">
|
||||
<div class="container-fluid"><a class="navbar-brand logo" href="../../"><img alt="Stylised white microchip icon on a black background, designed as a modern tech-themed logo for ADCM" src="../../assets/img/brand/adcm_logo_white.webp?h=7cd31e9469bb0f9d3a4e704b3c0b1445" width="50" height="50" class="mobile-padding-left"></a><button data-bs-toggle="collapse" class="navbar-toggler" data-bs-target="#navbarNav" style="margin-right: 0.5em;"><span class="visually-hidden">Toggle navigation</span><span class="navbar-toggler-icon"></span></button>
|
||||
<div class="collapse navbar-collapse" id="navbarNav">
|
||||
<ul class="navbar-nav ms-auto">
|
||||
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../">Home</a></li>
|
||||
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../about">About</a></li>
|
||||
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../projects">My Work</a></li>
|
||||
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../my-work/showreel">Showreel</a></li>
|
||||
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../blog">Blog</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
<main class="page">
|
||||
<section class="portfolio-block block-intro">
|
||||
<div class="container center-everything">
|
||||
<!-- Start: portfolio heading -->
|
||||
<div class="align-content-center heading blog-heading naturefindings-windows">
|
||||
<h2>Nature Findings</h2>
|
||||
<p>Windows app to record bird sightings during walks. Submitted as a final year computing project task.</p>
|
||||
</div><!-- End: portfolio heading -->
|
||||
</div>
|
||||
</section>
|
||||
<section class="portfolio-block project">
|
||||
<div class="container center-everything">
|
||||
<div class="carousel slide carousel-fade project-carousel" data-bs-ride="carousel" id="carousel-1">
|
||||
<div class="carousel-inner">
|
||||
<div class="carousel-item active"><img class="img-fluid w-100 d-block slider-image-fit" alt="Interface of the Nature Findings app showing options to add new findings, edit a life list, and access a knowledge base search, with a pale blue background and stylised headings." width="1271" height="500" src="../../assets/img/projects/for_education/nature_findings/naturefindingspage.webp?h=b23a2fb35ee5e85a50e8fd8dc72d85d9"></div>
|
||||
</div>
|
||||
<div>
|
||||
<!-- Start: Previous --><a class="carousel-control-prev" href="#carousel-1" role="button" data-bs-slide="prev"><span class="carousel-control-prev-icon"></span><span class="visually-hidden">Previous</span></a><!-- End: Previous -->
|
||||
<!-- Start: Next --><a class="carousel-control-next" href="#carousel-1" role="button" data-bs-slide="next"><span class="carousel-control-next-icon"></span><span class="visually-hidden">Next</span></a><!-- End: Next -->
|
||||
</div>
|
||||
<div class="carousel-indicators focus-ring"><button type="button" data-bs-target="#carousel-1" data-bs-slide-to="0" class="active"></button></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col info">
|
||||
<p>Achieved a D Grade (47%)<br><br>A local naturalist wishes to log nature sightings during walks. The original project looks at developing a windows application that connects to an online database which will allow further deveopment of the project to allow other users to be able to view other peoples sightings. A future project would create a mobile application vserion of the project which will utilise mobile data on devices.</p>
|
||||
</div>
|
||||
<div class="col-auto meta project-details">
|
||||
<div class="tags"><span class="meta-heading">Institution</span><span>Coundon Court</span><span class="meta-heading">Qualification</span><span>A Level Computing</span><span class="meta-heading">Grade</span><span>D (47%)</span><span class="meta-heading">Submitted</span><span>April 2013</span><span class="meta-heading">Products Created</span><span>Microsoft Windows Application</span><a class="btn btn-primary project-buttons" role="button" href="https://gitea.adcmnetworks.co.uk/MrDavisCSIT/NatureFindings" target="_blank"> View project on Gitea</a></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="more-projects">
|
||||
<h3 class="text-center more-projects-heading">More Projects</h3>
|
||||
<div data-bss-type="blog-loop" data-bss-perpage="3" style="display: none !important;">
|
||||
<div class="row gy-4 row-cols-1 row-cols-sm-2 row-cols-md-2 row-cols-lg-3 mt-0" data-bss-type="blog-loop-base">
|
||||
<div class="post-tag-projects-for-education col" data-bss-type="blog-loop-item">
|
||||
<div class="card"><a href="bitbox.html"><img class="img-fluid card-img-top rainbow-border" alt="Square logo with the text "Bit:Box" and a pixelated lightbulb icon." width="1080" height="1080" src="../../assets/img/projects/for_education/bit_box/bit_box_logo.webp?h=36b5ef1a4c9f880d65df48518293999f"></a>
|
||||
<div class="card-body"><a href="bitbox.html">
|
||||
<h4 class="text-body">Bit:Box</h4>
|
||||
</a>
|
||||
<p class="card-text">Educational device, app, and website using switches and lights to visually demonstrate binary logic.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="post-tag-projects-for-education col" data-bss-type="blog-loop-item">
|
||||
<div class="card"><a href="csbox.html"><img class="img-fluid card-img-top rainbow-border" alt="A stylised cube logo with the letters "CS" on the left face and "BX" on the right face. The cube is surrounded by vibrant icons and patterns referencing computer science, including binary digits (e.g. 111101, 10101), hexadecimal numbers, colour pencils, and graphical representations of data." width="500" height="500" src="../../assets/img/projects/for_education/cs_box/csbox_logo.webp?h=487f527cf87df0dba11b6f4d4993a80d"></a>
|
||||
<div class="card-body"><a href="csbox.html">
|
||||
<h4 class="text-body">CS:Box</h4>
|
||||
</a>
|
||||
<p class="card-text">Interactive educational tool expanding Bit:Box to include additional UK Computing Curriculum topics.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="post-tag-projects-for-education col" data-bss-type="blog-loop-item">
|
||||
<div class="card"><a href="my-mind.html"><img class="img-fluid card-img-top rainbow-border" alt="Polygonal-style graphic of a human brain in shades of pink and red on a purple background." width="338" height="338" src="../../assets/img/projects/for_education/my_mind/my_mind_logo.webp?h=4e299b8017d1483b6dfb87ea14d502aa"></a>
|
||||
<div class="card-body"><a href="my-mind.html">
|
||||
<h4 class="text-body">My Mind</h4>
|
||||
</a>
|
||||
<p class="card-text">App simplifying BCU mental health support, linking students to counsellors, emergency calls, forums.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="post-tag-projects-for-education col" data-bss-type="blog-loop-item" style="display: none !important;">
|
||||
<div class="card"><a href="task-master-ios.html"><img class="img-fluid card-img-top rainbow-border" alt="Square cropped version of the Task Master logo, showing the checkbox with the tick and the “Task Master” label on a bright green background." width="940" height="500" src="../../assets/img/projects/for_education/taskmaster_for%20ios/taskmasteriospreview.webp?h=b62eff0bef2a6734f8e4ac9ad05f103c"></a>
|
||||
<div class="card-body"><a href="task-master-ios.html">
|
||||
<h4 class="text-body">Task Master for iOS</h4>
|
||||
</a>
|
||||
<p class="card-text">iOS app based on BrumHack 5.0 entry. Helps businesses manage, assign, and track their project tasks.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<nav class="d-flex justify-content-center mt-3" data-bss-type="blog-loop-pagination">
|
||||
<ul class="pagination">
|
||||
<li class="page-item disabled" data-type="prev" data-page="1"><a class="page-link" aria-label="Previous" href="#"><span aria-hidden="true">«</span></a></li>
|
||||
<li class="page-item active" data-type="regular" data-page="1"><a class="page-link" href="#">1</a></li>
|
||||
<li class="page-item" data-type="regular" data-page="2"><a class="page-link" href="#">2</a></li>
|
||||
<li class="page-item" data-type="next" data-page="2"><a class="page-link" aria-label="Next" href="#"><span aria-hidden="true">»</span></a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</main><!-- Start: Footer Multi Column -->
|
||||
<footer class="text-body bg-body" id="Light-Footer">
|
||||
<div class="container py-4 py-lg-5 center-everything">
|
||||
<div class="row justify-content-center">
|
||||
<!-- Start: Accreditations -->
|
||||
<div class="col-sm-3 col-md-6 text-center text-lg-start d-none d-sm-none d-md-none d-lg-flex flex-column">
|
||||
<h3 class="fs-6 text-center text-body accreditations-title">Accreditations</h3>
|
||||
<div class="swiper text-body w-100" id="light-swiper" data-bss-swiper="{"direction":"horizontal","loop":true,"autoplay":{"pauseOnMouseEnter":true},"autoHeight":true,"effect":"fade","fadeEffect":{"crossFade":true}}">
|
||||
<div class="swiper-wrapper">
|
||||
<!-- Start: Mountain Training -->
|
||||
<div class="swiper-slide d-flex justify-content-center center-everything">
|
||||
<div class="tahdah-badge" data-candidateid="1466454"></div>
|
||||
</div><!-- End: Mountain Training -->
|
||||
<!-- Start: Canva Essentials -->
|
||||
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/canva-essentials" target="_blank"><img class="img-fluid w-100 accreditation" width="692" height="692" src="../../assets/img/accreditations/canva-essentials-badge.webp?h=bc157efb7620e733f43b4b00981978ea"></a></div><!-- End: Canva Essentials -->
|
||||
<!-- Start: Canva Essentials for Mobile -->
|
||||
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/canva-essentials-mobile" target="_blank"><img class="img-fluid w-100 accreditation" width="692" height="692" src="../../assets/img/accreditations/canva-essentials-for-mobile-badge.webp?h=93513f8f560a2e346c12aeb9fb0c18ec"></a></div><!-- End: Canva Essentials for Mobile -->
|
||||
<!-- Start: Canva Graphic Design Essentials -->
|
||||
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/graphic-design-essentials" target="_blank"><img class="img-fluid w-100 accreditation" width="692" height="692" src="../../assets/img/accreditations/graphic-design-essentials-badge.webp?h=f5406331e45433f0d8bd6b929f9d113b"></a></div><!-- End: Canva Graphic Design Essentials -->
|
||||
<!-- Start: Marketing with Canva -->
|
||||
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/marketing-with-canva" target="_blank"><img class="img-fluid w-100 accreditation" width="1080" height="1080" src="../../assets/img/accreditations/mr-a-davis-marketing-with-canva-badge.webp?h=f0b802da597c825b7e03378130d94aca"></a></div><!-- End: Marketing with Canva -->
|
||||
<!-- Start: Canva for Work -->
|
||||
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/canva-for-work" target="_blank"><img class="img-fluid w-100 accreditation" width="2160" height="2160" src="../../assets/img/accreditations/mr-a-davis-canva-for-work-badge.webp?h=b3617633e9d2de429288704f75b304f4"></a></div><!-- End: Canva for Work -->
|
||||
<!-- Start: Canva Teacher Essentials -->
|
||||
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/teacher-essentials" target="_blank"><img class="img-fluid w-100 accreditation" width="692" height="692" src="../../assets/img/accreditations/teacher-essentials-badge.webp?h=d2d6f962e0b1bbebc68f987d6f156028"></a></div><!-- End: Canva Teacher Essentials -->
|
||||
<!-- Start: Canva AI in the Classroom -->
|
||||
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/ai-in-the-classroom" target="_blank"><img class="img-fluid w-100 accreditation" width="1080" height="1080" src="../../assets/img/accreditations/ai-in-the-classroom-badge.webp?h=769458ef2c323729c209855a3cde7312"></a></div><!-- End: Canva AI in the Classroom -->
|
||||
<!-- Start: Adobe Creative Educator Level 1 -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/3a49b473-4af9-4c5a-ab38-1c754f181c6e/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Adobe Creative Educator Level 1"" width="600" height="600" src="../../assets/img/accreditations/3_hours_adobe_creative_educator_level_1.webp?h=45de0c4e8984e885b1153e344e794beb"></a></div><!-- End: Adobe Creative Educator Level 1 -->
|
||||
<!-- Start: Minecraft Education -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/53745c80-7d0a-4428-906a-839e905c139c/public_url" target="_blank"><img class="img-fluid w-100 accreditation" width="600" height="600" src="../../assets/img/accreditations/minecraft-education-ambassador.webp?h=5c614dffa9ab6d6fd77cd805b8397ffd"></a></div><!-- End: Minecraft Education -->
|
||||
<!-- Start: MCE -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/9c9dd6cd-2703-4539-adc9-366069cbc3a9/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " MCE: Microsoft Certified Educator"" width="352" height="352" src="../../assets/img/accreditations/mce_microsoft_certified_educator.webp?h=3e67f154a356cd1ef15c31b0fb42c0c4"></a></div><!-- End: MCE -->
|
||||
<!-- Start: MIEE 2023-2024 -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/b5ac17a1-0914-496f-9d85-9608966259ee/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Microsoft Innovative Educator Expert 2023-2024"" width="600" height="600" src="../../assets/img/accreditations/microsoft_innovative_educator_expert_2023_2024.webp?h=ee882aefba64b3e5b8ea9554eeea3847"></a></div><!-- End: MIEE 2023-2024 -->
|
||||
<!-- Start: MIEE 2024-2025 -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/ad92a7cb-3e4f-46e2-8e73-99dffd0eb69e/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Microsoft Innovative Educator Expert 2024-2025"" width="600" height="600" src="../../assets/img/accreditations/microsoft_innovative_educator_expert_2024_2025.webp?h=a0b5cb2a639caf0351a977146375667e"></a></div><!-- End: MIEE 2024-2025 -->
|
||||
<!-- Start: Pearson OSA Expert -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/44756f05-e727-41c8-a352-a656c033c9f0/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Onscreen Assessment Expert GCSE Computer Science"" width="800" height="800" src="../../assets/img/accreditations/pearson_onscreen_assessment_expert.webp?h=d4e00ea5bfad5a66c619238d7cbdd8db"></a></div><!-- End: Pearson OSA Expert -->
|
||||
<!-- Start: STEM 21-22 -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/52121ef6-0760-4870-91cc-1cb20001238b/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Establishing a STEM club - from creation to careers 2021/2022"" width="1200" height="1200" src="../../assets/img/accreditations/establishing_a_stem_club_from_creation_to_careers_2021_2022.webp?h=7f96a591bd4fb09f86da96af8a8a41ef"></a></div><!-- End: STEM 21-22 -->
|
||||
<!-- Start: NCCE Secondary 21-22 -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/60d50339-2dda-4991-90b5-7ff087975746/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Secondary Computer Science - Professional Development 2021-2022"" width="1200" height="1200" src="../../assets/img/accreditations/secondary_computer_science_professional_development_2021_2022.webp?h=813dd91393f904969bc3bf184007c8c2"></a></div><!-- End: NCCE Secondary 21-22 -->
|
||||
<!-- Start: NCCE Secondary 23-24 -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/e74f9011-4006-4570-824a-f483fdcb5b26/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Secondary Computing - Professional Development 2023-2024"" width="600" height="600" src="../../assets/img/accreditations/secondary_computing_professional_development_2023_2.webp?h=77ebf2880eb7d342016b83e098d92d23"></a></div><!-- End: NCCE Secondary 23-24 -->
|
||||
<!-- Start: NCCE GCSE Computer Science 19-20 -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/c73720d2-8208-4e2b-a1e5-c473961834d9/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " GCSE Computer Science: Professional Development 2019-2020"" width="1200" height="1200" src="../../assets/img/accreditations/gcse_computer_science_professional_development_2019_2020.webp?h=fef2cee3326aeff9e2f65e86cf5e4fee"></a></div><!-- End: NCCE GCSE Computer Science 19-20 -->
|
||||
<!-- Start: NCCE GCSE Computer Science 23-24 -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/c486279a-8e97-4779-90c1-56f09622e782/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " GCSE Computer Science - Professional Development 2022-2023"" width="2000" height="2000" src="../../assets/img/accreditations/gcse_computer_science_professional_development_2022_2023.webp?h=0a54c55717b61c0a0b4ed80582d7bfae"></a></div><!-- End: NCCE GCSE Computer Science 23-24 -->
|
||||
<!-- Start: NCCE GCSE Computer Science 23-24 -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/e76ed57f-2270-47f5-8e7e-4136baa261f3/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " GCSE Computer Science - Professional Development 2023-2024"" width="600" height="600" src="../../assets/img/accreditations/gcse_computer_science_professional_development_2023.webp?h=71b8c59772af539946fb49a210b05758"></a></div><!-- End: NCCE GCSE Computer Science 23-24 -->
|
||||
<!-- Start: NCCE A Level Computer Science 23-24 -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/418cfb22-3e37-4b24-b527-652b1ab6ea76/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " A-Level Computer Science - Professional Development 2023-2024"" width="600" height="600" src="../../assets/img/accreditations/a_level_computer_science_professional_development.webp?h=a9cc6f73abdf82ab49e5f8a8695cb557"></a></div><!-- End: NCCE A Level Computer Science 23-24 -->
|
||||
<!-- Start: MOS Master -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/0e46d6b8-1a1b-4d16-a5d5-3b95661fb290/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Microsoft Office Specialist: Master 2013"" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_master_2013.webp?h=70d957a5307d38f46b84b6462439afbc"></a></div><!-- End: MOS Master -->
|
||||
<!-- Start: MOS Word Expert -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/287d0ca4-bea1-4e18-b9e7-21f6a5d5d571/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Microsoft Office Specialist: Word 2013 Expert"" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_word_2013_expert.webp?h=5bd4ec8c82587201172a8b8e460ff4e6"></a></div><!-- End: MOS Word Expert -->
|
||||
<!-- Start: MOS Word -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/f1831f0e-776b-49aa-8a8d-05817d4b1410/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Microsoft Office Specialist: Word 2013"" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_word_2013.webp?h=2b90c5590b7b50f1891a9116fa38ac36"></a></div><!-- End: MOS Word -->
|
||||
<!-- Start: MOS Excel -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/2ab55353-3267-46cc-b3f4-3099af54d869/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Microsoft Office Specialist: Excel 2013"" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_excel_2013.webp?h=f016925633d0a52b862259a05b396b6a"></a></div><!-- End: MOS Excel -->
|
||||
<!-- Start: MOS PowerPoint -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/11162aa2-331a-4ec4-a612-665f3bc59cb1/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Microsoft Office Specialist: PowerPoint 2013"" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_powerpoint_2013.webp?h=26de9623c491661347998549e10d4353"></a></div><!-- End: MOS PowerPoint -->
|
||||
<!-- Start: MOS OneNote -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/cd328b1d-27b6-4410-be70-0792a99b72ea/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Microsoft Office Specialist: OneNote 2013"" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_onenote_2013.webp?h=2ffe41c2a6e37d602469f8158ef13d79"></a></div><!-- End: MOS OneNote -->
|
||||
<!-- Start: MTA Security -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/da3b3b4c-cec4-4537-bb5b-486ce9ee6ee7/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " MTA: Security Fundamentals - Certified 2016"" width="352" height="352" src="../../assets/img/accreditations/mta_security_fundamentals_certified_2016.webp?h=0df619419a5b6d0eb694dc9363870b20"></a></div><!-- End: MTA Security -->
|
||||
<!-- Start: MTA Networking -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/23194bfe-30e4-4f8e-b9ec-338d060136dd/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " MTA: Networking Fundamentals - Certified 2016"" width="352" height="352" src="../../assets/img/accreditations/mta_networking_fundamentals_certified_2016.webp?h=cdc4618c5e86d11aa304cae14c3942bc"></a></div><!-- End: MTA Networking -->
|
||||
<!-- Start: MTA Windows OS -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/f0f27d87-424b-49e8-a444-95086d640e66/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " MTA: Windows Operating System Fundamentals - Certified 2016"" width="352" height="352" src="../../assets/img/accreditations/mta_windows_operating_system_fundamentals_certified_2016.webp?h=44a6360480ef67ced301c697d31f9fa5"></a></div><!-- End: MTA Windows OS -->
|
||||
</div>
|
||||
</div>
|
||||
<div class="swiper-nav-standalone d-flex justify-content-center accreditations-navigation" data-bss-swiper-target="#light-swiper">
|
||||
<div class="swiper-button-prev"><button class="btn btn-primary btn-sm" type="button"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-arrow-left">
|
||||
<path fill-rule="evenodd" d="M15 8a.5.5 0 0 0-.5-.5H2.707l3.147-3.146a.5.5 0 1 0-.708-.708l-4 4a.5.5 0 0 0 0 .708l4 4a.5.5 0 0 0 .708-.708L2.707 8.5H14.5A.5.5 0 0 0 15 8"></path>
|
||||
</svg></button></div>
|
||||
<div class="swiper-button-next"><button class="btn btn-primary btn-sm" type="button"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-arrow-right">
|
||||
<path fill-rule="evenodd" d="M1 8a.5.5 0 0 1 .5-.5h11.793l-3.147-3.146a.5.5 0 0 1 .708-.708l4 4a.5.5 0 0 1 0 .708l-4 4a.5.5 0 0 1-.708-.708L13.293 8.5H1.5A.5.5 0 0 1 1 8"></path>
|
||||
</svg></button></div>
|
||||
</div>
|
||||
</div><!-- End: Accreditations -->
|
||||
<!-- Start: Spacer -->
|
||||
<div class="col-md-3 text-center text-lg-start d-flex flex-column"><a class="d-flex w-100 justify-content-center center-everything" href="https://client.brixly.uk/aff.php?aff=837" target="_blank"><img class="img-fluid object-fit-contain w-50" src="https://brixly.uk/wp-content/uploads/2022/06/Artboard-32.jpg"></a></div><!-- End: Spacer -->
|
||||
<div class="col-md-3 text-center text-lg-start d-flex flex-column align-items-center order-first align-items-lg-start order-lg-last">
|
||||
<div class="fw-bold d-flex align-items-center mb-2"><img alt="Stylised orange microchip icon on a black background, designed as a modern tech-themed logo for ADCM" src="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501" width="50" height="50" class="footer-logo"><span>Mr A Lyall</span></div>
|
||||
<p>IT professional and Head of Computing in the West Midlands</p>
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
<div class="d-flex justify-content-between align-items-center pt-3">
|
||||
<p class="mb-0 footer-copyright">Copyright © 2025 ADCM Networks</p>
|
||||
<ul class="list-inline mb-0">
|
||||
<!-- Start: Mastodon -->
|
||||
<li class="list-inline-item"><a rel="me" href="https://mstdn.social/@MrDavisCSIT"><svg class="text-body" xmlns="http://www.w3.org/2000/svg" viewBox="-32 0 512 512" width="1em" height="1em" fill="currentColor">
|
||||
<!--! Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. -->
|
||||
<path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"></path>
|
||||
</svg></a></li><!-- End: Mastodon -->
|
||||
<!-- Start: Bluesky -->
|
||||
<li class="list-inline-item"><a href="https://bsky.app/profile/adcmnetworks.co.uk"><i class="fa-brands fa-square-bluesky"></i></a></li><!-- End: Bluesky -->
|
||||
<!-- Start: LinkedIn -->
|
||||
<li class="list-inline-item"><a href="https://www.linkedin.com/in/MrDavisCSIT/"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-linkedin text-body">
|
||||
<path d="M0 1.146C0 .513.526 0 1.175 0h13.65C15.474 0 16 .513 16 1.146v13.708c0 .633-.526 1.146-1.175 1.146H1.175C.526 16 0 15.487 0 14.854V1.146zm4.943 12.248V6.169H2.542v7.225h2.401m-1.2-8.212c.837 0 1.358-.554 1.358-1.248-.015-.709-.52-1.248-1.342-1.248-.822 0-1.359.54-1.359 1.248 0 .694.521 1.248 1.327 1.248h.016zm4.908 8.212V9.359c0-.216.016-.432.08-.586.173-.431.568-.878 1.232-.878.869 0 1.216.662 1.216 1.634v3.865h2.401V9.25c0-2.22-1.184-3.252-2.764-3.252-1.274 0-1.845.7-2.165 1.193v.025h-.016a5.54 5.54 0 0 1 .016-.025V6.169h-2.4c.03.678 0 7.225 0 7.225h2.4"></path>
|
||||
</svg></a></li><!-- End: LinkedIn -->
|
||||
<!-- Start: GitHub -->
|
||||
<li class="list-inline-item"><a href="https://github.com/MrDavisCSIT"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-github text-body">
|
||||
<path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8"></path>
|
||||
</svg></a></li><!-- End: GitHub -->
|
||||
<!-- Start: Reddit -->
|
||||
<li class="list-inline-item"><a href="https://www.reddit.com/user/AlexanderEDavis95/"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-reddit text-body">
|
||||
<path d="M6.167 8a.831.831 0 0 0-.83.83c0 .459.372.84.83.831a.831.831 0 0 0 0-1.661m1.843 3.647c.315 0 1.403-.038 1.976-.611a.232.232 0 0 0 0-.306.213.213 0 0 0-.306 0c-.353.363-1.126.487-1.67.487-.545 0-1.308-.124-1.671-.487a.213.213 0 0 0-.306 0 .213.213 0 0 0 0 .306c.564.563 1.652.61 1.977.61zm.992-2.807c0 .458.373.83.831.83.458 0 .83-.381.83-.83a.831.831 0 0 0-1.66 0z"></path>
|
||||
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0m-3.828-1.165c-.315 0-.602.124-.812.325-.801-.573-1.9-.945-3.121-.993l.534-2.501 1.738.372a.83.83 0 1 0 .83-.869.83.83 0 0 0-.744.468l-1.938-.41a.203.203 0 0 0-.153.028.186.186 0 0 0-.086.134l-.592 2.788c-1.24.038-2.358.41-3.17.992-.21-.2-.496-.324-.81-.324a1.163 1.163 0 0 0-.478 2.224c-.02.115-.029.23-.029.353 0 1.795 2.091 3.256 4.669 3.256 2.577 0 4.668-1.451 4.668-3.256 0-.114-.01-.238-.029-.353.401-.181.688-.592.688-1.069 0-.65-.525-1.165-1.165-1.165z"></path>
|
||||
</svg></a></li><!-- End: Reddit -->
|
||||
<!-- Start: YouTube -->
|
||||
<li class="list-inline-item"><a href="https://www.youtube.com/channel/UCgDhiQMLbTemv2varDiW2rA"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-youtube text-body">
|
||||
<path d="M8.051 1.999h.089c.822.003 4.987.033 6.11.335a2.01 2.01 0 0 1 1.415 1.42c.101.38.172.883.22 1.402l.01.104.022.26.008.104c.065.914.073 1.77.074 1.957v.075c-.001.194-.01 1.108-.082 2.06l-.008.105-.009.104c-.05.572-.124 1.14-.235 1.558a2.007 2.007 0 0 1-1.415 1.42c-1.16.312-5.569.334-6.18.335h-.142c-.309 0-1.587-.006-2.927-.052l-.17-.006-.087-.004-.171-.007-.171-.007c-1.11-.049-2.167-.128-2.654-.26a2.007 2.007 0 0 1-1.415-1.419c-.111-.417-.185-.986-.235-1.558L.09 9.82l-.008-.104A31.4 31.4 0 0 1 0 7.68v-.123c.002-.215.01-.958.064-1.778l.007-.103.003-.052.008-.104.022-.26.01-.104c.048-.519.119-1.023.22-1.402a2.007 2.007 0 0 1 1.415-1.42c.487-.13 1.544-.21 2.654-.26l.17-.007.172-.006.086-.003.171-.007A99.788 99.788 0 0 1 7.858 2h.193zM6.4 5.209v4.818l4.157-2.408z"></path>
|
||||
</svg></a></li><!-- End: YouTube -->
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</footer><!-- End: Footer Multi Column -->
|
||||
<script>
|
||||
(function() {
|
||||
let collections = document.querySelectorAll('[data-bss-type="blog-loop"]');
|
||||
let tagNavs = document.querySelectorAll('[data-bss-type="tag-nav"]');
|
||||
let tagLoops = document.querySelectorAll('[data-bss-type="tag-loop"]');
|
||||
let authorLoops = document.querySelectorAll('[data-bss-type="author-loop"]');
|
||||
let authorNavs = document.querySelectorAll('[data-bss-type="author-nav"]');
|
||||
|
||||
window.addEventListener("popstate", (e) => {
|
||||
for (let collection of collections) {
|
||||
updateCollection(collection);
|
||||
}
|
||||
|
||||
for (let tagNav of tagNavs) {
|
||||
updateTagNav(tagNav);
|
||||
}
|
||||
|
||||
for (let authorNav of authorNavs) {
|
||||
updateAuthorNav(authorNav);
|
||||
}
|
||||
});
|
||||
|
||||
for (let collection of collections) {
|
||||
|
||||
updateCollection(collection);
|
||||
|
||||
if (!canPaginateCollection(collection)) continue;
|
||||
|
||||
let pagination = collection.querySelector('[data-bss-type="blog-loop-pagination"]');
|
||||
|
||||
pagination.addEventListener('click', function(e) {
|
||||
let paginationItem = e.target.closest('.page-item');
|
||||
if (!paginationItem) return;
|
||||
|
||||
e.preventDefault();
|
||||
|
||||
if (paginationItem.classList.contains('disabled') || paginationItem.classList.contains('active')) return;
|
||||
|
||||
let collection = paginationItem.closest('[data-bss-type="blog-loop"]');
|
||||
if (!collection) return;
|
||||
|
||||
let page = parseInt(paginationItem.dataset.page);
|
||||
if (!page) return;
|
||||
|
||||
let pageParam = getPageParameter(collection);
|
||||
|
||||
if (pageParam) {
|
||||
const url = new URL(window.location);
|
||||
url.searchParams.set(pageParam, page);
|
||||
history.pushState({
|
||||
[pageParam]: page
|
||||
}, document.title, url);
|
||||
|
||||
for (let c of collections) {
|
||||
let param = getPageParameter(c);
|
||||
if (param !== pageParam) continue;
|
||||
updateCollection(c);
|
||||
}
|
||||
} else {
|
||||
updateCollection(collection, page);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
for (let tagNav of tagNavs) {
|
||||
updateTagNav(tagNav);
|
||||
tagNav.addEventListener('click', onTagClick);
|
||||
}
|
||||
|
||||
for (let tagLoop of tagLoops) {
|
||||
tagLoop.addEventListener('click', onTagClick);
|
||||
}
|
||||
|
||||
for (let authorLoop of authorLoops) {
|
||||
authorLoop.addEventListener('click', onAuthorClick);
|
||||
}
|
||||
|
||||
for (let authorNav of authorNavs) {
|
||||
updateAuthorNav(authorNav);
|
||||
}
|
||||
|
||||
function onTagClick(e) {
|
||||
onBlogFilterClick(e);
|
||||
|
||||
for (let nav of tagNavs) {
|
||||
updateTagNav(nav);
|
||||
}
|
||||
}
|
||||
|
||||
function onAuthorClick(e) {
|
||||
onBlogFilterClick(e);
|
||||
|
||||
for (let authorNav of authorNavs) {
|
||||
updateAuthorNav(authorNav);
|
||||
}
|
||||
}
|
||||
|
||||
function onBlogFilterClick(e) {
|
||||
const item = e.target.closest('[data-bss-filter="blog"]');
|
||||
if (!item || !item.dataset.hasOwnProperty('bssHref') || !item.dataset.hasOwnProperty('bssFilterParam')) return;
|
||||
|
||||
const stateNode = item.dataset.hasOwnProperty('bssStateNode') ? item : item.querySelector('[data-bss-state-node]');
|
||||
|
||||
if (stateNode && (stateNode.classList.contains('disabled') || stateNode.classList.contains('active'))) {
|
||||
e.preventDefault();
|
||||
return;
|
||||
}
|
||||
|
||||
const link = item.dataset.bssHref;
|
||||
if (!linksToCurrentPage(link)) return;
|
||||
|
||||
e.preventDefault();
|
||||
|
||||
const url = new URL(window.location);
|
||||
const filterParam = item.dataset.bssFilterParam;
|
||||
const filterValue = item.dataset.bssFilterValue || '';
|
||||
|
||||
const collectionsToUpdate = [];
|
||||
const newQueryParams = {
|
||||
[filterParam]: filterValue
|
||||
};
|
||||
|
||||
for (let c of collections) {
|
||||
if (!canFilterCollection(c)) continue;
|
||||
collectionsToUpdate.push(c);
|
||||
|
||||
let pageParam = getPageParameter(c);
|
||||
let page = url.searchParams.get(pageParam);
|
||||
if (page === null || page == 1) continue;
|
||||
|
||||
newQueryParams[pageParam] = 1;
|
||||
}
|
||||
|
||||
for (let param in newQueryParams) {
|
||||
if (newQueryParams[param]) {
|
||||
url.searchParams.set(param, newQueryParams[param]);
|
||||
} else {
|
||||
url.searchParams.delete(param);
|
||||
}
|
||||
}
|
||||
|
||||
history.pushState(newQueryParams, document.title, url);
|
||||
|
||||
for (let c of collectionsToUpdate) {
|
||||
updateCollection(c);
|
||||
}
|
||||
}
|
||||
|
||||
function getCollectionFilters(collection) {
|
||||
let filters = [];
|
||||
|
||||
try {
|
||||
const parsed = JSON.parse(collection.dataset.bssFilters);
|
||||
|
||||
if (Array.isArray(parsed)) {
|
||||
filters = parsed;
|
||||
}
|
||||
} catch (e) {}
|
||||
|
||||
return filters;
|
||||
}
|
||||
|
||||
function getCollectionEmptyFilterAction(collection, filter = '') {
|
||||
let emptyFilterActions = [];
|
||||
|
||||
try {
|
||||
const parsed = JSON.parse(collection.dataset.bssEmptyFilterActions);
|
||||
|
||||
if (Array.isArray(parsed)) {
|
||||
emptyFilterActions = parsed;
|
||||
}
|
||||
} catch (e) {}
|
||||
|
||||
const action = emptyFilterActions.find(action => action.filter === filter);
|
||||
|
||||
return action ? action.value : '';
|
||||
}
|
||||
|
||||
function canFilterCollection(collection) {
|
||||
return !!getCollectionFilters(collection).length;
|
||||
}
|
||||
|
||||
function canFilterCollectionByTag(collection) {
|
||||
return getCollectionFilters(collection).includes('tag');
|
||||
}
|
||||
|
||||
function canFilterCollectionByAuthor(collection) {
|
||||
return getCollectionFilters(collection).includes('author');
|
||||
}
|
||||
|
||||
function shouldShowAllItemsForEmptyFilter(collection, filter = '') {
|
||||
return getCollectionEmptyFilterAction(collection, filter) === 'show-all';
|
||||
}
|
||||
|
||||
function canPaginateCollection(collection) {
|
||||
return !!getCollectionPagination(collection);
|
||||
}
|
||||
|
||||
function getCollectionPagination(collection) {
|
||||
return collection.querySelector('[data-bss-type="blog-loop-pagination"]');
|
||||
}
|
||||
|
||||
function getPageParameter(collection) {
|
||||
return collection.dataset.bssPageParam;
|
||||
}
|
||||
|
||||
function linksToCurrentPage(path = '') {
|
||||
let currentURL, url;
|
||||
|
||||
try {
|
||||
currentURL = new URL(window.location);
|
||||
url = new URL(path, window.location.href);
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
}
|
||||
|
||||
return currentURL.origin === url.origin && currentURL.pathname === url.pathname;
|
||||
}
|
||||
|
||||
function updateCollection(collection, page, activeTag = '', activeAuthor = '') {
|
||||
|
||||
const url = new URL(window.location.href);
|
||||
|
||||
if (canPaginateCollection(collection)) {
|
||||
if (!page) {
|
||||
let pageParam = getPageParameter(collection);
|
||||
page = (pageParam ? url.searchParams.get(pageParam) : 1) || 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (canFilterCollectionByTag(collection) && !activeTag) {
|
||||
let tagParam = 'tag';
|
||||
activeTag = url.searchParams.get(tagParam) || '';
|
||||
}
|
||||
|
||||
if (canFilterCollectionByAuthor(collection) && !activeAuthor) {
|
||||
let authorParam = 'author';
|
||||
activeAuthor = url.searchParams.get(authorParam) || '';
|
||||
}
|
||||
|
||||
renderCollectionPage(collection, page, activeTag, activeAuthor);
|
||||
}
|
||||
|
||||
function renderCollectionPage(collection, page = 1, activeTag = '', activeAuthor = '') {
|
||||
|
||||
page = Math.max(parseInt(page, 10), 1);
|
||||
|
||||
collection.style.removeProperty('display');
|
||||
|
||||
let loopBase = collection.querySelector('[data-bss-type="blog-loop-base"]');
|
||||
loopBase && loopBase.style.removeProperty('display');
|
||||
|
||||
let emptyState = collection.querySelector('[data-bss-type="empty-state"]');
|
||||
emptyState && emptyState.style.setProperty('display', 'none', 'important');
|
||||
|
||||
let listItems = [].slice.call(collection.querySelectorAll('[data-bss-type="blog-loop-item"]'));
|
||||
listItems.forEach(item => item.style.setProperty('display', 'none', 'important'));
|
||||
|
||||
if (canFilterCollectionByTag(collection)) {
|
||||
listItems = listItems.filter(item => activeTag ? item.classList.contains('post-tag-' + activeTag) : shouldShowAllItemsForEmptyFilter(collection, 'tag'));
|
||||
}
|
||||
|
||||
if (canFilterCollectionByAuthor(collection)) {
|
||||
listItems = listItems.filter(item => activeAuthor ? item.classList.contains('post-author-' + activeAuthor) : shouldShowAllItemsForEmptyFilter(collection, 'author'));
|
||||
}
|
||||
|
||||
let perPage = collection.dataset.bssPerpage || listItems.length;
|
||||
let visibleListItems = listItems.slice((page - 1) * perPage, page * perPage);
|
||||
visibleListItems.forEach(item => item.style.removeProperty('display'));
|
||||
|
||||
let isEmpty = !visibleListItems.length;
|
||||
|
||||
if (isEmpty) {
|
||||
loopBase && loopBase.style.setProperty('display', 'none', 'important');
|
||||
emptyState && emptyState.style.removeProperty('display');
|
||||
}
|
||||
|
||||
let itemCount = listItems.length;
|
||||
let pageCount = Math.max(Math.ceil(itemCount / perPage), 1);
|
||||
|
||||
updateCollectionPagination(collection, page, pageCount, isEmpty);
|
||||
|
||||
if (collection.dataset.bssScrollOnChange) {
|
||||
scrollToCollectionTop(collection);
|
||||
}
|
||||
}
|
||||
|
||||
function updateCollectionPagination(collection, page, pageCount, isEmpty) {
|
||||
let pagination = getCollectionPagination(collection);
|
||||
if (!pagination) return;
|
||||
|
||||
let paginationItems = [].slice.call(pagination.querySelectorAll('.page-item'));
|
||||
|
||||
if (pageCount === 1 || isEmpty) {
|
||||
pagination.style.setProperty('display', 'none', 'important');
|
||||
} else {
|
||||
pagination.style.removeProperty('display');
|
||||
}
|
||||
|
||||
let previousBtnDisabled = page - 1 <= 0;
|
||||
let previousPage = previousBtnDisabled ? 1 : page - 1;
|
||||
|
||||
let nextBtnDisabled = page + 1 > pageCount;
|
||||
let nextPage = nextBtnDisabled ? pageCount : page + 1;
|
||||
|
||||
for (let i = 0; i < paginationItems.length; i++) {
|
||||
let paginationItem = paginationItems[i];
|
||||
|
||||
paginationItem.classList.remove('active', 'disabled');
|
||||
|
||||
if (paginationItem.dataset.type === 'prev') {
|
||||
paginationItem.dataset.page = previousPage;
|
||||
|
||||
if (previousBtnDisabled) {
|
||||
paginationItem.classList.add('disabled');
|
||||
}
|
||||
} else if (paginationItem.dataset.type === 'next') {
|
||||
paginationItem.dataset.page = nextPage;
|
||||
|
||||
if (nextBtnDisabled) {
|
||||
paginationItem.classList.add('disabled');
|
||||
}
|
||||
} else {
|
||||
if (paginationItem.dataset.page > pageCount) {
|
||||
paginationItem.style.setProperty('display', 'none', 'important');
|
||||
} else {
|
||||
paginationItem.style.removeProperty('display');
|
||||
}
|
||||
|
||||
if (paginationItem.dataset.page == page) {
|
||||
paginationItem.classList.add('active');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function scrollToCollectionTop(collection) {
|
||||
const rect = collection.getBoundingClientRect();
|
||||
const viewHeight = Math.max(document.documentElement.clientHeight, window.innerHeight);
|
||||
const threshold = 100;
|
||||
|
||||
if (rect.top >= 0 && viewHeight - rect.top > threshold) return;
|
||||
|
||||
setTimeout(() => {
|
||||
collection.scrollIntoView({
|
||||
behavior: "smooth",
|
||||
block: "start",
|
||||
inline: "start"
|
||||
});
|
||||
}, 0);
|
||||
}
|
||||
|
||||
function updateTagNav(tagNav) {
|
||||
const url = new URL(window.location.href);
|
||||
|
||||
let tagParam = 'tag';
|
||||
let tag = url.searchParams.get(tagParam) || '';
|
||||
|
||||
renderTagNav(tagNav, tag);
|
||||
}
|
||||
|
||||
function renderTagNav(tagNav, activeTag = '') {
|
||||
if (!tagNav.dataset.bssSyncUrl) return;
|
||||
|
||||
let navItems = [].slice.call(tagNav.querySelectorAll('[data-bss-type="tag-loop-item"]'));
|
||||
|
||||
navItems.forEach(item => {
|
||||
const activeClassNode = item.dataset.hasOwnProperty('bssStateNode') ? item : item.querySelector('[data-bss-state-node]');
|
||||
if (!activeClassNode) return;
|
||||
|
||||
activeClassNode.classList.remove('active');
|
||||
|
||||
const link = item.dataset.bssHref;
|
||||
if (!linksToCurrentPage(link) || activeClassNode.classList.contains('disabled')) return;
|
||||
|
||||
if (item.dataset.bssTag === activeTag) {
|
||||
activeClassNode.classList.add('active');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function updateAuthorNav(authorNav) {
|
||||
const url = new URL(window.location.href);
|
||||
|
||||
let authorParam = 'author';
|
||||
let author = url.searchParams.get(authorParam) || '';
|
||||
|
||||
renderAuthorNav(authorNav, author);
|
||||
}
|
||||
|
||||
function renderAuthorNav(authorNav, activeAuthor = '') {
|
||||
if (!canFilterCollectionByAuthor(authorNav)) return;
|
||||
|
||||
authorNav.style.removeProperty('display');
|
||||
|
||||
let items = [].slice.call(authorNav.querySelectorAll('[data-bss-type="author-loop-item"]'));
|
||||
items.forEach(item => item.classList.contains('author-' + activeAuthor) ? item.style.removeProperty('display') : item.style.setProperty('display', 'none', 'important'));
|
||||
}
|
||||
})();
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.6/dist/js/bootstrap.bundle.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.js"></script>
|
||||
<script src="../../assets/js/bs-init.js?h=7c6b4c49b8ac0f383799ccb3d5def770"></script>
|
||||
<script src="../../assets/js/Carousel---Slider-With-Animation-slider_with_animation.js?h=948f8788fd189b5cc9df01ff4fce4152"></script>
|
||||
<script src="../../assets/js/CookieConsentComponent-cookieconsent.js?h=83fbb3192473604d72b00a854c6de4fd"></script>
|
||||
<script src="https://kit.fontawesome.com/8970d94f9b.js"></script>
|
||||
<script src="../../assets/js/pikaday.min.js?h=039feef26d52ebc5f1260a47208bfa38"></script>
|
||||
<script src="../../assets/js/text-carousel.js?h=992f402828c7806b1f3bb7f29232e972"></script>
|
||||
<script src="../../assets/js/theme.js?h=aeddb9c3ce5d77b8278c91c07acf30ad"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
765
Export/my-work/projects-for-education/task-master-ios.html
Normal file
765
Export/my-work/projects-for-education/task-master-ios.html
Normal file
@@ -0,0 +1,765 @@
|
||||
<!DOCTYPE html>
|
||||
<html data-bs-theme="auto" lang="en-gb">
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<!-- Matomo -->
|
||||
<script>
|
||||
var _paq = window._paq = window._paq || [];
|
||||
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
|
||||
_paq.push(['trackPageView']);
|
||||
_paq.push(['enableLinkTracking']);
|
||||
(function() {
|
||||
var u="//analytics.adcmnetworks.co.uk/";
|
||||
_paq.push(['setTrackerUrl', u+'matomo.php']);
|
||||
_paq.push(['setSiteId', '1']);
|
||||
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
|
||||
g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
|
||||
})();
|
||||
</script>
|
||||
<!-- End Matomo Code -->
|
||||
|
||||
<script src="https://kit.fontawesome.com/8970d94f9b.js" crossorigin="anonymous"></script>
|
||||
|
||||
<meta name="fediverse:creator" content="@MrDavisCSIT@mstdn.social">
|
||||
<script src="https://cms.tahdah.me/scripts/publicbadge.js"></script>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
|
||||
<title>Task Master for iOS</title>
|
||||
<link rel="canonical" href="https://www.mrlyall.uk/my-work/projects-for-education/task-master-ios.html">
|
||||
<meta property="og:url" content="https://www.mrlyall.uk/my-work/projects-for-education/task-master-ios.html">
|
||||
<meta name="twitter:description" content="The website of Mr. A. Lyall, featuring a portfolio of work in computing education, digital projects, and curriculum resources. Explore blog posts, classroom tools, and professional insights focused on innovation, inclusion, and effective IT teaching.">
|
||||
<meta name="twitter:card" content="summary">
|
||||
<meta property="og:type" content="website">
|
||||
<meta name="twitter:title" content="Mr Lyall">
|
||||
<meta property="og:image" content="https://www.mrlyall.uk/assets/img/projects/for_education/taskmaster_for ios/taskmasteriospreview.webp">
|
||||
<meta name="description" content="iOS app based on BrumHack 5.0 entry. Helps businesses manage, assign, and track their project tasks.">
|
||||
<script>
|
||||
(function() {
|
||||
|
||||
// JavaScript snippet handling Dark/Light mode switching
|
||||
|
||||
const getStoredTheme = () => localStorage.getItem('theme');
|
||||
const setStoredTheme = theme => localStorage.setItem('theme', theme);
|
||||
const forcedTheme = document.documentElement.getAttribute('data-bss-forced-theme');
|
||||
|
||||
const getPreferredTheme = () => {
|
||||
|
||||
if (forcedTheme) return forcedTheme;
|
||||
|
||||
const storedTheme = getStoredTheme();
|
||||
if (storedTheme) {
|
||||
return storedTheme;
|
||||
}
|
||||
|
||||
const pageTheme = document.documentElement.getAttribute('data-bs-theme');
|
||||
|
||||
if (pageTheme) {
|
||||
return pageTheme;
|
||||
}
|
||||
|
||||
return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
|
||||
}
|
||||
|
||||
const setTheme = theme => {
|
||||
if (theme === 'auto' && window.matchMedia('(prefers-color-scheme: dark)').matches) {
|
||||
document.documentElement.setAttribute('data-bs-theme', 'dark');
|
||||
} else {
|
||||
document.documentElement.setAttribute('data-bs-theme', theme);
|
||||
}
|
||||
}
|
||||
|
||||
setTheme(getPreferredTheme());
|
||||
|
||||
const showActiveTheme = (theme, focus = false) => {
|
||||
const themeSwitchers = [].slice.call(document.querySelectorAll('.theme-switcher'));
|
||||
|
||||
if (!themeSwitchers.length) return;
|
||||
|
||||
document.querySelectorAll('[data-bs-theme-value]').forEach(element => {
|
||||
element.classList.remove('active');
|
||||
element.setAttribute('aria-pressed', 'false');
|
||||
});
|
||||
|
||||
for (const themeSwitcher of themeSwitchers) {
|
||||
|
||||
const btnToActivate = themeSwitcher.querySelector('[data-bs-theme-value="' + theme + '"]');
|
||||
|
||||
if (btnToActivate) {
|
||||
btnToActivate.classList.add('active');
|
||||
btnToActivate.setAttribute('aria-pressed', 'true');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => {
|
||||
const storedTheme = getStoredTheme();
|
||||
if (storedTheme !== 'light' && storedTheme !== 'dark') {
|
||||
setTheme(getPreferredTheme());
|
||||
}
|
||||
});
|
||||
|
||||
window.addEventListener('DOMContentLoaded', () => {
|
||||
showActiveTheme(getPreferredTheme());
|
||||
|
||||
document.querySelectorAll('[data-bs-theme-value]')
|
||||
.forEach(toggle => {
|
||||
toggle.addEventListener('click', (e) => {
|
||||
e.preventDefault();
|
||||
const theme = toggle.getAttribute('data-bs-theme-value');
|
||||
setStoredTheme(theme);
|
||||
setTheme(theme);
|
||||
showActiveTheme(theme);
|
||||
})
|
||||
})
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
|
||||
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_white.webp?h=7cd31e9469bb0f9d3a4e704b3c0b1445" media="(prefers-color-scheme: dark)">
|
||||
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
|
||||
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_white.webp?h=7cd31e9469bb0f9d3a4e704b3c0b1445" media="(prefers-color-scheme: dark)">
|
||||
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
|
||||
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
|
||||
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
|
||||
<link rel="stylesheet" href="../../assets/bootstrap/css/bootstrap.min.css?h=c9d969cca6f72ca8d4dfd457f2e8eff8">
|
||||
<link rel="stylesheet" href="../../assets/css/Lato.css?h=69bc5b06794edd4ca9a38642d36c83d0">
|
||||
<link rel="stylesheet" href="../../assets/css/bss-overrides.css?h=15b91a8988c8fc6448a8989802a159de">
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.css">
|
||||
<link rel="stylesheet" href="../../assets/css/styles.css?h=7c67e1bb3df4cb41abaceaf312f03dfa">
|
||||
<link rel="stylesheet" href="../../assets/css/pikaday.min.css?h=a9ab8ca627aa6e8f64b730ca9c2c781d">
|
||||
<link rel="stylesheet" href="../../assets/css/CookieConsentComponent.css?h=39af3305e95f4d2a8883e97d7e0cdb14">
|
||||
<link rel="stylesheet" href="../../assets/css/animations.compiled.css?h=49917e33fe831aa33e24fb1e8124fdd9">
|
||||
<link rel="stylesheet" href="../../assets/css/Carousel---Slider-With-Animation.css?h=63f5768f05d2ae91446ac010bcd4844a">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<nav class="navbar navbar-expand-md fixed-top portfolio-navbar gradient navbar-dark">
|
||||
<div class="container-fluid"><a class="navbar-brand logo" href="../../"><img alt="Stylised white microchip icon on a black background, designed as a modern tech-themed logo for ADCM" src="../../assets/img/brand/adcm_logo_white.webp?h=7cd31e9469bb0f9d3a4e704b3c0b1445" width="50" height="50" class="mobile-padding-left"></a><button data-bs-toggle="collapse" class="navbar-toggler" data-bs-target="#navbarNav" style="margin-right: 0.5em;"><span class="visually-hidden">Toggle navigation</span><span class="navbar-toggler-icon"></span></button>
|
||||
<div class="collapse navbar-collapse" id="navbarNav">
|
||||
<ul class="navbar-nav ms-auto">
|
||||
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../">Home</a></li>
|
||||
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../about">About</a></li>
|
||||
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../projects">My Work</a></li>
|
||||
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../my-work/showreel">Showreel</a></li>
|
||||
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../blog">Blog</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
<main class="page">
|
||||
<section class="portfolio-block block-intro">
|
||||
<div class="container center-everything">
|
||||
<!-- Start: portfolio heading -->
|
||||
<div class="align-content-center heading blog-heading taskmaster-ios">
|
||||
<h2>Task Master for iOS</h2>
|
||||
<p>iOS app based on BrumHack 5.0 entry. Helps businesses manage, assign, and track their project tasks.</p>
|
||||
</div><!-- End: portfolio heading -->
|
||||
</div>
|
||||
</section>
|
||||
<section class="portfolio-block project">
|
||||
<div class="container center-everything">
|
||||
<div class="carousel slide carousel-fade project-carousel" data-bs-ride="carousel" id="carousel-1">
|
||||
<div class="carousel-inner">
|
||||
<div class="carousel-item active"><img class="img-fluid w-100 d-block slider-image-fit" alt="High-resolution banner-style logo for the Task Master project. A green background features a large white tick inside a checkbox on the left, and “Task Master” in white text on the right." width="1271" height="500" src="../../assets/img/projects/for_education/taskmaster_for%20ios/taskmasteriospage.webp?h=9a54afee9fa882396952ae9e5e7af4cf"></div>
|
||||
</div>
|
||||
<div>
|
||||
<!-- Start: Previous --><a class="carousel-control-prev" href="#carousel-1" role="button" data-bs-slide="prev"><span class="carousel-control-prev-icon"></span><span class="visually-hidden">Previous</span></a><!-- End: Previous -->
|
||||
<!-- Start: Next --><a class="carousel-control-next" href="#carousel-1" role="button" data-bs-slide="next"><span class="carousel-control-next-icon"></span><span class="visually-hidden">Next</span></a><!-- End: Next -->
|
||||
</div>
|
||||
<div class="carousel-indicators focus-ring"><button type="button" data-bs-target="#carousel-1" data-bs-slide-to="0" class="active"></button></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col info">
|
||||
<p>The aim is to create a mobile version of Task Master, an online application that allowed businesses to create and manage projects and tasks. Task Master was originally created at BrumHack 5.0 and came 3rd in the competition. Users will be able to create, update and track tasks within a specified project. Users will also be able to delegate tasks to other users on the apps database</p>
|
||||
</div>
|
||||
<div class="col-auto meta project-details">
|
||||
<div class="tags"><span class="meta-heading">Institution</span><span>Birmingham City University</span><span class="meta-heading">Qualification</span><span>Bachelor of Science with Honours in Computer Science</span><span class="meta-heading">Grade</span><span>Pass (58%)</span><span class="meta-heading">Submitted</span><span>May 2017</span><span class="meta-heading">Products Created</span><span>iOS App</span><a class="btn btn-primary project-buttons" role="button" href="https://gitea.adcmnetworks.co.uk/MrDavisCSIT/MobileandWebTechnologiesCoursework-TaskMaster" target="_blank"> View project on Gitea</a></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="more-projects">
|
||||
<h3 class="text-center more-projects-heading">More Projects</h3>
|
||||
<div data-bss-type="blog-loop" data-bss-perpage="3" style="display: none !important;">
|
||||
<div class="row gy-4 row-cols-1 row-cols-sm-2 row-cols-md-2 row-cols-lg-3 mt-0" data-bss-type="blog-loop-base">
|
||||
<div class="post-tag-projects-for-education col" data-bss-type="blog-loop-item">
|
||||
<div class="card"><a href="bitbox.html"><img class="img-fluid card-img-top rainbow-border" alt="Square logo with the text "Bit:Box" and a pixelated lightbulb icon." width="1080" height="1080" src="../../assets/img/projects/for_education/bit_box/bit_box_logo.webp?h=36b5ef1a4c9f880d65df48518293999f"></a>
|
||||
<div class="card-body"><a href="bitbox.html">
|
||||
<h4 class="text-body">Bit:Box</h4>
|
||||
</a>
|
||||
<p class="card-text">Educational device, app, and website using switches and lights to visually demonstrate binary logic.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="post-tag-projects-for-education col" data-bss-type="blog-loop-item">
|
||||
<div class="card"><a href="csbox.html"><img class="img-fluid card-img-top rainbow-border" alt="A stylised cube logo with the letters "CS" on the left face and "BX" on the right face. The cube is surrounded by vibrant icons and patterns referencing computer science, including binary digits (e.g. 111101, 10101), hexadecimal numbers, colour pencils, and graphical representations of data." width="500" height="500" src="../../assets/img/projects/for_education/cs_box/csbox_logo.webp?h=487f527cf87df0dba11b6f4d4993a80d"></a>
|
||||
<div class="card-body"><a href="csbox.html">
|
||||
<h4 class="text-body">CS:Box</h4>
|
||||
</a>
|
||||
<p class="card-text">Interactive educational tool expanding Bit:Box to include additional UK Computing Curriculum topics.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="post-tag-projects-for-education col" data-bss-type="blog-loop-item">
|
||||
<div class="card"><a href="my-mind.html"><img class="img-fluid card-img-top rainbow-border" alt="Polygonal-style graphic of a human brain in shades of pink and red on a purple background." width="338" height="338" src="../../assets/img/projects/for_education/my_mind/my_mind_logo.webp?h=4e299b8017d1483b6dfb87ea14d502aa"></a>
|
||||
<div class="card-body"><a href="my-mind.html">
|
||||
<h4 class="text-body">My Mind</h4>
|
||||
</a>
|
||||
<p class="card-text">App simplifying BCU mental health support, linking students to counsellors, emergency calls, forums.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="post-tag-projects-for-education col" data-bss-type="blog-loop-item" style="display: none !important;">
|
||||
<div class="card"><a href="nature-findings.html"><img class="img-fluid card-img-top rainbow-border" alt="Interface of the Nature Findings app showing options to add new findings, edit a life list, and access a knowledge base search, with a pale blue background and stylised headings." width="940" height="500" src="../../assets/img/projects/for_education/nature_findings/naturefindingspreview.webp?h=a1d20406f8862370fbf569a75cf95af9"></a>
|
||||
<div class="card-body"><a href="nature-findings.html">
|
||||
<h4 class="text-body">Nature Findings</h4>
|
||||
</a>
|
||||
<p class="card-text">Windows app to record bird sightings during walks. Submitted as a final year computing project task.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<nav class="d-flex justify-content-center mt-3" data-bss-type="blog-loop-pagination">
|
||||
<ul class="pagination">
|
||||
<li class="page-item disabled" data-type="prev" data-page="1"><a class="page-link" aria-label="Previous" href="#"><span aria-hidden="true">«</span></a></li>
|
||||
<li class="page-item active" data-type="regular" data-page="1"><a class="page-link" href="#">1</a></li>
|
||||
<li class="page-item" data-type="regular" data-page="2"><a class="page-link" href="#">2</a></li>
|
||||
<li class="page-item" data-type="next" data-page="2"><a class="page-link" aria-label="Next" href="#"><span aria-hidden="true">»</span></a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</main><!-- Start: Footer Multi Column -->
|
||||
<footer class="text-body bg-body" id="Light-Footer">
|
||||
<div class="container py-4 py-lg-5 center-everything">
|
||||
<div class="row justify-content-center">
|
||||
<!-- Start: Accreditations -->
|
||||
<div class="col-sm-3 col-md-6 text-center text-lg-start d-none d-sm-none d-md-none d-lg-flex flex-column">
|
||||
<h3 class="fs-6 text-center text-body accreditations-title">Accreditations</h3>
|
||||
<div class="swiper text-body w-100" id="light-swiper" data-bss-swiper="{"direction":"horizontal","loop":true,"autoplay":{"pauseOnMouseEnter":true},"autoHeight":true,"effect":"fade","fadeEffect":{"crossFade":true}}">
|
||||
<div class="swiper-wrapper">
|
||||
<!-- Start: Mountain Training -->
|
||||
<div class="swiper-slide d-flex justify-content-center center-everything">
|
||||
<div class="tahdah-badge" data-candidateid="1466454"></div>
|
||||
</div><!-- End: Mountain Training -->
|
||||
<!-- Start: Canva Essentials -->
|
||||
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/canva-essentials" target="_blank"><img class="img-fluid w-100 accreditation" width="692" height="692" src="../../assets/img/accreditations/canva-essentials-badge.webp?h=bc157efb7620e733f43b4b00981978ea"></a></div><!-- End: Canva Essentials -->
|
||||
<!-- Start: Canva Essentials for Mobile -->
|
||||
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/canva-essentials-mobile" target="_blank"><img class="img-fluid w-100 accreditation" width="692" height="692" src="../../assets/img/accreditations/canva-essentials-for-mobile-badge.webp?h=93513f8f560a2e346c12aeb9fb0c18ec"></a></div><!-- End: Canva Essentials for Mobile -->
|
||||
<!-- Start: Canva Graphic Design Essentials -->
|
||||
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/graphic-design-essentials" target="_blank"><img class="img-fluid w-100 accreditation" width="692" height="692" src="../../assets/img/accreditations/graphic-design-essentials-badge.webp?h=f5406331e45433f0d8bd6b929f9d113b"></a></div><!-- End: Canva Graphic Design Essentials -->
|
||||
<!-- Start: Marketing with Canva -->
|
||||
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/marketing-with-canva" target="_blank"><img class="img-fluid w-100 accreditation" width="1080" height="1080" src="../../assets/img/accreditations/mr-a-davis-marketing-with-canva-badge.webp?h=f0b802da597c825b7e03378130d94aca"></a></div><!-- End: Marketing with Canva -->
|
||||
<!-- Start: Canva for Work -->
|
||||
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/canva-for-work" target="_blank"><img class="img-fluid w-100 accreditation" width="2160" height="2160" src="../../assets/img/accreditations/mr-a-davis-canva-for-work-badge.webp?h=b3617633e9d2de429288704f75b304f4"></a></div><!-- End: Canva for Work -->
|
||||
<!-- Start: Canva Teacher Essentials -->
|
||||
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/teacher-essentials" target="_blank"><img class="img-fluid w-100 accreditation" width="692" height="692" src="../../assets/img/accreditations/teacher-essentials-badge.webp?h=d2d6f962e0b1bbebc68f987d6f156028"></a></div><!-- End: Canva Teacher Essentials -->
|
||||
<!-- Start: Canva AI in the Classroom -->
|
||||
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/ai-in-the-classroom" target="_blank"><img class="img-fluid w-100 accreditation" width="1080" height="1080" src="../../assets/img/accreditations/ai-in-the-classroom-badge.webp?h=769458ef2c323729c209855a3cde7312"></a></div><!-- End: Canva AI in the Classroom -->
|
||||
<!-- Start: Adobe Creative Educator Level 1 -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/3a49b473-4af9-4c5a-ab38-1c754f181c6e/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Adobe Creative Educator Level 1"" width="600" height="600" src="../../assets/img/accreditations/3_hours_adobe_creative_educator_level_1.webp?h=45de0c4e8984e885b1153e344e794beb"></a></div><!-- End: Adobe Creative Educator Level 1 -->
|
||||
<!-- Start: Minecraft Education -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/53745c80-7d0a-4428-906a-839e905c139c/public_url" target="_blank"><img class="img-fluid w-100 accreditation" width="600" height="600" src="../../assets/img/accreditations/minecraft-education-ambassador.webp?h=5c614dffa9ab6d6fd77cd805b8397ffd"></a></div><!-- End: Minecraft Education -->
|
||||
<!-- Start: MCE -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/9c9dd6cd-2703-4539-adc9-366069cbc3a9/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " MCE: Microsoft Certified Educator"" width="352" height="352" src="../../assets/img/accreditations/mce_microsoft_certified_educator.webp?h=3e67f154a356cd1ef15c31b0fb42c0c4"></a></div><!-- End: MCE -->
|
||||
<!-- Start: MIEE 2023-2024 -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/b5ac17a1-0914-496f-9d85-9608966259ee/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Microsoft Innovative Educator Expert 2023-2024"" width="600" height="600" src="../../assets/img/accreditations/microsoft_innovative_educator_expert_2023_2024.webp?h=ee882aefba64b3e5b8ea9554eeea3847"></a></div><!-- End: MIEE 2023-2024 -->
|
||||
<!-- Start: MIEE 2024-2025 -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/ad92a7cb-3e4f-46e2-8e73-99dffd0eb69e/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Microsoft Innovative Educator Expert 2024-2025"" width="600" height="600" src="../../assets/img/accreditations/microsoft_innovative_educator_expert_2024_2025.webp?h=a0b5cb2a639caf0351a977146375667e"></a></div><!-- End: MIEE 2024-2025 -->
|
||||
<!-- Start: Pearson OSA Expert -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/44756f05-e727-41c8-a352-a656c033c9f0/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Onscreen Assessment Expert GCSE Computer Science"" width="800" height="800" src="../../assets/img/accreditations/pearson_onscreen_assessment_expert.webp?h=d4e00ea5bfad5a66c619238d7cbdd8db"></a></div><!-- End: Pearson OSA Expert -->
|
||||
<!-- Start: STEM 21-22 -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/52121ef6-0760-4870-91cc-1cb20001238b/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Establishing a STEM club - from creation to careers 2021/2022"" width="1200" height="1200" src="../../assets/img/accreditations/establishing_a_stem_club_from_creation_to_careers_2021_2022.webp?h=7f96a591bd4fb09f86da96af8a8a41ef"></a></div><!-- End: STEM 21-22 -->
|
||||
<!-- Start: NCCE Secondary 21-22 -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/60d50339-2dda-4991-90b5-7ff087975746/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Secondary Computer Science - Professional Development 2021-2022"" width="1200" height="1200" src="../../assets/img/accreditations/secondary_computer_science_professional_development_2021_2022.webp?h=813dd91393f904969bc3bf184007c8c2"></a></div><!-- End: NCCE Secondary 21-22 -->
|
||||
<!-- Start: NCCE Secondary 23-24 -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/e74f9011-4006-4570-824a-f483fdcb5b26/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Secondary Computing - Professional Development 2023-2024"" width="600" height="600" src="../../assets/img/accreditations/secondary_computing_professional_development_2023_2.webp?h=77ebf2880eb7d342016b83e098d92d23"></a></div><!-- End: NCCE Secondary 23-24 -->
|
||||
<!-- Start: NCCE GCSE Computer Science 19-20 -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/c73720d2-8208-4e2b-a1e5-c473961834d9/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " GCSE Computer Science: Professional Development 2019-2020"" width="1200" height="1200" src="../../assets/img/accreditations/gcse_computer_science_professional_development_2019_2020.webp?h=fef2cee3326aeff9e2f65e86cf5e4fee"></a></div><!-- End: NCCE GCSE Computer Science 19-20 -->
|
||||
<!-- Start: NCCE GCSE Computer Science 23-24 -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/c486279a-8e97-4779-90c1-56f09622e782/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " GCSE Computer Science - Professional Development 2022-2023"" width="2000" height="2000" src="../../assets/img/accreditations/gcse_computer_science_professional_development_2022_2023.webp?h=0a54c55717b61c0a0b4ed80582d7bfae"></a></div><!-- End: NCCE GCSE Computer Science 23-24 -->
|
||||
<!-- Start: NCCE GCSE Computer Science 23-24 -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/e76ed57f-2270-47f5-8e7e-4136baa261f3/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " GCSE Computer Science - Professional Development 2023-2024"" width="600" height="600" src="../../assets/img/accreditations/gcse_computer_science_professional_development_2023.webp?h=71b8c59772af539946fb49a210b05758"></a></div><!-- End: NCCE GCSE Computer Science 23-24 -->
|
||||
<!-- Start: NCCE A Level Computer Science 23-24 -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/418cfb22-3e37-4b24-b527-652b1ab6ea76/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " A-Level Computer Science - Professional Development 2023-2024"" width="600" height="600" src="../../assets/img/accreditations/a_level_computer_science_professional_development.webp?h=a9cc6f73abdf82ab49e5f8a8695cb557"></a></div><!-- End: NCCE A Level Computer Science 23-24 -->
|
||||
<!-- Start: MOS Master -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/0e46d6b8-1a1b-4d16-a5d5-3b95661fb290/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Microsoft Office Specialist: Master 2013"" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_master_2013.webp?h=70d957a5307d38f46b84b6462439afbc"></a></div><!-- End: MOS Master -->
|
||||
<!-- Start: MOS Word Expert -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/287d0ca4-bea1-4e18-b9e7-21f6a5d5d571/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Microsoft Office Specialist: Word 2013 Expert"" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_word_2013_expert.webp?h=5bd4ec8c82587201172a8b8e460ff4e6"></a></div><!-- End: MOS Word Expert -->
|
||||
<!-- Start: MOS Word -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/f1831f0e-776b-49aa-8a8d-05817d4b1410/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Microsoft Office Specialist: Word 2013"" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_word_2013.webp?h=2b90c5590b7b50f1891a9116fa38ac36"></a></div><!-- End: MOS Word -->
|
||||
<!-- Start: MOS Excel -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/2ab55353-3267-46cc-b3f4-3099af54d869/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Microsoft Office Specialist: Excel 2013"" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_excel_2013.webp?h=f016925633d0a52b862259a05b396b6a"></a></div><!-- End: MOS Excel -->
|
||||
<!-- Start: MOS PowerPoint -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/11162aa2-331a-4ec4-a612-665f3bc59cb1/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Microsoft Office Specialist: PowerPoint 2013"" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_powerpoint_2013.webp?h=26de9623c491661347998549e10d4353"></a></div><!-- End: MOS PowerPoint -->
|
||||
<!-- Start: MOS OneNote -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/cd328b1d-27b6-4410-be70-0792a99b72ea/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " Microsoft Office Specialist: OneNote 2013"" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_onenote_2013.webp?h=2ffe41c2a6e37d602469f8158ef13d79"></a></div><!-- End: MOS OneNote -->
|
||||
<!-- Start: MTA Security -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/da3b3b4c-cec4-4537-bb5b-486ce9ee6ee7/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " MTA: Security Fundamentals - Certified 2016"" width="352" height="352" src="../../assets/img/accreditations/mta_security_fundamentals_certified_2016.webp?h=0df619419a5b6d0eb694dc9363870b20"></a></div><!-- End: MTA Security -->
|
||||
<!-- Start: MTA Networking -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/23194bfe-30e4-4f8e-b9ec-338d060136dd/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " MTA: Networking Fundamentals - Certified 2016"" width="352" height="352" src="../../assets/img/accreditations/mta_networking_fundamentals_certified_2016.webp?h=cdc4618c5e86d11aa304cae14c3942bc"></a></div><!-- End: MTA Networking -->
|
||||
<!-- Start: MTA Windows OS -->
|
||||
<div class="swiper-slide"><a href="https://www.credly.com/badges/f0f27d87-424b-49e8-a444-95086d640e66/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: " MTA: Windows Operating System Fundamentals - Certified 2016"" width="352" height="352" src="../../assets/img/accreditations/mta_windows_operating_system_fundamentals_certified_2016.webp?h=44a6360480ef67ced301c697d31f9fa5"></a></div><!-- End: MTA Windows OS -->
|
||||
</div>
|
||||
</div>
|
||||
<div class="swiper-nav-standalone d-flex justify-content-center accreditations-navigation" data-bss-swiper-target="#light-swiper">
|
||||
<div class="swiper-button-prev"><button class="btn btn-primary btn-sm" type="button"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-arrow-left">
|
||||
<path fill-rule="evenodd" d="M15 8a.5.5 0 0 0-.5-.5H2.707l3.147-3.146a.5.5 0 1 0-.708-.708l-4 4a.5.5 0 0 0 0 .708l4 4a.5.5 0 0 0 .708-.708L2.707 8.5H14.5A.5.5 0 0 0 15 8"></path>
|
||||
</svg></button></div>
|
||||
<div class="swiper-button-next"><button class="btn btn-primary btn-sm" type="button"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-arrow-right">
|
||||
<path fill-rule="evenodd" d="M1 8a.5.5 0 0 1 .5-.5h11.793l-3.147-3.146a.5.5 0 0 1 .708-.708l4 4a.5.5 0 0 1 0 .708l-4 4a.5.5 0 0 1-.708-.708L13.293 8.5H1.5A.5.5 0 0 1 1 8"></path>
|
||||
</svg></button></div>
|
||||
</div>
|
||||
</div><!-- End: Accreditations -->
|
||||
<!-- Start: Spacer -->
|
||||
<div class="col-md-3 text-center text-lg-start d-flex flex-column"><a class="d-flex w-100 justify-content-center center-everything" href="https://client.brixly.uk/aff.php?aff=837" target="_blank"><img class="img-fluid object-fit-contain w-50" src="https://brixly.uk/wp-content/uploads/2022/06/Artboard-32.jpg"></a></div><!-- End: Spacer -->
|
||||
<div class="col-md-3 text-center text-lg-start d-flex flex-column align-items-center order-first align-items-lg-start order-lg-last">
|
||||
<div class="fw-bold d-flex align-items-center mb-2"><img alt="Stylised orange microchip icon on a black background, designed as a modern tech-themed logo for ADCM" src="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501" width="50" height="50" class="footer-logo"><span>Mr A Lyall</span></div>
|
||||
<p>IT professional and Head of Computing in the West Midlands</p>
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
<div class="d-flex justify-content-between align-items-center pt-3">
|
||||
<p class="mb-0 footer-copyright">Copyright © 2025 ADCM Networks</p>
|
||||
<ul class="list-inline mb-0">
|
||||
<!-- Start: Mastodon -->
|
||||
<li class="list-inline-item"><a rel="me" href="https://mstdn.social/@MrDavisCSIT"><svg class="text-body" xmlns="http://www.w3.org/2000/svg" viewBox="-32 0 512 512" width="1em" height="1em" fill="currentColor">
|
||||
<!--! Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. -->
|
||||
<path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"></path>
|
||||
</svg></a></li><!-- End: Mastodon -->
|
||||
<!-- Start: Bluesky -->
|
||||
<li class="list-inline-item"><a href="https://bsky.app/profile/adcmnetworks.co.uk"><i class="fa-brands fa-square-bluesky"></i></a></li><!-- End: Bluesky -->
|
||||
<!-- Start: LinkedIn -->
|
||||
<li class="list-inline-item"><a href="https://www.linkedin.com/in/MrDavisCSIT/"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-linkedin text-body">
|
||||
<path d="M0 1.146C0 .513.526 0 1.175 0h13.65C15.474 0 16 .513 16 1.146v13.708c0 .633-.526 1.146-1.175 1.146H1.175C.526 16 0 15.487 0 14.854V1.146zm4.943 12.248V6.169H2.542v7.225h2.401m-1.2-8.212c.837 0 1.358-.554 1.358-1.248-.015-.709-.52-1.248-1.342-1.248-.822 0-1.359.54-1.359 1.248 0 .694.521 1.248 1.327 1.248h.016zm4.908 8.212V9.359c0-.216.016-.432.08-.586.173-.431.568-.878 1.232-.878.869 0 1.216.662 1.216 1.634v3.865h2.401V9.25c0-2.22-1.184-3.252-2.764-3.252-1.274 0-1.845.7-2.165 1.193v.025h-.016a5.54 5.54 0 0 1 .016-.025V6.169h-2.4c.03.678 0 7.225 0 7.225h2.4"></path>
|
||||
</svg></a></li><!-- End: LinkedIn -->
|
||||
<!-- Start: GitHub -->
|
||||
<li class="list-inline-item"><a href="https://github.com/MrDavisCSIT"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-github text-body">
|
||||
<path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8"></path>
|
||||
</svg></a></li><!-- End: GitHub -->
|
||||
<!-- Start: Reddit -->
|
||||
<li class="list-inline-item"><a href="https://www.reddit.com/user/AlexanderEDavis95/"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-reddit text-body">
|
||||
<path d="M6.167 8a.831.831 0 0 0-.83.83c0 .459.372.84.83.831a.831.831 0 0 0 0-1.661m1.843 3.647c.315 0 1.403-.038 1.976-.611a.232.232 0 0 0 0-.306.213.213 0 0 0-.306 0c-.353.363-1.126.487-1.67.487-.545 0-1.308-.124-1.671-.487a.213.213 0 0 0-.306 0 .213.213 0 0 0 0 .306c.564.563 1.652.61 1.977.61zm.992-2.807c0 .458.373.83.831.83.458 0 .83-.381.83-.83a.831.831 0 0 0-1.66 0z"></path>
|
||||
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0m-3.828-1.165c-.315 0-.602.124-.812.325-.801-.573-1.9-.945-3.121-.993l.534-2.501 1.738.372a.83.83 0 1 0 .83-.869.83.83 0 0 0-.744.468l-1.938-.41a.203.203 0 0 0-.153.028.186.186 0 0 0-.086.134l-.592 2.788c-1.24.038-2.358.41-3.17.992-.21-.2-.496-.324-.81-.324a1.163 1.163 0 0 0-.478 2.224c-.02.115-.029.23-.029.353 0 1.795 2.091 3.256 4.669 3.256 2.577 0 4.668-1.451 4.668-3.256 0-.114-.01-.238-.029-.353.401-.181.688-.592.688-1.069 0-.65-.525-1.165-1.165-1.165z"></path>
|
||||
</svg></a></li><!-- End: Reddit -->
|
||||
<!-- Start: YouTube -->
|
||||
<li class="list-inline-item"><a href="https://www.youtube.com/channel/UCgDhiQMLbTemv2varDiW2rA"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-youtube text-body">
|
||||
<path d="M8.051 1.999h.089c.822.003 4.987.033 6.11.335a2.01 2.01 0 0 1 1.415 1.42c.101.38.172.883.22 1.402l.01.104.022.26.008.104c.065.914.073 1.77.074 1.957v.075c-.001.194-.01 1.108-.082 2.06l-.008.105-.009.104c-.05.572-.124 1.14-.235 1.558a2.007 2.007 0 0 1-1.415 1.42c-1.16.312-5.569.334-6.18.335h-.142c-.309 0-1.587-.006-2.927-.052l-.17-.006-.087-.004-.171-.007-.171-.007c-1.11-.049-2.167-.128-2.654-.26a2.007 2.007 0 0 1-1.415-1.419c-.111-.417-.185-.986-.235-1.558L.09 9.82l-.008-.104A31.4 31.4 0 0 1 0 7.68v-.123c.002-.215.01-.958.064-1.778l.007-.103.003-.052.008-.104.022-.26.01-.104c.048-.519.119-1.023.22-1.402a2.007 2.007 0 0 1 1.415-1.42c.487-.13 1.544-.21 2.654-.26l.17-.007.172-.006.086-.003.171-.007A99.788 99.788 0 0 1 7.858 2h.193zM6.4 5.209v4.818l4.157-2.408z"></path>
|
||||
</svg></a></li><!-- End: YouTube -->
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</footer><!-- End: Footer Multi Column -->
|
||||
<script>
|
||||
(function() {
|
||||
let collections = document.querySelectorAll('[data-bss-type="blog-loop"]');
|
||||
let tagNavs = document.querySelectorAll('[data-bss-type="tag-nav"]');
|
||||
let tagLoops = document.querySelectorAll('[data-bss-type="tag-loop"]');
|
||||
let authorLoops = document.querySelectorAll('[data-bss-type="author-loop"]');
|
||||
let authorNavs = document.querySelectorAll('[data-bss-type="author-nav"]');
|
||||
|
||||
window.addEventListener("popstate", (e) => {
|
||||
for (let collection of collections) {
|
||||
updateCollection(collection);
|
||||
}
|
||||
|
||||
for (let tagNav of tagNavs) {
|
||||
updateTagNav(tagNav);
|
||||
}
|
||||
|
||||
for (let authorNav of authorNavs) {
|
||||
updateAuthorNav(authorNav);
|
||||
}
|
||||
});
|
||||
|
||||
for (let collection of collections) {
|
||||
|
||||
updateCollection(collection);
|
||||
|
||||
if (!canPaginateCollection(collection)) continue;
|
||||
|
||||
let pagination = collection.querySelector('[data-bss-type="blog-loop-pagination"]');
|
||||
|
||||
pagination.addEventListener('click', function(e) {
|
||||
let paginationItem = e.target.closest('.page-item');
|
||||
if (!paginationItem) return;
|
||||
|
||||
e.preventDefault();
|
||||
|
||||
if (paginationItem.classList.contains('disabled') || paginationItem.classList.contains('active')) return;
|
||||
|
||||
let collection = paginationItem.closest('[data-bss-type="blog-loop"]');
|
||||
if (!collection) return;
|
||||
|
||||
let page = parseInt(paginationItem.dataset.page);
|
||||
if (!page) return;
|
||||
|
||||
let pageParam = getPageParameter(collection);
|
||||
|
||||
if (pageParam) {
|
||||
const url = new URL(window.location);
|
||||
url.searchParams.set(pageParam, page);
|
||||
history.pushState({
|
||||
[pageParam]: page
|
||||
}, document.title, url);
|
||||
|
||||
for (let c of collections) {
|
||||
let param = getPageParameter(c);
|
||||
if (param !== pageParam) continue;
|
||||
updateCollection(c);
|
||||
}
|
||||
} else {
|
||||
updateCollection(collection, page);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
for (let tagNav of tagNavs) {
|
||||
updateTagNav(tagNav);
|
||||
tagNav.addEventListener('click', onTagClick);
|
||||
}
|
||||
|
||||
for (let tagLoop of tagLoops) {
|
||||
tagLoop.addEventListener('click', onTagClick);
|
||||
}
|
||||
|
||||
for (let authorLoop of authorLoops) {
|
||||
authorLoop.addEventListener('click', onAuthorClick);
|
||||
}
|
||||
|
||||
for (let authorNav of authorNavs) {
|
||||
updateAuthorNav(authorNav);
|
||||
}
|
||||
|
||||
function onTagClick(e) {
|
||||
onBlogFilterClick(e);
|
||||
|
||||
for (let nav of tagNavs) {
|
||||
updateTagNav(nav);
|
||||
}
|
||||
}
|
||||
|
||||
function onAuthorClick(e) {
|
||||
onBlogFilterClick(e);
|
||||
|
||||
for (let authorNav of authorNavs) {
|
||||
updateAuthorNav(authorNav);
|
||||
}
|
||||
}
|
||||
|
||||
function onBlogFilterClick(e) {
|
||||
const item = e.target.closest('[data-bss-filter="blog"]');
|
||||
if (!item || !item.dataset.hasOwnProperty('bssHref') || !item.dataset.hasOwnProperty('bssFilterParam')) return;
|
||||
|
||||
const stateNode = item.dataset.hasOwnProperty('bssStateNode') ? item : item.querySelector('[data-bss-state-node]');
|
||||
|
||||
if (stateNode && (stateNode.classList.contains('disabled') || stateNode.classList.contains('active'))) {
|
||||
e.preventDefault();
|
||||
return;
|
||||
}
|
||||
|
||||
const link = item.dataset.bssHref;
|
||||
if (!linksToCurrentPage(link)) return;
|
||||
|
||||
e.preventDefault();
|
||||
|
||||
const url = new URL(window.location);
|
||||
const filterParam = item.dataset.bssFilterParam;
|
||||
const filterValue = item.dataset.bssFilterValue || '';
|
||||
|
||||
const collectionsToUpdate = [];
|
||||
const newQueryParams = {
|
||||
[filterParam]: filterValue
|
||||
};
|
||||
|
||||
for (let c of collections) {
|
||||
if (!canFilterCollection(c)) continue;
|
||||
collectionsToUpdate.push(c);
|
||||
|
||||
let pageParam = getPageParameter(c);
|
||||
let page = url.searchParams.get(pageParam);
|
||||
if (page === null || page == 1) continue;
|
||||
|
||||
newQueryParams[pageParam] = 1;
|
||||
}
|
||||
|
||||
for (let param in newQueryParams) {
|
||||
if (newQueryParams[param]) {
|
||||
url.searchParams.set(param, newQueryParams[param]);
|
||||
} else {
|
||||
url.searchParams.delete(param);
|
||||
}
|
||||
}
|
||||
|
||||
history.pushState(newQueryParams, document.title, url);
|
||||
|
||||
for (let c of collectionsToUpdate) {
|
||||
updateCollection(c);
|
||||
}
|
||||
}
|
||||
|
||||
function getCollectionFilters(collection) {
|
||||
let filters = [];
|
||||
|
||||
try {
|
||||
const parsed = JSON.parse(collection.dataset.bssFilters);
|
||||
|
||||
if (Array.isArray(parsed)) {
|
||||
filters = parsed;
|
||||
}
|
||||
} catch (e) {}
|
||||
|
||||
return filters;
|
||||
}
|
||||
|
||||
function getCollectionEmptyFilterAction(collection, filter = '') {
|
||||
let emptyFilterActions = [];
|
||||
|
||||
try {
|
||||
const parsed = JSON.parse(collection.dataset.bssEmptyFilterActions);
|
||||
|
||||
if (Array.isArray(parsed)) {
|
||||
emptyFilterActions = parsed;
|
||||
}
|
||||
} catch (e) {}
|
||||
|
||||
const action = emptyFilterActions.find(action => action.filter === filter);
|
||||
|
||||
return action ? action.value : '';
|
||||
}
|
||||
|
||||
function canFilterCollection(collection) {
|
||||
return !!getCollectionFilters(collection).length;
|
||||
}
|
||||
|
||||
function canFilterCollectionByTag(collection) {
|
||||
return getCollectionFilters(collection).includes('tag');
|
||||
}
|
||||
|
||||
function canFilterCollectionByAuthor(collection) {
|
||||
return getCollectionFilters(collection).includes('author');
|
||||
}
|
||||
|
||||
function shouldShowAllItemsForEmptyFilter(collection, filter = '') {
|
||||
return getCollectionEmptyFilterAction(collection, filter) === 'show-all';
|
||||
}
|
||||
|
||||
function canPaginateCollection(collection) {
|
||||
return !!getCollectionPagination(collection);
|
||||
}
|
||||
|
||||
function getCollectionPagination(collection) {
|
||||
return collection.querySelector('[data-bss-type="blog-loop-pagination"]');
|
||||
}
|
||||
|
||||
function getPageParameter(collection) {
|
||||
return collection.dataset.bssPageParam;
|
||||
}
|
||||
|
||||
function linksToCurrentPage(path = '') {
|
||||
let currentURL, url;
|
||||
|
||||
try {
|
||||
currentURL = new URL(window.location);
|
||||
url = new URL(path, window.location.href);
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
}
|
||||
|
||||
return currentURL.origin === url.origin && currentURL.pathname === url.pathname;
|
||||
}
|
||||
|
||||
function updateCollection(collection, page, activeTag = '', activeAuthor = '') {
|
||||
|
||||
const url = new URL(window.location.href);
|
||||
|
||||
if (canPaginateCollection(collection)) {
|
||||
if (!page) {
|
||||
let pageParam = getPageParameter(collection);
|
||||
page = (pageParam ? url.searchParams.get(pageParam) : 1) || 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (canFilterCollectionByTag(collection) && !activeTag) {
|
||||
let tagParam = 'tag';
|
||||
activeTag = url.searchParams.get(tagParam) || '';
|
||||
}
|
||||
|
||||
if (canFilterCollectionByAuthor(collection) && !activeAuthor) {
|
||||
let authorParam = 'author';
|
||||
activeAuthor = url.searchParams.get(authorParam) || '';
|
||||
}
|
||||
|
||||
renderCollectionPage(collection, page, activeTag, activeAuthor);
|
||||
}
|
||||
|
||||
function renderCollectionPage(collection, page = 1, activeTag = '', activeAuthor = '') {
|
||||
|
||||
page = Math.max(parseInt(page, 10), 1);
|
||||
|
||||
collection.style.removeProperty('display');
|
||||
|
||||
let loopBase = collection.querySelector('[data-bss-type="blog-loop-base"]');
|
||||
loopBase && loopBase.style.removeProperty('display');
|
||||
|
||||
let emptyState = collection.querySelector('[data-bss-type="empty-state"]');
|
||||
emptyState && emptyState.style.setProperty('display', 'none', 'important');
|
||||
|
||||
let listItems = [].slice.call(collection.querySelectorAll('[data-bss-type="blog-loop-item"]'));
|
||||
listItems.forEach(item => item.style.setProperty('display', 'none', 'important'));
|
||||
|
||||
if (canFilterCollectionByTag(collection)) {
|
||||
listItems = listItems.filter(item => activeTag ? item.classList.contains('post-tag-' + activeTag) : shouldShowAllItemsForEmptyFilter(collection, 'tag'));
|
||||
}
|
||||
|
||||
if (canFilterCollectionByAuthor(collection)) {
|
||||
listItems = listItems.filter(item => activeAuthor ? item.classList.contains('post-author-' + activeAuthor) : shouldShowAllItemsForEmptyFilter(collection, 'author'));
|
||||
}
|
||||
|
||||
let perPage = collection.dataset.bssPerpage || listItems.length;
|
||||
let visibleListItems = listItems.slice((page - 1) * perPage, page * perPage);
|
||||
visibleListItems.forEach(item => item.style.removeProperty('display'));
|
||||
|
||||
let isEmpty = !visibleListItems.length;
|
||||
|
||||
if (isEmpty) {
|
||||
loopBase && loopBase.style.setProperty('display', 'none', 'important');
|
||||
emptyState && emptyState.style.removeProperty('display');
|
||||
}
|
||||
|
||||
let itemCount = listItems.length;
|
||||
let pageCount = Math.max(Math.ceil(itemCount / perPage), 1);
|
||||
|
||||
updateCollectionPagination(collection, page, pageCount, isEmpty);
|
||||
|
||||
if (collection.dataset.bssScrollOnChange) {
|
||||
scrollToCollectionTop(collection);
|
||||
}
|
||||
}
|
||||
|
||||
function updateCollectionPagination(collection, page, pageCount, isEmpty) {
|
||||
let pagination = getCollectionPagination(collection);
|
||||
if (!pagination) return;
|
||||
|
||||
let paginationItems = [].slice.call(pagination.querySelectorAll('.page-item'));
|
||||
|
||||
if (pageCount === 1 || isEmpty) {
|
||||
pagination.style.setProperty('display', 'none', 'important');
|
||||
} else {
|
||||
pagination.style.removeProperty('display');
|
||||
}
|
||||
|
||||
let previousBtnDisabled = page - 1 <= 0;
|
||||
let previousPage = previousBtnDisabled ? 1 : page - 1;
|
||||
|
||||
let nextBtnDisabled = page + 1 > pageCount;
|
||||
let nextPage = nextBtnDisabled ? pageCount : page + 1;
|
||||
|
||||
for (let i = 0; i < paginationItems.length; i++) {
|
||||
let paginationItem = paginationItems[i];
|
||||
|
||||
paginationItem.classList.remove('active', 'disabled');
|
||||
|
||||
if (paginationItem.dataset.type === 'prev') {
|
||||
paginationItem.dataset.page = previousPage;
|
||||
|
||||
if (previousBtnDisabled) {
|
||||
paginationItem.classList.add('disabled');
|
||||
}
|
||||
} else if (paginationItem.dataset.type === 'next') {
|
||||
paginationItem.dataset.page = nextPage;
|
||||
|
||||
if (nextBtnDisabled) {
|
||||
paginationItem.classList.add('disabled');
|
||||
}
|
||||
} else {
|
||||
if (paginationItem.dataset.page > pageCount) {
|
||||
paginationItem.style.setProperty('display', 'none', 'important');
|
||||
} else {
|
||||
paginationItem.style.removeProperty('display');
|
||||
}
|
||||
|
||||
if (paginationItem.dataset.page == page) {
|
||||
paginationItem.classList.add('active');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function scrollToCollectionTop(collection) {
|
||||
const rect = collection.getBoundingClientRect();
|
||||
const viewHeight = Math.max(document.documentElement.clientHeight, window.innerHeight);
|
||||
const threshold = 100;
|
||||
|
||||
if (rect.top >= 0 && viewHeight - rect.top > threshold) return;
|
||||
|
||||
setTimeout(() => {
|
||||
collection.scrollIntoView({
|
||||
behavior: "smooth",
|
||||
block: "start",
|
||||
inline: "start"
|
||||
});
|
||||
}, 0);
|
||||
}
|
||||
|
||||
function updateTagNav(tagNav) {
|
||||
const url = new URL(window.location.href);
|
||||
|
||||
let tagParam = 'tag';
|
||||
let tag = url.searchParams.get(tagParam) || '';
|
||||
|
||||
renderTagNav(tagNav, tag);
|
||||
}
|
||||
|
||||
function renderTagNav(tagNav, activeTag = '') {
|
||||
if (!tagNav.dataset.bssSyncUrl) return;
|
||||
|
||||
let navItems = [].slice.call(tagNav.querySelectorAll('[data-bss-type="tag-loop-item"]'));
|
||||
|
||||
navItems.forEach(item => {
|
||||
const activeClassNode = item.dataset.hasOwnProperty('bssStateNode') ? item : item.querySelector('[data-bss-state-node]');
|
||||
if (!activeClassNode) return;
|
||||
|
||||
activeClassNode.classList.remove('active');
|
||||
|
||||
const link = item.dataset.bssHref;
|
||||
if (!linksToCurrentPage(link) || activeClassNode.classList.contains('disabled')) return;
|
||||
|
||||
if (item.dataset.bssTag === activeTag) {
|
||||
activeClassNode.classList.add('active');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function updateAuthorNav(authorNav) {
|
||||
const url = new URL(window.location.href);
|
||||
|
||||
let authorParam = 'author';
|
||||
let author = url.searchParams.get(authorParam) || '';
|
||||
|
||||
renderAuthorNav(authorNav, author);
|
||||
}
|
||||
|
||||
function renderAuthorNav(authorNav, activeAuthor = '') {
|
||||
if (!canFilterCollectionByAuthor(authorNav)) return;
|
||||
|
||||
authorNav.style.removeProperty('display');
|
||||
|
||||
let items = [].slice.call(authorNav.querySelectorAll('[data-bss-type="author-loop-item"]'));
|
||||
items.forEach(item => item.classList.contains('author-' + activeAuthor) ? item.style.removeProperty('display') : item.style.setProperty('display', 'none', 'important'));
|
||||
}
|
||||
})();
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.6/dist/js/bootstrap.bundle.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.js"></script>
|
||||
<script src="../../assets/js/bs-init.js?h=7c6b4c49b8ac0f383799ccb3d5def770"></script>
|
||||
<script src="../../assets/js/Carousel---Slider-With-Animation-slider_with_animation.js?h=948f8788fd189b5cc9df01ff4fce4152"></script>
|
||||
<script src="../../assets/js/CookieConsentComponent-cookieconsent.js?h=83fbb3192473604d72b00a854c6de4fd"></script>
|
||||
<script src="https://kit.fontawesome.com/8970d94f9b.js"></script>
|
||||
<script src="../../assets/js/pikaday.min.js?h=039feef26d52ebc5f1260a47208bfa38"></script>
|
||||
<script src="../../assets/js/text-carousel.js?h=992f402828c7806b1f3bb7f29232e972"></script>
|
||||
<script src="../../assets/js/theme.js?h=aeddb9c3ce5d77b8278c91c07acf30ad"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
Reference in New Issue
Block a user