Enhance lab sheets with action item styling and installation guide

- Added a new Action Items Guide to provide styling classes for highlighting important sections in lab sheets.
- Introduced an INSTALL.md file detailing Jekyll installation and testing procedures.
- Implemented action item and warning item styles in the main stylesheet for better visual distinction.
- Updated lab content to utilize new action item classes for clarity and emphasis on critical instructions.
- Enhanced JavaScript functionality to process custom highlight syntax in lab content.
This commit is contained in:
Z. Cliffe Schreuders
2025-09-16 00:42:46 +01:00
parent 6bb2fe9ec7
commit 4788da7beb
11 changed files with 785 additions and 37 deletions

174
ACTION-ITEMS-GUIDE.md Normal file
View File

@@ -0,0 +1,174 @@
# Action Items Guide for Lab Sheets
This guide shows how to use the special styling classes to highlight action items and important sections in your lab sheets.
## Available Action Item Classes
### 1. `.action-item` - General Action Required
Use this for general actions that students need to perform.
```html
<div class="action-item">
<h3>Task 1: Install Required Software</h3>
<p>Download and install the following tools:</p>
<ul>
<li>Nmap</li>
<li>Wireshark</li>
<li>Metasploit Framework</li>
</ul>
</div>
```
### 2. `.warning-item` - Important Warnings
Use this for warnings or important notices.
```html
<div class="warning-item">
<h3>⚠️ Important Warning</h3>
<p>Only perform these activities in a controlled lab environment. Never attempt these techniques on systems you don't own or have explicit permission to test.</p>
</div>
```
### 3. `.danger-item` - Critical Warnings
Use this for critical warnings or dangerous operations.
```html
<div class="danger-item">
<h3>🚨 Critical Security Notice</h3>
<p>This lab involves creating actual malware samples. Ensure you are working in an isolated environment and have proper authorization.</p>
</div>
```
### 4. `.success-item` - Completion/Success
Use this to indicate successful completion or positive outcomes.
```html
<div class="success-item">
<h3>✅ Lab Complete</h3>
<p>Congratulations! You have successfully completed all tasks in this lab. Make sure to document your findings in your lab report.</p>
</div>
```
### 5. `.action-text` - Inline Action Items
Use this for inline action items within paragraphs.
```html
<p>First, <span class="action-text">open a terminal window</span> and navigate to the lab directory. Then <span class="action-text">run the setup script</span> to configure your environment.</p>
```
## Markdown Usage
Since Jekyll processes Markdown, you can also use HTML directly in your Markdown files:
```markdown
## Lab Exercise 1
<div class="action-item">
### Step 1: Network Discovery
Use Nmap to scan the target network and identify active hosts.
```bash
nmap -sn 192.168.1.0/24
```
</div>
<div class="warning-item">
### ⚠️ Legal Notice
Remember to only scan networks you own or have explicit permission to test.
</div>
```
## Color Schemes
The action items automatically adapt to both light and dark themes:
- **Light Theme**: Uses lighter backgrounds with darker text
- **Dark Theme**: Uses darker backgrounds with lighter text
- **Icons**: Each type has a distinctive emoji icon
- **Borders**: Left border in theme-appropriate colors
## Best Practices
1. **Use sparingly**: Don't overuse action items - they should highlight truly important sections
2. **Be specific**: Make action items clear and actionable
3. **Consistent language**: Use consistent terminology across your lab sheets
4. **Test both themes**: Check how your action items look in both light and dark modes
## Examples in Context
Here's how you might structure a typical lab section:
```markdown
## Network Scanning Lab
<div class="action-item">
### Task 1: Basic Network Scan
Perform a basic network scan of the target range 192.168.1.0/24.
```bash
nmap -sn 192.168.1.0/24
```
</div>
<div class="warning-item">
### Important
Only scan networks you own or have explicit permission to test.
</div>
<div class="action-item">
### Task 2: Service Detection
Once you've identified active hosts, perform service detection on the first three hosts.
```bash
nmap -sV 192.168.1.1,2,3
```
</div>
<div class="success-item">
### Completion
If you can see the services running on the target hosts, you have successfully completed this lab section.
</div>
```
This creates a visually distinct and easy-to-follow lab experience for students.
## Highlight Syntax
You can also use the `==highlight==` syntax to highlight specific text inline:
```markdown
This is normal text, but this ==important information== should be highlighted.
You can also highlight ==multiple words== in the same paragraph.
```
This will render as:
- **Light theme**: Yellow background with black text
- **Dark theme**: Darker yellow background with black text
### When to Use Highlight vs Action Items
- **Use `==highlight==`** for emphasizing important information, key terms, or concepts
- **Use action item classes** for actual tasks, warnings, or structured content blocks
### Example Usage
```markdown
## Network Security Lab
<div class="action-item">
### Task 1: Scan the Network
Use Nmap to scan the ==target network== and identify ==active hosts==.
```bash
nmap -sn 192.168.1.0/24
```
</div>
<div class="warning-item">
### Important
Only scan networks you ==own== or have explicit permission to test.
</div>
```
This combines both highlighting techniques for maximum clarity.

