diff --git a/.gitignore b/.gitignore index e7d733d..6f9b8e5 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ data fetch-and-convert.sh deploy.sh hugo.toml +content/playlists diff --git a/fetch-playlist.sh b/fetch-playlist.sh new file mode 100755 index 0000000..da8e21b --- /dev/null +++ b/fetch-playlist.sh @@ -0,0 +1,129 @@ +#!/bin/bash + +# ============================================ +# Nostr Playlist Fetcher for Hugo +# ============================================ + +# Configuration +PUBKEY="3f11abb2e235da2d4dda5d6deb2f123173476a745a3ca56895a1d0f632a42f40" +RELAY="wss://drops.basspistol.org" +DATA_DIR="data/playlists" +RAW_DIR="data/playlists/raw" + +mkdir -p "$DATA_DIR" "$RAW_DIR" + +log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1"; } + +# ============================================ +# Step 1: Fetch playlists and tracks +# ============================================ + +log "Fetching playlist events (kind 34139) from $RELAY..." +nak req -k 34139 -a "$PUBKEY" "$RELAY" > "$RAW_DIR/playlists-raw.jsonl" + +log "Fetching ALL tracks (kind 36787) from $PUBKEY..." +nak req -k 36787 -a "$PUBKEY" "$RELAY" > "$RAW_DIR/tracks-raw.jsonl" + +# ============================================ +# Step 2: Convert JSONL to JSON arrays +# ============================================ + +log "Converting raw data to JSON arrays..." + +# Convert jsonl to json arrays +cat "$RAW_DIR/playlists-raw.jsonl" | jq -s '.' > "$RAW_DIR/playlists-raw.json" +cat "$RAW_DIR/tracks-raw.jsonl" | jq -s '.' > "$RAW_DIR/tracks-raw.json" + +# ============================================ +# Step 3: Build playlist data with jq +# ============================================ + +log "Building playlist data structure..." + +# Build the playlists.json using the json files +jq -n \ + --slurpfile playlists "$RAW_DIR/playlists-raw.json" \ + --slurpfile tracks "$RAW_DIR/tracks-raw.json" \ + '{ + playlists: [ + $playlists[] | .[] | + select(.kind == 34139) | + { + id: .id, + created_at: .created_at, + name: (.tags[] | select(.[0] == "title") | .[1] // ""), + description: (.tags[] | select(.[0] == "description") | .[1] // ""), + image: (.tags[] | select(.[0] == "image") | .[1] // ""), + tracks: [ + .tags[] | + select(.[0] == "a") | .[1] as $ref | + $tracks[] | .[] | + select( + ($ref | split(":")[2]) == (.tags[] | select(.[0] == "d") | .[1]) + ) | + { + id: .id, + created_at: .created_at, + title: (.tags[] | select(.[0] == "title") | .[1] // "Untitled"), + artist: (.tags[] | select(.[0] == "artist") | .[1] // "Unknown Artist"), + album: (.tags[] | select(.[0] == "album") | .[1] // ""), + url: (.tags[] | select(.[0] == "url") | .[1] // ""), + image: (.tags[] | select(.[0] == "image") | .[1] // ""), + duration: (.tags[] | select(.[0] == "duration") | .[1] // ""), + tags: [.tags[] | select(.[0] == "t") | .[1]] + } + ] + } + ] + }' > "$DATA_DIR/playlists.json" + +# ============================================ +# Step 4: Generate flattened tracks file +# ============================================ + +log "Generating flattened tracks file..." + +cat "$RAW_DIR/tracks-raw.json" | jq ' + .[] | { + id: .id, + created_at: .created_at, + title: (.tags[] | select(.[0] == "title") | .[1] // "Untitled"), + artist: (.tags[] | select(.[0] == "artist") | .[1] // "Unknown Artist"), + album: (.tags[] | select(.[0] == "album") | .[1] // ""), + url: (.tags[] | select(.[0] == "url") | .[1] // ""), + image: (.tags[] | select(.[0] == "image") | .[1] // ""), + duration: (.tags[] | select(.[0] == "duration") | .[1] // ""), + tags: [.tags[] | select(.[0] == "t") | .[1]], + d_tag: (.tags[] | select(.[0] == "d") | .[1] // "") + } +' | jq -s '.' > "$DATA_DIR/tracks.json" + +# ============================================ +# Step 5: Cleanup raw jsonl files +# ============================================ + +rm -f "$RAW_DIR"/*.jsonl + +# ============================================ +# Step 6: Summary +# ============================================ + +PLAYLIST_COUNT=$(cat "$DATA_DIR/playlists.json" | jq '.playlists | length' 2>/dev/null || echo "0") +TRACK_COUNT=$(cat "$DATA_DIR/tracks.json" | jq 'length' 2>/dev/null || echo "0") + +echo "" +echo "========================================" +echo "📊 Playlist Summary" +echo "========================================" +echo " 📀 Playlists: $PLAYLIST_COUNT" +echo " 🎵 Total tracks found: $TRACK_COUNT" +echo " 📁 Data saved to: $DATA_DIR/" +echo "========================================" + +echo "" +echo "📝 Playlist Names:" +cat "$DATA_DIR/playlists.json" | jq -r '.playlists[].name' 2>/dev/null | while read -r name; do + if [ -n "$name" ]; then + echo " 🎵 $name" + fi +done diff --git a/generate-playlist-pages.sh b/generate-playlist-pages.sh new file mode 100755 index 0000000..3ac88f9 --- /dev/null +++ b/generate-playlist-pages.sh @@ -0,0 +1,101 @@ +#!/bin/bash + +# ============================================ +# Generate Hugo Playlist Pages from JSON +# ============================================ + +DATA_FILE="data/playlists/playlists.json" +CONTENT_DIR="content/playlists" + +# Check if data file exists +if [ ! -f "$DATA_FILE" ]; then + echo "❌ Error: $DATA_FILE not found. Run fetch-playlist.sh first." + exit 1 +fi + +# Check if data file has content +if [ ! -s "$DATA_FILE" ]; then + echo "❌ Error: $DATA_FILE is empty. Run fetch-playlist.sh first." + exit 1 +fi + +# Create content directory +mkdir -p "$CONTENT_DIR" + +# Create _index.md if it doesn't exist +if [ ! -f "$CONTENT_DIR/_index.md" ]; then + cat > "$CONTENT_DIR/_index.md" << 'EOF' +--- +title: "Playlists" +--- +EOF +fi + +# Clear old playlist pages (keep _index.md) +echo "Clearing old playlist pages..." +find "$CONTENT_DIR" -maxdepth 1 -type f -name "*.md" ! -name "_index.md" -delete + +echo "Generating playlist pages..." + +# Function to escape YAML strings +escape_yaml() { + echo "$1" | sed 's/"/\\"/g' | sed 's/:/\\:/g' | tr -d '\n\r' +} + +# Process each playlist +cat "$DATA_FILE" | jq -c '.playlists[]' 2>/dev/null | while read -r playlist; do + # Skip if playlist is empty + if [ -z "$playlist" ] || [ "$playlist" == "null" ]; then + continue + fi + + # Extract fields + NAME=$(echo "$playlist" | jq -r '.name // "Untitled Playlist"') + PLAYLIST_ID=$(echo "$playlist" | jq -r '.id // ""') + DESCRIPTION=$(echo "$playlist" | jq -r '.description // ""') + IMAGE=$(echo "$playlist" | jq -r '.image // ""') + CREATED_AT=$(echo "$playlist" | jq -r '.created_at // 0') + TRACKS=$(echo "$playlist" | jq -c '.tracks // []') + + # Escape YAML strings + NAME_ESC=$(echo "$NAME" | sed 's/"/\\"/g') + DESCRIPTION_ESC=$(echo "$DESCRIPTION" | sed 's/"/\\"/g' | tr -d '\n\r') + IMAGE_ESC=$(echo "$IMAGE" | sed 's/"/\\"/g') + + # Skip if no name + if [ -z "$NAME" ] || [ "$NAME" == "null" ]; then + continue + fi + + # Create URL-friendly slug + SLUG=$(echo "$NAME" | tr '[:upper:]' '[:lower:]' | sed 's/[^a-z0-9]/-/g' | sed 's/--*/-/g' | sed 's/^-//;s/-$//') + if [ -z "$SLUG" ]; then + SLUG="${PLAYLIST_ID:0:12}" + fi + + # Convert created_at to date + if [ "$CREATED_AT" != "null" ] && [ "$CREATED_AT" -gt 0 ] 2>/dev/null; then + CREATED_DATE=$(date -d "@$CREATED_AT" "+%Y-%m-%d" 2>/dev/null || echo $(date "+%Y-%m-%d")) + else + CREATED_DATE=$(date "+%Y-%m-%d") + fi + + # Write the markdown file with escaped values + cat > "$CONTENT_DIR/$SLUG.md" <' character */ .main-header::after { @@ -156,6 +137,59 @@ body { pointer-events: none; } +/* */ +/* */ +/* */ + +.playlist-header::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 0; + pointer-events: none; + background: + /* Dark overlay for readability */ + linear-gradient( + to bottom, + rgba(0, 0, 0, 0.5) 0%, + rgba(0, 0, 0, 0.25) 40%, + rgba(0, 0, 0, 0.25) 60%, + rgba(0, 0, 0, 0.5) 100% + ), + /* Cyberpunk pattern */ + repeating-linear-gradient( + 33deg, + transparent, + transparent 50px, + var(--accent-yellow) 50px, + var(--accent-yellow) 51px + ); + opacity: 0.6; +} + +/* Decorative '>' character */ +.playlist-header::after { + content: '>'; + position: absolute; + bottom: 40px; + right: 40px; + z-index: 1; + font-family: 'Poppins', sans-serif; + font-weight: 900; + font-size: 4rem; + color: var(--accent-y); + opacity: 0.15; + pointer-events: none; +} + + +/* */ + + + #bannerino { filter: grayscale(50%); position:absolute; @@ -217,13 +251,7 @@ body { } .profile-picture:hover { filter: grayscale(0%); -} - -.profile-picture:hover { - transform: scale(1.02); - box-shadow: 16px 16px 0 var(--accent-yellow); - border: 4px solid var(--accent-yellow); - + transform: scale(1.02); } /* Header text container */ @@ -2093,3 +2121,606 @@ button { } /* ============ END CYBERPUNK FOOTER ============ */ + +/* ============================================ + * PLAYLISTS + * ============================================ */ + +.playlists-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(350px, 1fr)); + gap: 2.5rem; +} + +.playlist-card { + background: var(--card-bg); + border: 2px solid var(--accent-grey); + padding: 1.8rem; + transition: all 0.3s ease; + transform: skewX(-2deg); + box-shadow: 8px 8px 0 var(--accent-grey); +} + +.playlist-card:hover { + transform: skewX(0deg) translate(-4px, -4px); + box-shadow: 12px 12px 0 var(--accent-grey); +} + +.playlist-image { + width: 100%; + height: 180px; + object-fit: cover; + border: 2px solid var(--accent-grey); + margin-bottom: 1rem; + filter: grayscale(30%); + transition: all 0.3s ease; +} + +.playlist-card:hover .playlist-image { + filter: grayscale(0%); +} + +.playlist-info h3 { + font-family: 'Poppins', sans-serif; + font-weight: 700; + font-size: 1.3rem; + letter-spacing: -1px; + margin-bottom: 0.3rem; + color: var(--text-primary); +} + +.playlist-description { + color: var(--text-secondary); + font-size: 0.9rem; + margin-bottom: 0.5rem; +} + +.playlist-track-count { + display: inline-block; + background: var(--accent-grey); + color: var(--accent-black); + padding: 0.2rem 0.8rem; + font-size: 0.7rem; + font-weight: 700; + letter-spacing: 1px; + border-radius: 4px; + margin-top: 0.5rem; +} + +.playlist-tracks { + margin-top: 1.5rem; + border-top: 2px solid var(--accent-grey); + padding-top: 1rem; +} + +.playlist-tracks h4 { + font-family: 'Poppins', sans-serif; + font-weight: 600; + font-size: 1rem; + color: var(--accent-yellow); + margin-bottom: 1rem; + letter-spacing: 1px; +} + +.tracks-list { + display: flex; + flex-direction: column; + gap: 1rem; +} + +.track-item { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 0.8rem; + padding: 0.8rem; + background: var(--bg-secondary); + border-radius: 8px; + border-left: 3px solid var(--accent-yellow); + transition: all 0.3s ease; +} + +.track-item:hover { + background: var(--bg-primary); + border-left-color: var(--accent-yellow); +} + +.track-thumbnail { + width: 50px; + height: 50px; + object-fit: cover; + border-radius: 4px; + border: 1px solid var(--accent-grey); +} + +.track-info { + flex: 1; + min-width: 150px; +} + +.track-title { + display: block; + font-family: 'Poppins', sans-serif; + font-weight: 600; + font-size: 0.9rem; + color: var(--text-primary); +} + +.track-artist { + display: block; + font-size: 0.75rem; + color: var(--accent-yellow); +} + +.track-album { + display: block; + font-size: 0.65rem; + color: var(--accent-grey); +} + +.track-duration { + font-size: 0.65rem; + color: var(--accent-grey); + background: var(--tag-bg); + padding: 0.1rem 0.5rem; + border-radius: 3px; +} + +.track-player { + width: 100%; + margin-top: 0.5rem; + border: 1px solid var(--accent-grey); + border-radius: 4px; +} + +.track-item .track-tags { + display: flex; + flex-wrap: wrap; + gap: 0.3rem; + margin-top: 0.3rem; +} + +/* Responsive */ +@media (max-width: 768px) { + .playlists-grid { + grid-template-columns: 1fr; + } + + .playlist-card { + transform: skewX(0deg); + } + + .playlist-card:hover { + transform: translate(-2px, -2px); + } + + .track-item { + flex-direction: column; + align-items: flex-start; + } + + .track-thumbnail { + width: 100%; + height: 100px; + } +} +/* //////// END PLAYLISTS ////////// */ + +/* ============================================ + * PLAYLIST LIST PAGE + * ============================================ */ + +.playlists-list .section-description { + color: var(--text-secondary); + font-size: 1.1rem; + margin-bottom: 3rem; + text-align: center; + opacity: 0.8; +} + +.playlists-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); + gap: 2.5rem; +} + +.playlist-card { + background: var(--card-bg); + border: 2px solid var(--accent-grey); + overflow: hidden; + transition: all 0.3s ease; + transform: skewX(-2deg); + box-shadow: 8px 8px 0 var(--accent-grey); + position: relative; +} + +.playlist-card:hover { + transform: skewX(0deg) translate(-4px, -4px); + box-shadow: 12px 12px 0 var(--accent-grey); +} + +.playlist-link { + display: block; + text-decoration: none; + color: inherit; +} + +.playlist-image { + width: 100%; + height: 200px; + object-fit: cover; + border-bottom: 3px solid var(--accent-yellow); + filter: grayscale(30%); + transition: all 0.3s ease; +} + +.playlist-card:hover .playlist-image { + filter: grayscale(0%); +} + +.playlist-info { + padding: 1.5rem; +} + +.playlist-info h2 { + font-family: 'Poppins', sans-serif; + font-weight: 700; + font-size: 1.3rem; + letter-spacing: -1px; + color: var(--text-primary); + margin-bottom: 0.3rem; +} + +.playlist-description { + color: var(--text-secondary); + font-size: 0.9rem; + margin-bottom: 0.5rem; +} + +.playlist-track-count { + display: inline-block; + background: var(--accent-grey); + color: var(--bg-primary); + padding: 0.2rem 0.8rem; + font-size: 0.7rem; + font-weight: 700; + letter-spacing: 1px; + border-radius: 4px; +} + +.playlist-hover-overlay { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + display: flex; + align-items: center; + justify-content: center; + background: rgba(0, 0, 0, 0.6); + opacity: 0; + transition: opacity 0.3s ease; + backdrop-filter: blur(20px); +} + +.playlist-card:hover .playlist-hover-overlay { + opacity: 1; +} + +.playlist-view-btn { + padding: 0.8rem 2rem; + background: var(--accent-yellow); + color: var(--bg-primary); + font-family: 'Poppins', sans-serif; + font-weight: 700; + font-size: 0.8rem; + letter-spacing: 2px; + text-transform: uppercase; + border-radius: 7px; + transition: all 0.3s ease; + filter: drop-shadow(0 0 20px var(--accent-yellow)); +} + +.playlist-view-btn:hover { + background: var(--accent-yellow); + color: var(--bg-primary); + transition: all .3s ease; + filter: drop-shadow(0 0 20px var(--accent-yellow)); +} + +/* ============================================ + * PLAYLIST SINGLE PAGE + * ============================================ */ + +.playlist-detail { + padding-top: 2rem; +} + +.playlist-header { + margin-bottom: 3rem; + padding: 2rem; + background: var(--bg-secondary); + border: 2px solid var(--accent-grey); + box-shadow: 8px 8px 0 var(--accent-grey); + transform: skewX(-2deg); +} + +.playlist-header-content { + display: flex; + align-items: center; + gap: 2.5rem; + flex-wrap: wrap; + transform: skewX(2deg); +} + +.playlist-header-image { + width: 200px; + height: 200px; + object-fit: cover; + border: 3px solid var(--accent-yellow); + box-shadow: 4px 4px 0 var(--accent-grey); + flex-shrink: 0; +} + +.playlist-header-info h1 { + font-family: 'Poppins', sans-serif; + font-weight: 900; + font-size: 2.8rem; + letter-spacing: -2px; + color: var(--text-primary); + text-transform: uppercase; + text-shadow: 2px 2px 0 var(--accent-yellow); +} + +.playlist-header-info .playlist-description { + font-size: 1.1rem; + color: var(--text-secondary); + margin: 0.5rem 0 1rem 0; +} + +.playlist-meta { + display: flex; + gap: 1.5rem; + flex-wrap: wrap; +} + +.playlist-meta span { + font-size: 0.85rem; + color: var(--bg-primary); + letter-spacing: 1px; +} + +/* Track list */ +.playlist-tracks-list { + display: flex; + flex-direction: column; + gap: 1rem; + margin: 2rem 0; +} + +.playlist-track-item { + display: flex; + align-items: center; + gap: 1rem; + padding: 1rem; + background: var(--card-bg); + border: 2px solid var(--accent-grey); + transition: all 0.3s ease; + transform: skewX(-2deg); + box-shadow: 4px 4px 0 var(--accent-grey); +} + +.playlist-track-item:hover { + transform: skewX(0deg) translate(-2px, -2px); + box-shadow: 6px 6px 0 var(--accent-grey); +} + +.track-number { + font-family: 'Poppins', sans-serif; + font-weight: 700; + font-size: 1.2rem; + color: var(--accent-grey); + min-width: 30px; + text-align: center; +} + +.track-thumbnail { + width: 60px; + height: 60px; + object-fit: cover; + border: 2px solid var(--accent-grey); + border-radius: 4px; + flex-shrink: 0; +} + +.track-info { + flex: 1; + min-width: 200px; +} + +.track-title { + display: block; + font-family: 'Poppins', sans-serif; + font-weight: 600; + font-size: 1rem; + color: var(--text-primary); +} + +.track-artist { + display: block; + font-size: 0.8rem; + color: var(--accent-yellow); +} + +.track-album { + display: block; + font-size: 0.7rem; + color: var(--accent-grey); +} + +.track-duration { + font-size: 0.7rem; + color: var(--accent-grey); + background: var(--tag-bg); + padding: 0.1rem 0.5rem; + border-radius: 3px; +} + +.track-tags { + display: flex; + flex-wrap: wrap; + gap: 0.3rem; + margin-top: 0.2rem; +} + +.track-player-wrapper { + display: flex; + align-items: center; + gap: 0.5rem; + flex-shrink: 0; +} + +.track-player { + width: 100%; + border: 1px solid var(--accent-grey); + border-radius: 4px; +} + +.track-share-btn { + background: none; + border: 1px solid var(--accent-grey); + color: var(--text-primary); + padding: 0.3rem 0.6rem; + border-radius: 4px; + cursor: pointer; + transition: all 0.3s ease; + font-size: 0.8rem; +} + +.track-share-btn:hover { + border-color: var(--accent-yellow); + color: var(--accent-yellow); + transform: scale(1.05); +} + +/* Play all button */ +.playlist-actions { + text-align: center; + margin: 2rem 0; +} + +.playlist-play-all { + background: var(--bg-primary); + color: var(--accent-yellow) !important; + border: 2px solid var(--accent-yellow); + padding: .5rem 1.5rem; + font-family: poppins,sans-serif; + font-weight: 700; + font-size: .7rem; + letter-spacing: 3px; + text-transform: uppercase; + cursor: pointer; + transition: all .3s ease; + filter: drop-shadow(0 0 20px var(--accent-yellow)); + animation: glow 3s infinite alternate; +} + +.playlist-play-all:hover { + transform: scale(1.05); + background: var(--accent-yellow); + color: var(--bg-primary) !important; + border-color: var(--accent-yellow); +} + +/* Back link */ +.playlist-back { + margin-top: 2rem; + text-align: center; +} + +.back-link { + color: var(--accent-grey); + text-decoration: none; + font-family: 'Poppins', sans-serif; + font-weight: 500; + font-size: 0.8rem; + letter-spacing: 2px; + text-transform: uppercase; + transition: all 0.3s ease; + padding: 0.5rem 1.5rem; + border: 1px solid transparent; +} + +.back-link:hover { + color: var(--accent-yellow); + border-color: var(--accent-yellow); +} + +.no-tracks { + text-align: center; + padding: 3rem; + color: var(--text-secondary); + font-size: 1.1rem; +} + +/* Responsive */ +@media (max-width: 768px) { + .playlist-header-content { + flex-direction: column; + text-align: center; + } + + .playlist-header-info h1 { + font-size: 2rem; + } + + .playlist-header-image { + width: 150px; + height: 150px; + } + + .playlist-meta { + justify-content: center; + } + + .playlist-track-item { + flex-wrap: wrap; + gap: 0.5rem; + } + + .track-player-wrapper { + width: 100%; + flex-wrap: wrap; + justify-content: center; + } + + .track-player { + width: 100%; + max-width: 300px; + } + + .playlist-play-all { + padding: 0.8rem 2rem; + font-size: 0.8rem; + } +} + +@media (max-width: 480px) { + .playlist-header-info h1 { + font-size: 1.5rem; + } + + .playlist-header-image { + width: 120px; + height: 120px; + } + + .track-thumbnail { + width: 40px; + height: 40px; + } + + .track-title { + font-size: 0.85rem; + } +} diff --git a/themes/one-pager/assets/js/scripts.js b/themes/one-pager/assets/js/scripts.js index 3e6ecd1..e6b6e5e 100644 --- a/themes/one-pager/assets/js/scripts.js +++ b/themes/one-pager/assets/js/scripts.js @@ -933,20 +933,25 @@ document.addEventListener('DOMContentLoaded', function() { }); }); - // Smooth scrolling for navigation links (both main nav and sticky nav) + // Smooth scrolling for navigation links (only for # anchors) document.querySelectorAll('nav a').forEach(link => { link.addEventListener('click', function(e) { - e.preventDefault(); - const targetId = this.getAttribute('href'); - const targetElement = document.querySelector(targetId); - if (targetElement) { - const navHeight = stickyNav.offsetHeight; - const targetPosition = targetElement.getBoundingClientRect().top + window.pageYOffset - navHeight - 20; - window.scrollTo({ - top: targetPosition, - behavior: 'smooth' - }); + const href = this.getAttribute('href'); + // Only intercept if it's a # anchor link + if (href && href.startsWith('#')) { + e.preventDefault(); + const targetId = href; + const targetElement = document.querySelector(targetId); + if (targetElement) { + const navHeight = stickyNav.offsetHeight; + const targetPosition = targetElement.getBoundingClientRect().top + window.pageYOffset - navHeight - 20; + window.scrollTo({ + top: targetPosition, + behavior: 'smooth' + }); + } } + // If it's a regular link (like /playlists/), let it navigate normally }); }); diff --git a/themes/one-pager/layouts/_default/baseof.html b/themes/one-pager/layouts/_default/baseof.html new file mode 100644 index 0000000..a5bf90d --- /dev/null +++ b/themes/one-pager/layouts/_default/baseof.html @@ -0,0 +1,36 @@ + + + + + + + {{ partial "seo.html" . }} + + {{ $style := resources.Get "css/style.css" | resources.Minify | fingerprint }} + + + + + + + + {{ block "header" . }}{{ end }} + + +
+ + {{ block "main" . }}{{ end }} + +
+ + {{ partial "footer.html" . }} + + + + + {{ $js := resources.Get "js/scripts.js" | resources.Minify | fingerprint }} + + + + + diff --git a/themes/one-pager/layouts/index.html b/themes/one-pager/layouts/_default/index.html similarity index 74% rename from themes/one-pager/layouts/index.html rename to themes/one-pager/layouts/_default/index.html index e98fd97..5930d41 100644 --- a/themes/one-pager/layouts/index.html +++ b/themes/one-pager/layouts/_default/index.html @@ -1,28 +1,8 @@ - - - - - - - {{ partial "seo.html" . }} +{{ define "header" }} +{{ partial "header.html" . }} +{{ end }} - - - - - - - - - {{ $style := resources.Get "css/style.css" | resources.Minify | fingerprint }} - - - - - - {{ partial "header.html" . }} - -
+{{ define "main" }} {{ partial "blog.html" . }} @@ -32,11 +12,7 @@ {{ partial "videos.html" . }} -
- - {{ partial "footer.html" . }} - - +
@@ -96,8 +72,4 @@
- - {{ $js := resources.Get "js/scripts.js" | resources.Minify | fingerprint }} - - - +{{ end }} diff --git a/themes/one-pager/layouts/partials/header.html b/themes/one-pager/layouts/partials/header.html index ef94269..836c35e 100644 --- a/themes/one-pager/layouts/partials/header.html +++ b/themes/one-pager/layouts/partials/header.html @@ -39,12 +39,13 @@