Forum | Documentation | Website | Blog

Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • docs/docs.beagleboard.io
  • jkridner/docs
  • lorforlinux/docs.beagleboard.io
  • harshilbhatt2001/docs.beagleboard.io
  • Krishna_13/docs.beagleboard.io
  • gpioblink/docs.beagleboard.io
  • dhruvag2000/docs.beagleboard.io
  • jiande/docs.beagleboard.io
  • beagleplay/docs
  • beaglev-ahead/docs
  • sabeeh.khan14/docs.beagleboard.io
  • yoder/docs.beagleboard.io
  • jdneal/docs.beagleboard.io
  • ayush1325/docs.beagleboard.io
  • vishnumaiea/docs.beagleboard.io
  • andrei1998/docs-beagleboard-io-zephyr-demo
  • andrei1998/docs.beagleboard.io
  • nmenon/docs.beagleboard.io
  • epenguin/docs.beagleboard.io
  • paul_buxton/docs.beagleboard.io
  • anujdeshpande/docs.beagleboard.io
  • melta101/docs.beagleboard.io
  • krvprashanth/docs.beagleboard.io
  • samdai/docs.beagleboard.io
  • bustedwing1/docs.beagleboard.io
  • cshegedus/docs.beagleboard.io
  • wmat/docs.beagleboard.io
  • Roger18/docs.beagleboard.io
  • himanshuk/docs.beagleboard.io
  • vvaishak/docs.beagleboard.io
  • alecdenny/docs.beagleboard.io
  • san.s.kar03/docs.beagleboard.io
  • andrei1998/docs-beagleboard-io-fixes
  • SomeInterestingUserName/docs.beagleboard.io
  • edge-ai/docs
  • andrei1998/docs-beagleboard-io-rtc
  • devarsht/docs.beagleboard.io
  • andrei1998/docs-beagleboard-io-deepak-fork
  • superchamp234/docs.beagleboard.io
  • lranders/docs.beagleboard.io
  • kushalkr/docs.beagleboard.io
  • mkorpershoek/docs.beagleboard.io
  • prajnark/docs.beagleboard.io
  • touchhowling/docs.beagleboard.io
  • RobertCNelson/docs.beagleboard.io
  • Shankari02/docs.beagleboard.io
  • LucienMorey/docs.beagleboard.io
  • ketanthorat/docs.beagleboard.io
  • jjateen/docs.beagleboard.io
  • Whiz-Manas/mana-docs-beagleboard-io
  • beagley-ai/zephyr/docs.beagleboard.io
  • giuliomoro/docs.beagleboard.io