View File

@@ -1,85 +1,282 @@
GEM
remote: https://rubygems.org/
specs:
activesupport (8.0.2.1)
base64
benchmark (>= 0.3)
bigdecimal
concurrent-ruby (~> 1.0, >= 1.3.1)
connection_pool (>= 2.2.5)
drb
i18n (>= 1.6, < 2)
logger (>= 1.4.2)
minitest (>= 5.1)
securerandom (>= 0.3)
tzinfo (~> 2.0, >= 2.0.5)
uri (>= 0.13.1)
addressable (2.8.7)
public_suffix (>= 2.0.2, < 7.0)
base64 (0.3.0)
benchmark (0.4.1)
bigdecimal (3.1.3)
coffee-script (2.4.1)
coffee-script-source
execjs
coffee-script-source (1.12.2)
colorator (1.1.0)
commonmarker (0.23.11)
concurrent-ruby (1.3.5)
connection_pool (2.5.4)
csv (3.2.6)
dnsruby (1.73.0)
base64 (>= 0.2)
logger (~> 1.6)
simpleidn (~> 0.2.1)
drb (2.2.3)
em-websocket (0.5.3)
eventmachine (>= 0.12.9)
http_parser.rb (~> 0)
ethon (0.15.0)
ffi (>= 1.15.0)
eventmachine (1.2.7)
execjs (2.10.0)
faraday (2.13.4)
faraday-net_http (>= 2.0, < 3.5)
json
logger
faraday-net_http (3.4.1)
net-http (>= 0.5.0)
ffi (1.17.2-x86_64-linux-gnu)
forwardable-extended (2.6.0)
google-protobuf (4.32.1-x86_64-linux-gnu)
bigdecimal
rake (>= 13)
gemoji (4.1.0)
github-pages (232)
github-pages-health-check (= 1.18.2)
jekyll (= 3.10.0)
jekyll-avatar (= 0.8.0)
jekyll-coffeescript (= 1.2.2)
jekyll-commonmark-ghpages (= 0.5.1)
jekyll-default-layout (= 0.1.5)
jekyll-feed (= 0.17.0)
jekyll-gist (= 1.5.0)
jekyll-github-metadata (= 2.16.1)
jekyll-include-cache (= 0.2.1)
jekyll-mentions (= 1.6.0)
jekyll-optional-front-matter (= 0.3.2)
jekyll-paginate (= 1.1.0)
jekyll-readme-index (= 0.3.0)
jekyll-redirect-from (= 0.16.0)
jekyll-relative-links (= 0.6.1)
jekyll-remote-theme (= 0.4.3)
jekyll-sass-converter (= 1.5.2)
jekyll-seo-tag (= 2.8.0)
jekyll-sitemap (= 1.4.0)
jekyll-swiss (= 1.0.0)
jekyll-theme-architect (= 0.2.0)
jekyll-theme-cayman (= 0.2.0)
jekyll-theme-dinky (= 0.2.0)
jekyll-theme-hacker (= 0.2.0)
jekyll-theme-leap-day (= 0.2.0)
jekyll-theme-merlot (= 0.2.0)
jekyll-theme-midnight (= 0.2.0)
jekyll-theme-minimal (= 0.2.0)
jekyll-theme-modernist (= 0.2.0)
jekyll-theme-primer (= 0.6.0)
jekyll-theme-slate (= 0.2.0)
jekyll-theme-tactile (= 0.2.0)
jekyll-theme-time-machine (= 0.2.0)
jekyll-titles-from-headings (= 0.5.3)
jemoji (= 0.13.0)
kramdown (= 2.4.0)
kramdown-parser-gfm (= 1.1.0)
liquid (= 4.0.4)
mercenary (~> 0.3)
minima (= 2.5.1)
nokogiri (>= 1.16.2, < 2.0)
rouge (= 3.30.0)
terminal-table (~> 1.4)
webrick (~> 1.8)
github-pages-health-check (1.18.2)
addressable (~> 2.3)
dnsruby (~> 1.60)
octokit (>= 4, < 8)
public_suffix (>= 3.0, < 6.0)
typhoeus (~> 1.3)
html-pipeline (2.14.3)
activesupport (>= 2)
nokogiri (>= 1.4)
http_parser.rb (0.8.0)
i18n (1.14.7)
concurrent-ruby (~> 1.0)
jekyll (4.4.1)
jekyll (3.10.0)
addressable (~> 2.4)
base64 (~> 0.2)
colorator (~> 1.0)
csv (~> 3.0)
em-websocket (~> 0.5)
i18n (~> 1.0)
jekyll-sass-converter (>= 2.0, < 4.0)
i18n (>= 0.7, < 2)
jekyll-sass-converter (~> 1.0)
jekyll-watch (~> 2.0)
json (~> 2.6)
kramdown (~> 2.3, >= 2.3.1)
kramdown-parser-gfm (~> 1.0)
kramdown (>= 1.17, < 3)
liquid (~> 4.0)
mercenary (~> 0.3, >= 0.3.6)
mercenary (~> 0.3.3)
pathutil (~> 0.9)
rouge (>= 3.0, < 5.0)
rouge (>= 1.7, < 4)
safe_yaml (~> 1.0)
terminal-table (>= 1.8, < 4.0)
webrick (~> 1.7)
webrick (>= 1.0)
jekyll-avatar (0.8.0)
jekyll (>= 3.0, < 5.0)
jekyll-coffeescript (1.2.2)
coffee-script (~> 2.2)
coffee-script-source (~> 1.12)
jekyll-commonmark (1.4.0)
commonmarker (~> 0.22)
jekyll-commonmark-ghpages (0.5.1)
commonmarker (>= 0.23.7, < 1.1.0)
jekyll (>= 3.9, < 4.0)
jekyll-commonmark (~> 1.4.0)
rouge (>= 2.0, < 5.0)
jekyll-default-layout (0.1.5)
jekyll (>= 3.0, < 5.0)
jekyll-feed (0.17.0)
jekyll (>= 3.7, < 5.0)
jekyll-sass-converter (3.1.0)
sass-embedded (~> 1.75)
jekyll-gist (1.5.0)
octokit (~> 4.2)
jekyll-github-metadata (2.16.1)
jekyll (>= 3.4, < 5.0)
octokit (>= 4, < 7, != 4.4.0)
jekyll-include-cache (0.2.1)
jekyll (>= 3.7, < 5.0)
jekyll-mentions (1.6.0)
html-pipeline (~> 2.3)
jekyll (>= 3.7, < 5.0)
jekyll-optional-front-matter (0.3.2)
jekyll (>= 3.0, < 5.0)
jekyll-paginate (1.1.0)
jekyll-readme-index (0.3.0)
jekyll (>= 3.0, < 5.0)
jekyll-redirect-from (0.16.0)
jekyll (>= 3.3, < 5.0)
jekyll-relative-links (0.6.1)
jekyll (>= 3.3, < 5.0)
jekyll-remote-theme (0.4.3)
addressable (~> 2.0)
jekyll (>= 3.5, < 5.0)
jekyll-sass-converter (>= 1.0, <= 3.0.0, != 2.0.0)
rubyzip (>= 1.3.0, < 3.0)
jekyll-sass-converter (1.5.2)
sass (~> 3.4)
jekyll-seo-tag (2.8.0)
jekyll (>= 3.8, < 5.0)
jekyll-sitemap (1.4.0)
jekyll (>= 3.7, < 5.0)
jekyll-swiss (1.0.0)
jekyll-theme-architect (0.2.0)
jekyll (> 3.5, < 5.0)
jekyll-seo-tag (~> 2.0)
jekyll-theme-cayman (0.2.0)
jekyll (> 3.5, < 5.0)
jekyll-seo-tag (~> 2.0)
jekyll-theme-dinky (0.2.0)
jekyll (> 3.5, < 5.0)
jekyll-seo-tag (~> 2.0)
jekyll-theme-hacker (0.2.0)
jekyll (> 3.5, < 5.0)
jekyll-seo-tag (~> 2.0)
jekyll-theme-leap-day (0.2.0)
jekyll (> 3.5, < 5.0)
jekyll-seo-tag (~> 2.0)
jekyll-theme-merlot (0.2.0)
jekyll (> 3.5, < 5.0)
jekyll-seo-tag (~> 2.0)
jekyll-theme-midnight (0.2.0)
jekyll (> 3.5, < 5.0)
jekyll-seo-tag (~> 2.0)
jekyll-theme-minimal (0.2.0)
jekyll (> 3.5, < 5.0)
jekyll-seo-tag (~> 2.0)
jekyll-theme-modernist (0.2.0)
jekyll (> 3.5, < 5.0)
jekyll-seo-tag (~> 2.0)
jekyll-theme-primer (0.6.0)
jekyll (> 3.5, < 5.0)
jekyll-github-metadata (~> 2.9)
jekyll-seo-tag (~> 2.0)
jekyll-theme-slate (0.2.0)
jekyll (> 3.5, < 5.0)
jekyll-seo-tag (~> 2.0)
jekyll-theme-tactile (0.2.0)
jekyll (> 3.5, < 5.0)
jekyll-seo-tag (~> 2.0)
jekyll-theme-time-machine (0.2.0)
jekyll (> 3.5, < 5.0)
jekyll-seo-tag (~> 2.0)
jekyll-titles-from-headings (0.5.3)
jekyll (>= 3.3, < 5.0)
jekyll-watch (2.2.1)
listen (~> 3.0)
jemoji (0.13.0)
gemoji (>= 3, < 5)
html-pipeline (~> 2.2)
jekyll (>= 3.0, < 5.0)
json (2.6.3)
kramdown (2.5.1)
rexml (>= 3.3.9)
kramdown (2.4.0)
rexml
kramdown-parser-gfm (1.1.0)
kramdown (~> 2.0)
liquid (4.0.4)
listen (3.9.0)
rb-fsevent (~> 0.10, >= 0.10.3)
rb-inotify (~> 0.9, >= 0.9.10)
mercenary (0.4.0)
logger (1.7.0)
mercenary (0.3.6)
minima (2.5.1)
jekyll (>= 3.5, < 5.0)
jekyll-feed (~> 0.9)
jekyll-seo-tag (~> 2.1)
minitest (5.25.5)
net-http (0.6.0)
uri
nokogiri (1.18.10-x86_64-linux-gnu)
racc (~> 1.4)
octokit (4.25.1)
faraday (>= 1, < 3)
sawyer (~> 0.9)
pathutil (0.16.2)
forwardable-extended (~> 2.6)
public_suffix (6.0.2)
rake (13.0.6)
public_suffix (5.1.1)
racc (1.8.1)
rb-fsevent (0.11.2)
rb-inotify (0.11.1)
ffi (~> 1.0)
rexml (3.4.3)
rouge (3.28.0)
rouge (3.30.0)
rubyzip (2.4.1)
safe_yaml (1.0.5)
sass-embedded (1.92.1-x86_64-linux-gnu)
google-protobuf (~> 4.31)
terminal-table (3.0.2)
unicode-display_width (>= 1.1.1, < 3)
unicode-display_width (2.6.0)
sass (3.7.4)
sass-listen (~> 4.0.0)
sass-listen (4.0.0)
rb-fsevent (~> 0.9, >= 0.9.4)
rb-inotify (~> 0.9, >= 0.9.7)
sawyer (0.9.2)
addressable (>= 2.3.5)
faraday (>= 0.17.3, < 3)
securerandom (0.4.1)
simpleidn (0.2.3)
terminal-table (1.8.0)
unicode-display_width (~> 1.1, >= 1.1.1)
typhoeus (1.5.0)
ethon (>= 0.9.0, < 0.16.0)
tzinfo (2.0.6)
concurrent-ruby (~> 1.0)
unicode-display_width (1.8.0)
uri (1.0.3)
webrick (1.8.1)
PLATFORMS
x86_64-linux-gnu
DEPENDENCIES
jekyll
jekyll-feed
github-pages
jekyll-feed (~> 0.12)
jekyll-sitemap
BUNDLED WITH

