Compare commits
23 Commits
Author | SHA1 | Date | |
---|---|---|---|
60e02a1435
|
|||
11bc99a2f0
|
|||
7f1420a76e
|
|||
c68a7f12a2
|
|||
0b977264dc
|
|||
38b4a704f9
|
|||
9dce59fdee
|
|||
65528d2025
|
|||
ec8335daab
|
|||
7f559f26e3
|
|||
82ee6c808c
|
|||
a5c73f5874
|
|||
829bdb7708
|
|||
91000b7c6f
|
|||
80315d296c
|
|||
69b26429a8
|
|||
51ed253bbd
|
|||
fcd73c05d7
|
|||
71c1c46cfb
|
|||
991f088ded
|
|||
ebe230ee0a
|
|||
da62e4ec51
|
|||
34d13fa0c6
|
@@ -111,7 +111,7 @@ file are found in the comments within the file.
|
|||||||
|
|
||||||
Any database supported by the Perl:DBI and Perl::DBD modules can be used with
|
Any database supported by the Perl:DBI and Perl::DBD modules can be used with
|
||||||
the site-generator program. Currently the hpr_generator project works with
|
the site-generator program. Currently the hpr_generator project works with
|
||||||
an SQLite database.
|
a MySQL or SQLite database.
|
||||||
|
|
||||||
Find the [DBI] section of the file. It should look like the following
|
Find the [DBI] section of the file. It should look like the following
|
||||||
|
|
||||||
@@ -146,6 +146,26 @@ The hpr.db section of the driver option `dbi:SQLite:hpr.db` is the path
|
|||||||
to the sqlite file. The default assumes the hpr.db file is located in the same
|
to the sqlite file. The default assumes the hpr.db file is located in the same
|
||||||
directory as the site-generator.
|
directory as the site-generator.
|
||||||
|
|
||||||
|
### MySQL
|
||||||
|
|
||||||
|
Remove the comment character from the start of the database, driver,
|
||||||
|
user, and password option lines:
|
||||||
|
|
||||||
|
```
|
||||||
|
# Configuration settings for MySQL
|
||||||
|
database: mysql
|
||||||
|
driver: dbi:mysql:database=hpr_hpr:hostname=localhost
|
||||||
|
user: hpr-generator
|
||||||
|
password: *********
|
||||||
|
```
|
||||||
|
|
||||||
|
This assumes that the MySQL database service is available at the localhost
|
||||||
|
hostname, that the database name (hpr_hpr) is the database created from
|
||||||
|
the hpr.sql dump file or manually created by you, that the user (hpr-generator)
|
||||||
|
was added by you and has read rights to the hpr_hpr database, and that the
|
||||||
|
password (replace ********* with the actual password) matches the password set
|
||||||
|
for the hpr-generator database user.
|
||||||
|
|
||||||
## Configuring the website for viewing locally
|
## Configuring the website for viewing locally
|
||||||
|
|
||||||
For HTML links to work when viewing the files on your local machine using the
|
For HTML links to work when viewing the files on your local machine using the
|
||||||
|
@@ -1,96 +0,0 @@
|
|||||||
# New Design Integration
|
|
||||||
|
|
||||||
This branch integrates the modern design from DraftHPRSplash (hobbypublicradio.org) into the hpr_generator system.
|
|
||||||
|
|
||||||
## What's Been Done
|
|
||||||
|
|
||||||
### 1. Design Assets Added
|
|
||||||
- **CSS**: New responsive design stylesheet at `public_html/css/new-design.css`
|
|
||||||
- **Images**: New banner logo at `public_html/images/logo.png`
|
|
||||||
- **Icons**: Complete icon set from Remix Icons in `public_html/icons/`
|
|
||||||
|
|
||||||
### 2. New Templates Created
|
|
||||||
- **Main Template**: `templates/page-newdesign.tpl.html` - Main page layout with new design
|
|
||||||
- **Index Content**: `templates/content-index-newdesign.tpl.html` - Homepage with card-based layout
|
|
||||||
- **Navigation**: `templates/navigation-newdesign.tpl.html` - Simplified navigation
|
|
||||||
|
|
||||||
### 3. Configuration
|
|
||||||
- **New Config**: `site-newdesign.cfg` - Configuration file to use new design templates
|
|
||||||
|
|
||||||
## Key Design Changes
|
|
||||||
|
|
||||||
### Navigation
|
|
||||||
- **Before**: Complex multi-level navigation with detailed menu structure
|
|
||||||
- **After**: Simple 4-item top navigation (Home, Upload, Download, About)
|
|
||||||
|
|
||||||
### Layout
|
|
||||||
- **Before**: Traditional header with logo + complex navigation + main content + detailed footer
|
|
||||||
- **After**: Clean banner image + simplified navigation + card-based sections + minimal footer
|
|
||||||
|
|
||||||
### Homepage Content
|
|
||||||
- **Before**: Text-heavy with detailed episode listings
|
|
||||||
- **After**: Card-based sections for podcast functions (Record, Schedule, Subscribe, Listen) + streamlined episode/comment lists
|
|
||||||
|
|
||||||
## How to Use
|
|
||||||
|
|
||||||
### Option 1: Test New Design
|
|
||||||
```bash
|
|
||||||
# Install dependencies first (see GETTING_STARTED.md)
|
|
||||||
./site-generator --configuration=site-newdesign.cfg index
|
|
||||||
```
|
|
||||||
|
|
||||||
### Option 2: Generate Full Site with New Design
|
|
||||||
```bash
|
|
||||||
./site-generator --configuration=site-newdesign.cfg --all
|
|
||||||
```
|
|
||||||
|
|
||||||
### Option 3: Compare Designs
|
|
||||||
```bash
|
|
||||||
# Generate with old design
|
|
||||||
./site-generator index
|
|
||||||
|
|
||||||
# Generate with new design
|
|
||||||
./site-generator --configuration=site-newdesign.cfg index
|
|
||||||
|
|
||||||
# Compare the generated index.html files
|
|
||||||
```
|
|
||||||
|
|
||||||
## Compatibility
|
|
||||||
|
|
||||||
- **Database**: Uses same database and queries as original
|
|
||||||
- **Functionality**: All existing features preserved
|
|
||||||
- **RSS/XML**: Uses same RSS templates (no changes needed)
|
|
||||||
- **URLs**: All URL structures remain the same
|
|
||||||
- **Templates**: Original templates unchanged, new design uses separate template files
|
|
||||||
|
|
||||||
## Next Steps
|
|
||||||
|
|
||||||
1. **Testing**: Generate and test all page types with new design
|
|
||||||
2. **Content Templates**: Create new design versions for other content templates as needed
|
|
||||||
3. **Refinement**: Adjust styling and layout based on testing
|
|
||||||
4. **Documentation**: Update any template documentation
|
|
||||||
|
|
||||||
## Files Added/Modified
|
|
||||||
|
|
||||||
### New Files
|
|
||||||
- `public_html/css/new-design.css`
|
|
||||||
- `public_html/images/logo.png`
|
|
||||||
- `public_html/icons/` (directory with SVG icons)
|
|
||||||
- `templates/page-newdesign.tpl.html`
|
|
||||||
- `templates/content-index-newdesign.tpl.html`
|
|
||||||
- `templates/navigation-newdesign.tpl.html`
|
|
||||||
- `site-newdesign.cfg`
|
|
||||||
- `NEW_DESIGN_INTEGRATION.md` (this file)
|
|
||||||
|
|
||||||
### No Existing Files Modified
|
|
||||||
This integration preserves all existing functionality while adding the new design as an option.
|
|
||||||
|
|
||||||
## Design Principles Maintained
|
|
||||||
|
|
||||||
1. **Responsive**: Mobile-first responsive design
|
|
||||||
2. **Accessible**: Maintains accessibility features
|
|
||||||
3. **Performance**: Optimized CSS and minimal JavaScript
|
|
||||||
4. **Standards**: Valid HTML5 and modern CSS
|
|
||||||
5. **Compatibility**: Works with existing generator system
|
|
||||||
|
|
||||||
The integration allows switching between designs via configuration, enabling easy testing and gradual migration.
|
|
13
README.md
@@ -15,6 +15,15 @@ Static web page generator for the Hacker Public Radio website.
|
|||||||
2. Run `./utils/update-hpr.sh`
|
2. Run `./utils/update-hpr.sh`
|
||||||
* SQLite v3.8.3 or greater is recommended. CTE WITH clauses are used in some template queries. Must convert WITH
|
* SQLite v3.8.3 or greater is recommended. CTE WITH clauses are used in some template queries. Must convert WITH
|
||||||
clauses to sub-queries when using earlier versions of SQLite.
|
clauses to sub-queries when using earlier versions of SQLite.
|
||||||
|
* With MySQL
|
||||||
|
* Create database hpr_hpr in the MySQL server from HPR dump file.
|
||||||
|
- ``sudo mysql --host=localhost < hpr.sql``
|
||||||
|
* Create a user that will be used by the site-generator.
|
||||||
|
- Suggested username: hpr-generator
|
||||||
|
- ``CREATE USER 'hpr-generator'@'localhost' IDENTIFIED BY '<password>';``
|
||||||
|
* Limit the user's privileges to EXECUTE and SELECT
|
||||||
|
- ``GRANT SELECT ON hpr_hpr.* TO 'hpr-generator'@'localhost';``
|
||||||
|
- ``GRANT EXECUTE ON `hpr_hpr`.* TO 'hpr-generator'@'localhost';``
|
||||||
* Install the needed Perl modules using preferred method (distribution packages, CPAN, etc.)
|
* Install the needed Perl modules using preferred method (distribution packages, CPAN, etc.)
|
||||||
* Getopt::Long
|
* Getopt::Long
|
||||||
* Pod::Usage
|
* Pod::Usage
|
||||||
@@ -26,7 +35,7 @@ Static web page generator for the Hacker Public Radio website.
|
|||||||
* Template::Plugin::HTML::Strip
|
* Template::Plugin::HTML::Strip
|
||||||
* DBI
|
* DBI
|
||||||
* Tie::DBI
|
* Tie::DBI
|
||||||
* DBD::SQLite
|
* DBD::SQLite or DBD::mysql
|
||||||
* Date::Calc
|
* Date::Calc
|
||||||
* Text::CSV_XS
|
* Text::CSV_XS
|
||||||
* HTML::Entities
|
* HTML::Entities
|
||||||
@@ -67,6 +76,4 @@ and add the label "**Feature Request**".
|
|||||||
* gordons
|
* gordons
|
||||||
* Ken Fallon
|
* Ken Fallon
|
||||||
* norrist
|
* norrist
|
||||||
* Paul Jewell
|
|
||||||
|
|
||||||
|
|
||||||
|
BIN
public_html/css/bebas/BebasNeue.otf
Normal file
BIN
public_html/css/bebas/BebasNeue.woff
Normal file
BIN
public_html/css/bebas/BebasNeueLight.otf
Normal file
BIN
public_html/css/gnutypewriter/GNUTypewriter.odt
Normal file
BIN
public_html/css/gnutypewriter/GNUTypewriter.pdf
Normal file
27342
public_html/css/gnutypewriter/GNUTypewriter.sfd
Normal file
BIN
public_html/css/gnutypewriter/gtw.otf
Normal file
BIN
public_html/css/gnutypewriter/gtw.ttf
Normal file
BIN
public_html/css/gnutypewriter/gtw.woff
Normal file
@@ -13,22 +13,135 @@ https://creativecommons.org/publicdomain/
|
|||||||
* - CSS-Tricks: Linearly Scale font-size with CSS clamp() Based on the Viewport
|
* - CSS-Tricks: Linearly Scale font-size with CSS clamp() Based on the Viewport
|
||||||
* -- https://css-tricks.com/linearly-scale-font-size-with-css-clamp-based-on-the-viewport/
|
* -- https://css-tricks.com/linearly-scale-font-size-with-css-clamp-based-on-the-viewport/
|
||||||
*/
|
*/
|
||||||
|
@font-face {
|
||||||
|
font-family: "GNUTypewriter";
|
||||||
|
src:
|
||||||
|
local("GNUTypewriter"),
|
||||||
|
url("/css/gnutypewriter/gtw.woff") format("woff");
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: "BebasNeue";
|
||||||
|
src:
|
||||||
|
local("BebasNeue"),
|
||||||
|
url("/css/bebas/BebasNeue.woff") format("woff");
|
||||||
|
}
|
||||||
|
:root {
|
||||||
|
--background-primary: #dfdfdf;
|
||||||
|
--text-primary: #4d4d4d; /* HPR Grey */
|
||||||
|
--banner-text-primary: #000000;
|
||||||
|
--background-secondary: #4d4d4d;
|
||||||
|
--text-secondary: #dfdfdf;
|
||||||
|
--link-primary: #004852 /*#154a60*/;
|
||||||
|
--link-primary-hover: #f8961e;
|
||||||
|
--link-secondary: #a8f8ff;
|
||||||
|
--link-secondary-hover: #f9e9c2;
|
||||||
|
|
||||||
|
--input-border-primary: #4d4d4d;
|
||||||
|
|
||||||
|
--link-spacing-horizontal: clamp(0.5rem, -0.25rem + 3vw, 2.5rem);
|
||||||
|
|
||||||
|
--font-family-hpr: Verdana, Arial, Helvetica, sans-serif; /* 1em/1.5 OpenDyslexic, */;
|
||||||
|
--font-size-default: clamp(1rem, 15px + 0.3vw, 1.07rem);
|
||||||
|
|
||||||
|
/* screen breakpoints */
|
||||||
|
--for-phone-only: 599px;
|
||||||
|
--for-tablet-portrait-up: 600px;
|
||||||
|
--for-tablet-landscape-up: 900px;
|
||||||
|
--for-desktop-up: 1200px;
|
||||||
|
--for-big-desktop-up: 1800px;
|
||||||
|
}
|
||||||
|
|
||||||
html {
|
html {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
display: block;
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
body {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: flex-start;
|
||||||
|
background-color: var(--background-primary);
|
||||||
|
color: var(--text-primary);
|
||||||
|
font-size: 1rem; /* fallback for browsers that don't support the clamp function) */
|
||||||
|
font-size: var(--font-size-default);
|
||||||
|
font-family: var(--font-family-hpr);
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
min-height: 100vh;
|
||||||
}
|
}
|
||||||
|
|
||||||
body {
|
body > nav {
|
||||||
display: block;
|
background-color: var(--background-secondary);
|
||||||
background: #dfdfdf;
|
color: var(--text-secondary);
|
||||||
font-size: 1rem; /* fallback for browsers that don't support the clamp function) */
|
}
|
||||||
font-size: clamp(1rem, 15px + 0.3vw, 1.07rem);
|
body > nav a {
|
||||||
|
color: var(--link-secondary);
|
||||||
|
}
|
||||||
|
body > nav a:hover {
|
||||||
|
color: var(--link-secondary-hover);
|
||||||
|
}
|
||||||
|
body > nav ul {
|
||||||
|
background-color: inherit;
|
||||||
|
color: inherit;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0.25rem;
|
||||||
|
}
|
||||||
|
body > nav ul li {
|
||||||
|
display: inline-block;
|
||||||
|
background-color: inherit;
|
||||||
|
color: inherit;
|
||||||
|
line-height: 1.0;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
padding-right: var(--link-spacing-horizontal);
|
||||||
|
}
|
||||||
|
body > nav ul li a {
|
||||||
|
padding: 0.25rem 0;
|
||||||
|
}
|
||||||
|
body > header {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
flex-flow: wrap;
|
||||||
|
justify-content: space-between;
|
||||||
|
padding: 0.25rem;
|
||||||
|
background-image: url("/images/hpr-splatter-logo.svg"), url("/images/main-header-background.png");
|
||||||
|
background-size: 59%, cover;
|
||||||
|
background-repeat: no-repeat, no-repeat;
|
||||||
|
background-position: right -15px top -20px, left top;
|
||||||
|
color: var(--banner-text-primary);
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
body > header > * {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
flex: 1 1 auto;
|
||||||
|
padding: 0.5rem;
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
body > main {
|
||||||
|
flex: 1 0 auto;
|
||||||
|
padding: 0.25rem;
|
||||||
|
}
|
||||||
|
body > footer {
|
||||||
|
flex: 0 1 auto;
|
||||||
|
background-color: var(--background-secondary);
|
||||||
|
color: var(--text-secondary);
|
||||||
|
padding: 0.25rem;
|
||||||
|
text-align: center;
|
||||||
|
line-height: 1.25;
|
||||||
|
}
|
||||||
|
body > footer hr:first-child {
|
||||||
|
display: none;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
|
body > footer a {
|
||||||
|
color: var(--link-secondary);
|
||||||
|
}
|
||||||
|
body > footer a:hover {
|
||||||
|
color: var(--link-secondary-hover);
|
||||||
|
}
|
||||||
div,
|
div,
|
||||||
h1,
|
h1,
|
||||||
h2,
|
h2,
|
||||||
@@ -49,9 +162,9 @@ fieldset,
|
|||||||
input,
|
input,
|
||||||
textarea,
|
textarea,
|
||||||
blockquote {
|
blockquote {
|
||||||
font-family: Verdana, Arial, Helvetica, sans-serif; /* 1em/1.5 OpenDyslexic, */
|
font-family: inherit;
|
||||||
color: #4D4D4D; /* HPR Grey */
|
color: inherit;
|
||||||
background: white;
|
background: inherit;
|
||||||
}
|
}
|
||||||
|
|
||||||
h1 {
|
h1 {
|
||||||
@@ -60,7 +173,8 @@ h1 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
h2,
|
h2,
|
||||||
article * h1 {
|
article * h1,
|
||||||
|
section > header:first-child {
|
||||||
font-size: 1.45rem;
|
font-size: 1.45rem;
|
||||||
margin: 1.25rem 0 0.75rem 0;
|
margin: 1.25rem 0 0.75rem 0;
|
||||||
}
|
}
|
||||||
@@ -88,16 +202,19 @@ ul {
|
|||||||
|
|
||||||
li {
|
li {
|
||||||
line-height: 1.25;
|
line-height: 1.25;
|
||||||
|
margin-bottom: 0.25rem;
|
||||||
|
}
|
||||||
|
li:last-child {
|
||||||
|
margin-bottom: 0.25rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
a {
|
a {
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
|
color: var(--link-primary);
|
||||||
}
|
}
|
||||||
|
|
||||||
a:hover {
|
a:hover {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
color: var(--link-primary-hover);
|
||||||
}
|
}
|
||||||
|
|
||||||
hr {
|
hr {
|
||||||
background: #4D4D4D;
|
background: #4D4D4D;
|
||||||
border: 0;
|
border: 0;
|
||||||
@@ -105,7 +222,7 @@ hr {
|
|||||||
}
|
}
|
||||||
|
|
||||||
audio {
|
audio {
|
||||||
padding: .7em 0em .5em 0em;
|
padding: 0.7em 0em 0.5em 0em;
|
||||||
clear: both;
|
clear: both;
|
||||||
position: relative;
|
position: relative;
|
||||||
z-index: auto;
|
z-index: auto;
|
||||||
@@ -123,359 +240,165 @@ p.meta {
|
|||||||
p.meta span label {
|
p.meta span label {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
article > p,
|
||||||
article>p,
|
#main_content > p,
|
||||||
#maincontent>p {
|
#main_content > section > p {
|
||||||
line-height: 1.45;
|
line-height: 1.45;
|
||||||
}
|
}
|
||||||
|
.lane {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: 0.5rem;
|
||||||
|
|
||||||
article#previous_five_weeks>* {
|
|
||||||
line-height: 1.35;
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
}
|
}
|
||||||
|
a.lane-button {
|
||||||
article#previous_five_weeks>h3 {
|
display: flex;
|
||||||
margin: 1.5rem 0 0.5rem 0;
|
flex-direction: column;
|
||||||
}
|
justify-content: center;
|
||||||
|
margin: 0.5rem var(--link-spacing-horizontal);
|
||||||
#container {
|
|
||||||
max-width: 58rem;
|
|
||||||
margin: 0.25rem;
|
|
||||||
padding: 0.75rem; /* fallback for browsers that don't support the clamp function) */
|
|
||||||
padding: clamp(0.75rem, -0.25rem + 3vw, 2.0rem);
|
|
||||||
overflow: hidden;
|
|
||||||
background: white;
|
|
||||||
border: thin solid #4D4D4D;
|
|
||||||
}
|
|
||||||
|
|
||||||
.shadow {
|
|
||||||
-moz-box-shadow: 2px 3px 6px 3px #675958;
|
|
||||||
-webkit-box-shadow: 2px 3px 6px 3px #675958;
|
|
||||||
box-shadow: 2px 3px 6px 3px #675958;
|
|
||||||
}
|
|
||||||
|
|
||||||
.thick_bar {
|
|
||||||
background-color: #4D4D4D;
|
|
||||||
color: white;
|
|
||||||
padding: 0.5rem;
|
padding: 0.5rem;
|
||||||
margin: 1rem 0 1rem 0;
|
border-width: 5px;
|
||||||
}
|
border-color: var(--link-primary);
|
||||||
|
border-style: solid;
|
||||||
|
border-radius: 5px;
|
||||||
|
text-align: center;
|
||||||
|
|
||||||
img#hprlogo {
|
|
||||||
max-width: 20vw;
|
|
||||||
padding-right: clamp(0.75rem, -0.25rem + 3vw, 1.5rem);
|
|
||||||
float: left;
|
|
||||||
margin-top: 1rem;
|
|
||||||
margin-bottom: clamp(0.75rem, -0.25rem + 2vw, 1.5rem);
|
|
||||||
}
|
}
|
||||||
|
a.lane-button img {
|
||||||
#hpr_banner {
|
height: 110px;
|
||||||
/* display: inline-block; */
|
filter: invert(60%) sepia(50%) hue-rotate(140deg) saturate(200%);
|
||||||
border: 0;
|
transform: scaleX(0.9);
|
||||||
margin: 0 0 0rem 0;
|
|
||||||
padding: 0;
|
|
||||||
}
|
}
|
||||||
|
#tag_line,
|
||||||
#hpr_banner p {
|
#title {
|
||||||
margin: 0 0 0.5rem 0;
|
text-transform: uppercase;
|
||||||
}
|
}
|
||||||
|
#tag_line {
|
||||||
#hpr_banner h1#sitename {
|
|
||||||
font-size: clamp(1.44rem, -1rem + 3vw, 2rem);
|
|
||||||
letter-spacing: 0.06rem;
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#hpr_banner h2 {
|
|
||||||
font-size: clamp(0.74rem, -1rem + 2vw, 1rem);
|
|
||||||
font-weight: 510;
|
|
||||||
margin: 0 0 1rem 0;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#hpr_banner h3 {
|
|
||||||
font-size: 1rem;
|
|
||||||
font-weight: normal;
|
|
||||||
margin: 0 0 0.5rem 0;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
header>hr {
|
|
||||||
clear: both;
|
|
||||||
}
|
|
||||||
|
|
||||||
#accessible_menu {
|
|
||||||
font-size: smaller;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* The main navigation menu */
|
|
||||||
header>nav.menu {
|
|
||||||
display: block;
|
|
||||||
background-color: #4D4D4D; /* HPR Grey */
|
|
||||||
text-align: Left;
|
|
||||||
clear: both; /* Forces the menu to appear after the HPR Header block */
|
|
||||||
padding: 0;
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
header>nav.menu ul {
|
|
||||||
margin: 0;
|
|
||||||
padding: 0.5rem;
|
|
||||||
background-color: inherit;
|
|
||||||
color: white;
|
|
||||||
}
|
|
||||||
|
|
||||||
header>nav.menu ul li {
|
|
||||||
display: inline-block;
|
|
||||||
background-color: inherit;
|
|
||||||
color: inherit;
|
|
||||||
line-height: 1.5;
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
padding-right: clamp(0.5rem, -0.25rem + 3vw, 2.5rem);
|
|
||||||
}
|
|
||||||
|
|
||||||
header>nav.menu ul li a {
|
|
||||||
color: white;
|
|
||||||
text-decoration: none;
|
|
||||||
display: block;
|
|
||||||
padding: 0.25rem 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
header>nav.menu ul li a:hover {
|
|
||||||
border-bottom: thin solid white;
|
|
||||||
padding: 0.15rem 0;
|
|
||||||
-webkit-transition: 0.3s ease-in-out color;
|
|
||||||
-moz-transition: 0.3s ease-in-out color;
|
|
||||||
transition: 0.3s ease-in-out color;
|
|
||||||
}
|
|
||||||
|
|
||||||
header>nav.menu ul li a:visited {
|
|
||||||
color: #EDEDED;
|
|
||||||
}
|
|
||||||
|
|
||||||
a:active,
|
|
||||||
header>nav.menu ul li a:active {
|
|
||||||
color: red;
|
|
||||||
}
|
|
||||||
|
|
||||||
pre {
|
|
||||||
/* Add background, border and scrollbar to <pre> */
|
|
||||||
background: #eee;
|
|
||||||
border: 1px solid #ddd;
|
|
||||||
overflow: auto;
|
|
||||||
clear: both;
|
|
||||||
padding: 0.5rem
|
|
||||||
}
|
|
||||||
|
|
||||||
code {
|
|
||||||
background: #eee;
|
|
||||||
border-radius: 0.2rem;
|
|
||||||
font-size: 0.95rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
pre code {
|
|
||||||
padding-right: 0.5rem;
|
|
||||||
font-size: 0.85rem;
|
|
||||||
line-height: 1;
|
line-height: 1;
|
||||||
}
|
}
|
||||||
|
#tag_line *,
|
||||||
pre.comment {
|
#title * {
|
||||||
white-space: pre-wrap;
|
margin: 0;
|
||||||
line-height: 1.2rem;
|
padding: 0;
|
||||||
}
|
}
|
||||||
|
#title h1 {
|
||||||
table.hosts {
|
font-size: 7.5rem;
|
||||||
font-size: clamp(0.82rem, -0.25rem + 3vw, 1.0rem);
|
letter-spacing: -0.65rem;
|
||||||
width: 100%;
|
line-height: 0.75;
|
||||||
background: white;
|
|
||||||
margin: 0 auto;
|
|
||||||
border-collapse: collapse;
|
|
||||||
display: inline-table;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
#tag_line h2 {
|
||||||
table#t01,
|
text-transform: uppercase;
|
||||||
table.hosts {
|
font-family: "BebasNeue", sans-serif;
|
||||||
display: block;
|
font-size: 1.15rem;
|
||||||
overflow-x: auto;
|
letter-spacing: 0.05rem;
|
||||||
}
|
}
|
||||||
|
#tag_line h2:first-child {
|
||||||
table#t01 tbody,
|
font-size: 2rem;
|
||||||
table.hosts tbody {
|
|
||||||
display: table;
|
|
||||||
}
|
}
|
||||||
|
#tag_line h3 {
|
||||||
table#t01 tr:nth-child(even),
|
text-transform: capitalize;
|
||||||
table.hosts tr:nth-child(even) {
|
|
||||||
background-color: #cccccc;
|
|
||||||
border-bottom: thick solid white;
|
|
||||||
}
|
|
||||||
|
|
||||||
table#t01 tr:nth-child(odd),
|
|
||||||
table.hosts tr:nth-child(odd) {
|
|
||||||
background-color: white;
|
|
||||||
border-bottom: thick solid white;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.hosts tr td img {
|
|
||||||
vertical-align: middle;
|
|
||||||
max-height: 80px;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.hosts th:first-child,
|
|
||||||
table.hosts td:first-child {
|
|
||||||
min-width: 60px;
|
|
||||||
max-width: 80px;
|
|
||||||
text-align: left;
|
|
||||||
height: 62px;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.hosts th:nth-child(2),
|
|
||||||
table.hosts td:nth-child(2) {
|
|
||||||
text-align: left;
|
|
||||||
padding-left: clamp(0.15rem, -0.25rem + 3vw, 0.5rem);
|
|
||||||
}
|
|
||||||
|
|
||||||
table.hosts th:nth-child(3),
|
|
||||||
table.hosts td:nth-child(3),
|
|
||||||
table.hosts th:nth-child(4),
|
|
||||||
table.hosts td:nth-child(4) {
|
|
||||||
width: 10%;
|
|
||||||
padding-right: clamp(0.10rem, -0.25rem + 3vw, 1rem);
|
|
||||||
}
|
|
||||||
|
|
||||||
body>div>footer {
|
|
||||||
margin-top: 2rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
footer #more_info nav.column {
|
|
||||||
clear: both;
|
|
||||||
font-size: 0.9rem;
|
|
||||||
margin-left: 0.5rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
footer #more_info nav.column ul li {
|
|
||||||
float: left;
|
|
||||||
margin-right: 1.5rem;
|
|
||||||
margin-bottom: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
footer #more_info nav.column h2 {
|
|
||||||
font-size: 1.35rem;
|
|
||||||
margin-top: 0.5rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
footer h1.thick_bar {
|
|
||||||
clear: left;
|
|
||||||
font-size: 1.15rem;
|
font-size: 1.15rem;
|
||||||
}
|
}
|
||||||
|
#site_url {
|
||||||
footer #copyright {
|
font-family: "GNUTypewriter", monospace;
|
||||||
font-size: smaller;
|
text-transform: none;
|
||||||
margin-left: 0.5rem;
|
|
||||||
margin-right: 0.5rem;
|
|
||||||
}
|
}
|
||||||
|
fieldset {
|
||||||
fieldset>table,
|
border: thin solid var(--input-border-primary);
|
||||||
fieldset>table thead,
|
border-radius: 0.2rem;
|
||||||
fieldset>table tbody,
|
}
|
||||||
fieldset>table tr,
|
fieldset > table,
|
||||||
fieldset>table th,
|
fieldset > table thead,
|
||||||
fieldset>table td,
|
fieldset > table tbody,
|
||||||
fieldset>table td input,
|
fieldset > table tr,
|
||||||
fieldset>table td textarea {
|
fieldset > table th,
|
||||||
|
fieldset > table td,
|
||||||
|
fieldset > table td input,
|
||||||
|
fieldset > table td textarea,
|
||||||
|
fieldset > table td select {
|
||||||
display: block;
|
display: block;
|
||||||
font-size: 1rem;
|
font-size: 1rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
fieldset>table {
|
fieldset > table {
|
||||||
width: calc(100vw + -16vw + -1rem);
|
width: calc(100vw + -16vw + -1rem);
|
||||||
max-width: 100%;
|
max-width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
fieldset>table td input,
|
fieldset > table td input,
|
||||||
fieldset>table td textarea {
|
fieldset > table td textarea {
|
||||||
width: calc(100vw + -16vw + -1.5rem);
|
width: calc(100vw + -16vw + -1.5rem);
|
||||||
max-width: 100%;
|
max-width: 100%;
|
||||||
border: thin solid #DFDFDF;
|
border: thin solid var(--input-border-primary);
|
||||||
|
border-radius: 0.2rem;
|
||||||
margin-bottom: 0.5rem;
|
margin-bottom: 0.5rem;
|
||||||
padding: 0.5rem;
|
padding: 0.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
fieldset>table td select {
|
fieldset > table td select {
|
||||||
|
appearance: none;
|
||||||
|
background: var(--background-primary);
|
||||||
|
color: var(--text-primary);
|
||||||
|
width: calc(100vw + -16vw + -0.40rem);
|
||||||
|
border: 1px solid var(--input-border-primary);
|
||||||
|
border-radius: 0.25rem;
|
||||||
|
cursor: pointer;
|
||||||
margin-bottom: 0.5rem;
|
margin-bottom: 0.5rem;
|
||||||
padding: 0.25rem;
|
padding: 0.5rem;
|
||||||
}
|
}
|
||||||
|
fieldset > table td select:focus{
|
||||||
fieldset>table td input[type="radio"] {
|
background: var(--background-secondary);
|
||||||
|
color: var(--text-secondary);
|
||||||
|
}
|
||||||
|
fieldset > table td select:active {
|
||||||
|
background: var(--background-secondary);
|
||||||
|
color: var(--text-primary);
|
||||||
|
}
|
||||||
|
fieldset > table td input[type="radio"] {
|
||||||
display: initial;
|
display: initial;
|
||||||
width: initial;
|
width: initial;
|
||||||
margin-bottom: 0.5rem;
|
margin-bottom: 0.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
fieldset>input {
|
fieldset > input {
|
||||||
background: #4D4D4D;
|
background: var(--background-secondary);
|
||||||
color: white;
|
color: white;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
padding: 0.5rem;
|
padding: 0.5rem;
|
||||||
border: thin solid #DFDFDF;
|
border: thin solid var(--input-border-primary);
|
||||||
border-radius: 0.2rem;
|
border-radius: 0.2rem;
|
||||||
}
|
}
|
||||||
|
@media (min-width: 900px) {
|
||||||
@media only screen and (min-width: 58rem) {
|
body > header {
|
||||||
#container {
|
background-size: 200pt, cover;
|
||||||
margin: 0.5rem auto;
|
background-position: left 128pt top -12pt, left top;
|
||||||
}
|
}
|
||||||
|
#tag_line {
|
||||||
.shadow {
|
text-align: center;
|
||||||
-moz-box-shadow: 1px 2px 5px 2px #675958;
|
|
||||||
-webkit-box-shadow: 1px 2px 5px 2px #675958;
|
|
||||||
box-shadow: 1px 2px 5px 2px #675958;
|
|
||||||
}
|
}
|
||||||
|
#title h1 {
|
||||||
img#hprlogo {
|
font-size: 7.5rem;
|
||||||
margin-bottom: 1.5rem;
|
letter-spacing: -0.65rem;
|
||||||
|
line-height: 0.75;
|
||||||
}
|
}
|
||||||
|
#tag_line h2 {
|
||||||
#hpr_banner {
|
font-size: 1.82rem;
|
||||||
float: left;
|
letter-spacing: 0.05rem;
|
||||||
}
|
}
|
||||||
|
#tag_line h2:first-child {
|
||||||
#hpr_banner h1#sitename {
|
font-size: 4rem;
|
||||||
font-size: 2rem;
|
|
||||||
}
|
}
|
||||||
|
#tag_line h3 {
|
||||||
#hpr_banner h2 {
|
font-size: 1.85rem;
|
||||||
font-size: 1rem;
|
margin-left: 5rem;
|
||||||
}
|
}
|
||||||
|
#qr_code {
|
||||||
header>hr {
|
text-align: center;
|
||||||
clear: right;
|
|
||||||
}
|
}
|
||||||
|
#qr_code > img {
|
||||||
table.hosts td:first-child {
|
max-height: 195px;
|
||||||
height: 80px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
footer #more_info nav.column {
|
|
||||||
clear: none;
|
|
||||||
float: left;
|
|
||||||
width: 19.5%;
|
|
||||||
margin-left: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
footer #more_info nav.column:first-child {
|
|
||||||
margin-left: 0.5rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
footer #more_info nav.column ul li {
|
|
||||||
float: none;
|
|
||||||
margin-bottom: 0.5rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
fieldset>table,
|
fieldset>table,
|
||||||
fieldset>table thead,
|
fieldset>table thead,
|
||||||
fieldset>table tbody,
|
fieldset>table tbody,
|
||||||
@@ -483,7 +406,8 @@ fieldset>input {
|
|||||||
fieldset>table th,
|
fieldset>table th,
|
||||||
fieldset>table td,
|
fieldset>table td,
|
||||||
fieldset>table td input,
|
fieldset>table td input,
|
||||||
fieldset>table td textarea {
|
fieldset>table td textarea,
|
||||||
|
fieldset>table td select {
|
||||||
display: revert;
|
display: revert;
|
||||||
width: revert;
|
width: revert;
|
||||||
}
|
}
|
||||||
@@ -515,4 +439,11 @@ fieldset>input {
|
|||||||
fieldset>table td input[type="radio"] {
|
fieldset>table td input[type="radio"] {
|
||||||
margin-top: 1.5rem;
|
margin-top: 1.5rem;
|
||||||
}
|
}
|
||||||
|
fieldset>table td select {
|
||||||
|
margin-bottom: 1.0rem;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
body > main {
|
||||||
|
padding: 0.25rem 2rem;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,323 +0,0 @@
|
|||||||
@charset "utf-8";
|
|
||||||
|
|
||||||
html {
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
body {
|
|
||||||
display: block;
|
|
||||||
background: #dfdfdf;
|
|
||||||
font-size: 1rem;
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
div,
|
|
||||||
h1,
|
|
||||||
h2,
|
|
||||||
h3,
|
|
||||||
h4,
|
|
||||||
h5,
|
|
||||||
h6,
|
|
||||||
p,
|
|
||||||
ul,
|
|
||||||
ol,
|
|
||||||
li,
|
|
||||||
dl,
|
|
||||||
dt,
|
|
||||||
dd,
|
|
||||||
img,
|
|
||||||
form,
|
|
||||||
fieldset,
|
|
||||||
input,
|
|
||||||
textarea,
|
|
||||||
blockquote,
|
|
||||||
footer {
|
|
||||||
font-family: Verdana, Arial, Helvetica, sans-serif;
|
|
||||||
color: #4D4D4D;
|
|
||||||
font-size: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1 {
|
|
||||||
font-size: 1.2rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
h2 {
|
|
||||||
font-size: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
h3 {
|
|
||||||
font-size: 0.8rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
h4 {
|
|
||||||
font-size: 0.6rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
img {
|
|
||||||
max-width: 100%;
|
|
||||||
height: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
ul {
|
|
||||||
padding-left: 1.15rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
li {
|
|
||||||
line-height: 1.25;
|
|
||||||
}
|
|
||||||
|
|
||||||
a {
|
|
||||||
text-decoration: none;
|
|
||||||
font-family: Verdana, Arial, Helvetica, sans-serif;
|
|
||||||
color: #5e949e;
|
|
||||||
font-size: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
a:hover {
|
|
||||||
cursor: pointer;
|
|
||||||
color: #7eb4be;
|
|
||||||
}
|
|
||||||
|
|
||||||
pre {
|
|
||||||
/* Add background, border and scrollbar to <pre> */
|
|
||||||
background: #eee;
|
|
||||||
border: 1px solid #ddd;
|
|
||||||
overflow: auto;
|
|
||||||
clear: both;
|
|
||||||
padding: 0.5rem
|
|
||||||
}
|
|
||||||
|
|
||||||
code {
|
|
||||||
background: #eee;
|
|
||||||
border-radius: 0.2rem;
|
|
||||||
font-size: 0.95rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
pre code {
|
|
||||||
padding-right: 0.5rem;
|
|
||||||
font-size: 0.85rem;
|
|
||||||
line-height: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
footer {
|
|
||||||
background-color: #4D4D4D;
|
|
||||||
text-align: center;
|
|
||||||
font-size: 0.8rem;
|
|
||||||
padding: 1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
footer span {
|
|
||||||
background-color: #4D4D4D;
|
|
||||||
color: #dfdfdf;
|
|
||||||
}
|
|
||||||
|
|
||||||
footer a {
|
|
||||||
color: #afafef;
|
|
||||||
font-size: 0.8rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
nav{
|
|
||||||
background: linear-gradient(to right, #2f789d, #a6cbcb);
|
|
||||||
color: #dfdfdf;
|
|
||||||
overflow: hidden;
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
|
|
||||||
.menu-links {
|
|
||||||
display: flex;
|
|
||||||
}
|
|
||||||
|
|
||||||
nav a {
|
|
||||||
display: block;
|
|
||||||
color: #b6dbdb;
|
|
||||||
text-align: center;
|
|
||||||
padding: 10px;
|
|
||||||
text-decoration: none;
|
|
||||||
font-size: 0.9rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
nav a:hover {
|
|
||||||
background-color: #5fa9be;
|
|
||||||
color: #efefef;
|
|
||||||
}
|
|
||||||
|
|
||||||
.hamburger {
|
|
||||||
display: none;
|
|
||||||
background: none;
|
|
||||||
border: none;
|
|
||||||
cursor: pointer;
|
|
||||||
padding: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.hamburger img {
|
|
||||||
width: 24px;
|
|
||||||
height: 24px;
|
|
||||||
filter: invert(80%) sepia(20%) saturate(100%) hue-rotate(140deg) brightness(110%);
|
|
||||||
}
|
|
||||||
|
|
||||||
@media screen and (max-width: 600px) {
|
|
||||||
.hamburger {
|
|
||||||
display: flex;
|
|
||||||
}
|
|
||||||
|
|
||||||
.menu-links {
|
|
||||||
position: static;
|
|
||||||
left: 0;
|
|
||||||
right: 0;
|
|
||||||
background: linear-gradient(to right, #2f789d, #a6cbcb);
|
|
||||||
flex-direction: column;
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.menu-links.active {
|
|
||||||
display: flex;
|
|
||||||
}
|
|
||||||
|
|
||||||
nav a {
|
|
||||||
text-align: left;
|
|
||||||
border-top: solid 1px #0f597e;
|
|
||||||
}
|
|
||||||
|
|
||||||
nav a:hover {
|
|
||||||
background: linear-gradient(to right, #3f89ae, #a6cbcb);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@media screen and (max-width: 700px) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
.banner {
|
|
||||||
margin: 5px;
|
|
||||||
background: linear-gradient(to right, #2f789d, #a6cbcb);
|
|
||||||
}
|
|
||||||
|
|
||||||
.banner-image {
|
|
||||||
margin: 0 auto;
|
|
||||||
height: 35vh;
|
|
||||||
width: 100%;
|
|
||||||
display: block;
|
|
||||||
object-fit: cover;
|
|
||||||
object-position: left;
|
|
||||||
max-width:1600px;
|
|
||||||
}
|
|
||||||
|
|
||||||
main {
|
|
||||||
margin: 0 2em;
|
|
||||||
}
|
|
||||||
|
|
||||||
section {
|
|
||||||
margin: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
section.podcast {
|
|
||||||
width: 90%;
|
|
||||||
margin: 0 5%;
|
|
||||||
display: flex;
|
|
||||||
flex-wrap: wrap;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.podcast {
|
|
||||||
flex: 0 0 20%;
|
|
||||||
flex-basis: 150px;
|
|
||||||
box-sizing: border-box;
|
|
||||||
margin: 2.5%;
|
|
||||||
padding: 1em 1em 0em 1em;
|
|
||||||
height: 180px;
|
|
||||||
background-size: cover;
|
|
||||||
border: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
section a.podcast.record {
|
|
||||||
background-image: url('../icons/record_button.png');
|
|
||||||
}
|
|
||||||
|
|
||||||
section a.podcast.schedule {
|
|
||||||
background-image: url('../icons/schedule_button.png');
|
|
||||||
background-size: cover;
|
|
||||||
border: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
section a.podcast.subscribe {
|
|
||||||
background-image: url('../icons/subscribe_button.png');
|
|
||||||
background-size: cover;
|
|
||||||
border: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
section a.podcast.listen {
|
|
||||||
background-image: url('../icons/listen_button.png');
|
|
||||||
background-size: cover;
|
|
||||||
border: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
section.podcast > a > p
|
|
||||||
{
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
section.project {
|
|
||||||
width: 90%;
|
|
||||||
margin: 0 5%;
|
|
||||||
display: flex;
|
|
||||||
flex-wrap: wrap;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.project {
|
|
||||||
flex: 0 0 20%;
|
|
||||||
flex-basis: 150px;
|
|
||||||
box-sizing: border-box;
|
|
||||||
margin: 2.5%;
|
|
||||||
padding: 1em 1em 0em 1em;
|
|
||||||
height: 180px;
|
|
||||||
background-size: cover;
|
|
||||||
border: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
section.project > a > p
|
|
||||||
{
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
section a.project.host {
|
|
||||||
background-image: url('../icons/hosts_button.png');
|
|
||||||
background-size: cover;
|
|
||||||
border: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
section a.project.series {
|
|
||||||
background-image: url('../icons/series_button.png');
|
|
||||||
background-size: cover;
|
|
||||||
border: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
section a.project.about {
|
|
||||||
background-image: url('../icons/about_button.png');
|
|
||||||
background-size: cover;
|
|
||||||
border: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.column-container {
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
}
|
|
||||||
|
|
||||||
section.episodes, section.comments {
|
|
||||||
paddng: 10px;
|
|
||||||
flex-basis: 50%;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (min-width: 600px) {
|
|
||||||
section.episodes, section.comments {
|
|
||||||
flex-basis: 50%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (max-width: 600px) {
|
|
||||||
.column-container {
|
|
||||||
flex-direction: column;
|
|
||||||
justify-content: stretch;
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,2 +0,0 @@
|
|||||||
[Remix-Design/RemixIcon is licensed under the
|
|
||||||
Apache License 2.0](https://github.com/Remix-Design/remixicon/blob/master/License)
|
|
Before Width: | Height: | Size: 16 KiB |
@@ -1 +0,0 @@
|
|||||||
<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M11.9997 10.5865L16.9495 5.63672L18.3637 7.05093L13.4139 12.0007L18.3637 16.9504L16.9495 18.3646L11.9997 13.4149L7.04996 18.3646L5.63574 16.9504L10.5855 12.0007L5.63574 7.05093L7.04996 5.63672L11.9997 10.5865Z"/></svg>
|
|
Before Width: | Height: | Size: 307 B |
Before Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 17 KiB |
@@ -1 +0,0 @@
|
|||||||
<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M3 4H21V6H3V4ZM3 11H21V13H3V11ZM3 18H21V20H3V18Z"/></svg>
|
|
Before Width: | Height: | Size: 146 B |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M11.9998 3C10.3429 3 8.99976 4.34315 8.99976 6V10C8.99976 11.6569 10.3429 13 11.9998 13C13.6566 13 14.9998 11.6569 14.9998 10V6C14.9998 4.34315 13.6566 3 11.9998 3ZM11.9998 1C14.7612 1 16.9998 3.23858 16.9998 6V10C16.9998 12.7614 14.7612 15 11.9998 15C9.23833 15 6.99976 12.7614 6.99976 10V6C6.99976 3.23858 9.23833 1 11.9998 1ZM3.05469 11H5.07065C5.55588 14.3923 8.47329 17 11.9998 17C15.5262 17 18.4436 14.3923 18.9289 11H20.9448C20.4837 15.1716 17.1714 18.4839 12.9998 18.9451V23H10.9998V18.9451C6.82814 18.4839 3.51584 15.1716 3.05469 11Z"></path></svg>
|
|
Before Width: | Height: | Size: 646 B |
Before Width: | Height: | Size: 19 KiB |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M3 17C5.20914 17 7 18.7909 7 21H3V17ZM3 10C9.07513 10 14 14.9249 14 21H12C12 16.0294 7.97056 12 3 12V10ZM3 3C12.9411 3 21 11.0589 21 21H19C19 12.1634 11.8366 5 3 5V3Z"></path></svg>
|
|
Before Width: | Height: | Size: 270 B |
Before Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 18 KiB |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M20.0833 15.1999L21.2854 15.9212C21.5221 16.0633 21.5989 16.3704 21.4569 16.6072C21.4146 16.6776 21.3557 16.7365 21.2854 16.7787L12.5144 22.0412C12.1977 22.2313 11.8021 22.2313 11.4854 22.0412L2.71451 16.7787C2.47772 16.6366 2.40093 16.3295 2.54301 16.0927C2.58523 16.0223 2.64413 15.9634 2.71451 15.9212L3.9166 15.1999L11.9999 20.0499L20.0833 15.1999ZM20.0833 10.4999L21.2854 11.2212C21.5221 11.3633 21.5989 11.6704 21.4569 11.9072C21.4146 11.9776 21.3557 12.0365 21.2854 12.0787L11.9999 17.6499L2.71451 12.0787C2.47772 11.9366 2.40093 11.6295 2.54301 11.3927C2.58523 11.3223 2.64413 11.2634 2.71451 11.2212L3.9166 10.4999L11.9999 15.3499L20.0833 10.4999ZM12.5144 1.30864L21.2854 6.5712C21.5221 6.71327 21.5989 7.0204 21.4569 7.25719C21.4146 7.32757 21.3557 7.38647 21.2854 7.42869L11.9999 12.9999L2.71451 7.42869C2.47772 7.28662 2.40093 6.97949 2.54301 6.7427C2.58523 6.67232 2.64413 6.61343 2.71451 6.5712L11.4854 1.30864C11.8021 1.11864 12.1977 1.11864 12.5144 1.30864ZM11.9999 3.33233L5.88723 6.99995L11.9999 10.6676L18.1126 6.99995L11.9999 3.33233Z"></path></svg>
|
|
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 20 KiB |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M4 22C4 17.5817 7.58172 14 12 14C16.4183 14 20 17.5817 20 22H18C18 18.6863 15.3137 16 12 16C8.68629 16 6 18.6863 6 22H4ZM12 13C8.685 13 6 10.315 6 7C6 3.685 8.685 1 12 1C15.315 1 18 3.685 18 7C18 10.315 15.315 13 12 13ZM12 11C14.21 11 16 9.21 16 7C16 4.79 14.21 3 12 3C9.79 3 8 4.79 8 7C8 9.21 9.79 11 12 11Z"></path></svg>
|
|
Before Width: | Height: | Size: 412 B |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M6.60282 10.0001L10 7.22056V16.7796L6.60282 14.0001H3V10.0001H6.60282ZM2 16.0001H5.88889L11.1834 20.3319C11.2727 20.405 11.3846 20.4449 11.5 20.4449C11.7761 20.4449 12 20.2211 12 19.9449V4.05519C12 3.93977 11.9601 3.8279 11.887 3.73857C11.7121 3.52485 11.3971 3.49335 11.1834 3.66821L5.88889 8.00007H2C1.44772 8.00007 1 8.44778 1 9.00007V15.0001C1 15.5524 1.44772 16.0001 2 16.0001ZM23 12C23 15.292 21.5539 18.2463 19.2622 20.2622L17.8445 18.8444C19.7758 17.1937 21 14.7398 21 12C21 9.26016 19.7758 6.80629 17.8445 5.15557L19.2622 3.73779C21.5539 5.75368 23 8.70795 23 12ZM18 12C18 10.0883 17.106 8.38548 15.7133 7.28673L14.2842 8.71584C15.3213 9.43855 16 10.64 16 12C16 13.36 15.3213 14.5614 14.2842 15.2841L15.7133 16.7132C17.106 15.6145 18 13.9116 18 12Z"></path></svg>
|
|
Before Width: | Height: | Size: 861 B |
122
public_html/images/Richard_Querin_atomic-plain.svg
Normal file
After Width: | Height: | Size: 30 KiB |
88
public_html/images/hpr-splatter-logo.svg
Normal file
After Width: | Height: | Size: 96 KiB |
@@ -1 +1 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M9 1V3H15V1H17V3H21C21.5523 3 22 3.44772 22 4V20C22 20.5523 21.5523 21 21 21H3C2.44772 21 2 20.5523 2 20V4C2 3.44772 2.44772 3 3 3H7V1H9ZM20 11H4V19H20V11ZM8 13V15H6V13H8ZM13 13V15H11V13H13ZM18 13V15H16V13H18ZM7 5H4V9H20V5H17V7H15V5H9V7H7V5Z"></path></svg>
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M9 1V3H15V1H17V3H21C21.5523 3 22 3.44772 22 4V20C22 20.5523 21.5523 21 21 21H3C2.44772 21 2 20.5523 2 20V4C2 3.44772 2.44772 3 3 3H7V1H9ZM20 11H4V19H20V11ZM8 13V15H6V13H8ZM13 13V15H11V13H13ZM18 13V15H16V13H18ZM7 5H4V9H20V5H17V7H15V5H9V7H7V5Z"/></svg>
|
Before Width: | Height: | Size: 345 B After Width: | Height: | Size: 339 B |
@@ -1 +1 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M11.9998 1C14.7612 1 16.9998 3.23858 16.9998 6V10C16.9998 12.7614 14.7612 15 11.9998 15C9.23833 15 6.99976 12.7614 6.99976 10V6C6.99976 3.23858 9.23833 1 11.9998 1ZM3.05469 11H5.07065C5.55588 14.3923 8.47329 17 11.9998 17C15.5262 17 18.4436 14.3923 18.9289 11H20.9448C20.4837 15.1716 17.1714 18.4839 12.9998 18.9451V23H10.9998V18.9451C6.82814 18.4839 3.51584 15.1716 3.05469 11Z"></path></svg>
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M11.9998 1C14.7612 1 16.9998 3.23858 16.9998 6V10C16.9998 12.7614 14.7612 15 11.9998 15C9.23833 15 6.99976 12.7614 6.99976 10V6C6.99976 3.23858 9.23833 1 11.9998 1ZM3.05469 11H5.07065C5.55588 14.3923 8.47329 17 11.9998 17C15.5262 17 18.4436 14.3923 18.9289 11H20.9448C20.4837 15.1716 17.1714 18.4839 12.9998 18.9451V23H10.9998V18.9451C6.82814 18.4839 3.51584 15.1716 3.05469 11Z"/></svg>
|
Before Width: | Height: | Size: 482 B After Width: | Height: | Size: 476 B |
@@ -1 +1 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M12 19C12.8284 19 13.5 19.6716 13.5 20.5C13.5 21.3284 12.8284 22 12 22C11.1716 22 10.5 21.3284 10.5 20.5C10.5 19.6716 11.1716 19 12 19ZM12 2C15.3137 2 18 4.68629 18 8C18 10.1646 17.2474 11.2907 15.3259 12.9231C13.3986 14.5604 13 15.2969 13 17H11C11 14.526 11.787 13.3052 14.031 11.3989C15.5479 10.1102 16 9.43374 16 8C16 5.79086 14.2091 4 12 4C9.79086 4 8 5.79086 8 8V9H6V8C6 4.68629 8.68629 2 12 2Z"></path></svg>
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M12 19C12.8284 19 13.5 19.6716 13.5 20.5C13.5 21.3284 12.8284 22 12 22C11.1716 22 10.5 21.3284 10.5 20.5C10.5 19.6716 11.1716 19 12 19ZM12 2C15.3137 2 18 4.68629 18 8C18 10.1646 17.2474 11.2907 15.3259 12.9231C13.3986 14.5604 13 15.2969 13 17H11C11 14.526 11.787 13.3052 14.031 11.3989C15.5479 10.1102 16 9.43374 16 8C16 5.79086 14.2091 4 12 4C9.79086 4 8 5.79086 8 8V9H6V8C6 4.68629 8.68629 2 12 2Z"/></svg>
|
Before Width: | Height: | Size: 503 B After Width: | Height: | Size: 497 B |
@@ -1 +1 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M3 3C12.9411 3 21 11.0589 21 21H18C18 12.7157 11.2843 6 3 6V3ZM3 10C9.07513 10 14 14.9249 14 21H11C11 16.5817 7.41828 13 3 13V10ZM3 17C5.20914 17 7 18.7909 7 21H3V17Z"></path></svg>
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M3 3C12.9411 3 21 11.0589 21 21H18C18 12.7157 11.2843 6 3 6V3ZM3 10C9.07513 10 14 14.9249 14 21H11C11 16.5817 7.41828 13 3 13V10ZM3 17C5.20914 17 7 18.7909 7 21H3V17Z"/></svg>
|
Before Width: | Height: | Size: 270 B After Width: | Height: | Size: 264 B |
@@ -1 +1 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M20.0833 10.4999L21.2854 11.2212C21.5221 11.3633 21.5989 11.6704 21.4569 11.9072C21.4146 11.9776 21.3557 12.0365 21.2854 12.0787L11.9999 17.6499L2.71451 12.0787C2.47772 11.9366 2.40093 11.6295 2.54301 11.3927C2.58523 11.3223 2.64413 11.2634 2.71451 11.2212L3.9166 10.4999L11.9999 15.3499L20.0833 10.4999ZM20.0833 15.1999L21.2854 15.9212C21.5221 16.0633 21.5989 16.3704 21.4569 16.6072C21.4146 16.6776 21.3557 16.7365 21.2854 16.7787L12.5144 22.0412C12.1977 22.2313 11.8021 22.2313 11.4854 22.0412L2.71451 16.7787C2.47772 16.6366 2.40093 16.3295 2.54301 16.0927C2.58523 16.0223 2.64413 15.9634 2.71451 15.9212L3.9166 15.1999L11.9999 20.0499L20.0833 15.1999ZM12.5144 1.30864L21.2854 6.5712C21.5221 6.71327 21.5989 7.0204 21.4569 7.25719C21.4146 7.32757 21.3557 7.38647 21.2854 7.42869L11.9999 12.9999L2.71451 7.42869C2.47772 7.28662 2.40093 6.97949 2.54301 6.7427C2.58523 6.67232 2.64413 6.61343 2.71451 6.5712L11.4854 1.30864C11.8021 1.11864 12.1977 1.11864 12.5144 1.30864Z"></path></svg>
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M20.0833 10.4999L21.2854 11.2212C21.5221 11.3633 21.5989 11.6704 21.4569 11.9072C21.4146 11.9776 21.3557 12.0365 21.2854 12.0787L11.9999 17.6499L2.71451 12.0787C2.47772 11.9366 2.40093 11.6295 2.54301 11.3927C2.58523 11.3223 2.64413 11.2634 2.71451 11.2212L3.9166 10.4999L11.9999 15.3499L20.0833 10.4999ZM20.0833 15.1999L21.2854 15.9212C21.5221 16.0633 21.5989 16.3704 21.4569 16.6072C21.4146 16.6776 21.3557 16.7365 21.2854 16.7787L12.5144 22.0412C12.1977 22.2313 11.8021 22.2313 11.4854 22.0412L2.71451 16.7787C2.47772 16.6366 2.40093 16.3295 2.54301 16.0927C2.58523 16.0223 2.64413 15.9634 2.71451 15.9212L3.9166 15.1999L11.9999 20.0499L20.0833 15.1999ZM12.5144 1.30864L21.2854 6.5712C21.5221 6.71327 21.5989 7.0204 21.4569 7.25719C21.4146 7.32757 21.3557 7.38647 21.2854 7.42869L11.9999 12.9999L2.71451 7.42869C2.47772 7.28662 2.40093 6.97949 2.54301 6.7427C2.58523 6.67232 2.64413 6.61343 2.71451 6.5712L11.4854 1.30864C11.8021 1.11864 12.1977 1.11864 12.5144 1.30864Z"/></svg>
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.0 KiB |
@@ -1 +1 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M4 22C4 17.5817 7.58172 14 12 14C16.4183 14 20 17.5817 20 22H4ZM12 13C8.685 13 6 10.315 6 7C6 3.685 8.685 1 12 1C15.315 1 18 3.685 18 7C18 10.315 15.315 13 12 13Z"></path></svg>
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M4 22C4 17.5817 7.58172 14 12 14C16.4183 14 20 17.5817 20 22H4ZM12 13C8.685 13 6 10.315 6 7C6 3.685 8.685 1 12 1C15.315 1 18 3.685 18 7C18 10.315 15.315 13 12 13Z"/></svg>
|
Before Width: | Height: | Size: 266 B After Width: | Height: | Size: 260 B |
@@ -1 +1 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M2 16.0001H5.88889L11.1834 20.3319C11.2727 20.405 11.3846 20.4449 11.5 20.4449C11.7761 20.4449 12 20.2211 12 19.9449V4.05519C12 3.93977 11.9601 3.8279 11.887 3.73857C11.7121 3.52485 11.3971 3.49335 11.1834 3.66821L5.88889 8.00007H2C1.44772 8.00007 1 8.44778 1 9.00007V15.0001C1 15.5524 1.44772 16.0001 2 16.0001ZM23 12C23 15.292 21.5539 18.2463 19.2622 20.2622L17.8445 18.8444C19.7758 17.1937 21 14.7398 21 12C21 9.26016 19.7758 6.80629 17.8445 5.15557L19.2622 3.73779C21.5539 5.75368 23 8.70795 23 12ZM18 12C18 10.0883 17.106 8.38548 15.7133 7.28673L14.2842 8.71584C15.3213 9.43855 16 10.64 16 12C16 13.36 15.3213 14.5614 14.2842 15.2841L15.7133 16.7132C17.106 15.6145 18 13.9116 18 12Z"></path></svg>
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M2 16.0001H5.88889L11.1834 20.3319C11.2727 20.405 11.3846 20.4449 11.5 20.4449C11.7761 20.4449 12 20.2211 12 19.9449V4.05519C12 3.93977 11.9601 3.8279 11.887 3.73857C11.7121 3.52485 11.3971 3.49335 11.1834 3.66821L5.88889 8.00007H2C1.44772 8.00007 1 8.44778 1 9.00007V15.0001C1 15.5524 1.44772 16.0001 2 16.0001ZM23 12C23 15.292 21.5539 18.2463 19.2622 20.2622L17.8445 18.8444C19.7758 17.1937 21 14.7398 21 12C21 9.26016 19.7758 6.80629 17.8445 5.15557L19.2622 3.73779C21.5539 5.75368 23 8.70795 23 12ZM18 12C18 10.0883 17.106 8.38548 15.7133 7.28673L14.2842 8.71584C15.3213 9.43855 16 10.64 16 12C16 13.36 15.3213 14.5614 14.2842 15.2841L15.7133 16.7132C17.106 15.6145 18 13.9116 18 12Z"/></svg>
|
Before Width: | Height: | Size: 791 B After Width: | Height: | Size: 785 B |
Before Width: | Height: | Size: 612 KiB |
BIN
public_html/images/main-header-background.png
Normal file
After Width: | Height: | Size: 529 KiB |
BIN
public_html/images/qr_code_logo.png
Normal file
After Width: | Height: | Size: 53 KiB |
@@ -1,83 +0,0 @@
|
|||||||
window.onload = () => {
|
|
||||||
|
|
||||||
/* scale benner image map co-ordinates */
|
|
||||||
|
|
||||||
const image = document.querySelector('.banner-image');
|
|
||||||
const areas = document.querySelectorAll('.bannermap > area');
|
|
||||||
|
|
||||||
const max_width = 1600;
|
|
||||||
const image_height_ratio = 0.35;
|
|
||||||
|
|
||||||
const image_map_coords = [
|
|
||||||
[108,187,240,343],
|
|
||||||
[246,187,359,343],
|
|
||||||
[363,187,492,343]
|
|
||||||
];
|
|
||||||
|
|
||||||
function calcTransform(prop) {
|
|
||||||
let scale, offset;
|
|
||||||
prop.original_aspect = prop.original_width / prop.original_height;
|
|
||||||
prop.scaled_width = prop.image_height * prop.original_aspect;
|
|
||||||
prop.image_aspect = prop.image_width / prop.image_height;
|
|
||||||
if (prop.scaled_width < prop.image_width) {
|
|
||||||
prop.scaled_height = prop.image_height * prop.image_aspect / prop.original_aspect;
|
|
||||||
offset = (prop.image_height - prop.scaled_height) / 2;
|
|
||||||
scale = prop.scaled_height / prop.original_height;
|
|
||||||
} else {
|
|
||||||
offset = 0;
|
|
||||||
scale = prop.image_height / prop.original_height;
|
|
||||||
}
|
|
||||||
return [scale, offset];
|
|
||||||
}
|
|
||||||
|
|
||||||
function setCoords() {
|
|
||||||
areas.forEach((area, index) => {
|
|
||||||
const [x1, y1, x2, y2] = image_map_coords[index];
|
|
||||||
let prop = {
|
|
||||||
screen_width: (window.innerWidth),
|
|
||||||
contained_width: (window.innerWidth <= max_width) ? window.innerWidth : max_width,
|
|
||||||
screen_height: window.innerHeight,
|
|
||||||
image_width: image.offsetWidth,
|
|
||||||
image_height: image.offsetHeight,
|
|
||||||
original_width: image.naturalWidth,
|
|
||||||
original_height: image.naturalHeight
|
|
||||||
};
|
|
||||||
let [ scale, offset ] = calcTransform(prop);
|
|
||||||
const scaled_coords = `${x1*scale}, ${y1*scale + offset}, ${x2*scale}, ${y2*scale + offset}`;
|
|
||||||
area.setAttribute('coords', scaled_coords);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
new ResizeObserver(setCoords).observe(image);
|
|
||||||
|
|
||||||
/* hamburger menu functionality */
|
|
||||||
const hamburger = document.getElementById('hamburger-menu');
|
|
||||||
const menuLinks = document.getElementById('menu-links');
|
|
||||||
const menuIcon = hamburger?.querySelector('.menu-icon');
|
|
||||||
const closeIcon = hamburger?.querySelector('.close-icon');
|
|
||||||
|
|
||||||
if (hamburger && menuLinks && menuIcon && closeIcon) {
|
|
||||||
hamburger.addEventListener('click', () => {
|
|
||||||
const isActive = menuLinks.classList.contains('active');
|
|
||||||
|
|
||||||
menuLinks.classList.toggle('active');
|
|
||||||
|
|
||||||
if (isActive) {
|
|
||||||
menuIcon.style.display = 'block';
|
|
||||||
closeIcon.style.display = 'none';
|
|
||||||
} else {
|
|
||||||
menuIcon.style.display = 'none';
|
|
||||||
closeIcon.style.display = 'block';
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Close menu when clicking on a link
|
|
||||||
menuLinks.addEventListener('click', (e) => {
|
|
||||||
if (e.target.tagName === 'A') {
|
|
||||||
menuLinks.classList.remove('active');
|
|
||||||
menuIcon.style.display = 'block';
|
|
||||||
closeIcon.style.display = 'none';
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
|
@@ -56,9 +56,19 @@ Perl Template Toolkit.
|
|||||||
* SQLite v3.8.3 or greater is recommended. CTE WITH clauses are used in some template queries.
|
* SQLite v3.8.3 or greater is recommended. CTE WITH clauses are used in some template queries.
|
||||||
Must convert WITH clauses to sub-queries when using earlier versions of SQLite.
|
Must convert WITH clauses to sub-queries when using earlier versions of SQLite.
|
||||||
|
|
||||||
|
With MySQL
|
||||||
|
* Create database hpr_hpr in the MySQL server from HPR dump file.
|
||||||
|
- sudo mysql --host=localhost < hpr.sql
|
||||||
|
* Create a user that will be used by the site-generator.
|
||||||
|
- Suggested username: hpr-generator
|
||||||
|
- CREATE USER 'hpr-generator'@'localhost' IDENTIFIED BY '<password>';
|
||||||
|
* Limit the user's privileges to EXECUTE and SELECT
|
||||||
|
- GRANT SELECT ON hpr_hpr.* TO 'hpr-generator'@'localhost';
|
||||||
|
- GRANT EXECUTE ON `hpr_hpr`.* TO 'hpr-generator'@'localhost';
|
||||||
|
|
||||||
Install the needed Perl modules using preferred method (distribution packages, CPAN, etc.)
|
Install the needed Perl modules using preferred method (distribution packages, CPAN, etc.)
|
||||||
* Config::Std
|
* Config::Std
|
||||||
* DBD::SQLite
|
* DBD::SQLite or DBD:mysql
|
||||||
* DBI
|
* DBI
|
||||||
* Data::Dumper
|
* Data::Dumper
|
||||||
* Date::Calc
|
* Date::Calc
|
||||||
|
@@ -1,173 +0,0 @@
|
|||||||
# Configure the Perl DBI driver to allow the templates communicate
|
|
||||||
# with the database.
|
|
||||||
# dbi:<driver name [SQLite, CSV, ADO, mSQL, etc.]>:<database name>
|
|
||||||
# For more information on Perl Template Toolkit see:
|
|
||||||
# http://template-toolkit.org/docs/manual/index.html
|
|
||||||
[DBI]
|
|
||||||
# Configuration settings for SQLite
|
|
||||||
database: sqlite
|
|
||||||
driver: dbi:SQLite:hpr.db
|
|
||||||
|
|
||||||
# Configure the location of the templates and the generated HTML
|
|
||||||
[app_paths]
|
|
||||||
templates_path: ./templates
|
|
||||||
output_path: ./public_html
|
|
||||||
|
|
||||||
# Configure the root template page which pulls in the navigation and
|
|
||||||
# content templates used by each page. An optional baseurl property may
|
|
||||||
# be defined. This is useful when opening files directly from local
|
|
||||||
# filesystem to allow relative paths to work.
|
|
||||||
[root_template]
|
|
||||||
content: page-newdesign.tpl.html
|
|
||||||
#baseurl: OPTIONAL [i.e. file://<full path to local website directory>]
|
|
||||||
http_baseurl: http://hackerpublicradio.org/
|
|
||||||
hub_baseurl: https://hub.hackerpublicradio.org/
|
|
||||||
media_baseurl: https://hub.hackerpublicradio.org/ccdn.php?filename=/eps/hpr$eps_id/
|
|
||||||
generator_name: The HPR Robot
|
|
||||||
generator_email: robot.nospam@nospam.hackerpublicradio.org
|
|
||||||
|
|
||||||
# Configure the navigation menu and the content templates for each page
|
|
||||||
# of the site:
|
|
||||||
#
|
|
||||||
# [page_name] REQUIRED
|
|
||||||
# navigation: REQUIRED <name of navigation template>
|
|
||||||
# content: REQUIRED <name of page content template>
|
|
||||||
|
|
||||||
# Configure filename if default name is not desired
|
|
||||||
# (Default is "ROOT/[page_name].html"):
|
|
||||||
#
|
|
||||||
# filename: OPTIONAL <relative path from ROOT -- optional>
|
|
||||||
# * <directory path> -- Must end in forward slash. File will be created
|
|
||||||
# in this path with the default naming scheme.
|
|
||||||
# * <file name> -- May include a relative path. Should include the file
|
|
||||||
# extension. May have [id] marker in path or name which
|
|
||||||
# will be substituted with a padded page id.
|
|
||||||
|
|
||||||
# Configure pages which use the same content template:
|
|
||||||
#
|
|
||||||
# multipage: OPTIONAL true | false (DEFAULT = false)
|
|
||||||
|
|
||||||
[index]
|
|
||||||
navigation: navigation-newdesign.tpl.html
|
|
||||||
content: content-index-newdesign.tpl.html
|
|
||||||
|
|
||||||
[about]
|
|
||||||
navigation: navigation-newdesign.tpl.html
|
|
||||||
content: content-about.tpl.html
|
|
||||||
|
|
||||||
[correspondents]
|
|
||||||
navigation: navigation-newdesign.tpl.html
|
|
||||||
content: content-correspondents.tpl.html
|
|
||||||
filename: correspondents/index.html
|
|
||||||
|
|
||||||
[correspondent]
|
|
||||||
navigation: navigation-newdesign.tpl.html
|
|
||||||
content: content-correspondent.tpl.html
|
|
||||||
multipage: true
|
|
||||||
filename: correspondents/[id].html
|
|
||||||
|
|
||||||
[series]
|
|
||||||
navigation: navigation-newdesign.tpl.html
|
|
||||||
content: content-series.tpl.html
|
|
||||||
filename: series/index.html
|
|
||||||
|
|
||||||
[series_episode]
|
|
||||||
navigation: navigation-newdesign.tpl.html
|
|
||||||
content: content-series_episode.tpl.html
|
|
||||||
multipage: true
|
|
||||||
filename: series/[id].html
|
|
||||||
|
|
||||||
[episodes]
|
|
||||||
navigation: navigation-newdesign.tpl.html
|
|
||||||
content: content-episodes.tpl.html
|
|
||||||
filename: eps/index.html
|
|
||||||
|
|
||||||
[episode]
|
|
||||||
navigation: navigation-newdesign.tpl.html
|
|
||||||
content: content-episode.tpl.html
|
|
||||||
multipage: true
|
|
||||||
filename: eps/hpr[id]/index.html
|
|
||||||
|
|
||||||
[download]
|
|
||||||
navigation: navigation-newdesign.tpl.html
|
|
||||||
content: content-download.tpl.html
|
|
||||||
|
|
||||||
[syndication]
|
|
||||||
navigation: navigation-newdesign.tpl.html
|
|
||||||
content: content-syndication.tpl.html
|
|
||||||
|
|
||||||
[search]
|
|
||||||
navigation: navigation-newdesign.tpl.html
|
|
||||||
content: content-search.tpl.html
|
|
||||||
|
|
||||||
[sitemap]
|
|
||||||
navigation: navigation-newdesign.tpl.html
|
|
||||||
content: content-sitemap.tpl.html
|
|
||||||
|
|
||||||
[tags]
|
|
||||||
navigation: navigation-newdesign.tpl.html
|
|
||||||
content: content-tags.tpl.html
|
|
||||||
|
|
||||||
[twat_episode]
|
|
||||||
navigation: navigation-newdesign.tpl.html
|
|
||||||
content: content-twat_episode.tpl.html
|
|
||||||
multipage: true
|
|
||||||
filename: eps/twt[id]/index.html
|
|
||||||
|
|
||||||
[mumble-howto]
|
|
||||||
navigation: navigation-newdesign.tpl.html
|
|
||||||
content: content-mumble-howto.tpl.html
|
|
||||||
|
|
||||||
[contact]
|
|
||||||
navigation: navigation-newdesign.tpl.html
|
|
||||||
content: content-contact.tpl.html
|
|
||||||
|
|
||||||
[promote]
|
|
||||||
navigation: navigation-newdesign.tpl.html
|
|
||||||
content: content-promote.tpl.html
|
|
||||||
|
|
||||||
[comments_viewer]
|
|
||||||
navigation: navigation-newdesign.tpl.html
|
|
||||||
content: content-comments_viewer.tpl.html
|
|
||||||
|
|
||||||
[hpr_ogg]
|
|
||||||
root_template: rss.tpl.xml
|
|
||||||
content: rss-hpr.tpl.xml
|
|
||||||
filename: hpr_ogg.rss
|
|
||||||
media_file_extension: ogg
|
|
||||||
|
|
||||||
[hpr_mp3]
|
|
||||||
root_template: rss.tpl.xml
|
|
||||||
content: rss-hpr.tpl.xml
|
|
||||||
filename: hpr_mp3.rss
|
|
||||||
media_file_extension: mp3
|
|
||||||
audio_mime_type: mpeg
|
|
||||||
|
|
||||||
[hpr_spx]
|
|
||||||
root_template: rss.tpl.xml
|
|
||||||
content: rss-hpr.tpl.xml
|
|
||||||
filename: hpr_spx.rss
|
|
||||||
media_file_extension: spx
|
|
||||||
|
|
||||||
[hpr_total_ogg]
|
|
||||||
root_template: rss.tpl.xml
|
|
||||||
content: rss-hpr_total.tpl.xml
|
|
||||||
filename: hpr_total_ogg.rss
|
|
||||||
media_file_extension: ogg
|
|
||||||
|
|
||||||
[hpr_total_mp3]
|
|
||||||
root_template: rss.tpl.xml
|
|
||||||
content: rss-hpr_total.tpl.xml
|
|
||||||
filename: hpr_total_mp3.rss
|
|
||||||
media_file_extension: mp3
|
|
||||||
audio_mime_type: mpeg
|
|
||||||
|
|
||||||
[hpr_total_spx]
|
|
||||||
root_template: rss.tpl.xml
|
|
||||||
content: rss-hpr_total.tpl.xml
|
|
||||||
filename: hpr_total_spx.rss
|
|
||||||
media_file_extension: spx
|
|
||||||
|
|
||||||
[comments]
|
|
||||||
root_template: rss-comments.tpl.xml
|
|
||||||
filename: comments.rss
|
|
4
site.cfg
@@ -20,11 +20,9 @@ output_path: ./public_html
|
|||||||
[root_template]
|
[root_template]
|
||||||
content: page.tpl.html
|
content: page.tpl.html
|
||||||
#baseurl: OPTIONAL [i.e. file://<full path to local website directory>]
|
#baseurl: OPTIONAL [i.e. file://<full path to local website directory>]
|
||||||
#baseurl: file:///home/user/Code/OpenSource/hpr/hpr_generator/public_html
|
|
||||||
http_baseurl: http://hackerpublicradio.org/
|
http_baseurl: http://hackerpublicradio.org/
|
||||||
hub_baseurl: https://hub.hackerpublicradio.org/
|
hub_baseurl: https://hub.hackerpublicradio.org/
|
||||||
media_baseurl: https://archive.org/download/hpr$eps_id/
|
media_baseurl: https://hub.hackerpublicradio.org/ccdn.php?filename=/eps/hpr$eps_id/
|
||||||
#media_baseurl: https://hub.hackerpublicradio.org/ccdn.php?filename=/eps/hpr$eps_id/
|
|
||||||
generator_name: The HPR Robot
|
generator_name: The HPR Robot
|
||||||
generator_email: robot.nospam@nospam.hackerpublicradio.org
|
generator_email: robot.nospam@nospam.hackerpublicradio.org
|
||||||
|
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
<!--% PROCESS 'shared-avatar.tpl.html' %-->
|
<!--% PROCESS 'shared-avatar.tpl.html' %-->
|
||||||
<article>
|
<article>
|
||||||
<h2 class="title">Correspondents</h2>
|
<h2 class="title">Correspondents</h2>
|
||||||
<p>For more information on how to become a Correspondent see our <a href="<!--% absolute_url(baseurl) %-->about.html#so_you_want_to_record_a_podcast">contribute</a> page. To add a logo here, either email one to admin at hpr or setup your email on <a href="https://en.gravatar.com/">Gravatar</a>. To protect your browsing privacy we gather the images every hour and serve them directly from HPR.</p>
|
<p>For more information on how to become a Correspondent see our <a href="<!--% absolute_url(baseurl) %-->about.html#so_you_want_to_record_a_podcast">contribute</a></center> page. To add a logo here, either email one to admin at hpr or setup your email on <a href="https://en.gravatar.com/">Gravatar</a>. To protect your browsing privacy we gather the images every hour and serve them directly from HPR.<p />
|
||||||
<!--% USE DBI(constants.driver) %-->
|
<!--% USE DBI(constants.driver) %-->
|
||||||
<!--% host_cnt = 0 %-->
|
<!--% host_cnt = 0 %-->
|
||||||
<table class="hosts">
|
<table class="hosts">
|
||||||
|
@@ -1,98 +0,0 @@
|
|||||||
<!--% PROCESS 'shared-avatar.tpl.html' %-->
|
|
||||||
<!--% PROCESS 'shared-utils.tpl.html' %-->
|
|
||||||
<!--% PROCESS 'shared-listen-now.tpl.html' %-->
|
|
||||||
<!--% PROCESS 'shared-show-transcript.tpl.html' %-->
|
|
||||||
<!--% PROCESS 'shared-call_for_shows.tpl.html' %-->
|
|
||||||
<!--% INCLUDE 'content-index-announcement.tpl.html' %-->
|
|
||||||
<!--% PROCESS "queries-index.tpl.html" %-->
|
|
||||||
<!--% MACRO tidy_notes(all_lines) BLOCK %-->
|
|
||||||
<!--% lines = all_lines %-->
|
|
||||||
<!--% after_html = all_lines %-->
|
|
||||||
<!--% img_re = '(?six)^(.*?)\<img ([^\>]+\>)(.+)$' %-->
|
|
||||||
<!--% lazy_re = '(?i)loading="lazy"' %-->
|
|
||||||
<!--% WHILE (matches = lines.match(img_re)) %-->
|
|
||||||
<!--% img_tag = matches.1 %-->
|
|
||||||
<!--% after_html = matches.2 %-->
|
|
||||||
<!--% matches.0 %-->
|
|
||||||
<!--% IF (img_tag.search(lazy_re)) %-->
|
|
||||||
<img <!--% img_tag %-->
|
|
||||||
<!--% ELSE %-->
|
|
||||||
<img loading="lazy" <!--% img_tag %-->
|
|
||||||
<!--% END %-->
|
|
||||||
<!--% lines = after_html %-->
|
|
||||||
<!--% END %-->
|
|
||||||
<!--% after_html %-->
|
|
||||||
<!--% END %-->
|
|
||||||
|
|
||||||
<section class="welcome">
|
|
||||||
<!--% days_till_next_episode = 0 %-->
|
|
||||||
<!--% USE DBI(constants.driver) %-->
|
|
||||||
<!--% USE date %-->
|
|
||||||
<!--% calc = date.calc %-->
|
|
||||||
<!--% episodes = DBI.query(query_next_available_episode).get_all() %-->
|
|
||||||
<!--% last_date = episodes.0.date.split('-') %-->
|
|
||||||
<!--% offset = (calc.Day_of_Week(last_date.0,last_date.1,last_date.2) == 5 ? 3 : 1) %-->
|
|
||||||
<!--% slot_date = calc.Add_Delta_Days(last_date.0,last_date.1,last_date.2,offset) %-->
|
|
||||||
<!--% now = calc.Today() %-->
|
|
||||||
<!--% days_till_next_episode = calc.Delta_Days(now.0,now.1,now.2,slot_date.0,slot_date.1,slot_date.2) %-->
|
|
||||||
<!--% delta = date.calc.N_Delta_YMD(2005,9,19, date.format(date.now, '%Y'),date.format(date.now, '%m'),date.format(date.now, '%d')) %-->
|
|
||||||
|
|
||||||
<h2>Welcome</h2>
|
|
||||||
<p>Hacker Public Radio is a podcast that releases shows every weekday Monday to Friday. The shows are contributed by the public and can be on any topic that is of interest to hackers, makers, hobbyists, etc.</p>
|
|
||||||
<p>We started producing shows as <a href="<!--% absolute_path(baseurl) %-->eps/index.html#twt_episodes"><em>Today with a Techie</em></a> on 2005-09-19, <!--% delta.0 %--> years, <!--% delta.1 %--> months, <!--% delta.2 %--> days ago. Our shows are produced by <a href="<!--% absolute_path(baseurl) %-->correspondents/index.html">listeners</a> like you and can be on any <a href="<!--% absolute_path(baseurl) %-->eps/index.html">topics</a> that <strong>"are of interest to <a href="https://en.wikipedia.org/wiki/hacker_(hobbyist)">hackers</a>"</strong>. If you listen to HPR then please consider contributing one show a year. If you <a href="<!--% absolute_url(baseurl) %-->about.html#so_you_want_to_record_a_podcast">record</a> your show now it could be <a href="<!--% hub_baseurl %-->calendar.php">released</a> in <strong><!--% days_till_next_episode %--></strong> days.</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<!--% display_call_for_shows() %-->
|
|
||||||
|
|
||||||
<h2>Podcast</h2>
|
|
||||||
<section class="podcast">
|
|
||||||
<a class="podcast record" href="<!--% absolute_url(baseurl) %-->about.html#so_you_want_to_record_a_podcast">
|
|
||||||
<p>Record</p>
|
|
||||||
</a>
|
|
||||||
<a class="podcast schedule" href="<!--% hub_baseurl %-->calendar.php">
|
|
||||||
<p>Schedule</p>
|
|
||||||
</a>
|
|
||||||
<a class="podcast subscribe" href="<!--% absolute_path(baseurl) %-->syndication.html">
|
|
||||||
<p>Subscribe</p>
|
|
||||||
</a>
|
|
||||||
<a class="podcast listen" href="<!--% absolute_path(baseurl) %-->eps/index.html">
|
|
||||||
<p>Listen</p>
|
|
||||||
</a>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<h2>Project</h2>
|
|
||||||
<section class="project">
|
|
||||||
<a class="project host" href="<!--% absolute_path(baseurl) %-->correspondents/index.html">
|
|
||||||
<p>Hosts</p>
|
|
||||||
</a>
|
|
||||||
<a class="project series" href="<!--% absolute_path(baseurl) %-->series/index.html">
|
|
||||||
<p>Series</p>
|
|
||||||
</a>
|
|
||||||
<a class="project about" href="<!--% absolute_path(baseurl) %-->about.html">
|
|
||||||
<p>About</p>
|
|
||||||
</a>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<div class="column-container">
|
|
||||||
<section class="episodes">
|
|
||||||
<h2>Latest Episodes</h2>
|
|
||||||
<ul>
|
|
||||||
<!--% host_cnt = 0 %-->
|
|
||||||
<!--% FOREACH latest_episodes IN DBI.query(query_latest_episodes) %-->
|
|
||||||
<li><a href="<!--% absolute_path(baseurl) %-->eps/hpr<!--% zero_pad_left(latest_episodes.id) %-->/index.html">hpr<!--% latest_episodes.id %--> :: <!--% latest_episodes.title %--></a></li>
|
|
||||||
<!--% host_cnt = host_cnt + 1 %-->
|
|
||||||
<!--% END %-->
|
|
||||||
</ul>
|
|
||||||
<p><a href="<!--% absolute_path(baseurl) %-->eps/index.html">View all episodes</a></p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="comments">
|
|
||||||
<h2>Latest Comments</h2>
|
|
||||||
<ul>
|
|
||||||
<!--% FOREACH last_5_weeks_episodes IN DBI.query(query_last_5_weeks_episodes).slice(0,4) %-->
|
|
||||||
<li><!--% show_summary(last_5_weeks_episodes) %--></li>
|
|
||||||
<!--% END %-->
|
|
||||||
</ul>
|
|
||||||
<p><a href="<!--% absolute_path(baseurl) %-->comments_viewer.html">View all comments</a></p>
|
|
||||||
</section>
|
|
||||||
</div>
|
|
@@ -23,11 +23,6 @@
|
|||||||
<!--% END %-->
|
<!--% END %-->
|
||||||
<!--% after_html %-->
|
<!--% after_html %-->
|
||||||
<!--% END %-->
|
<!--% END %-->
|
||||||
<hr>
|
|
||||||
<article>
|
|
||||||
<header>
|
|
||||||
<h3>Welcome to HPR, the Community Podcast</h3>
|
|
||||||
</header>
|
|
||||||
<!--% days_till_next_episode = 0 %-->
|
<!--% days_till_next_episode = 0 %-->
|
||||||
<!--% USE DBI(constants.driver) %-->
|
<!--% USE DBI(constants.driver) %-->
|
||||||
<!--% USE date %-->
|
<!--% USE date %-->
|
||||||
@@ -40,44 +35,99 @@
|
|||||||
<!--% days_till_next_episode = calc.Delta_Days(now.0,now.1,now.2,slot_date.0,slot_date.1,slot_date.2) %-->
|
<!--% days_till_next_episode = calc.Delta_Days(now.0,now.1,now.2,slot_date.0,slot_date.1,slot_date.2) %-->
|
||||||
|
|
||||||
<!--% delta = date.calc.N_Delta_YMD(2005,9,19, date.format(date.now, '%Y'),date.format(date.now, '%m'),date.format(date.now, '%d')) %-->
|
<!--% delta = date.calc.N_Delta_YMD(2005,9,19, date.format(date.now, '%Y'),date.format(date.now, '%m'),date.format(date.now, '%d')) %-->
|
||||||
<p>We started producing shows as <a href="<!--% absolute_path(baseurl) %-->eps/index.html#twt_episodes"><em>Today with a Techie</em></a> on 2005-09-19, <!--% delta.0 %--> years, <!--% delta.1 %--> months, <!--% delta.2 %--> days ago. Our shows are produced by <a href="<!--% absolute_path(baseurl) %-->correspondents/index.html">listeners</a> like you and can be on any <a href="<!--% absolute_path(baseurl) %-->eps/index.html">topics</a> that <strong>"are of interest to <a href="https://en.wikipedia.org/wiki/hacker_(hobbyist)">hackers</a>"</strong>. If you listen to HPR then please consider contributing one show a year. If you <a href="<!--% absolute_url(baseurl) %-->about.html#so_you_want_to_record_a_podcast">record</a> your show now it could be <a href="<!--% hub_baseurl %-->calendar.php">released</a> in <strong><!--% days_till_next_episode %--></strong> days.</p>
|
<section id="welcome">
|
||||||
</article>
|
<header>Welcome</header>
|
||||||
|
<p>Hacker Public Radio is a podcast that releases shows every weekday Monday to Friday. The shows are contributed by the public and can be on any topic that is of interest to hackers, makers, hobbyists, etc.</p>
|
||||||
|
<div id="call_for_shows">
|
||||||
<!--% display_call_for_shows() %-->
|
<!--% display_call_for_shows() %-->
|
||||||
<hr>
|
</div>
|
||||||
|
</section>
|
||||||
|
<section id="podcast_lane">
|
||||||
|
<header>Podcast</header>
|
||||||
|
<div class="lane">
|
||||||
|
<a class="lane-button" href="<!--% absolute_path(baseurl) %-->about.html#recording_a_podcast">
|
||||||
|
<img src="<!--% absolute_path(baseurl) %-->images/icons/mic-fill.svg" alt="">
|
||||||
|
Record
|
||||||
|
</a>
|
||||||
|
<a class="lane-button" href="https://hub.hackerpublicradio.org/calendar.php">
|
||||||
|
<img src="<!--% absolute_path(baseurl) %-->images/icons/calendar-2-line.svg" alt="">
|
||||||
|
Schedule
|
||||||
|
</a>
|
||||||
|
<a class="lane-button" href="<!--% absolute_path(baseurl) %-->syndication.html">
|
||||||
|
<img src="<!--% absolute_path(baseurl) %-->images/icons/rss-fill.svg" alt="">
|
||||||
|
Subscribe
|
||||||
|
</a>
|
||||||
|
<a class="lane-button" href="<!--% absolute_path(baseurl) %-->eps/index.html">
|
||||||
|
<img src="<!--% absolute_path(baseurl) %-->images/icons/volume-up-fill.svg" alt="">
|
||||||
|
Listen
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section id="project_lane">
|
||||||
|
<header>Project</header>
|
||||||
|
<div class="lane">
|
||||||
|
<a class="lane-button" href="<!--% absolute_path(baseurl) %-->correspondents/index.html">
|
||||||
|
<img src="<!--% absolute_path(baseurl) %-->images/icons/user-fill.svg" alt="">
|
||||||
|
Host
|
||||||
|
</a>
|
||||||
|
<a class="lane-button" href="<!--% absolute_path(baseurl) %-->series/index.html">
|
||||||
|
<img src="<!--% absolute_path(baseurl) %-->images/icons/stack-fill.svg" alt="">
|
||||||
|
Series
|
||||||
|
</a>
|
||||||
|
<a class="lane-button" href="<!--% absolute_path(baseurl) %-->about.html">
|
||||||
|
<img src="<!--% absolute_path(baseurl) %-->images/icons/question-mark.svg" alt="">
|
||||||
|
About
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section id="latest_lane" class="lane">
|
||||||
<!--% PROCESS 'shared-episode-summary.tpl.html' %-->
|
<!--% PROCESS 'shared-episode-summary.tpl.html' %-->
|
||||||
<h1>Latest Shows</h1>
|
<section id="latest_shows">
|
||||||
|
<header>Latest Shows</header>
|
||||||
<!--% host_cnt = 0 %-->
|
<!--% host_cnt = 0 %-->
|
||||||
|
<ul>
|
||||||
<!--% FOREACH latest_episodes IN DBI.query(query_latest_episodes)
|
<!--% FOREACH latest_episodes IN DBI.query(query_latest_episodes)
|
||||||
%-->
|
%-->
|
||||||
<hr>
|
<li><a href="<!--% absolute_path(baseurl) %-->eps/hpr<!--% zero_pad_left(latest_episodes.id) %-->/index.html">hpr<!--% latest_episodes.id %--> :: <!--% latest_episodes.title %--></a></li>
|
||||||
<article>
|
|
||||||
<header>
|
|
||||||
<h1><a href="<!--% absolute_path(baseurl) %-->eps/hpr<!--% zero_pad_left(latest_episodes.id) %-->/index.html">hpr<!--% latest_episodes.id %--> :: <!--% latest_episodes.title %--></a></h1>
|
|
||||||
<h3><!--% latest_episodes.summary%--></h3>
|
|
||||||
<p class="meta"$><!--% show_avatar(latest_episodes.hostid, latest_episodes.host, host_cnt) %-->
|
|
||||||
Hosted by <a href="<!--% absolute_path(baseurl) %-->correspondents/<!--% zero_pad_left(latest_episodes.hostid) %-->.html"><!--% latest_episodes.host %--></a> on <!--% day_and_date(latest_episodes.date) %--> is flagged as <!--% display_explicit(latest_episodes.explicit) %--> and released under a <!--% latest_episodes.license %--> license. <br>
|
|
||||||
<!--% display_tags(latest_episodes.tags) %-->
|
|
||||||
<span><!--% show_series(latest_episodes.series, latest_episodes.seriesid) %--></span>
|
|
||||||
<span><label>Comments: </label><!--% display_comments_tally(latest_episodes.id, latest_episodes.eps_tally) %--></span><br>
|
|
||||||
<!--% listen_now(latest_episodes, "hpr", baseurl, media_baseurl) %-->
|
|
||||||
</p>
|
|
||||||
</header>
|
|
||||||
<p>See <a href="<!--% absolute_path(baseurl) %-->eps/hpr<!--% zero_pad_left(latest_episodes.id) %-->/index.html">episode show notes</a> for more information.</p>
|
|
||||||
</article>
|
|
||||||
<!--% host_cnt = host_cnt + 1 %-->
|
<!--% host_cnt = host_cnt + 1 %-->
|
||||||
<!--% END %-->
|
<!--% END %-->
|
||||||
<article id="previous_five_weeks">
|
</ul>
|
||||||
<header>
|
</section>
|
||||||
<hr>
|
<section id="latest_comments">
|
||||||
<h1>Previous five weeks</h1>
|
<header>Latest Comments</header>
|
||||||
</header>
|
<ul>
|
||||||
<!--% FOREACH last_5_weeks_episodes IN DBI.query(query_last_5_weeks_episodes)
|
<!--% FOREACH item IN DBI.query('
|
||||||
|
WITH episode_comment_rank AS (
|
||||||
|
SELECT
|
||||||
|
comments.eps_id
|
||||||
|
, comments.id as comment_id
|
||||||
|
, comments.comment_author_name
|
||||||
|
, comments.comment_timestamp
|
||||||
|
, comments.comment_title
|
||||||
|
, RANK() OVER (PARTITION BY eps_id ORDER BY id ) AS comment_number
|
||||||
|
FROM comments
|
||||||
|
)
|
||||||
|
SELECT
|
||||||
|
episode_comment_rank.*
|
||||||
|
, hosts.host
|
||||||
|
, eps.title AS episode_title
|
||||||
|
, eps.date AS episode_date
|
||||||
|
FROM episode_comment_rank
|
||||||
|
INNER JOIN eps
|
||||||
|
ON episode_comment_rank.eps_id = eps.id
|
||||||
|
INNER JOIN hosts
|
||||||
|
ON eps.hostid = hosts.hostid
|
||||||
|
ORDER BY episode_comment_rank.comment_timestamp DESC
|
||||||
|
LIMIT 10;
|
||||||
|
|
||||||
|
')
|
||||||
%-->
|
%-->
|
||||||
<!--% show_summary(last_5_weeks_episodes) %-->
|
<li>hpr<!--% item.eps_id %--> (<!--% item.episode_date %-->) "<!--% item.episode_title %-->" by <!--% item.host %-->
|
||||||
<p class="listen-in"><!--% display_listen_in(last_5_weeks_episodes.id) %--></p>
|
<ul>
|
||||||
|
<li><a href="<!--% absolute_path(baseurl) %-->eps/hpr<!--% zero_pad_left(item.eps_id) %-->/index.html#comment_<!--% item.comment_id%-->">Comment <!--% item.comment_number %-->: <!--% item.comment_author_name %--> on <!--% item.comment_timestamp %-->: "<!--% item.comment_title %-->"</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
<!--% END %-->
|
<!--% END %-->
|
||||||
</article>
|
</ul>
|
||||||
<h1>Older Shows</h1>
|
</section>
|
||||||
<p>
|
|
||||||
Get a <a href="<!--% absolute_path(baseurl) %-->eps/index.html">full list</a> of all our shows.
|
|
||||||
</p>
|
|
||||||
|
@@ -1,11 +1,7 @@
|
|||||||
<!--% PROCESS 'shared-utils.tpl.html' %-->
|
<!--% PROCESS 'shared-utils.tpl.html' %-->
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="<!--% hub_baseurl %-->calendar.php"><strong>⇧Upload⇧</strong></a></li>
|
<li><a href="<!--% absolute_path(baseurl) %-->index.html">Home</a></li>
|
||||||
<li><a href="<!--% absolute_path(baseurl) %-->index.html"><strong>Home »</strong></a></li>
|
<li><a href="<!--% hub_baseurl %-->calendar.php">Upload</a></li>
|
||||||
<li><a href="<!--% absolute_path(baseurl) %-->syndication.html">Get Shows</a></li>
|
<li><a href="<!--% absolute_path(baseurl) %-->syndication.html">Download</a></li>
|
||||||
<li><a href="<!--% absolute_url(baseurl) %-->about.html#so_you_want_to_record_a_podcast">Give Shows</a></li>
|
|
||||||
<li><a href="<!--% absolute_path(baseurl) %-->about.html#how_to_help">Contribute</a></li>
|
|
||||||
<li><a href="<!--% absolute_path(baseurl) %-->tags.html">Tags</a></li>
|
|
||||||
<li><a href="<!--% absolute_path(baseurl) %-->about.html">About</a></li>
|
<li><a href="<!--% absolute_path(baseurl) %-->about.html">About</a></li>
|
||||||
<li><a href="<!--% absolute_path(baseurl) %-->search.html">Search</a></li>
|
|
||||||
</ul>
|
</ul>
|
||||||
|
@@ -1,2 +0,0 @@
|
|||||||
<!--% PROCESS 'shared-utils.tpl.html' %-->
|
|
||||||
<!-- Simple navigation for new design - content is handled in the main page template -->
|
|
@@ -1,61 +0,0 @@
|
|||||||
<!--% PROCESS 'shared-utils.tpl.html' %-->
|
|
||||||
<!--% USE date %-->
|
|
||||||
<!DOCTYPE HTML>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<title>Hacker Public Radio ~ The Technology Community Podcast</title>
|
|
||||||
<!--% IF baseurl %-->
|
|
||||||
<base href="<!--% baseurl %-->">
|
|
||||||
<!--% END %-->
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<meta http-equiv="X-Clacks-Overhead" content="GNU Terry Pratchett" />
|
|
||||||
<meta http-equiv="last-modified" content="<!--% format_feed_date(date.now) %-->">
|
|
||||||
<meta name="keywords" content="Technology, Tech News, Education, Training" />
|
|
||||||
<meta name="description" content="Hacker Public Radio is a podcast that releases shows every weekday Monday through Friday. Our shows are produced by the community (you) and can be on any topic that is of interest to hackers and hobbyists." />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
||||||
<link rel="shortcut icon" href="<!--% absolute_url(baseurl) %-->hpr.ico" >
|
|
||||||
<link rel="alternate" type="application/rss+xml" title="Hacker Public Radio Opus RSS" href="<!--% absolute_path(baseurl) %-->hpr_opus_rss.php" />
|
|
||||||
<link rel="alternate" type="application/rss+xml" title="Hacker Public Radio Ogg Vorbis RSS" href="<!--% absolute_path(baseurl) %-->hpr_ogg_rss.php" />
|
|
||||||
<link rel="alternate" type="application/rss+xml" title="Hacker Public Radio MP3 RSS" href="<!--% absolute_path(baseurl) %-->hpr_mp3_rss.php" />
|
|
||||||
<link rel="alternate" type="application/rss+xml" title="Hacker Public Radio Comments RSS" href="<!--% absolute_path(baseurl) %-->comments.rss" />
|
|
||||||
<link rel="license" title="CC BY-SA 4.0" href="https://creativecommons.org/licenses/by-sa/4.0/" />
|
|
||||||
<link href="<!--% absolute_path(baseurl) %-->css/new-design.css" rel="stylesheet" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.5, user-scalable=yes"/>
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
<nav class="menu">
|
|
||||||
<button class="hamburger" id="hamburger-menu" aria-label="Toggle navigation menu">
|
|
||||||
<img src="<!--% absolute_path(baseurl) %-->icons/menu-line.svg" class="menu-icon" alt="Menu" />
|
|
||||||
<img src="<!--% absolute_path(baseurl) %-->icons/close-line.svg" class="close-icon" alt="Close" style="display: none;" />
|
|
||||||
</button>
|
|
||||||
<div class="menu-links" id="menu-links">
|
|
||||||
<a href="<!--% absolute_path(baseurl) %-->index.html">Home</a>
|
|
||||||
<a href="<!--% hub_baseurl %-->calendar.php">Upload</a>
|
|
||||||
<a href="<!--% absolute_path(baseurl) %-->syndication.html">Download</a>
|
|
||||||
<a href="<!--% absolute_path(baseurl) %-->about.html">About</a>
|
|
||||||
</div>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
<header class="banner title">
|
|
||||||
<img class="banner-image" src="<!--% absolute_path(baseurl) %-->images/logo.png" alt="Hacker Public Radio" aria-description="H.P.R. Hacker Public Radio https://HackerPublicRadio.org, The Community Podcast, Sharing Your Ideas, Projects, Options since 2005, New Episodes Every Weekday" usemap="#bannermap" />
|
|
||||||
<map class="bannermap" name="bannermap">
|
|
||||||
<area shape="rect" coords="108,187,240,343" href="<!--% absolute_path(baseurl) %-->correspondents/index.html" alt="hacker" title="hacker"/>
|
|
||||||
<area shape="rect" coords="246,187,359,343" href="<!--% absolute_path(baseurl) %-->comments_viewer.html" alt="public" title="public" />
|
|
||||||
<area shape="rect" coords="363,187,492,343" href="<!--% absolute_path(baseurl) %-->syndication.html" alt="radio" title="radio" />
|
|
||||||
</map>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<main id="maincontent">
|
|
||||||
<!--% INCLUDE $content %-->
|
|
||||||
</main>
|
|
||||||
|
|
||||||
<footer>
|
|
||||||
<span>Unless otherwise stated, our shows are released under a <a href="https://creativecommons.org/licenses/by-sa/4.0/" target="_blank">Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)</a> license.</span>
|
|
||||||
<span>The HPR Website Design is released to the <a href="https://creativecommons.org/publicdomain/mark/1.0/" target="_blank">Public Domain</a>.</span>
|
|
||||||
<span><em><small>This page was <a href="https://repo.anhonesthost.net/HPR/hpr_generator">generated</a> by <a href="mailto:<!--% generator_email %-->"><!--% generator_name %--></a> at <time dateTime="<!--% format_iso8601_date(date.now) %-->"><!--% format_feed_date(date.now) %--></time></small></em></span>
|
|
||||||
</footer>
|
|
||||||
|
|
||||||
<script src='<!--% absolute_path(baseurl) %-->js/index.js'></script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
@@ -12,7 +12,6 @@
|
|||||||
<meta http-equiv="last-modified" content="<!--% format_feed_date(date.now) %-->">
|
<meta http-equiv="last-modified" content="<!--% format_feed_date(date.now) %-->">
|
||||||
<meta name="keywords" content="Technology, Tech News, Education, Training" />
|
<meta name="keywords" content="Technology, Tech News, Education, Training" />
|
||||||
<meta name="description" content="Hacker Public Radio is a podcast that releases shows every weekday Monday through Friday. Our shows are produced by the community (you) and can be on any topic that is of interest to hackers and hobbyists." />
|
<meta name="description" content="Hacker Public Radio is a podcast that releases shows every weekday Monday through Friday. Our shows are produced by the community (you) and can be on any topic that is of interest to hackers and hobbyists." />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
||||||
<!-- Internal CSS -->
|
<!-- Internal CSS -->
|
||||||
<style type="text/css">
|
<style type="text/css">
|
||||||
article, aside, dialog, figure, footer, header, hgroup, menu, nav, section {
|
article, aside, dialog, figure, footer, header, hgroup, menu, nav, section {
|
||||||
@@ -33,116 +32,52 @@
|
|||||||
<link rel="stylesheet" href="/css/hpr.css" media="screen" type="text/css" />
|
<link rel="stylesheet" href="/css/hpr.css" media="screen" type="text/css" />
|
||||||
<script src="/JavaScript/html5.js"></script>
|
<script src="/JavaScript/html5.js"></script>
|
||||||
<![endif]-->
|
<![endif]-->
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.5, user-scalable=yes"/>
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes"/>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body id="give">
|
<body>
|
||||||
<div id="container" class="shadow">
|
<nav id="accessible_menu">
|
||||||
<header>
|
<a href="<!--% absolute_path(baseurl) %-->sitemap.html#main_content">Site Map</a>
|
||||||
<a href="<!--% absolute_path(baseurl) %-->"><img id="hprlogo" src="<!--% absolute_path(baseurl) %-->images/hpr_logo.png" alt="hprlogo"></a>
|
- <a href="#main_content">skip to main content</a>
|
||||||
<div id="hpr_banner">
|
</nav>
|
||||||
<p id="accessible_menu">
|
<nav id="main_menu" class="menu" role="navigation">
|
||||||
<a href="<!--% absolute_path(baseurl) %-->sitemap.html">Site Map</a>
|
<!--% INCLUDE "navigation-main.tpl.html" %-->
|
||||||
- <a href="#maincontent">skip to main content</a>
|
</nav>
|
||||||
</p>
|
<header role="banner">
|
||||||
<h1 id="sitename">
|
<div id="title">
|
||||||
|
<h1 id="site_acronym">HPR</h1>
|
||||||
|
<h2 id="site_name">
|
||||||
<a href="<!--% absolute_path(baseurl) %-->correspondents/index.html">H</a>acker
|
<a href="<!--% absolute_path(baseurl) %-->correspondents/index.html">H</a>acker
|
||||||
<a href="<!--% absolute_path(baseurl) %-->comments_viewer.html">P</a>ublic
|
<a href="<!--% absolute_path(baseurl) %-->comments_viewer.html">P</a>ublic
|
||||||
<a href="<!--% absolute_path(baseurl) %-->syndication.html">R</a>adio
|
<a href="<!--% absolute_path(baseurl) %-->syndication.html">R</a>adio
|
||||||
</h1>
|
</h2>
|
||||||
<h2>Your ideas, projects, opinions - podcasted.</h2>
|
<h3 id="site_url">https://HackerPublicRadio.org</h3>
|
||||||
<h3>New episodes every weekday Monday through Friday.<br />
|
</div>
|
||||||
<em><small>This page was <a href="https://repo.anhonesthost.net/HPR/hpr_generator">generated</a> by <a href="mailto:<!--% generator_email %-->"><!--% generator_name %--></a> at <time dateTime="<!--% format_iso8601_date(date.now) %-->"><!--% format_feed_date(date.now) %--></time></small></em></h3>
|
<div id="tag_line">
|
||||||
|
<h2>The Community Podcast</h2>
|
||||||
|
<h2>Sharing your ideas, projects, opinions since 2005</h2>
|
||||||
|
<h3>New episodes every weekday
|
||||||
|
</div>
|
||||||
|
</h3>
|
||||||
|
</div>
|
||||||
|
<div id="qr_code">
|
||||||
|
<img src="<!--% absolute_path(baseurl) %-->images/qr_code_logo.png" alt="HPR logo as a QR code to the HPR URL">
|
||||||
</div>
|
</div>
|
||||||
<hr />
|
|
||||||
|
|
||||||
<nav class="menu" role="navigation">
|
|
||||||
<!--% INCLUDE $navigation %-->
|
|
||||||
</nav>
|
|
||||||
</header>
|
</header>
|
||||||
|
<main id="main_content" role="main">
|
||||||
<main id="maincontent">
|
|
||||||
<!--% INCLUDE $content %-->
|
<!--% INCLUDE $content %-->
|
||||||
</main>
|
</main>
|
||||||
|
<footer role="contentinfo">
|
||||||
<footer id="footer_page">
|
<hr>
|
||||||
<h1 class="thick_bar">More Information...</h1>
|
|
||||||
<div id="more_info">
|
|
||||||
<nav class="column">
|
|
||||||
<h2>Ancestry</h2>
|
|
||||||
<ul>
|
|
||||||
<li><a href="http://audio.textfiles.com/shows/radiofreekamerica/">Radio Freek America</a></li>
|
|
||||||
<li><a href="http://audio.textfiles.com/shows/binrev/">BinRev Radio</a></li>
|
|
||||||
<li><a href="http://audio.textfiles.com/shows/infonomicon/">Infonomicon</a></li>
|
|
||||||
<li><a href="http://audio.textfiles.com/shows/twat/">Today With a Techie</a></li>
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
<nav class="column">
|
|
||||||
<h2>Social</h2>
|
|
||||||
<ul>
|
|
||||||
<li><a href="https://lists.hackerpublicradio.com/mailman/listinfo/hpr" >Mailing list</a></li>
|
|
||||||
<li><a rel="me" href="https://infosec.exchange/@hpr" >Mastodon</a></li>
|
|
||||||
<li><a href="https://matrix.to/#/#hpr:matrix.org" >Matrix</a></li>
|
|
||||||
<li><a href="mumble://chatter.skyehaven.net:64738/Hacker%20Public%20Radio?version=1.2.0" >Mumble</a></li>
|
|
||||||
<li><a href="https://web.libera.chat/gamja/?channels=oggcastplanet" target="_blank">#oggcastplanet</a></li>
|
|
||||||
<li><a href="https://t.me/+6fEhQrf5IEc4ZGU8">Telegram</a></li>
|
|
||||||
<li><a href="https://twitter.com/HPR">Twitter.com</a></li>
|
|
||||||
<li><a href="https://www.facebook.com/HenryPartickReilly" target="_blank">Facebook</a></li>
|
|
||||||
<li><a href="https://www.linkedin.com/company/hackerpublicradio/" target="_blank">Linked-In</a></li>
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
<nav class="column">
|
|
||||||
<h2>Unaffiliates</h2>
|
|
||||||
<ul>
|
|
||||||
<li><a href="https://archive.org/details/hackerpublicradio">Archive.org</a></li>
|
|
||||||
<li><a href="https://music.amazon.fr/podcasts/9d9e6211-ff78-4501-93b6-6a9e560c4dbd/hacker-public-radio">Amazon Music</a></li>
|
|
||||||
<li><a href="https://podcasts.google.com/feed/aHR0cDovL2hhY2tlcnB1YmxpY3JhZGlvLm9yZy9ocHJfcnNzLnBocA">Google Podcasts</a></li>
|
|
||||||
<li><a href="https://www.iheart.com/podcast/256-hacker-public-radio-30994513/" target="_blank">iHeart Radio</a></li>
|
|
||||||
<li><a href="https://podcasts.apple.com/us/podcast/hacker-public-radio/id281699640">iTunes</a></li>
|
|
||||||
<li><a href="https://www.listennotes.com/de/podcasts/hacker-public-radio-hacker-public-radio-mNH-jsI7LcJ/">Listen Notes</a></li>
|
|
||||||
<li><a href="https://www.mixcloud.com/hackerpublicradio/">MixCloud</a></li>
|
|
||||||
<li><a href="https://player.fm/series/hacker-public-radio">PlayerFM</a></li>
|
|
||||||
<li><a href="https://www.podchaser.com/podcasts/hacker-public-radio-76781">Podchaser</a></li>
|
|
||||||
<li><a href="https://nl.radio.net/podcast/hacker-public-radio">Radio.net</a></li>
|
|
||||||
<li><a href="https://open.spotify.com/show/7e2hYcnHj9vKgUzsIOf4r3">Spotify</a></li>
|
|
||||||
<li><a href="https://toppodcast.com/podcast_feeds/hacker-public-radio/">Top Podcasts</a></li>
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
<nav class="column">
|
|
||||||
<h2>Commons</h2>
|
|
||||||
<ul>
|
|
||||||
<li><a href="https://freeculturepodcasts.org/">Free Culture Podcasts</a></li>
|
|
||||||
<li><a href="https://archive.org/details/hackerpublicradio">archive.org</a></li>
|
|
||||||
<li><a href="https://repo.anhonesthost.net/HPR/">HPR Source Code</a></li>
|
|
||||||
<li><a href="https://cchits.net/">cchits.net</a></li>
|
|
||||||
<li><a href="https://freesound.org/">freesound.org</a></li>
|
|
||||||
<li><a href="https://librivox.org/">librivox.org</a></li>
|
|
||||||
<li><a href="https://openclipart.org/">openclipart.org</a></li>
|
|
||||||
<li><a href="https://openfontlibrary.org/">openfontlibrary.org</a></li>
|
|
||||||
<li><a href="https://www.openrouteservice.org/">openrouteservice.org/</a></li>
|
|
||||||
<li><a href="https://pixabay.com/">pixabay.com/</a></li>
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
<nav class="column">
|
|
||||||
<h2>Patrons</h2>
|
|
||||||
<ul>
|
|
||||||
<li><a href="https://anhonesthost.com/hosting/shared-hosting">AnHonestHost.com</a></li>
|
|
||||||
<li><a href="https://archive.org/donate/">Archive.org</a></li>
|
|
||||||
<li><a href="https://rsync.net/">rsync.net</a></li>
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
</div><!-- more_info -->
|
|
||||||
<h1 class="thick_bar">Copyright Information</h1>
|
|
||||||
<div id="copyright">
|
<div id="copyright">
|
||||||
<p>
|
<span>Unless otherwise stated, our shows are released under a <a rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/">
|
||||||
Unless otherwise stated, our shows are released under a <a rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/">
|
Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)</a> license.</span>
|
||||||
Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)</a> license.</p>
|
<span>
|
||||||
<p>
|
|
||||||
The <span property="dct:title">HPR Website Design</span> is released to the <a rel="license" href="https://creativecommons.org/publicdomain/mark/1.0/">Public Domain</a>.
|
The <span property="dct:title">HPR Website Design</span> is released to the <a rel="license" href="https://creativecommons.org/publicdomain/mark/1.0/">Public Domain</a>.
|
||||||
</p>
|
</span>
|
||||||
</div><!-- copyright -->
|
</div>
|
||||||
<hr />
|
<div id="generated_by">This page was <a href="https://repo.anhonesthost.net/HPR/hpr_generator">generated</a> by <a href="mailto:<!--% generator_email %-->"><!--% generator_name %--></a> at <time dateTime="<!--% format_iso8601_date(date.now) %-->"><!--% format_feed_date(date.now) %--></time></em>
|
||||||
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
</div>
|
</body>
|
||||||
<!-- shadow -->
|
</html>
|
||||||
|
@@ -29,7 +29,8 @@ set -o nounset # Treat unset variables as an error
|
|||||||
function is_module_installed {
|
function is_module_installed {
|
||||||
HR="----------------------"
|
HR="----------------------"
|
||||||
perl -e "use ${1} "
|
perl -e "use ${1} "
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]
|
||||||
|
then
|
||||||
echo ${HR}
|
echo ${HR}
|
||||||
else
|
else
|
||||||
echo "Found module ${1}"
|
echo "Found module ${1}"
|
||||||
@@ -37,30 +38,35 @@ function is_module_installed {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
MODULES=(
|
MODULES=( \
|
||||||
"Getopt::Long"
|
"Getopt::Long" \
|
||||||
"Pod::Usage"
|
"Pod::Usage" \
|
||||||
"Config::Std"
|
"Config::Std" \
|
||||||
"Template"
|
"Template" \
|
||||||
"Template::Plugin::File"
|
"Template::Plugin::File" \
|
||||||
"Template::Plugin::DBI"
|
"Template::Plugin::DBI" \
|
||||||
"Template::Plugin::HTML::Strip"
|
"Template::Plugin::HTML::Strip" \
|
||||||
"DBI"
|
"DBI" \
|
||||||
"Tie::DBI"
|
"Tie::DBI" \
|
||||||
"DBD::SQLite"
|
"DBD::SQLite" \
|
||||||
"Date::Calc"
|
"DBD::mysql" \
|
||||||
"Text::CSV_XS"
|
"Date::Calc" \
|
||||||
|
"Text::CSV_XS" \
|
||||||
)
|
)
|
||||||
|
|
||||||
echo "The following modules must be installed for the site-generator to function: "
|
echo "The following modules must be installed for the site-generator to function: "
|
||||||
for module in "${MODULES[@]}"; do
|
for module in "${MODULES[@]}"
|
||||||
|
do
|
||||||
echo "* ${module}"
|
echo "* ${module}"
|
||||||
done
|
done
|
||||||
|
echo "When MySQL is used, the DBD:mysql module is required (otherwise it is optional)"
|
||||||
|
echo "When SQLite is used, then the DBD:SQLite module is required (otherwise it is optional)"
|
||||||
|
|
||||||
echo "Scanning for modules ..."
|
echo "Scanning for modules ..."
|
||||||
echo "----------------------"
|
echo "----------------------"
|
||||||
|
|
||||||
for module in "${MODULES[@]}"; do
|
for module in "${MODULES[@]}"
|
||||||
|
do
|
||||||
is_module_installed "${module}"
|
is_module_installed "${module}"
|
||||||
done
|
done
|
||||||
|
|
||||||
|