52 results
Show changes
Commits on Source (69)
Showing
with 307 additions and 174 deletions
.wy-side-nav-search > a img.logo { .wy-side-nav-search>a img.logo {
width: 340px; width: 340px;
height: 66px; height: 66px;
} }
.rst-content div.figure, .rst-content figure { .rst-content div.figure,
.rst-content figure {
text-align: center; text-align: center;
} }
...@@ -36,7 +37,7 @@ ...@@ -36,7 +37,7 @@
background-color: #25282b; background-color: #25282b;
} }
.wy-nav-top{ .wy-nav-top {
background-color: #25282b; background-color: #25282b;
background-color: #25282b; background-color: #25282b;
} }
...@@ -74,10 +75,68 @@ span.strike { ...@@ -74,10 +75,68 @@ span.strike {
overflow: auto; overflow: auto;
} }
/* Site horizontal spacing */
.bd-main .bd-content .bd-article-container { .bd-main .bd-content .bd-article-container {
max-width: 100%; /* default is 60em */ max-width: 120em;
/* default is 60em */
} }
.bd-page-width {
max-width: 120rem;
/* default is 88rem */
}
/* Figure headerlink */
figure a.headerlink { figure a.headerlink {
position: static; position: static;
} }
\ No newline at end of file
/* Primary sidebar toggle button */
#pst-primary-sidebar.collapsed {
overflow: hidden;
padding: 0;
width: 0; /* Collapse the sidebar */
transition: none;
}
#pst-secondary-sidebar.collapsed {
overflow: hidden;
padding: 0;
width: 0; /* Collapse the sidebar */
transition: none;
}
#pst-secondary-sidebar {
padding-left: 0px;
}
/* Toggle button styles */
.sidebar-toggle-btn {
margin-top: 44px; /* Space between sidebar and button */
padding: 7px; /* Set padding for the button, horizontally more */
background-color: #F16321; /* Button background color */
color: white; /* Text color */
border: none; /* Remove border */
cursor: pointer; /* Pointer cursor on hover */
display: block; /* Ensure the button is block-level */
font-size: 20px; /* Adjust font size */
font-weight: bold; /* Bold text */
height: 40px; /* Set a fixed height for the button */
width: auto; /* Width based on content */
line-height: 20px; /* Vertically center the text */
}
#toggle-primary-sidebar.sidebar-toggle-btn{
border-radius: 0 5px 5px 0; /* Rounded corners */
}
#toggle-secondary-sidebar.sidebar-toggle-btn{
border-radius: 5px 0 0 5px; /* Rounded corners */
}
/* Optional: Adding a hover effect */
.sidebar-toggle-btn:hover {
background-color: #C7480D; /* Slightly darker blue on hover */
}
...@@ -3,124 +3,119 @@ ...@@ -3,124 +3,119 @@
{% block extrahead %} {% block extrahead %}
<script> <script>
// The redirect_folders dictionary is passed from html_context document.addEventListener("DOMContentLoaded", function () {
const redirectFolders = JSON.parse('{{ redirect_folders | tojson | safe }}'); // The redirect_folders dictionary is passed from html_context
const redirectFolders = JSON.parse('{{ redirect_folders | tojson | safe }}');
// Get the current URL
let currentUrl = window.location.href;
// Iterate over the redirect_folders key-value pairs
let redirectFound = false;
for (const [key, value] of Object.entries(redirectFolders)) {
if (currentUrl.includes("/" + key)) {
// Determine the replacement value
let replacement = value === "" ? "" : "/" + value;
// Create a new URL by replacing "/key" with the replacement value
let newUrl = currentUrl.replace("/" + key, replacement);
// Make an HTTP request to check if the new URL exists
fetch(newUrl, { method: "HEAD" })
.then(response => {
if (response.ok) {
// Redirect is found
redirectFound = true;
// Update the heading with the correct information
const headingElement = document.getElementById('pageHeading');
if (headingElement) {
headingElement.textContent = "Page Moved!";
}
// Update the message with the correct link // Get the current URL
const redirectMessageElement = document.getElementById('redirectMessage'); let currentUrl = window.location.href;
if (redirectMessageElement) {
redirectMessageElement.innerHTML = `We found the correct page you are looking for <a href="${newUrl}" id="correctPageLink">here</a>.`;
}
document.getElementById('redirectInfo').style.display = "block"; // Flag to check if valid redirect is found
let redirectFound = false;
// If the response is OK, show the modal and initiate the countdown // Iterate over the redirect_folders key-value pairs
const redirectModal = new bootstrap.Modal(document.getElementById('redirectModal'), { for (const [key, value] of Object.entries(redirectFolders)) {
backdrop: 'static', // Prevents closing the modal by clicking outside if (currentUrl.includes("/" + key)) {
keyboard: false // Disables closing the modal with the keyboard
});
redirectModal.show();
let countdownValue = 5; // Determine the replacement value
const countdownElement = document.getElementById('countdownNumber'); let replacement = value === "" ? "" : "/" + value;
if (countdownElement) {
countdownElement.textContent = countdownValue;
}
// Variable to track if countdown should continue // Create a new URL by replacing "/key" with the replacement value
let countdownActive = true; let newUrl = currentUrl.replace("/" + key, replacement);
// Countdown from 5 to 1 // Make an HTTP request to check if the new URL exists
const countdownInterval = setInterval(() => { fetch(newUrl, { method: "HEAD" })
if (!countdownActive) { .then(response => {
clearInterval(countdownInterval); if (response.ok) {
return; // Valid redirect is found
redirectFound = true;
// Update the heading with the correct information
const headingElement = document.getElementById('pageHeading');
if (headingElement) {
headingElement.textContent = "Page Moved!";
} }
countdownValue--;
// Update the message with the correct link
const redirectMessageElement = document.getElementById('redirectMessage');
if (redirectMessageElement) {
redirectMessageElement.innerHTML = `We found the correct page you are looking for <a href="${newUrl}" id="correctPageLink">here</a>.`;
}
document.getElementById('redirectInfo').style.display = "block";
// If the response is OK, show the modal and initiate the countdown
const redirectModal = new bootstrap.Modal(document.getElementById('redirectModal'), {
backdrop: 'static', // Prevents closing the modal by clicking outside
keyboard: false // Disables closing the modal with the keyboard
});
redirectModal.show();
let countdownValue = 5;
const countdownElement = document.getElementById('countdownNumber');
if (countdownElement) { if (countdownElement) {
countdownElement.textContent = countdownValue; countdownElement.textContent = countdownValue;
} }
// When countdown reaches 1, redirect // Variable to track if countdown should continue
if (countdownValue <= 1) { let countdownActive = true;
clearInterval(countdownInterval);
// Countdown from 5 to 1
const countdownInterval = setInterval(() => {
if (!countdownActive) {
clearInterval(countdownInterval);
return;
}
countdownValue--;
if (countdownElement) {
countdownElement.textContent = countdownValue;
}
// When countdown reaches 1, redirect
if (countdownValue <= 1) {
clearInterval(countdownInterval);
window.location.href = newUrl;
}
}, 1000);
// Event listener for "Redirect Now" button
document.getElementById('redirectNow').addEventListener('click', () => {
window.location.href = newUrl; window.location.href = newUrl;
} });
}, 1000);
// Event listener for "Cancel" button
// Event listener for "Redirect Now" button document.getElementById('cancelRedirect').addEventListener('click', () => {
document.getElementById('redirectNow').addEventListener('click', () => { countdownActive = false;
window.location.href = newUrl; clearInterval(countdownInterval);
}); });
// Event listener for "Cancel" button // Event listener for "Close" button in the modal header
document.getElementById('cancelRedirect').addEventListener('click', () => { document.getElementById('closeRedirect').addEventListener('click', () => {
countdownActive = false; countdownActive = false;
clearInterval(countdownInterval); clearInterval(countdownInterval);
}); });
} else {
// Event listener for "Close" button in the modal header // If the response is not OK, proceed to check other redirects
document.getElementById('closeRedirect').addEventListener('click', () => { console.log(`No valid page found at ${newUrl}`);
countdownActive = false;
clearInterval(countdownInterval);
});
} else if (!redirectFound) {
const headingElement = document.getElementById('pageHeading');
if (headingElement) {
headingElement.textContent = "Page Not Found (404)";
} }
document.getElementById('redirectInfo').style.display = "block"; })
} .catch(error => {
}) console.error("Error checking the URL:", error);
.catch(error => { });
console.error("Error checking the URL:", error); break;
// In case of an error, ensure the title is properly set }
const headingElement = document.getElementById('pageHeading');
if (headingElement) {
headingElement.textContent = "Page Not Found (404)";
}
document.getElementById('redirectInfo').style.display = "block";
});
// Stop after the first successful replacement check
break;
} }
}
// If no potential redirect match is found after iteration
if (!redirectFound) { if (!redirectFound) {
const headingElement = document.getElementById('pageHeading'); // In case the link test doesn't include redirectFolders
if (headingElement) { const headingElement = document.getElementById('pageHeading');
headingElement.textContent = "Page Not Found (404)"; if (headingElement) {
headingElement.textContent = "Page Not Found (404)";
}
document.getElementById('redirectInfo').style.display = "block";
} }
document.getElementById('redirectInfo').style.display = "block"; });
}
</script> </script>
{{ super() }} {{ super() }}
......
...@@ -4,36 +4,7 @@ ...@@ -4,36 +4,7 @@
<!-- Top version and announcement message --> <!-- Top version and announcement message -->
<script> <script>
// Function to check for the next div and clear it or create it if not available
function getBannerDiv() {
// Get the first element with the class 'search-button__wrapper'
const sbw = document.getElementsByClassName('search-button__wrapper');
// Ensure the collection is not empty to avoid errors
if (sbw.length > 0) {
const sbwElement = sbw[0];
const nextElement = sbwElement.nextElementSibling;
// Check if the next element exists and has the class 'pst-async-banner-revealer'
if (nextElement && nextElement.classList.contains('pst-async-banner-revealer')) {
// Clear the content of the next element
nextElement.innerHTML = '';
} else {
// Create a new div with the required class and style if it doesn't exist
const newDiv = document.createElement('div');
newDiv.className = 'pst-async-banner-revealer';
newDiv.style.height = 'auto';
sbwElement.insertAdjacentElement('afterend', newDiv);
return newDiv; // Return the newly created div
}
return nextElement; // Return the existing element
} else {
console.error("No elements with the class 'search-button__wrapper' found.");
return null;
}
}
// Function to generate version and announcement banner HTML // Function to generate version and announcement banner HTML
function getBannerHTML() { function getBannerHTML() {
return ` return `
...@@ -65,8 +36,8 @@ ...@@ -65,8 +36,8 @@
} }
// Get the target element where the banners will be added // Get the target element where the banners will be added
const bannerDiv = getBannerDiv(); const bannerDiv = document.getElementsByClassName('pst-async-banner-revealer')[0];
// Add version banner and announcement banner if bannerDiv is valid // Add version banner and announcement banner if bannerDiv is valid
if (bannerDiv) { if (bannerDiv) {
bannerDiv.innerHTML = getBannerHTML(); bannerDiv.innerHTML = getBannerHTML();
...@@ -77,3 +48,119 @@ ...@@ -77,3 +48,119 @@
{{ super() }} {{ super() }}
{% endblock docs_navbar %} {% endblock docs_navbar %}
{% block docs_main %}
<script>
document.addEventListener('DOMContentLoaded', () => {
// Add primary sidebar toggle button
const primarySidebar = document.getElementById('pst-primary-sidebar');
if (primarySidebar) {
addSidebarToggleButton(
primarySidebar,
'primary',
'sidebar-toggle-btn',
'<i class="fa-solid fa-caret-left"></i>',
'<i class="fa-solid fa-caret-right"></i>',
'after'
);
}
// Add secondary sidebar toggle button
const secondarySidebar = document.getElementById('pst-secondary-sidebar');
if (secondarySidebar) {
addSidebarToggleButton(
secondarySidebar,
'secondary',
'sidebar-toggle-btn',
'<i class="fa-solid fa-caret-right"></i>',
'<i class="fa-solid fa-caret-left"></i>',
'before'
);
}
/**
* Adds a toggle button for a sidebar with visibility and state management.
* @param {HTMLElement} sidebar - The sidebar element to toggle.
* @param {string} key - A unique key for localStorage and button id.
* @param {string} buttonClass - CSS class for the toggle button.
* @param {string} collapseHTML - HTML for the button when the sidebar is collapsed.
* @param {string} expandHTML - HTML for the button when the sidebar is expanded.
* @param {string} position - Position to insert the button ('before' or 'after').
*/
function addSidebarToggleButton(sidebar, key, buttonClass, collapseHTML, expandHTML, position) {
const toggleButton = document.createElement('button');
toggleButton.id = `toggle-${key}-sidebar`;
toggleButton.innerHTML = sidebar.classList.contains('collapsed') ? expandHTML : collapseHTML;
toggleButton.className = buttonClass;
// Insert the toggle button
if (position === 'before') {
sidebar.parentNode.insertBefore(toggleButton, sidebar);
} else if (position === 'after') {
sidebar.parentNode.insertBefore(toggleButton, sidebar.nextSibling);
}
// Restore collapsed state from localStorage
const collapsedState = localStorage.getItem(`${key}SidebarCollapsed`) === 'true';
if (collapsedState) {
sidebar.classList.add('collapsed');
toggleButton.innerHTML = expandHTML;
}
// Handle toggle button click
toggleButton.addEventListener('click', () => {
sidebar.classList.toggle('collapsed');
// Update button content and save state
if (sidebar.classList.contains('collapsed')) {
toggleButton.innerHTML = expandHTML;
localStorage.setItem(`${key}SidebarCollapsed`, 'true');
} else {
toggleButton.innerHTML = collapseHTML;
localStorage.setItem(`${key}SidebarCollapsed`, 'false');
}
});
// Check visibility of the toggle button
function checkToggleVisibility() {
const existingToggleButton = document.querySelector(
`.pst-navbar-icon.sidebar-toggle.${key}-toggle`
);
if (existingToggleButton && existingToggleButton.offsetParent !== null) {
toggleButton.style.display = 'none'; // Hide custom toggle button
} else {
toggleButton.style.display = 'block'; // Show custom toggle button
}
}
// Update button visibility if the sidebar is removed
function updateButtonVisibility() {
if (window.getComputedStyle(sidebar).display === 'none') {
toggleButton.remove(); // Remove button if sidebar is hidden
} else if (!document.querySelector(`#toggle-${key}-sidebar`)) {
// Re-add the button if missing
if (position === 'before') {
sidebar.parentNode.insertBefore(toggleButton, sidebar);
} else if (position === 'after') {
sidebar.parentNode.insertBefore(toggleButton, sidebar.nextSibling);
}
}
}
// Initial visibility check
checkToggleVisibility();
updateButtonVisibility();
// Monitor window resize for dynamic button visibility updates
window.addEventListener('resize', () => {
checkToggleVisibility();
updateButtonVisibility();
});
}
});
</script>
{{ super() }}
{% endblock docs_main %}
\ No newline at end of file
<div class="card bg-light mt-4 text-center"> <div class="card mb-3">
<div class="card-header bg-primary text-light fw-bold" data-bs-toggle="collapse" href="#collapseWhy" role="button" aria-expanded="false" aria-controls="collapseWhy"> <div class="card-header bg-primary text-light fw-bold">
Why are we doing this? Why are we doing this?
</div> </div>
<div id="collapseWhy" class="collapse"> <div class="card-body">
<div class="card-body"> <p class="card-text text-dark">
<p class="card-text text-dark"> We believe in making computers open again to democratize technology and empower individuals and organizations to explore, experiment, and create without the constraints of proprietary systems.
We believe in making computers open again to democratize technology and empower individuals and organizations to explore, experiment, and create without the constraints of proprietary systems. </p>
</p>
</div>
</div> </div>
</div> </div>
<div class="card bg-light mt-4 text-center"> <div class="card mb-3">
<div class="card-header bg-warning text-dark fw-bold" data-bs-toggle="collapse" href="#collapseWhat" role="button" aria-expanded="false" aria-controls="collapseWhat"> <div class="card-header bg-warning text-dark fw-bold">
What are we doing? What are we doing?
</div> </div>
<div id="collapseWhat" class="collapse"> <div class="card-body">
<div class="card-body"> <p class="card-text text-dark">
<p class="card-text text-dark"> We design versatile and affordable single-board computers to provide developers, hobbyists, and educators with a platform for prototyping, experimentation, and production of embedded systems. Our comprehensive documentation, tutorials, and vibrant online community support users in their projects and foster knowledge sharing.
We design versatile and affordable single-board computers to provide developers, hobbyists, and educators with a platform for prototyping, experimentation, and production of embedded systems. Our comprehensive documentation, tutorials, and vibrant online community support users in their projects and foster knowledge sharing. </p>
</p>
</div>
</div> </div>
</div> </div>
<div class="card bg-light mt-4 text-center"> <div class="card mb-3">
<div class="card-header bg-success text-light fw-bold" data-bs-toggle="collapse" href="#collapseHow" role="button" aria-expanded="false" aria-controls="collapseHow"> <div class="card-header bg-success text-light fw-bold">
How are we doing it? How are we doing it?
</div> </div>
<div id="collapseHow" class="collapse"> <div class="card-body">
<div class="card-body"> <p class="card-text text-dark">
<p class="card-text text-dark"> Through open-source hardware designs, diverse software support, and active community engagement, we enable users to customize, innovate, and collaborate effortlessly in embedded computing.
Through open-source hardware designs, diverse software support, and active community engagement, we enable users to customize, innovate, and collaborate effortlessly in embedded computing. </p>
</p>
</div>
</div> </div>
</div> </div>
<div class="card bg-light mt-4 text-center"> <div class="card mb-3">
<div class="card-header bg-dark text-light fw-bold" data-bs-toggle="collapse" href="#collapseSupport" role="button" aria-expanded="false" aria-controls="collapseSupport"> <div class="card-header bg-dark text-light fw-bold">
Support us <i class="fa-solid fa-hand-holding-dollar"></i> Support us <i class="fa-solid fa-hand-holding-dollar"></i>
</div> </div>
<div id="collapseSupport" class="collapse"> <div class="card-body">
<div class="card-body"> <p class="card-text text-dark">
<p class="card-text text-dark"> The BeagleBoard.org Foundation is a Michigan, USA-based 501(c)(3) non-profit corporation existing to provide education in and collaboration around the design and use of open-source software and hardware in embedded computing.
The BeagleBoard.org Foundation is a Michigan, USA-based 501(c)(3) non-profit corporation existing to provide education in and collaboration around the design and use of open-source software and hardware in embedded computing. </p>
</p> </div>
</div> <div class="card-footer d-grid gap-2">
<div class="card-footer d-grid gap-2"> <a href="https://patreon.com/beagleboard" class="btn btn-danger text-light"><i class="fa-brands fa-patreon"></i> Become a Patreon</a>
<a href="https://patreon.com/beagleboard" class="btn btn-danger text-light"><i class="fa-brands fa-patreon"></i> Become a Patreon</a> <a href="https://github.com/sponsors/beagleboard" class="btn btn-dark text-light"><i class="fa-brands fa-github"></i> Sponsor on GitHub</a>
<a href="https://github.com/sponsors/beagleboard" class="btn btn-dark text-light"><i class="fa-brands fa-github"></i> Sponsor on GitHub</a>
</div>
</div> </div>
</div> </div>
boards/beagleconnect/freedom/images/BeagleConnect-Boards-Angled.jpg

144 KiB

boards/beagleconnect/freedom/images/BeagleConnect-Freedom-Back.png

271 KiB

boards/beagleconnect/freedom/images/BeagleConnect-Freedom-Front.png

298 KiB

boards/beagleconnect/freedom/images/BeagleConnect-Freedom-Hand.jpg

49.8 KiB

boards/beagleconnect/freedom/images/BeagleConnect-Freedom-with-case.jpg

64.6 KiB

boards/beagleconnect/freedom/images/product-pictures/45-font.jpg

64.9 KiB

boards/beagleconnect/freedom/images/product-pictures/45-frontall.jpg

69.9 KiB

boards/beagleconnect/freedom/images/product-pictures/45back.jpg

44.7 KiB

boards/beagleconnect/freedom/images/product-pictures/back-1.jpg

46.6 KiB

boards/beagleconnect/freedom/images/product-pictures/back.jpg

28.2 KiB

boards/beagleconnect/freedom/images/product-pictures/bcf-front.jpg

35.5 KiB

boards/beagleconnect/freedom/images/product-pictures/bcf-front1.jpg

57.7 KiB