113
INSTALL.md Normal file
View File

@@ -0,0 +1,113 @@
# Jekyll Installation and Testing Guide
## Prerequisites Installation
### Option 1: Using Snap (Recommended)
```bash
sudo snap install ruby --classic
```
### Option 2: Using APT
```bash
sudo apt update
sudo apt install ruby-full build-essential
```
### Option 3: Using rbenv (For development)
```bash
# Install rbenv
curl -fsSL https://github.com/rbenv/rbenv-installer/raw/HEAD/bin/rbenv-installer | bash
# Add to your shell profile (~/.bashrc or ~/.zshrc)
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
source ~/.bashrc
# Install Ruby
rbenv install 3.1.0
rbenv global 3.1.0
```
## Install Bundler and Dependencies
Once Ruby is installed, run these commands in the project directory:
```bash
# Install Bundler
gem install bundler
# Install project dependencies
bundle install
```
## Test the Site
### Build the Site
```bash
bundle exec jekyll build
```
### Serve Locally
```bash
bundle exec jekyll serve
```
The site will be available at `http://localhost:4000`
### Serve with Live Reload
```bash
bundle exec jekyll serve --livereload
```
## Troubleshooting
### If you get permission errors:
```bash
# Install gems to user directory
bundle config set --local path 'vendor/bundle'
bundle install
```
### If you get SSL errors:
```bash
# Update certificates
sudo apt-get update
sudo apt-get install ca-certificates
```
### If Jekyll build fails:
```bash
# Clean and rebuild
bundle exec jekyll clean
bundle exec jekyll build --verbose
```
## Expected Output
When you run `bundle exec jekyll serve`, you should see:
- Site building successfully
- Server starting on http://localhost:4000
- No errors in the output
## Features to Test
1. **Main Page**: Should show labs organized by category
2. **Dark Mode**: Should be the default theme
3. **Theme Toggle**: Should switch between dark and light modes
4. **Lab Pages**: Should display individual lab content
5. **Fonts**: Should use Do Hyeon for headings and Source Code Pro for code
6. **Responsive Design**: Should work on different screen sizes
## GitHub Pages Deployment
If you want to deploy to GitHub Pages:
```bash
# Switch to GitHub Pages compatible setup
./switch-to-github-pages.sh
# Build for production
bundle exec jekyll build
```
Then commit and push to your GitHub repository.

View File

@@ -1,7 +1,7 @@
# Site settings
title: Hacktivity Lab Sheets
description: Lab sheets for Hacktivity SecGen labs
baseurl: "/HacktivityLabSheets"
# baseurl: "/HacktivityLabSheets" # Commented out for local development
url: "https://cliffe.github.io"
# GitHub Pages settings
@@ -42,4 +42,9 @@ exclude:
- LICENSE
- .gitignore
- Gemfile
- Gemfile.lock
- Gemfile.lock
- vendor/
- .bundle/
- .sass-cache/
- .jekyll-cache/
- .jekyll-metadata

View File

@@ -28,6 +28,19 @@ cybok:
This work by [Z. Cliffe Schreuders](http://z.cliffe.schreuders.org) at Leeds Beckett University is licensed under a [Creative Commons Attribution-ShareAlike 4.0 International License](https://creativecommons.org/licenses/by-sa/4.0/deed.en_GB).
<div class="action-item">
### ⚡ Lab Setup Required
Before starting this lab, ensure you have:
- A ==Linux virtual machine== or system with ==root access==
- Internet connectivity for downloading tools
- At least ==2GB of available disk space==
</div>
<div class="warning-item">
### ⚠️ Important Notice
This lab involves using security tools that could be detected as malicious by antivirus software. Work in an isolated environment and disable real-time protection if necessary.
</div>
### Contents {#preparation-and-logging-in}
[License](#preparation-and-logging-in)
@@ -72,7 +85,7 @@ This work by [Z. Cliffe Schreuders](http://z.cliffe.schreuders.org) at Leeds Bec
One of the interesting and inevitable things about working with security attacks, is that because we are often intentionally “breaking” things and making them misbehave for our own intentions, sometimes things do not go exactly according to plan, software may crash or behave erratically. This adds to the challenge, and may require some troubleshooting.
The labs are written to be informative and, in order to aid clarity, instructions that you should actually execute are generally written in this colour. Note that all lab content is assessable for the module, but the colour coding may help you skip to the “next thing to *do*”, but make sure you dedicate time to read and understand everything. Coloured instructions in *italics* indicates you need to change the instructions based on your environment: for example, using your own IP address.
The labs are written to be informative and, in order to aid clarity, instructions that you should actually execute are generally written in this colour. Note that all lab content is assessable for the module, but the ==colour coding may help you skip to the “next thing to *do*==, but make sure you dedicate time to read and understand everything. Coloured instructions in ==*italics*== indicates you need to change the instructions based on your environment: for example, using your own IP address.
Often the lab instructions are intentionally open ended, and you will have to figure some things out for yourselves. This module is designed to be challenging, as well as fun\!
@@ -94,7 +107,7 @@ Note that a command shell will open automatically, and a username has been rando
From the command line run:
whoami
```whoami```
Your password is “tiaspbiqe2r” (**t**his **i**s **a** **s**ecure **p**assword **b**ut **i**s **q**uite **e**asy **2** **r**emember).

View File

@@ -68,6 +68,7 @@ layout: default
.lab-header h1 {
margin-bottom: 0.5rem;
color: var(--fg-color);
font-weight: normal;
}
.lab-description {
@@ -126,11 +127,12 @@ layout: default
}
.lab-content-body code {
background-color: var(--highlight-color);
background-color: #ffeb3b;
padding: 0.125rem 0.25rem;
border-radius: 3px;
font-size: 0.875rem;
border: 1px solid var(--panelborder-color);
color: black;
}
.lab-content-body pre {
@@ -139,12 +141,14 @@ layout: default
border-radius: 6px;
overflow-x: auto;
border: 1px solid var(--panelborder-color);
color: white;
}
.lab-content-body pre code {
background-color: transparent;
padding: 0;
border: none;
color: white;
}
.lab-footer {
@@ -194,4 +198,13 @@ document.addEventListener('DOMContentLoaded', function() {
}
}
});
// Process ==highlight== syntax
document.addEventListener('DOMContentLoaded', function() {
const contentBody = document.querySelector('.lab-content-body');
if (contentBody) {
// Replace ==text== with <mark>text</mark>
contentBody.innerHTML = contentBody.innerHTML.replace(/==([^=]+)==/g, '<mark>$1</mark>');
}
});
</script>

View File

@@ -0,0 +1,12 @@
# Jekyll plugin to support ==highlight== syntax
module Jekyll
module HighlightFilter
def highlight_text(input)
return input if input.nil?
# Convert ==text== to <mark>text</mark>
input.gsub(/==([^=]+)==/, '<mark>\1</mark>')
end
end
end
Liquid::Template.register_filter(Jekyll::HighlightFilter)

View File

@@ -10,6 +10,7 @@ body {
h1, h2, h3 {
font-family: "Do Hyeon", "Source Code Pro", Monaco, monospace;
font-weight: normal;
}
code, pre, .highlight {
@@ -191,7 +192,7 @@ a:focus {
margin-top: 2rem;
margin-bottom: 1rem;
font-size: 1.5rem;
font-weight: 600;
font-weight: normal;
}
.category-labs {
@@ -311,12 +312,13 @@ h1.user_handle, h1.team_name {
.lab-item h3 {
margin-top: 0;
margin-bottom: 0.5rem;
font-weight: normal;
}
.lab-item h3 a {
text-decoration: none;
color: var(--link-color);
font-weight: 600;
font-weight: normal;
}
.lab-item h3 a:hover {
@@ -541,7 +543,7 @@ a.scale_on_click:focus .fa-solid {
// Typography improvements
h1, h2, h3, h4, h5, h6 {
color: var(--fg-color);
font-weight: 600;
font-weight: normal;
}
// Code blocks
@@ -549,6 +551,7 @@ pre, code {
background-color: var(--highlight-color);
border: 1px solid var(--panelborder-color);
border-radius: 4px;
color: white;
}
code {
@@ -587,3 +590,113 @@ blockquote {
background-color: var(--highlight-color);
font-style: italic;
}
// Action item styles for lab sheets
.action-item {
background-color: var(--alert-infobg-color);
border: 1px solid var(--alert-infoborder-color);
border-left: 4px solid var(--primary-btnbg-color);
border-radius: 4px;
padding: 1rem;
margin: 1rem 0;
color: var(--alert-infofg-color);
}
.action-item h1, .action-item h2, .action-item h3, .action-item h4, .action-item h5, .action-item h6 {
color: var(--alert-infofg-color);
margin-top: 0;
}
.action-item::before {
content: "";
font-weight: bold;
color: var(--primary-btnbg-color);
}
.warning-item {
background-color: var(--alert-warningbg-color);
border: 1px solid var(--alert-warningborder-color);
border-left: 4px solid #f0ad4e;
border-radius: 4px;
padding: 1rem;
margin: 1rem 0;
color: var(--alert-warningfg-color);
}
.warning-item h1, .warning-item h2, .warning-item h3, .warning-item h4, .warning-item h5, .warning-item h6 {
color: var(--alert-warningfg-color);
margin-top: 0;
}
.warning-item::before {
content: "⚠️ ";
font-weight: bold;
}
.danger-item {
background-color: var(--alert-dangerbg-color);
border: 1px solid var(--alert-dangerborder-color);
border-left: 4px solid #d9534f;
border-radius: 4px;
padding: 1rem;
margin: 1rem 0;
color: var(--alert-dangerfg-color);
}
.danger-item h1, .danger-item h2, .danger-item h3, .danger-item h4, .danger-item h5, .danger-item h6 {
color: var(--alert-dangerfg-color);
margin-top: 0;
}
.danger-item::before {
content: "🚨 ";
font-weight: bold;
}
.success-item {
background-color: var(--alert-successbg-color);
border: 1px solid var(--alert-successborder-color);
border-left: 4px solid #5cb85c;
border-radius: 4px;
padding: 1rem;
margin: 1rem 0;
color: var(--alert-successfg-color);
}
.success-item h1, .success-item h2, .success-item h3, .success-item h4, .success-item h5, .success-item h6 {
color: var(--alert-successfg-color);
margin-top: 0;
}
.success-item::before {
content: "";
font-weight: bold;
}
// Inline action styling
.action-text {
background-color: var(--primary-btnbg-color);
color: white;
padding: 0.2rem 0.4rem;
border-radius: 3px;
font-weight: 500;
}
.action-text::before {
content: "";
}
// Markdown highlight syntax support
mark, .highlight-text {
background-color: #ffeb3b;
color: #000;
padding: 0.1rem 0.2rem;
border-radius: 2px;
font-weight: 500;
}
[data-theme="dark"] mark,
[data-theme="dark"] .highlight-text {
background-color: #ffc107;
color: #000;
}

View File

@@ -102,4 +102,13 @@ document.addEventListener('DOMContentLoaded', function() {
}
}
});
// Process ==highlight== syntax
document.addEventListener('DOMContentLoaded', function() {
const contentBody = document.querySelector('.lab-list');
if (contentBody) {
// Replace ==text== with <mark>text</mark>
contentBody.innerHTML = contentBody.innerHTML.replace(/==([^=]+)==/g, '<mark>$1</mark>');
}
});
</script>

40
test-jekyll.sh Executable file
View File

@@ -0,0 +1,40 @@
#!/bin/bash
# Test script for Jekyll installation and site building
echo "🔍 Checking Ruby installation..."
if command -v ruby &> /dev/null; then
echo "✅ Ruby is installed: $(ruby --version)"
else
echo "❌ Ruby is not installed. Please install Ruby first."
echo " See INSTALL.md for installation instructions."
exit 1
fi
echo ""
echo "🔍 Checking Bundler installation..."
if command -v bundle &> /dev/null; then
echo "✅ Bundler is installed: $(bundle --version)"
else
echo "❌ Bundler is not installed. Installing..."
gem install bundler
fi
echo ""
echo "🔍 Installing dependencies..."
bundle install
echo ""
echo "🔍 Building Jekyll site..."
if bundle exec jekyll build; then
echo "✅ Site built successfully!"
echo ""
echo "🔍 Starting Jekyll server..."
echo "📱 Site will be available at: http://localhost:4000"
echo "🛑 Press Ctrl+C to stop the server"
echo ""
bundle exec jekyll serve --livereload
else
echo "❌ Site build failed. Check the error messages above."
exit 1
fi

59
verify-setup.sh Executable file
View File

@@ -0,0 +1,59 @@
#!/bin/bash
# Verification script for Jekyll setup
echo "🔍 Verifying Jekyll setup..."
echo ""
# Check if we're in the right directory
if [ -f "_config.yml" ] && [ -d "_labs" ]; then
echo "✅ In correct Jekyll project directory"
else
echo "❌ Not in a Jekyll project directory"
exit 1
fi
# Check for required files
echo "🔍 Checking required files..."
required_files=("_config.yml" "index.md" "_layouts/default.html" "_layouts/lab.html" "assets/css/hacktivity-theme.scss")
for file in "${required_files[@]}"; do
if [ -f "$file" ]; then
echo "$file exists"
else
echo "$file is missing"
fi
done
# Check for lab files
echo ""
echo "🔍 Checking lab files..."
lab_count=$(find _labs -name "*.md" | wc -l)
echo "📄 Found $lab_count lab files"
# Check for plugins
echo ""
echo "🔍 Checking plugins..."
if [ -f "_plugins/include_subdirectories.rb" ]; then
echo "✅ Subdirectory inclusion plugin exists"
else
echo "❌ Subdirectory inclusion plugin missing"
fi
# Check Gemfile
echo ""
echo "🔍 Checking Gemfile..."
if [ -f "Gemfile" ]; then
echo "✅ Gemfile exists"
echo "📦 Dependencies:"
grep "gem " Gemfile | sed 's/^/ /'
else
echo "❌ Gemfile missing"
fi
echo ""
echo "🎯 Setup verification complete!"
echo ""
echo "Next steps:"
echo "1. Install Ruby (see INSTALL.md)"
echo "2. Run: ./test-jekyll.sh"
echo "3. Open http://localhost:4000 in your browser"