Compare commits
140 Commits
023c041706
...
i335_docke
| Author | SHA1 | Date | |
|---|---|---|---|
|
fd577942e6
|
|||
|
3cc4a6b5d3
|
|||
|
47b2c588b8
|
|||
|
5bdda3c1ef
|
|||
|
7cea36879c
|
|||
| abd1937fb6 | |||
|
4750a08456
|
|||
| e56592152f | |||
|
5d4a7ad639
|
|||
| 6e07ee5e0a | |||
| bdf48827f0 | |||
| 27920e7b9f | |||
|
a9b757232f
|
|||
|
ef4302f8d4
|
|||
|
4e9bc7e6c2
|
|||
|
8c70c83261
|
|||
|
95ad45c6e3
|
|||
|
9e711c6620
|
|||
| 079b4be448 | |||
| 988c6f8593 | |||
| b1da08572f | |||
| dca0945932 | |||
| 63c25d2f19 | |||
| c2ad703409 | |||
| b1f0420526 | |||
| 175bf2dd57 | |||
| fbff5bc6a1 | |||
| ea85c3de61 | |||
|
ad21bb045c
|
|||
|
1cc9211e95
|
|||
|
fc12c7ae5c
|
|||
|
6a64ebd95e
|
|||
|
c349abfded
|
|||
| 30e4f6a4d8 | |||
| e43386ac95 | |||
|
2f273d61dd
|
|||
|
57d5989b29
|
|||
| 292e501f69 | |||
|
824c2d77c7
|
|||
| 5464725b7d | |||
|
f61fe7c6c8
|
|||
| 611a022aab | |||
|
9ecb30f51f
|
|||
| e885c78fb5 | |||
|
0a5dea473b
|
|||
| de316e7f6b | |||
|
7161b99eb0
|
|||
| 84e89a53ad | |||
|
5004f4fe88
|
|||
|
6520bdac8b
|
|||
| 2eece012fa | |||
|
3d74b6f084
|
|||
| 24f2b5f9ee | |||
|
020d6395c1
|
|||
| a40774b1e8 | |||
|
face5e1fbe
|
|||
|
7b9e8a94f0
|
|||
| 3ca1a903df | |||
|
ae5bfc12b4
|
|||
|
21c664ecf9
|
|||
|
c17ce1bf74
|
|||
|
c922ea6281
|
|||
|
98c51ee9fe
|
|||
|
ae96d602a4
|
|||
| 904d14d083 | |||
|
7170015a0e
|
|||
| e649c09803 | |||
|
eeb955d9fe
|
|||
|
b2f5322aec
|
|||
|
23f91a0410
|
|||
|
2be718287f
|
|||
| 3bd64bf5cf | |||
|
7a59a769ed
|
|||
|
30cca2bac0
|
|||
| 3a475742e4 | |||
|
4e2ecc4efc
|
|||
|
c85a4b8c6e
|
|||
| f11106223c | |||
|
1ad43c462a
|
|||
| 3bcd385279 | |||
|
aa722bda55
|
|||
|
ed6779fa5a
|
|||
|
126e184126
|
|||
|
192d994556
|
|||
| 2f779fb9d0 | |||
|
7a02c7b1c1
|
|||
| 48fbd272e4 | |||
|
b850c51e4f
|
|||
|
3bf5769b52
|
|||
| 67e56ea102 | |||
|
2c9e75bf1a
|
|||
| ccc904c691 | |||
|
d0c371a0f9
|
|||
|
466ef289b1
|
|||
|
b5755ddedb
|
|||
|
2a119bd920
|
|||
|
a8dc69d7ad
|
|||
|
09f5c60d60
|
|||
|
b122f7c1c0
|
|||
|
70fd148928
|
|||
|
c53c6d50aa
|
|||
|
c4d94bb019
|
|||
|
1075833562
|
|||
|
fb46c13394
|
|||
| f78789fdc4 | |||
| 4327c15823 | |||
|
39c14fb3e4
|
|||
|
47e1ebf69c
|
|||
|
88f9362279
|
|||
|
96e4d9a402
|
|||
|
b3e9ccc546
|
|||
| 5f601251db | |||
|
af2da91d7c
|
|||
|
3c7f02a09c
|
|||
|
81c8220e30
|
|||
|
b694a6f547
|
|||
| d0f5fac2b4 | |||
|
82563d0a48
|
|||
|
4ff0738531
|
|||
|
69c298922a
|
|||
|
a87e7f12a6
|
|||
|
4fbf32eaa9
|
|||
|
dc274983fe
|
|||
|
ee749cf1bb
|
|||
|
6bc40e11c1
|
|||
|
4e853f04f3
|
|||
|
fb01dd8e3f
|
|||
|
61aabd8ef1
|
|||
|
b32544f938
|
|||
|
bca63a36fb
|
|||
|
9d1b94f686
|
|||
|
a9ff01f392
|
|||
|
fbcf5be2a6
|
|||
| 5310ee1912 | |||
| bc7f7a7347 | |||
|
fc1dedf4b2
|
|||
|
181c9fbad9
|
|||
|
a2fb6b1f6a
|
|||
|
5e48d9e064
|
|||
|
454d548ce7
|
24
Dockerfile
Normal file
@@ -0,0 +1,24 @@
|
||||
FROM perl:stable
|
||||
|
||||
RUN cpanm Config::Std \
|
||||
&& cpanm Template \
|
||||
&& cpanm Template::Plugin::DBI \
|
||||
&& cpanm Template::Plugin::HTML::Strip \
|
||||
&& cpanm DBD::SQLite \
|
||||
&& cpanm Tie::DBI \
|
||||
&& cpanm Date::Calc \
|
||||
&& cpanm Text::CSV_XS \
|
||||
&& cpanm HTML::Entities \
|
||||
&& mkdir -p /usr/src/app
|
||||
|
||||
WORKDIR /usr/src/app
|
||||
|
||||
ADD site-generator /usr/src/app/site-generator
|
||||
ADD site.cfg /usr/src/app/site.cfg
|
||||
ADD templates /usr/src/app/templates
|
||||
ADD LICENSE /usr/src/app/LICENSE
|
||||
|
||||
# Tell Perl where to find the local modules
|
||||
ENV PERL5LIB=/usr/local/lib/perl5/site_perl
|
||||
|
||||
ENTRYPOINT ["/usr/src/app/site-generator"]
|
||||
@@ -11,7 +11,9 @@ password are required), run:
|
||||
On success, an "hpr_generator" directory will be created in the folder from
|
||||
which the clone command was executed containing a local copy of the git repository.
|
||||
|
||||
# Install required Perl modules
|
||||
# Building on local system
|
||||
|
||||
## Install required Perl modules
|
||||
|
||||
Installing the Perl modules is the most finicky part of the installation process.
|
||||
The needed Perl modules can be found using the operating system's package
|
||||
@@ -34,7 +36,7 @@ apt install libconfig-std-perl \
|
||||
|
||||
```
|
||||
|
||||
## Using CPAN to install the modules
|
||||
### Using CPAN to install the modules
|
||||
|
||||
A cross platform method to install the needed modules is the Perl CPAN application.
|
||||
Make sure that the [gcc](https://www.gnu.org/software/gcc/),
|
||||
@@ -55,7 +57,7 @@ cpan Tie::DBI
|
||||
cpan Text:CSV_XS
|
||||
```
|
||||
|
||||
## Testing for Perl module dependencies
|
||||
### Testing for Perl module dependencies
|
||||
|
||||
A bash script is included in the utils directory that will list the Perl modules used by the site-generator and report whether the modules are installed on the current OS.
|
||||
|
||||
@@ -65,6 +67,39 @@ It can be run from any directory. To run from the utils directory:
|
||||
./check-dependencies.sh
|
||||
```
|
||||
|
||||
# Building with Docker
|
||||
|
||||
The docker file will copy the local version of the site-generator program, the templates directory, the LICENSE file,
|
||||
and the site.cfg file into the Docker image. For the docker image to run correctly it needs access to your local
|
||||
hpr.db file and the output directory (defaults to "public_html"). The default site.cfg assumes the hpr.db is located
|
||||
in the directory from which the site-generator is run. There are two ways to make the db available to the container:
|
||||
|
||||
* Put the hpr.db file in the public_html folder and modify the driver option under the [DBI] section of the site.cfg to:<br>
|
||||
```driver: dbi:SQLite:public_html/hpr.db```
|
||||
* mount the hpr.db file into the container when starting up the container with the -v option: <br>
|
||||
```-v <path to db directory>/hpr.db:/usr/src/app/hpr.db```
|
||||
|
||||
Build the image by running the following command from the hpr_generator directory:
|
||||
```docker run -t hpr/site-generator .```
|
||||
|
||||
The first build will take a while. It must pull down the base container, perl-latest, and then pull down and build the
|
||||
various Perl modules from CPAN. After the initial build, if you have modified your site.cfg file, templates dir, or the
|
||||
site-generator program itself, builds will be very quick.
|
||||
|
||||
If the build fails, it is often from a CPAN module failing to download and install. Try running the Docker build command again.
|
||||
|
||||
## Running the container
|
||||
|
||||
When runing the Docker image, your local output directory (typically public_html) must be mounted into the container using
|
||||
the -v option. If you are using the default path for the hpr.db, then the local hpr.db file must also be mounted into the image.
|
||||
The following is an example of running the site-generator with default locations from the hpr_generator directory:
|
||||
```
|
||||
docker run \
|
||||
-v "$(pwd)/public_html":/usr/src/app/public_html \
|
||||
-v "$(pwd)/hpr.db":/usr/src/app/hpr.db \
|
||||
hpr/site-generator --help
|
||||
```
|
||||
|
||||
# Create the HPR database
|
||||
|
||||
The hpr_generator relies on information from a database to generate many of the
|
||||
|
||||
17
NEWSITE_CONTRIBUTERS.md
Normal file
@@ -0,0 +1,17 @@
|
||||
# Basic Concept, Design and Guiding Light
|
||||
|
||||
* Ken Fallon
|
||||
|
||||
# Implementaion and Design Touches
|
||||
|
||||
* Lee Hanken
|
||||
* Roan Horning
|
||||
|
||||
# Constructive Feedback and Forward Looks
|
||||
|
||||
* Archer72 (Mark Rice)
|
||||
* Dave Morris
|
||||
* kwoot
|
||||
|
||||
Thanks to all the contributers who helped give HPR
|
||||
its 2025 facelift!
|
||||
@@ -2,6 +2,9 @@
|
||||
Static web page generator for the Hacker Public Radio website.
|
||||
|
||||
## Installation
|
||||
|
||||
### On local system
|
||||
|
||||
* Clone or download this repository
|
||||
* With SQLite
|
||||
* Create the sqlite3 database from the hpr.sql MySQL dump file available on
|
||||
@@ -31,6 +34,10 @@ Static web page generator for the Hacker Public Radio website.
|
||||
* Text::CSV_XS
|
||||
* HTML::Entities
|
||||
|
||||
### Using Docker
|
||||
|
||||
* run: `docker build -t hpr/site-generator .`
|
||||
|
||||
* See the [Getting Started](GETTING_STARTED.md) tutorial for more details on
|
||||
installing the HPR generator.
|
||||
|
||||
@@ -68,5 +75,5 @@ and add the label "**Feature Request**".
|
||||
* Ken Fallon
|
||||
* norrist
|
||||
* Paul Jewell
|
||||
|
||||
* Lee Hanken
|
||||
|
||||
|
||||
1
_sql/sqlite/Rename_twt_table.sql
Normal file
@@ -0,0 +1 @@
|
||||
ALTER TABLE twat_eps RENAME TO twt_eps;
|
||||
@@ -10,7 +10,11 @@ https://creativecommons.org/publicdomain/
|
||||
* -- https://developer.mozilla.org/en-US/docs/Learn/CSS/CSS_layout/Responsive_Design
|
||||
* - Matthew James Tayler: Responsive Font Size (Optimal Text at Every Breakpoint)
|
||||
* -- https://matthewjamestaylor.com/responsive-font-size
|
||||
* - CSS-Tricks: Linearly Scale font-size with CSS clamp() Based on the Viewport
|
||||
* - CSS-Tricks: Linearly Scale font-size with CSS c
|
||||
* #welcome > p {
|
||||
* font-size: 1.25rem;
|
||||
* font-weight: 450;
|
||||
* }lamp() Based on the Viewport
|
||||
* -- https://css-tricks.com/linearly-scale-font-size-with-css-clamp-based-on-the-viewport/
|
||||
*/
|
||||
|
||||
@@ -18,8 +22,8 @@ https://creativecommons.org/publicdomain/
|
||||
font-family: "BebasNeue";
|
||||
src:
|
||||
local("BEBAS NEUE"),
|
||||
url("/css/bebas/BebasNeue.woff2") format("woff2");
|
||||
url("/css/bebas/BebasNeue.woff") format("woff");
|
||||
url("/css/bebas/BebasNeue.woff2") format("woff2"),
|
||||
url("/css/bebas/BebasNeue.woff") format("woff"),
|
||||
url("/css/bebas/BebasNeue.otf") format("opentype");
|
||||
}
|
||||
@font-face {
|
||||
@@ -27,7 +31,7 @@ https://creativecommons.org/publicdomain/
|
||||
src:
|
||||
local("Patrick Hand"),
|
||||
url("/css/patrickhand/PatrickHand-Regular.woff2") format("woff2"),
|
||||
url("/css/patrickhand/PatrickHand-Regular.woff") format("woff");
|
||||
url("/css/patrickhand/PatrickHand-Regular.woff") format("woff"),
|
||||
url("/css/patrickhand/PatrickHand-Regular.ttf") format("truetype");
|
||||
}
|
||||
:root {
|
||||
@@ -43,10 +47,15 @@ https://creativecommons.org/publicdomain/
|
||||
--link-secondary: #a8f8ff;
|
||||
--link-secondary-hover: #f9e9c2;
|
||||
--link-title-color: #00003e;
|
||||
--link-navigation-hover: #030303;
|
||||
--primary-content-line-height: 1.45;
|
||||
|
||||
--font-family-hpr: Verdana, Arial, Helvetica, sans-serif; /* 1em/1.5 OpenDyslexic, */;
|
||||
--font-size-default: clamp(1rem, 15px + 0.3vw, 1.07rem);
|
||||
--font-size-emphasis: clamp(1.1rem, 15px + 0.3vw, 1.25rem);
|
||||
|
||||
--episode-nav-padding: clamp(0.15em, 15px + 0.3vw, 0.4em);
|
||||
--show-notes-pre-background: #f9e9c2;
|
||||
--logo-font-family: var(--font-family-hpr);
|
||||
--logo-font-weight: bolder;
|
||||
--logo-font-size: 7.5rem;
|
||||
@@ -307,7 +316,7 @@ p.meta span label {
|
||||
article > p,
|
||||
#main_content > p,
|
||||
#main_content > section > p {
|
||||
line-height: 1.45;
|
||||
line-height: var(--primary-content-line-height);
|
||||
}
|
||||
.lane {
|
||||
display: flex;
|
||||
@@ -326,9 +335,13 @@ article > p,
|
||||
#podcast_lane > .lane,
|
||||
#project_lane > .lane,
|
||||
#latest_lane.lane {
|
||||
justify-content: flex-between;
|
||||
justify-content: space-around;
|
||||
}
|
||||
.lane > article,
|
||||
#welcome > p {
|
||||
font-size: var(--font-size-emphasis);
|
||||
font-weight: 450;
|
||||
}
|
||||
#hosts tr {
|
||||
/* Add shadows to create the "card" effect */
|
||||
border-top: thin solid var(--shadow-cards);
|
||||
@@ -339,7 +352,7 @@ article > p,
|
||||
2px 4px 4px var(--shadow-cards);
|
||||
transition: 0.3s;
|
||||
flex: 1 0 100%;
|
||||
overflow-x: scroll;
|
||||
overflow: auto;
|
||||
padding-bottom: 1rem;
|
||||
}
|
||||
.lane > article:hover,
|
||||
@@ -353,7 +366,7 @@ article > p,
|
||||
margin-right: 1rem;
|
||||
}
|
||||
.lane > article > header,
|
||||
.lane > article > h3 {
|
||||
.lane > article > h3:first-child {
|
||||
background: var(--background-secondary);
|
||||
padding: 1.5rem 1rem 1rem 1rem;
|
||||
margin: 0;
|
||||
@@ -361,12 +374,25 @@ article > p,
|
||||
font-size: 1.45rem;
|
||||
color: var(--background-primary);
|
||||
}
|
||||
.lane > article > header > .index-link {
|
||||
float: right;
|
||||
}
|
||||
.lane.stack > article {
|
||||
border-radius: 0.5rem;
|
||||
border: thin solid var(--background-secondary);
|
||||
max-width: calc(100vw - 12px);
|
||||
}
|
||||
.lane.stack > article > header,
|
||||
.lane.stack > article > h3:first-child {
|
||||
border-top-left-radius: 0.5rem;
|
||||
border-top-right-radius: 0.5rem;
|
||||
}
|
||||
.lane > article > header a,
|
||||
.lane > article > h3 a {
|
||||
.lane > article > h3:first-child a {
|
||||
color: var(--link-secondary);
|
||||
}
|
||||
.lane > article > header a:hover,
|
||||
.lane > article > h3:hover {
|
||||
.lane > article > h3:first-child:hover {
|
||||
color: var(--link-secondary-hover);
|
||||
}
|
||||
.lane.stack> * > header * {
|
||||
@@ -377,6 +403,9 @@ article > p,
|
||||
font-size: var(--default-header-4-font-size);
|
||||
margin-left: 22px;
|
||||
}
|
||||
.lane.stack > article > footer {
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
a.lane-button {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
@@ -532,48 +561,68 @@ fieldset > table td select {
|
||||
display: block;
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
fieldset > table {
|
||||
width: calc(100vw + -16vw + -1rem);
|
||||
max-width: 100%;
|
||||
}
|
||||
fieldset > input,
|
||||
fieldset > table td input,
|
||||
fieldset > table td textarea {
|
||||
width: calc(100vw + -16vw + -1.5rem);
|
||||
max-width: 100%;
|
||||
input {
|
||||
border: thin solid var(--input-border-primary);
|
||||
border-radius: 0.2rem;
|
||||
margin-bottom: 0.5rem;
|
||||
padding: 0.5rem;
|
||||
}
|
||||
|
||||
fieldset > table td select {
|
||||
appearance: none;
|
||||
input[type="submit"] {
|
||||
background-color: var(--background-secondary);
|
||||
color: var(--text-secondary);
|
||||
font-weight: 400;
|
||||
width: fit-content;
|
||||
}
|
||||
input[type="submit"]:hover {
|
||||
background-color: var(--link-primary-hover);
|
||||
color: var(--background-primary);
|
||||
}
|
||||
select {
|
||||
appearance: auto;
|
||||
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;
|
||||
padding: 0.5rem;
|
||||
}
|
||||
fieldset > table td select:focus{
|
||||
select:focus{
|
||||
background: var(--background-secondary);
|
||||
color: var(--text-secondary);
|
||||
}
|
||||
fieldset > table td select:active {
|
||||
}select:active {
|
||||
background: var(--background-secondary);
|
||||
color: var(--text-primary);
|
||||
}
|
||||
fieldset > input,
|
||||
fieldset > table td input,
|
||||
fieldset > table td textarea {
|
||||
width: calc(100vw + -16vw + -1.5rem);
|
||||
max-width: 100%;
|
||||
}
|
||||
fieldset > table td select {
|
||||
width: calc(100vw + -16vw + -0.40rem);
|
||||
}
|
||||
fieldset > table td input[type="radio"] {
|
||||
display: initial;
|
||||
width: initial;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
#youtube {
|
||||
--video-ratio: calc(390 / 640);
|
||||
width: min(calc(89vw + 0px), 640px);
|
||||
height: min(calc(calc(89vw + 0px) * var(--video-ratio)), 390px);
|
||||
}
|
||||
#upload_method pre {
|
||||
max-width: 80vw;
|
||||
overflow-x: scroll;
|
||||
}
|
||||
#search form {
|
||||
flex: 1 1 auto
|
||||
flex: 1 1 100%;
|
||||
}
|
||||
#search fieldset {
|
||||
padding-top: 1rem;
|
||||
@@ -585,20 +634,14 @@ fieldset > table td input[type="radio"] {
|
||||
width: 94%;
|
||||
}
|
||||
#search fieldset > input[type="submit"] {
|
||||
background-color: var(--background-secondary);
|
||||
color: var(--text-secondary);
|
||||
width: 100%;
|
||||
}
|
||||
#search fieldset > input[type="submit"]:hover {
|
||||
background-color: var(--link-primary-hover);
|
||||
color: var(--background-primary);
|
||||
}
|
||||
#search fieldset > p {
|
||||
margin-top: 0.5rem;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
.no-css {
|
||||
display: none;
|
||||
display: none !important;
|
||||
}
|
||||
#tags .date {
|
||||
margin:0;
|
||||
@@ -632,12 +675,20 @@ fieldset > table td input[type="radio"] {
|
||||
background: var(--background-secondary);
|
||||
color: var(--background-primary);
|
||||
}
|
||||
#hosts td:nth-child(2) {
|
||||
display: inline-flex;
|
||||
}
|
||||
#hosts td:nth-child(-n+2) a {
|
||||
color: var(--link-secondary);
|
||||
flex: 1;
|
||||
}
|
||||
#hosts td:nth-child(-n+2) a:hover {
|
||||
color: var(--link-secondary-hover);
|
||||
}
|
||||
#hosts td:nth-child(-n+2) a strong {
|
||||
display: inline-block;
|
||||
line-height: 1.5rem;
|
||||
}
|
||||
#hosts td:nth-child(2) {
|
||||
padding: 0.25rem 0 0 8px;
|
||||
width: calc(100% - 90px);
|
||||
@@ -656,11 +707,42 @@ fieldset > table td input[type="radio"] {
|
||||
#hosts td > img {
|
||||
border-radius: 0.25rem;
|
||||
}
|
||||
.series-description {
|
||||
#host {
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
}
|
||||
#host_id {
|
||||
text-align: center;
|
||||
}
|
||||
#host_id > h2 {
|
||||
margin-top: 0;
|
||||
}
|
||||
#host_id img {
|
||||
border-radius: 0.25rem;
|
||||
}
|
||||
#host_meta {
|
||||
flex: 1;
|
||||
padding: 0 0 0.75rem 0;
|
||||
}
|
||||
#host_meta > div,
|
||||
#host_meta > p {
|
||||
margin: 0.25rem 0;
|
||||
line-height: var(--primary-content-line-height);
|
||||
}
|
||||
#host_meta > div > p {
|
||||
display: inline-block;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.series-description {
|
||||
margin: 0 0 1rem 0;
|
||||
padding: 0;
|
||||
font-style: italic;
|
||||
}
|
||||
.series-desciption > *:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.sr-only {
|
||||
position: absolute;
|
||||
width: 1px;
|
||||
@@ -671,6 +753,70 @@ fieldset > table td input[type="radio"] {
|
||||
clip: rect(0, 0, 0, 0);
|
||||
border: 0;
|
||||
}
|
||||
#show_notes {
|
||||
max-width: 98vw;
|
||||
}
|
||||
#show_notes pre
|
||||
{
|
||||
overflow: auto;
|
||||
}
|
||||
#show_notes code {
|
||||
display: inline-block;
|
||||
background-color: var(--show-notes-pre-background);
|
||||
border: 1px solid #ddd;
|
||||
padding: 0.1em 0;
|
||||
}
|
||||
nav.episodes {
|
||||
color: var(--background-primary);
|
||||
font-size: 0.9em;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: space-around;
|
||||
max-width: 100vw;
|
||||
}
|
||||
nav.episodes span {
|
||||
color: var(--text-primary);
|
||||
display: inline-block;
|
||||
text-align: center;
|
||||
border: solid thin var(--text-primary);
|
||||
}
|
||||
nav.episodes span:nth-child(-n+2),
|
||||
nav.episodes span:nth-child(-n+2) a {
|
||||
border-top-left-radius: 2rem;
|
||||
border-bottom-left-radius: 2rem;
|
||||
}
|
||||
nav.episodes span:nth-child(n+3),
|
||||
nav.episodes span:nth-child(n+3) a {
|
||||
border-top-right-radius: 2rem;
|
||||
border-bottom-right-radius: 2rem;
|
||||
}
|
||||
nav.episodes span.no-link,
|
||||
nav.episodes span a {
|
||||
padding: 0.3em var(--episode-nav-padding) 0.1em var(--episode-nav-padding);
|
||||
display: inline-block;
|
||||
min-width: 4.4em;
|
||||
min-height: 1.5em;
|
||||
}
|
||||
nav.episodes span a:hover {
|
||||
background-color: var(--link-primary-hover);
|
||||
color: var(--link-secondary-hover);
|
||||
}
|
||||
nav.episodes svg {
|
||||
margin: 0 0.2rem;
|
||||
height: 0.85em;
|
||||
max-width: 13px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
nav.episodes span a svg #arrow,
|
||||
nav.episodes span a svg #bar {
|
||||
stroke: var(--link-primary);
|
||||
fill: var(--link-primary);
|
||||
}
|
||||
nav.episodes span a:hover svg #arrow,
|
||||
nav.episodes span a:hover svg #bar {
|
||||
stroke: var(--link-secondary-hover);
|
||||
fill: var(--link-secondary-hover);
|
||||
}
|
||||
@media (min-width: 600px) {
|
||||
body > header .bounding-box {
|
||||
justify-content: space-between;
|
||||
@@ -764,6 +910,12 @@ fieldset > table td input[type="radio"] {
|
||||
flex: 1 1 45%;
|
||||
max-width: 45%;
|
||||
}
|
||||
#host {
|
||||
gap: 2rem;
|
||||
}
|
||||
nav.episodes {
|
||||
display: inline-block;
|
||||
}
|
||||
}
|
||||
@media (min-width: 900px) {
|
||||
#podcast_lane > .lane,
|
||||
@@ -779,3 +931,54 @@ fieldset > table td input[type="radio"] {
|
||||
max-width: 30%;
|
||||
}
|
||||
}
|
||||
@media (prefers-color-scheme: dark) {
|
||||
:root {
|
||||
--link-primary: #bbdfe7;
|
||||
--link-header-hover: #b54c08; /* original --link-primary-hover */;
|
||||
--link-primary-hover: var(--link-secondary-hover);
|
||||
--background-primary: #4d4d4d; /* HPR Grey */
|
||||
--text-primary: #dfdfdf /*#fffff7#fafafa#fbfbee #dfdfdf */;
|
||||
--banner-text-primary: #b6b6b6;
|
||||
--shadow-secondary-color: hsl(0, 0%, 40%);
|
||||
--input-border-primary: var(--shadow-secondary-color);
|
||||
--lane-button-color: #d5e6ea;
|
||||
--show-notes-pre-background: #b54c08;
|
||||
}
|
||||
body > header {
|
||||
background-image: url("/images/main-header-background-dark.png");
|
||||
background-color: #22545a;
|
||||
}
|
||||
img {
|
||||
filter: brightness(0.70);
|
||||
}
|
||||
a.lane-button {
|
||||
background-image: url("/images/lane-button-background-dark.png");
|
||||
color: var(--lane-button-color);
|
||||
}
|
||||
a.lane-button img {
|
||||
filter: none;
|
||||
}
|
||||
.lane > article > header {
|
||||
color: var(--text-secondary);
|
||||
}
|
||||
#title a:hover {
|
||||
color: var(--link-header-hover);
|
||||
}
|
||||
#hosts td:nth-child(-n+2) {
|
||||
color: var(--text-primary);
|
||||
}
|
||||
nav.episodes span a:hover {
|
||||
background-color: var(--link-primary-hover);
|
||||
color: var(--link-navigation-hover);
|
||||
}
|
||||
nav.episodes span svg #arrow,
|
||||
nav.episodes span svg #bar {
|
||||
stroke: var(--text-primary);
|
||||
fill: var(--text-primary);
|
||||
}
|
||||
nav.episodes span a:hover svg #arrow,
|
||||
nav.episodes span a:hover svg #bar {
|
||||
stroke: var(--link-navigation-hover);
|
||||
fill: var(--link-navigation-hover);
|
||||
}
|
||||
}
|
||||
|
||||
BIN
public_html/images/contribute-audacity-export-sm.png
Normal file
|
After Width: | Height: | Size: 86 KiB |
BIN
public_html/images/contribute-audacity-record-sm.png
Normal file
|
After Width: | Height: | Size: 114 KiB |
BIN
public_html/images/contribute-mumble-record-sm.png
Normal file
|
After Width: | Height: | Size: 93 KiB |
BIN
public_html/images/hpr_feed_small.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
24
public_html/images/icons/arrow-first.svg
Normal file
@@ -0,0 +1,24 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
viewBox="0 0 12 12"
|
||||
version="1.1"
|
||||
id="arrow_first"
|
||||
width="12"
|
||||
height="12"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<path
|
||||
id="arrow"
|
||||
style="stroke-width:0.584448;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
d="M 9.9303359,11.572157 11.530286,10.119277 7.0035163,5.9964088 11.484768,1.9181465 9.8743209,0.45252151 3.7931149,5.986851 Z" />
|
||||
<rect
|
||||
style="stroke-width:0.524;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;marker-start:url(#Arrow1Lstart);paint-order:normal"
|
||||
id="bar"
|
||||
width="2.2"
|
||||
height="11.263"
|
||||
x="0.5"
|
||||
y="0.36860976"
|
||||
rx="0"
|
||||
ry="0.0015425405" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 877 B |
25
public_html/images/icons/arrow-last.svg
Normal file
@@ -0,0 +1,25 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
viewBox="0 0 12 12"
|
||||
version="1.1"
|
||||
id="arrow_last"
|
||||
width="12"
|
||||
height="12"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<path
|
||||
id="arrow"
|
||||
style="stroke-width:0.584448;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
d="M 2.0731448,11.604466 0.47319466,10.151586 4.9999643,6.0287178 0.51871266,1.9504555 2.1291598,0.48483049 8.2103658,6.01916 Z" />
|
||||
<rect
|
||||
style="stroke-width:0.524;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;marker-start:url(#Arrow1Lstart);paint-order:normal"
|
||||
id="bar"
|
||||
width="2.2"
|
||||
height="11.263"
|
||||
x="-11.503481"
|
||||
y="0.40091875"
|
||||
rx="0"
|
||||
ry="0.0015425405"
|
||||
transform="scale(-1,1)" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 911 B |
15
public_html/images/icons/arrow-next.svg
Normal file
@@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
viewBox="0 0 12 12"
|
||||
version="1.1"
|
||||
id="arrow_next"
|
||||
width="12"
|
||||
height="12"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<path
|
||||
id="arrow"
|
||||
style="stroke-width:0.584448;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
d="M 2.0731448,11.604466 0.47319466,10.151586 4.9999643,6.0287178 0.51871266,1.9504555 2.1291598,0.48483049 8.2103658,6.01916 Z" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 575 B |
15
public_html/images/icons/arrow-previous.svg
Normal file
@@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
viewBox="0 0 12 12"
|
||||
version="1.1"
|
||||
id="arrow_previous"
|
||||
width="12"
|
||||
height="12"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<path
|
||||
id="arrow"
|
||||
style="stroke-width:0.584448;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
d="M 9.9303359,11.572157 11.530286,10.119277 7.0035163,5.9964088 11.484768,1.9181465 9.8743209,0.45252151 3.7931149,5.986851 Z" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 578 B |
BIN
public_html/images/lane-button-background-dark.png
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
public_html/images/main-header-background-dark.png
Normal file
|
After Width: | Height: | Size: 611 KiB |
@@ -1,4 +1,4 @@
|
||||
#!/usr/bin/perl
|
||||
#!/usr/bin/env perl
|
||||
|
||||
# {{{ POD documentation
|
||||
|
||||
|
||||
26
site.cfg
@@ -10,7 +10,7 @@ driver: dbi:SQLite:hpr.db
|
||||
|
||||
# Configure the location of the templates and the generated HTML
|
||||
[app_paths]
|
||||
templates_path: ./templates
|
||||
templates_path: ./templates:./public_html/images/icons
|
||||
output_path: ./public_html
|
||||
|
||||
# Configure the root template page which pulls in the navigation and
|
||||
@@ -26,6 +26,10 @@ media_baseurl: https://hub.hackerpublicradio.org/ccdn.php?filename=/eps/hpr$eps_
|
||||
generator_name: The HPR Robot
|
||||
generator_email: robot.nospam@nospam.hackerpublicradio.org
|
||||
|
||||
# Is safe for work: 0 for true, 1 for false -- if true substitute
|
||||
# variations of Hobby for Hacker
|
||||
is_sfw: 1
|
||||
|
||||
# Configure the navigation menu and the content templates for each page
|
||||
# of the site:
|
||||
#
|
||||
@@ -108,9 +112,9 @@ content: content-sitemap.tpl.html
|
||||
navigation: navigation-main.tpl.html
|
||||
content: content-tags.tpl.html
|
||||
|
||||
[twat_episode]
|
||||
[twt_episode]
|
||||
navigation: navigation-get-shows.tpl.html
|
||||
content: content-twat_episode.tpl.html
|
||||
content: content-twt_episode.tpl.html
|
||||
multipage: true
|
||||
filename: eps/twt[id]/index.html
|
||||
|
||||
@@ -130,6 +134,10 @@ content: content-promote.tpl.html
|
||||
navigation: navigation-about.tpl.html
|
||||
content: content-comments_viewer.tpl.html
|
||||
|
||||
[new_year]
|
||||
navigation: navigation-about.tpl.html
|
||||
content: content-new_year.tpl.html
|
||||
|
||||
[hpr_ogg]
|
||||
root_template: rss.tpl.xml
|
||||
content: rss-hpr.tpl.xml
|
||||
@@ -171,3 +179,15 @@ media_file_extension: spx
|
||||
[comments]
|
||||
root_template: rss-comments.tpl.xml
|
||||
filename: comments.rss
|
||||
|
||||
[correspondent_m3u]
|
||||
root_template: m3u.tpl.m3u8
|
||||
content: m3u-correspondent.tpl.m3u8
|
||||
filename: correspondents/[id]/playlist.m3u8
|
||||
multipage: true
|
||||
|
||||
[series_episodes_m3u]
|
||||
root_template: m3u.tpl.m3u8
|
||||
content: m3u-series_episodes.tpl.m3u8
|
||||
filename: series/[id].m3u8
|
||||
multipage: true
|
||||
|
||||
1848
templates/content-about.tpl.html.orig
Normal file
@@ -3,7 +3,7 @@
|
||||
<!--% PROCESS 'shared-listen-now.tpl.html' %-->
|
||||
<!--% PROCESS "queries-episode.tpl.html" %-->
|
||||
<!--% USE DBI(constants.driver) %-->
|
||||
|
||||
<!--% page_title = "HPR ~ Current comments on the shows" %-->
|
||||
<h2>Comment Viewer</h2>
|
||||
<p>Because of the spammers we have had to turn on comment moderation. Sorry about the delay this will cause.</p>
|
||||
<p><a href="<!--% absolute_path(baseurl) %-->comments.rss">Subscribe</a> to the comment feed.</p>
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
<!--% page_title = "HPR ~ Contact the Community" %-->
|
||||
<article>
|
||||
<header>
|
||||
<h1>Contact</h1>
|
||||
|
||||
@@ -3,68 +3,49 @@
|
||||
<!--% PROCESS 'shared-utils.tpl.html' %-->
|
||||
<!--% PROCESS "queries-correspondent.tpl.html" %-->
|
||||
<!--% USE DBI(constants.driver) %-->
|
||||
<!--% results_hpr_shows = DBI.prepare(query_hpr_shows)
|
||||
%-->
|
||||
<!--% results_hpr_show_count = DBI.prepare(query_hpr_show_count) %-->
|
||||
<!--% hpr_shows_to_count = results_hpr_show_count.execute(id); %-->
|
||||
<!--% hpr_shows = results_hpr_shows.execute(id); %-->
|
||||
<!--% hpr_show_count = 0 %-->
|
||||
<!--% FOREACH show IN hpr_shows_to_count %-->
|
||||
<!--% hpr_show_count = hpr_show_count +1; %-->
|
||||
<!--% END %-->
|
||||
<!--% results_hpr_shows = DBI.prepare(query_hpr_shows) %-->
|
||||
<!--% results_hpr_show_count = DBI.prepare(query_hpr_show_count) %-->
|
||||
<!--% hpr_result_status = results_hpr_show_count.execute(id); %-->
|
||||
<!--% hpr_shows = results_hpr_shows.execute(id); %-->
|
||||
<!--% hpr_show_count = results_hpr_show_count.fetchrow_array %-->
|
||||
|
||||
<!--% query_twat_show_count = DBI.prepare('
|
||||
SELECT id
|
||||
FROM twat_eps AS eps
|
||||
WHERE eps.hostid = ?
|
||||
')
|
||||
%-->
|
||||
<!--% query_twat_shows = DBI.prepare('
|
||||
SELECT
|
||||
eps.id,
|
||||
CASE eps.explicit WHEN 1 THEN \'Explicit\' ELSE \'Clean\' END AS explicit ,
|
||||
eps.date, eps.license, eps.duration,
|
||||
eps.title, eps.summary, eps.tags,
|
||||
eps.notes,
|
||||
hosts.local_image,
|
||||
hosts.hostid,
|
||||
hosts.host, hosts.email, hosts.profile,
|
||||
miniseries.name AS series, miniseries.id AS seriesid
|
||||
FROM twat_eps AS eps
|
||||
INNER JOIN hosts ON eps.hostid = hosts.hostid
|
||||
INNER JOIN miniseries ON eps.series = miniseries.id
|
||||
WHERE hosts.hostid = ?
|
||||
ORDER BY eps.id DESC
|
||||
')
|
||||
%-->
|
||||
<!--% twat_shows_to_count = query_twat_show_count.execute(id); %-->
|
||||
<!--% twat_shows = query_twat_shows.execute(id); %-->
|
||||
<!--% twat_show_count = 0 %-->
|
||||
<!--% FOREACH show IN twat_shows_to_count %-->
|
||||
<!--% twat_show_count = twat_show_count +1; %-->
|
||||
<!--% END %-->
|
||||
<!--% results_hpr_shows = DBI.prepare(query_twt_shows) %-->
|
||||
<!--% results_twt_show_count = DBI.prepare(query_twt_show_count) %-->
|
||||
<!--% twt_result_status = results_twt_show_count.execute(id); %-->
|
||||
<!--% twt_shows = results_hpr_shows.execute(id); %-->
|
||||
<!--% twt_show_count = results_twt_show_count.fetchrow_array %-->
|
||||
|
||||
<!--% hosts = DBI.tie('hosts', 'hostid') %-->
|
||||
<!--% hosts = DBI.tie('hosts', 'hostid') %-->
|
||||
|
||||
<article>
|
||||
<!--% this_host = hosts.$id %-->
|
||||
<h2 class="title">Correspondent</h2>
|
||||
<h2><!--% this_host.host %--></h2>
|
||||
<p><!--% get_avatar(this_host.hostid, this_host.host) %--><br>
|
||||
<label>Host ID</label>: <!--% this_host.hostid %--><br><br>
|
||||
<label>email:</label> <u><!--% this_host.email %--></u><br>
|
||||
<label>profile:</label> <!--% this_host.profile %--><br><br>
|
||||
<label>episodes:</label> <strong><!--% hpr_show_count + twat_show_count %--></strong>
|
||||
</p>
|
||||
<!--% FOREACH hpr_show IN hpr_shows; %-->
|
||||
<!--% this_host = hosts.$id %-->
|
||||
<!--% page_title = "HPR ~ Host: " _ this_host.host %-->
|
||||
<h2 class="title">Correspondent</h2>
|
||||
<div id="host" class="lane">
|
||||
<div id="host_id">
|
||||
<h2><!--% this_host.host %--></h2>
|
||||
<p><!--% get_avatar(this_host.hostid, this_host.host) %--><br>
|
||||
<label>Host ID</label>: <!--% this_host.hostid %--></p>
|
||||
</div>
|
||||
<div id="host_meta">
|
||||
<p><label>email:</label> <u><!--% this_host.email %--></u></p>
|
||||
<div><label>profile:</label> <!--% this_host.profile %--></div>
|
||||
<p><label>episodes:</label> <strong><!--% hpr_show_count + twt_show_count %--></strong></p>
|
||||
<p><a href="<!--% absolute_url(baseurl,'//correspondents') %-->/<!--% zero_pad_left(this_host.hostid) %-->/playlist.m3u8">Download the M3U playlist</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div id="episodes" class="lane stack">
|
||||
<!--% FOREACH hpr_show IN hpr_shows; %-->
|
||||
<article>
|
||||
<!--% show_summary(hpr_show, 'hide_host') %-->
|
||||
<p class="listen-in"><!--% display_listen_in(hpr_show.id) %--></p>
|
||||
</article>
|
||||
<!--% END %-->
|
||||
<!--% FOREACH twt_show IN twt_shows; %-->
|
||||
<article>
|
||||
|
||||
<!--% show_summary(hpr_show, 'hide_host') %-->
|
||||
<p class="listen-in"><!--% display_listen_in(hpr_show.id) %--></p>
|
||||
<!--% END %-->
|
||||
<!--% FOREACH twat_show IN twat_shows; %-->
|
||||
|
||||
<!--% twat_show_summary(twat_show, 'hide_host') %-->
|
||||
<p class="listen-in"><!--% display_listen_in(twat_show.id,"twat") %--></p>
|
||||
<!--% END %-->
|
||||
</article>
|
||||
<p><a href="<!--% absolute_url(baseurl) %-->about.html#so_you_want_to_record_a_podcast">Become a Correspondent</a></p>
|
||||
<!--% twt_show_summary(twt_show, 'hide_host') %-->
|
||||
<p class="listen-in"><!--% display_listen_in(twt_show.id,"twt") %--></p>
|
||||
</article>
|
||||
<!--% END %-->
|
||||
</div>
|
||||
<p><a href="<!--% absolute_url(baseurl) %-->../about.html#so_you_want_to_record_a_podcast">Become a Correspondent</a></p>
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
<!--% PROCESS 'shared-utils.tpl.html' %-->
|
||||
<!--% PROCESS 'shared-avatar.tpl.html' %-->
|
||||
<!--% page_title = "HPR ~ Hosts/Correspondents" %-->
|
||||
<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></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 />
|
||||
<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) %-->
|
||||
<!--% host_cnt = 0 %-->
|
||||
<table id="hosts" class="hosts lane stack">
|
||||
@@ -18,18 +19,17 @@
|
||||
from hosts as h
|
||||
inner join (select hostid, max(date) as date from eps group by hostid) as e
|
||||
on h.hostid = e.hostid
|
||||
order by h.host'
|
||||
order by h.host COLLATE NOCASE asc'
|
||||
) %-->
|
||||
<tr class="lane">
|
||||
<td><!--% get_avatar(host.hostid, host.host, host_cnt > 8) %--></td>
|
||||
|
||||
<td><strong><!--% host.host %--></strong><br>
|
||||
|
||||
Host ID: <a href="<!--% absolute_path(baseurl) %-->correspondents/<!--% zero_pad_left(host.hostid) %-->.html"><!--% host.hostid %--></a></td>
|
||||
<td><a href="<!--% absolute_path(baseurl) %-->correspondents/<!--% zero_pad_left(host.hostid) %-->.html"><strong><!--% host.host %--></strong><br>
|
||||
Host ID: <!--% host.hostid %--></a></td>
|
||||
<td><!--% host.license %--></td>
|
||||
<td><!--% host.date %--></td>
|
||||
</tr><!--% host_cnt = host_cnt + 1 %-->
|
||||
<!--% END %-->
|
||||
</tbody>
|
||||
</table>
|
||||
<p><a href="<!--% absolute_url(baseurl) %-->about.html#so_you_want_to_record_a_podcast">Become a Correspondent</a></p>
|
||||
<p><a href="<!--% absolute_url(baseurl) %-->../about.html#so_you_want_to_record_a_podcast">Become a Correspondent</a></p>
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
<!--% page_title = "HPR ~ Download all the episodes" %-->
|
||||
<article>
|
||||
<header>
|
||||
<h1>Download Archive</h1>
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
<!--% FOREACH episode IN episode_result %-->
|
||||
<!--% in_window = ( episode.id > episode.latest || episode.id < ( episode.latest - 20 ) ? 0 : 1 ) %-->
|
||||
<!--% episode_navigation = step_navigation(baseurl,episode) %-->
|
||||
<!--% page_title = "HPR" _ zero_pad_left(episode.id) _ "::" _ episode.title %-->
|
||||
<article>
|
||||
<header>
|
||||
<h1>hpr<!--% zero_pad_left(episode.id) %--> :: <!--% episode.title %--></h1>
|
||||
@@ -26,7 +27,7 @@ Hosted by <a href="<!--% absolute_path(baseurl) %-->correspondents/<!--% zero_pa
|
||||
<h3><!--% show_series(episode.series, episode.seriesid, "Part of the series") %--></h3>
|
||||
<p><em><!--% episode.series_description %--></em></p>
|
||||
</header>
|
||||
<div><!--% episode.notes %--></div>
|
||||
<div id="show_notes"><!--% episode.notes %--></div>
|
||||
<footer>
|
||||
<p>
|
||||
<!--% episode_navigation %-->
|
||||
@@ -61,11 +62,11 @@ Subscribe to the comments <a href="<!--% absolute_path(baseurl) %-->comments.rss
|
||||
<h2>Leave Comment</h2>
|
||||
<p>
|
||||
<strong>Note to Verbose Commenters</strong><br />
|
||||
If you can't fit everything you want to say in the comment below then you really should <a href="<!--% absolute_url(baseurl) %-->about.html#so_you_want_to_record_a_podcast">record</a> a response show instead.
|
||||
If you can't fit everything you want to say in the comment below then you really should <a href="<!--% absolute_url(baseurl) %-->../../about.html#so_you_want_to_record_a_podcast">record</a> a response show instead.
|
||||
</p>
|
||||
<p>
|
||||
<strong>Note to Spammers</strong><br />
|
||||
All comments are moderated. All links are checked by humans. We strip out all html. Feel free to <a href="<!--% absolute_url(baseurl) %-->about.html#so_you_want_to_record_a_podcast">record</a> a show about yourself, or your industry, or any other topic we may find interesting. <em>We also check shows for spam :)</em>.
|
||||
All comments are moderated. All links are checked by humans. We strip out all html. Feel free to <a href="<!--% absolute_url(baseurl) %-->../../about.html#so_you_want_to_record_a_podcast">record</a> a show about yourself, or your industry, or any other topic we may find interesting. <em>We also check shows for spam :)</em>.
|
||||
</p>
|
||||
<form method="POST" action="<!--% hub_baseurl %-->comment_confirm.php">
|
||||
<fieldset>
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
<!--% PROCESS 'shared-episode-summary.tpl.html' %-->
|
||||
<!--% PROCESS "queries-episodes.tpl.html" %-->
|
||||
<!--% page_title = "HPR ~ All the shows" %-->
|
||||
<h1>Complete Archive of Shows.</h1>
|
||||
<p>
|
||||
All this information is available to the public. Scrape if you wish but if we can format the data for you then we're happy to help.
|
||||
</p>
|
||||
<div class="lane">
|
||||
<div class="lane stack">
|
||||
<!--% USE DBI(constants.driver) %-->
|
||||
<!--% FOREACH episodes IN DBI.query(query_episodes)
|
||||
%-->
|
||||
@@ -19,8 +20,8 @@
|
||||
<!-- Creative Commons License -->
|
||||
<a rel="license" href="https://creativecommons.org/licenses/by-nc-sa/2.5/"><img alt="Creative Commons License" border="0" src="https://creativecommons.org/images/public/somerights20.png" width="88" height="31" /></a><br>The following work is licensed under a <a rel="license" href="https://creativecommons.org/licenses/by-nc-sa/2.5/">Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License</a>.</p>
|
||||
<p>Today With a Techie Radio was brought to you by <a href="https://en.wikipedia.org/wiki/Infonomicon">The Infonomicon Computer Club</a></p>
|
||||
<div class="lane">
|
||||
<!--% FOREACH twat_episode IN DBI.query('
|
||||
<div class="lane stack">
|
||||
<!--% FOREACH twt_episode IN DBI.query('
|
||||
SELECT
|
||||
eps.id,
|
||||
eps.explicit,
|
||||
@@ -29,15 +30,16 @@
|
||||
hosts.hostid,
|
||||
hosts.host, hosts.email, hosts.local_image,
|
||||
miniseries.name AS series, miniseries.id AS seriesid
|
||||
FROM twat_eps as eps
|
||||
FROM twt_eps as eps
|
||||
INNER JOIN hosts ON eps.hostid = hosts.hostid
|
||||
INNER JOIN miniseries ON eps.series = miniseries.id
|
||||
ORDER BY eps.id DESC
|
||||
')
|
||||
%-->
|
||||
<article>
|
||||
<!--% twat_show_summary(twat_episode) %-->
|
||||
<!--% twt_show_summary(twt_episode) %-->
|
||||
</article>
|
||||
<!--% END %-->
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
@@ -1 +1,4 @@
|
||||
<!--% PROCESS 'shared-utils.tpl.html' %-->
|
||||
<!--% IF date.format(date.now, '%m') == 11 || date.format(date.now, '%j') == 1 %-->
|
||||
<!--% PROCESS 'content-new_year_show_announcement.tpl.html' %-->
|
||||
<!--% END %-->
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
<!--% 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 %-->
|
||||
@@ -36,8 +35,8 @@
|
||||
|
||||
<!--% delta = date.calc.N_Delta_YMD(2005,9,19, date.format(date.now, '%Y'),date.format(date.now, '%m'),date.format(date.now, '%d')) %-->
|
||||
<section id="welcome">
|
||||
<header><h2>Welcome</h2></header>
|
||||
<p>Hacker Public Radio is a technology focused podcast that releases shows every weekday Monday to Friday. Our shows are produced by listeners like you and can be on any topic that is of interest to hackers, makers, hobbyists, etc. We are a welcoming community that offers positive feedback and encourages respectful debate.</p>
|
||||
<p><!--% make_sfw(is_sfw, "Hobby", "Hacker") %--> Public Radio is a technology focused podcast that releases shows every weekday Monday to Friday. Our shows are produced by listeners like you and can be on any topic that is of interest to <!--% make_sfw(is_sfw, "hobbyists", "hackers, hobbyists") %-->, makers, etc. We are a welcoming community that offers positive feedback and encourages respectful debate.</p>
|
||||
<!--% PROCESS 'content-index-announcement.tpl.html' %-->
|
||||
<div id="call_for_shows">
|
||||
<!--% display_call_for_shows() %-->
|
||||
</div>
|
||||
@@ -50,7 +49,7 @@
|
||||
<p>Record</p>
|
||||
</a>
|
||||
<br class="no-css">
|
||||
<a class="lane-button" href="https://hub.hackerpublicradio.org/calendar.php">
|
||||
<a class="lane-button" href="<!--% hub_baseurl %-->calendar.php">
|
||||
<img src="<!--% absolute_path(baseurl) %-->images/icons/calendar-2-line.svg" alt="" height="110">
|
||||
<p>Schedule</p>
|
||||
</a>
|
||||
@@ -98,13 +97,14 @@
|
||||
<dl>
|
||||
<!--% FOREACH latest_episodes IN DBI.query(query_latest_episodes)
|
||||
%-->
|
||||
<dt><a href="<!--% absolute_path(baseurl) %-->eps/hpr<!--% zero_pad_left(latest_episodes.id) %-->/index.html">hpr<!--% latest_episodes.id %--> (<!--% latest_episodes.date %-->) :: <!--% latest_episodes.title %--></a> by <!--% latest_episodes.host %--></dt>
|
||||
<dt><a href="<!--% absolute_path(baseurl) %-->eps/hpr<!--% zero_pad_left(latest_episodes.id) %-->/index.html">hpr<!--% latest_episodes.id %--> (<!--% latest_episodes.date %-->) :: <!--% latest_episodes.title %--></a> by <a href="<!--% absolute_path(baseurl) %-->correspondents/<!--% zero_pad_left(latest_episodes.hostid) %-->.html"><!--% latest_episodes.host %--></a></dt>
|
||||
<dd>
|
||||
<!--% latest_episodes.summary %-->
|
||||
</dd>
|
||||
<!--% host_cnt = host_cnt + 1 %-->
|
||||
<!--% END %-->
|
||||
</dl>
|
||||
<p><a href="<!--% absolute_path(baseurl) %-->eps/index.html">More Episodes…</a></p>
|
||||
</section>
|
||||
<section id="latest_comments">
|
||||
<header><h2>Latest Comments</h2></header>
|
||||
@@ -139,5 +139,6 @@
|
||||
<dd>on hpr<!--% item.eps_id %--> (<!--% item.episode_date %-->) "<!--% item.episode_title %-->" by <!--% item.host %--></dd>
|
||||
<!--% END %-->
|
||||
</dl>
|
||||
<p><a href="<!--% absolute_path(baseurl) %-->comments_viewer.html">More Comments…</a></p>
|
||||
</section>
|
||||
</section>
|
||||
|
||||
112
templates/content-new_year.tpl.html
Normal file
@@ -0,0 +1,112 @@
|
||||
<!--% PROCESS 'shared-utils.tpl.html' %-->
|
||||
|
||||
<h1><u>The <!--% get_new_year_show_ordinal_year %--> Annual 26 Hour New Year's Eve Show</u></h1>
|
||||
<h2>Welcome every <a href="https://www.timeanddate.com/counters/multicountdown.html">TimeZone</a>!</h2>
|
||||
<p>
|
||||
<em>If you keep talking, we'll keep recording.</em>
|
||||
</p>
|
||||
<p>For those who don't know, on New Year's Eve <!--% get_new_year_show_start() %-->, we will have a recording going on the HPR Mumble server for anyone to come on and say "Happy New Year" and talk about whatever they want.
|
||||
We will leave the recording going until at least <!--% get_new_year_show_end() %-->, and keep recording until the conversation stops.</p>
|
||||
<p>
|
||||
So please stop in. Say "Hi" and maybe join in the conversation with other HPR listeners and contributors. It's always a good time!!<br />
|
||||
</p>
|
||||
|
||||
<h1>Listen to the live stream</h1>
|
||||
|
||||
<p>
|
||||
<!--% IF ((date.format(date.now, '%m') == 12 && date.format(date.now, '%d') > 28) || date.format(date.now, '%j') == 1) %-->
|
||||
<img src="images/livestream.png" /><br />
|
||||
<audio controls autoplay>
|
||||
<source src="https://files.shownotes.ooguy.com/stream" type="audio/mpeg" >
|
||||
</audio> <br />
|
||||
<a href="https://files.shownotes.ooguy.com/stream">https://files.shownotes.ooguy.com/stream</a><br />
|
||||
<a href="https://hackerpublicradio.org/live">https://hackerpublicradio.org/live</a><br />
|
||||
<!--% ELSE %-->
|
||||
<audio controls preload="none">
|
||||
<source src="<!--% absolute_path(baseurl) %-->promos/hpr-nye-promo.ogg" type="audio/ogg">
|
||||
</audio>
|
||||
<!--% END %-->
|
||||
</p>
|
||||
|
||||
<h1>Join the conversation on Mumble</h1>
|
||||
|
||||
<h2>Ground Rules</h2>
|
||||
<h3>Use Push to Talk, and a Headset</h3>
|
||||
|
||||
<p>With so many people on the chat, you must use push to talk.
|
||||
You also need to use a Headset so the audio of the room is not fed back.
|
||||
If there is a problem with your setup, then please drop and listen to the stream.
|
||||
Trying to correct poor audio in post is a lot of work, that someone else will have to do.</p>
|
||||
|
||||
<h3>Be Polite</h3>
|
||||
|
||||
<p>When you enter the room please do not interrupt ongoing conversations.
|
||||
Wait for a pause in the conversation and say Hi.
|
||||
It's quite common for people you might not know to join as they wish to speak with other people in the room.
|
||||
They may have been waiting all year for the chance to meet, so please give people the space to have these conversations.</p>
|
||||
|
||||
<h3>Do not announce the Time Zones</h3>
|
||||
|
||||
<p>As there are so <a moz-do-not-send="true" href="https://en.wikipedia.org/wiki/Time_zone">many Time Zones</a> there is no need to interrupt the conversation to announce every one.
|
||||
If you are joining from a time zone that is currently switching to the New Year, then please wait for a pause and wish people Happy New Year.</p>
|
||||
|
||||
<h3>Don't Fill Dead Air</h3>
|
||||
|
||||
<p>This is a relaxed meet-up, and not a traditional "Radio Broadcast".
|
||||
If there are no conversations going on at a given time, don't feel the need to "fill dead air".
|
||||
Before the recording is posted as a podcast the <a href="https://manual.audacityteam.org/man/truncate_silence.html">silences will be truncated</a>.</p>
|
||||
|
||||
<h3>Do not monopolise the conversation</h3>
|
||||
|
||||
<p>Please be mindful that you (or your beverage of choice) may be speaking too much ;-).</p>
|
||||
|
||||
<h3>You are a Guest</h3>
|
||||
|
||||
<p>Be respectful, and remember that attendance on the New Year Show does not <a href="https://hub.hackerpublicradio.org/calendar.php">constitute a show</a>.</p>
|
||||
|
||||
<h3>CC-BY-SA</h3>
|
||||
|
||||
<p>The recording will be released as a podcast on HPR 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.
|
||||
The recordings will be released mid year, when there is a lull in submissions.</p>
|
||||
|
||||
<h2>Mumble Setup</h2>
|
||||
|
||||
<p>Already have Mumble installed, then <a href="mumble://chatter.skyehaven.net:64738/Hacker%20Public%20Radio?version=1.2.0">this link will bring you to the HPR Room</a>.</p>
|
||||
<p>Get the PC Client <a href="https://wiki.mumble.info/wiki/Main_Page">https://wiki.mumble.info/wiki/Main_Page</a><br />
|
||||
<p>Get the Android Client Mumla <a href="https://f-droid.org/packages/se.lublin.mumla">https://f-droid.org/packages/se.lublin.mumla</a></p>
|
||||
<p>Then join the Server: <strong>chatter.skyehaven.net</strong><br />
|
||||
Port: <strong>64738</strong><br />
|
||||
Channel: <strong>HPR</strong></p>
|
||||
<p><strong>Use Push to Talk</strong>. With so many people hands free is not an option.</p>
|
||||
<p>For those who have never used Mumble before, see this <a href="https://hackerpublicradio.org/mumble-howto">how-to explaining the setup of the desktop Mumble client</a>,
|
||||
or listen to <a href="https://hackerpublicradio.org/eps.php?id=3503">hpr3503 :: Configuring Mumble</a>.</p>
|
||||
|
||||
<h3>Video Only (no audio) server</h3>
|
||||
|
||||
<p>
|
||||
For those who wish to see the video of some of the participants we have a jitsi server.<br />
|
||||
<a href="https://jitsi.minnix.dev/hprnye">https://jitsi.minnix.dev/hprnye</a><br />
|
||||
<strong>Please make sure your mic is muted!</strong>
|
||||
</p>
|
||||
|
||||
<h3>Add to the Show-notes</h2>
|
||||
<p>
|
||||
<strong>Please help fill out the show notes</strong><br />
|
||||
<a href="https://shownotes.lugcast.mywire.org/p/hpr-nye-2026">https://shownotes.lugcast.mywire.org/p/hpr-nye-2026</a><br />
|
||||
We are using Etherpad for people to share links and info to things they are discussing.
|
||||
The Etherpad will be used for the HPR audio shownotes so please feel free to add to it.
|
||||
The entire event will be broken into 2 to 3 hour segments and made available as HPR episodes.<br/>
|
||||
<em>This really, really helps us out to post the show faster !</em>
|
||||
</p>
|
||||
|
||||
<h2>History</h2>
|
||||
|
||||
<p>Suggested by <a href="https://hackerpublicradio.org/correspondents/0128.html">pokey</a> in 2011.
|
||||
As podcasting tends to be a one way conversation, he thought it would be nice to get all the FLOSS, Linux, Free Culture, podcasters and Listeners in one place to get together and chat in person.
|
||||
Initially it was planned to be just a few hours, but we kept missing members from other parts of the world.
|
||||
The show was extended to welcome ever time zone to the New Year, which actually turns out to be <a href="https://en.wikipedia.org/wiki/List_of_UTC_offsets">38 Timezones</a>, over 26 Hours.</p>
|
||||
|
||||
<p>So we will record for at least 26 Hours, but will keep the recording going for an "After Show".
|
||||
Some years the after show has been even longer than the show itself.
|
||||
While this is on the HPR Site, it is entirely a community initiative which is supported heavily by the fine folks over at the <a href="https://linuxlugcast.com/">LinuxLugCast</a>, with the Mumble Server been provided by <a href="https://hackerpublicradio.org/correspondents/0228.html">Delwin</a>.</p>
|
||||
|
||||
30
templates/content-new_year_show_announcement.tpl.html
Normal file
@@ -0,0 +1,30 @@
|
||||
<!--% PROCESS 'shared-utils.tpl.html' %-->
|
||||
<div class="lane stack">
|
||||
<article>
|
||||
<header>
|
||||
<h2 class="title"><a href="<!--% absolute_path(baseurl) %-->new_year.html">The <!--% get_new_year_show_ordinal_year %--> Annual 26 Hour New Year's Eve Show</a></h2>
|
||||
</header>
|
||||
<h3>Welcome every <a href="https://www.timeanddate.com/counters/multicountdown.html">TimeZone</a>!</h3>
|
||||
<p>
|
||||
<em>If you keep talking, we'll keep recording.</em>
|
||||
</p>
|
||||
<p>For those who don't know, on New Year's Eve <!--% get_new_year_show_start() %-->, we will have a recording going on the HPR Mumble server for anyone to come on and say "Happy New Year" and talk about whatever they want.
|
||||
We will leave the recording going until at least <!--% get_new_year_show_end() %-->, and keep recording until the conversation stops.</p>
|
||||
<p>
|
||||
So please stop in. Say "Hi" and maybe join in the conversation with other HPR listeners and contributors. It's always a good time!!<br>
|
||||
<!--% IF date.format(date.now, '%m') == 11 || date.format(date.now, '%d') < 29 %-->
|
||||
<audio controls preload="none">
|
||||
<source src="<!--% absolute_path(baseurl) %-->promos/hpr-nye-promo.ogg" type="audio/ogg">
|
||||
</audio>
|
||||
<!--% ELSE %-->
|
||||
<img src="images/livestream.png" /><br />
|
||||
<audio controls autoplay>
|
||||
<source src="https://files.shownotes.ooguy.com/stream" type="audio/mpeg" >
|
||||
</audio> <br />
|
||||
<a href="https://files.shownotes.ooguy.com/stream">https://files.shownotes.ooguy.com/stream</a><br />
|
||||
<a href="https://hackerpublicradio.org/live">https://hackerpublicradio.org/live</a><br />
|
||||
<!--% END %-->
|
||||
</p>
|
||||
<p><a href="<!--% absolute_path(baseurl) %-->new_year.html">More information…</a></p>
|
||||
</article>
|
||||
</div>
|
||||
@@ -1,18 +1,9 @@
|
||||
<!--% page_title = "HPR ~ Find a show" %-->
|
||||
<section id="search">
|
||||
<header>
|
||||
<h1>Search HPR.</h1>
|
||||
</header>
|
||||
<div class="lane">
|
||||
<form name="google-search" method="get" action="https://www.google.com/search">
|
||||
<fieldset><legend>Google</legend>
|
||||
<input type="hidden" name="sitesearch" value="https://www.hackerpublicradio.org/" />
|
||||
<input name="q" type="text" placeholder="Search HPR with Google"/>
|
||||
<input type="submit" name="sa" value="Search HPR with Google" />
|
||||
<p>
|
||||
<a href="https://www.google.com/policies/privacy/">privacy policy</a>
|
||||
</p>
|
||||
</fieldset>
|
||||
</form>
|
||||
<form method="get" id="search" action="https://duckduckgo.com/">
|
||||
<fieldset><legend>DuckDuckGo</legend>
|
||||
<input type="hidden" name="sites" value="https://www.hackerpublicradio.org/"/>
|
||||
@@ -26,6 +17,16 @@
|
||||
</p>
|
||||
</fieldset>
|
||||
</form>
|
||||
<form name="google-search" method="get" action="https://www.google.com/search">
|
||||
<fieldset><legend>Google</legend>
|
||||
<input type="hidden" name="sitesearch" value="https://www.hackerpublicradio.org/" />
|
||||
<input name="q" type="text" placeholder="Search HPR with Google"/>
|
||||
<input type="submit" name="sa" value="Search HPR with Google" />
|
||||
<p>
|
||||
<a href="https://www.google.com/policies/privacy/">privacy policy</a>
|
||||
</p>
|
||||
</fieldset>
|
||||
</form>
|
||||
<form method="get" action="https://www.bing.com/search">
|
||||
<fieldset><legend>Bing</legend>
|
||||
<input type="hidden" name="cp" value="utf-8" />
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<!--% PROCESS 'shared-utils.tpl.html' %-->
|
||||
<!--% PROCESS "queries-series.tpl.html" %-->
|
||||
<!--% USE DBI(constants.driver) %-->
|
||||
<!--% page_title = "HPR ~ Show series" %-->
|
||||
<h1 class="title">In-Depth Series</h1>
|
||||
<div class="lane stack">
|
||||
<!--% FOREACH series IN DBI.query(query_episodes) %-->
|
||||
@@ -13,6 +14,7 @@
|
||||
<li>Date of earliest show: <!--% series.earliest_show %--></li>
|
||||
<li>Date of latest show: <!--% series.latest_show %--></li>
|
||||
<li>Series RSS feeds: <a href="<!--% absolute_path(baseurl) %-->hpr_ogg_rss.php?series=<!--% series.id %-->">ogg</a>, <a href="<!--% absolute_path(baseurl) %-->hpr_spx_rss.php?series=<!--% series.id %-->">spx</a>, <a href="<!--% absolute_path(baseurl) %-->hpr_mp3_rss.php?series=<!--% series.id %-->">mp3</a></li>
|
||||
<li><a href="<!--% absolute_url(baseurl,'//series') %-->/<!--% zero_pad_left(series.id) %-->.m3u8">Download the M3U playlist</a></li>
|
||||
</ul>
|
||||
<div class="series-description"><!--% series.description %--></div>
|
||||
</article>
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
%-->
|
||||
<!--% series_result = query_series.execute(id) %-->
|
||||
<!--% FOREACH series IN series_result %-->
|
||||
<!--% page_title = "HPR ~ Series: " _ series.name %-->
|
||||
<h1 class="title">In-Depth Series: <!--% series.name %--></h1>
|
||||
<ul>
|
||||
<li>Number of episodes: <!--% series.number_of_episodes %--></li>
|
||||
@@ -13,6 +14,7 @@
|
||||
<li>Date of earliest show: <!--% series.earliest_show %--></li>
|
||||
<li>Date of latest show: <!--% series.latest_show %--></li>
|
||||
<li>Series RSS feeds: <a href="<!--% absolute_path(baseurl) %-->hpr_ogg_rss.php?series=<!--% series.id %-->&full=1&gomax=1">ogg</a>, <a href="<!--% absolute_path(baseurl) %-->hpr_spx_rss.php?series=<!--% series.id %-->&full=1&gomax=1">spx</a>, <a href="<!--% absolute_path(baseurl) %-->hpr_mp3_rss.php?series=<!--% series.id %-->&full=1&gomax=1">mp3</a></li>
|
||||
<li><a href="<!--% absolute_url(baseurl,'//series') %-->/<!--% zero_pad_left(series.id) %-->.m3u8">Download the M3U playlist</a></li>
|
||||
</ul>
|
||||
<p><em><!--% series.description %--></em></p>
|
||||
<section id="series_episodes" class="lane stack">
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!--% PROCESS 'shared-utils.tpl.html' %-->
|
||||
<!--% page_title = "HPR ~ Sitemap" %-->
|
||||
<h1>Sitemap</h1>
|
||||
<ul>
|
||||
<li><a href="<!--% hub_baseurl %-->calendar.php"><strong>⇧Upload⇧</strong></a> ← Upload Your Show</li>
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
<!--% page_title = "HPR ~ Subscribe to our feeds" %-->
|
||||
<h1>RSS Syndication</h1>
|
||||
<h2>Subscribe to our Feeds</h2>
|
||||
<p>
|
||||
@@ -78,7 +79,7 @@
|
||||
<div>
|
||||
<hr class="no-css">
|
||||
<h1>Other Download Options</h1>
|
||||
<div class="lane syndication">
|
||||
<div class="lane stack">
|
||||
<article>
|
||||
<header>
|
||||
<h2>Site Replication Sources</h2>
|
||||
|
||||
@@ -6,23 +6,23 @@
|
||||
<!--% query_episodes = DBI.prepare('
|
||||
WITH episode_maxmin AS (
|
||||
SELECT MAX(id) AS \'latest\', MIN(id) AS \'earliest\', ? AS \'id\'
|
||||
FROM twat_eps AS eps
|
||||
FROM twt_eps AS eps
|
||||
),
|
||||
episode_date AS (
|
||||
SELECT eps.date
|
||||
FROM twat_eps AS eps
|
||||
FROM twt_eps AS eps
|
||||
WHERE eps.id = ?
|
||||
),
|
||||
episode_previous AS (
|
||||
SELECT MAX(id) AS \'previous\', ? AS \'id\'
|
||||
FROM twat_eps AS eps
|
||||
FROM twt_eps AS eps
|
||||
INNER JOIN episode_date
|
||||
ON eps.date < episode_date.date
|
||||
WHERE eps.id > 1
|
||||
),
|
||||
episode_next AS (
|
||||
SELECT MIN(id) AS \'next\', ? AS \'id\'
|
||||
FROM twat_eps AS eps
|
||||
FROM twt_eps AS eps
|
||||
INNER JOIN episode_date
|
||||
ON eps.date > episode_date.date
|
||||
)
|
||||
@@ -34,7 +34,7 @@
|
||||
hosts.hostid, hosts.host,
|
||||
miniseries.name AS \'series\', miniseries.id AS \'seriesid\',
|
||||
miniseries.description AS \'series_description\'
|
||||
FROM twat_eps AS eps
|
||||
FROM twt_eps AS eps
|
||||
INNER JOIN hosts ON eps.hostid = hosts.hostid
|
||||
INNER JOIN miniseries ON eps.series = miniseries.id
|
||||
INNER JOIN episode_maxmin ON eps.id = episode_maxmin.id
|
||||
@@ -46,6 +46,7 @@
|
||||
<!--% episode_result = query_episodes.execute(id, id, id, id, id) %-->
|
||||
<!--% FOREACH episode IN episode_result %-->
|
||||
<!--% episode_navigation = step_navigation(baseurl,episode,"twt") %-->
|
||||
<!--% page_title = "TWT" _ episode.id _ "::" _ episode.title %-->
|
||||
<article>
|
||||
<header>
|
||||
<h1><!--% episode.id %--> :: <!--% episode.title %--></h1>
|
||||
@@ -55,8 +56,8 @@
|
||||
<p><!--% show_avatar(episode.hostid, episode.host) %-->
|
||||
Hosted by <a href="<!--% absolute_path(baseurl) %-->correspondents/<!--% zero_pad_left(episode.hostid) %-->.html"><!--% episode.host %--></a> on <span><!--% day_and_date(episode.date) %--></span> is flagged as <span><!--% display_explicit(episode.explicit) %--></span> and is released under a <span><!--% episode.license %--> license</span>. <br>
|
||||
<!--% display_tags(episode.tags) %--> <br>
|
||||
<!--% listen_now(episode, "twat", baseurl, media_baseurl) %-->
|
||||
<!--% display_listen_in(episode.id, "twat") %-->
|
||||
<!--% listen_now(episode, "twt", baseurl, media_baseurl) %-->
|
||||
<!--% display_listen_in(episode.id, "twt") %-->
|
||||
</p>
|
||||
<h3><!--% show_series(episode.series, episode.seriesid, "Part of the series") %--></h3>
|
||||
<p><em><!--% episode.series_description %--></em></p>
|
||||
7
templates/ids-correspondent_m3u.tpl.html
Normal file
@@ -0,0 +1,7 @@
|
||||
<!--% USE DBI(constants.driver) %-->
|
||||
<!--% FOREACH host IN DBI.query(
|
||||
'select h.hostid from hosts as h'
|
||||
) %-->
|
||||
,<!--% host.hostid %-->
|
||||
<!--% END %-->
|
||||
|
||||
7
templates/ids-series_episodes_m3u.tpl.html
Normal file
@@ -0,0 +1,7 @@
|
||||
<!--% USE DBI(constants.driver, constants.user, constants.password) %-->
|
||||
<!--% FOREACH series IN DBI.query(
|
||||
'select s.id from miniseries as s'
|
||||
) %-->
|
||||
,<!--% series.id %-->
|
||||
<!--% END %-->
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<!--% USE DBI(constants.driver) %-->
|
||||
<!--% FOREACH episode IN DBI.query(
|
||||
'select eps.id from twat_eps AS eps'
|
||||
'select eps.id from twt_eps AS eps'
|
||||
) %-->
|
||||
,<!--% episode.id %-->
|
||||
<!--% END %-->
|
||||
24
templates/m3u-correspondent.tpl.m3u8
Normal file
@@ -0,0 +1,24 @@
|
||||
<!--% PROCESS 'shared-utils.tpl.html' %-->
|
||||
<!--% PROCESS 'queries-correspondent.tpl.html' %-->
|
||||
<!--% USE DBI(constants.driver) %-->
|
||||
<!--% results_hpr_shows = DBI.prepare(query_hpr_shows) %-->
|
||||
<!--% hpr_shows = results_hpr_shows.execute(id); %-->
|
||||
<!--% FOREACH hpr_show IN hpr_shows; %-->
|
||||
#EXTINF: <!--% hpr_show.duration %-->,<!--% hpr_show.host %--> - <!--% hpr_show.title %-->
|
||||
|
||||
|
||||
<!--% media_path(hpr_show.id, 'hpr', 'mp3', baseurl, media_baseurl) %-->
|
||||
|
||||
|
||||
<!--% END %-->
|
||||
<!--% results_hpr_shows = DBI.prepare(query_twt_shows) %-->
|
||||
<!--% twt_result_status = results_twt_show_count.execute(id); %-->
|
||||
<!--% twt_shows = results_hpr_shows.execute(id); %-->
|
||||
<!--% FOREACH hpr_show IN twt_shows; %-->
|
||||
#EXTINF: <!--% hpr_show.duration %-->,<!--% hpr_show.host %--> - <!--% hpr_show.title %-->
|
||||
|
||||
|
||||
<!--% media_path(hpr_show.id, 'twt', 'mp3', baseurl, media_baseurl) %-->
|
||||
|
||||
|
||||
<!--% END %-->
|
||||
13
templates/m3u-series_episodes.tpl.m3u8
Normal file
@@ -0,0 +1,13 @@
|
||||
<!--% PROCESS 'shared-utils.tpl.html' %-->
|
||||
<!--% PROCESS 'queries-series_episodes.tpl.html' %-->
|
||||
<!--% USE DBI(constants.driver) %-->
|
||||
<!--% results_hpr_shows = DBI.prepare(query_shows_sql) %-->
|
||||
<!--% hpr_shows = results_hpr_shows.execute(id); %-->
|
||||
<!--% FOREACH hpr_show IN hpr_shows; %-->
|
||||
#EXTINF: <!--% hpr_show.duration %-->,<!--% hpr_show.host %--> - <!--% hpr_show.title %-->
|
||||
|
||||
|
||||
<!--% media_path(hpr_show.id, 'hpr', 'mp3', baseurl, media_baseurl) %-->
|
||||
|
||||
|
||||
<!--% END %-->
|
||||
2
templates/m3u.tpl.m3u8
Normal file
@@ -0,0 +1,2 @@
|
||||
#EXTM3U
|
||||
<!--% INCLUDE $content %-->
|
||||
@@ -1,9 +1,18 @@
|
||||
<!--% PROCESS 'shared-utils.tpl.html' %-->
|
||||
<!--% USE date %-->
|
||||
<!--% page_title = make_sfw(is_sfw, "Hobby", "Hacker") _ " Public Radio (HPR) ~ The Technology Community Podcast" %-->
|
||||
<!--% WRAPPER page
|
||||
# The default page_title variable set above can be overridden
|
||||
# in each individual $content template (i.e. templates/conten-<template name>.tpl.html)
|
||||
# processed below.
|
||||
%-->
|
||||
<!--% PROCESS $content %-->
|
||||
<!--% END %-->
|
||||
<!--% BLOCK page %-->
|
||||
<!DOCTYPE HTML>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>Hacker Public Radio ~ The Technology Community Podcast</title>
|
||||
<title><!--% page_title %--></title>
|
||||
<!--% IF baseurl %-->
|
||||
<base href="<!--% baseurl %-->">
|
||||
<!--% END %-->
|
||||
@@ -11,12 +20,12 @@
|
||||
<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="description" content="<!--% make_sfw(is_sfw, "Hobby", "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 <!--% make_sfw(is_sfw, "makers", "hackers") %--> and hobbyists." />
|
||||
<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="alternate" type="application/rss+xml" title="<!--% make_sfw(is_sfw, "Hobby", "Hacker") %--> Public Radio Opus RSS" href="<!--% absolute_path(baseurl) %-->hpr_opus_rss.php" />
|
||||
<link rel="alternate" type="application/rss+xml" title="<!--% make_sfw(is_sfw, "Hobby", "Hacker") %--> Public Radio Ogg Vorbis RSS" href="<!--% absolute_path(baseurl) %-->hpr_ogg_rss.php" />
|
||||
<link rel="alternate" type="application/rss+xml" title="<!--% make_sfw(is_sfw, "Hobby", "Hacker") %--> Public Radio MP3 RSS" href="<!--% absolute_path(baseurl) %-->hpr_mp3_rss.php" />
|
||||
<link rel="alternate" type="application/rss+xml" title="<!--% make_sfw(is_sfw, "Hobby", "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="/css/hpr.css" rel="stylesheet" />
|
||||
<!--[if IE]>
|
||||
@@ -41,7 +50,7 @@
|
||||
<hgroup id="title">
|
||||
<h1 id="site_acronym"><a href="<!--% absolute_path(baseurl) %-->index.html">HPR</a></h1>
|
||||
<p id="site_name">
|
||||
<a href="<!--% absolute_path(baseurl) %-->correspondents/index.html">H</a>acker
|
||||
<a href="<!--% absolute_path(baseurl) %-->correspondents/index.html">H</a><!--% make_sfw(is_sfw, "obby", "acker") %-->
|
||||
<a href="<!--% absolute_path(baseurl) %-->comments_viewer.html">P</a>ublic
|
||||
<a href="<!--% absolute_path(baseurl) %-->syndication.html">R</a>adio
|
||||
</p>
|
||||
@@ -54,7 +63,8 @@
|
||||
</div>
|
||||
</header>
|
||||
<main id="main_content" role="main">
|
||||
<!--% INCLUDE $content %-->
|
||||
<!--% content %-->
|
||||
<!--% page_title = "acck" %-->
|
||||
</main>
|
||||
<footer role="contentinfo">
|
||||
<hr class="no-css">
|
||||
@@ -70,3 +80,4 @@
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
<!--% END %-->
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
<!--% query_hpr_shows = '
|
||||
<!--% query_hpr_shows = 'WITH
|
||||
comment_tallies AS (
|
||||
SELECT
|
||||
eps_id,
|
||||
COUNT(eps_id) AS eps_tally
|
||||
FROM comments
|
||||
GROUP BY eps_id
|
||||
)
|
||||
SELECT
|
||||
eps.id,
|
||||
eps.explicit,
|
||||
eps.date, eps.license, eps.duration,
|
||||
@@ -8,17 +15,44 @@
|
||||
hosts.local_image,
|
||||
hosts.hostid,
|
||||
hosts.host, hosts.email, hosts.profile,
|
||||
miniseries.name AS series, miniseries.id AS seriesid
|
||||
miniseries.name AS series, miniseries.id AS seriesid,
|
||||
COALESCE(comment_tallies.eps_tally,0) AS commentsTally
|
||||
FROM eps
|
||||
INNER JOIN hosts ON eps.hostid = hosts.hostid
|
||||
INNER JOIN miniseries ON eps.series = miniseries.id
|
||||
LEFT JOIN comment_tallies ON eps.id = comment_tallies.eps_id
|
||||
WHERE hosts.hostid = ? AND eps.date < date(\'now\', \'+1 days\')
|
||||
ORDER BY eps.id + 0 DESC
|
||||
'
|
||||
%-->
|
||||
<!--% query_hpr_show_count = '
|
||||
SELECT id
|
||||
SELECT COUNT(id) as Tally
|
||||
FROM eps
|
||||
WHERE eps.hostid = ? AND eps.date < date(\'now\', \'+1 days\')
|
||||
'
|
||||
%-->
|
||||
<!--% query_twt_show_count = '
|
||||
SELECT COUNT(id) as Tally
|
||||
FROM twt_eps AS eps
|
||||
WHERE eps.hostid = ?
|
||||
'
|
||||
%-->
|
||||
<!--% query_twt_shows = '
|
||||
SELECT
|
||||
eps.id,
|
||||
CASE eps.explicit WHEN 1 THEN \'Explicit\' ELSE \'Clean\' END AS explicit ,
|
||||
eps.date, eps.license, eps.duration,
|
||||
eps.title, eps.summary, eps.tags,
|
||||
eps.notes,
|
||||
hosts.local_image,
|
||||
hosts.hostid,
|
||||
hosts.host, hosts.email, hosts.profile,
|
||||
miniseries.name AS series, miniseries.id AS seriesid
|
||||
FROM twt_eps AS eps
|
||||
INNER JOIN hosts ON eps.hostid = hosts.hostid
|
||||
INNER JOIN miniseries ON eps.series = miniseries.id
|
||||
WHERE hosts.hostid = ?
|
||||
ORDER BY eps.id DESC
|
||||
'
|
||||
%-->
|
||||
|
||||
|
||||
@@ -1,14 +1,24 @@
|
||||
<!--% query_episodes = 'SELECT
|
||||
<!--% query_episodes = 'WITH
|
||||
comment_tallies AS (
|
||||
SELECT
|
||||
eps_id,
|
||||
COUNT(eps_id) AS eps_tally
|
||||
FROM comments
|
||||
GROUP BY eps_id
|
||||
)
|
||||
SELECT
|
||||
eps.id,
|
||||
eps.explicit,
|
||||
eps.date, eps.license, eps.title, eps.summary,
|
||||
eps.duration, eps.notes, eps.tags,
|
||||
hosts.hostid,
|
||||
hosts.host, hosts.email, hosts.local_image,
|
||||
miniseries.name AS series, miniseries.id AS seriesid
|
||||
miniseries.name AS series, miniseries.id AS seriesid,
|
||||
COALESCE(comment_tallies.eps_tally,0) AS commentsTally
|
||||
FROM eps
|
||||
INNER JOIN hosts ON eps.hostid = hosts.hostid
|
||||
INNER JOIN miniseries ON eps.series = miniseries.id
|
||||
LEFT JOIN comment_tallies ON eps.id = comment_tallies.eps_id
|
||||
WHERE eps.date <= date(\'now\')
|
||||
ORDER BY eps.id + 0 DESC'
|
||||
%-->
|
||||
|
||||
@@ -14,14 +14,24 @@
|
||||
WHERE miniseries.id = ?
|
||||
ORDER BY name'
|
||||
%-->
|
||||
<!--% query_shows_sql = 'SELECT
|
||||
<!--% query_shows_sql = 'WITH
|
||||
comment_tallies AS (
|
||||
SELECT
|
||||
eps_id,
|
||||
COUNT(eps_id) AS eps_tally
|
||||
FROM comments
|
||||
GROUP BY eps_id
|
||||
)
|
||||
SELECT
|
||||
id, date, title,
|
||||
duration, summary, notes,
|
||||
explicit, eps.license, tags,
|
||||
hosts.host, hosts.hostid
|
||||
hosts.host, hosts.hostid,
|
||||
COALESCE(comment_tallies.eps_tally,0) AS commentsTally
|
||||
FROM eps
|
||||
INNER JOIN hosts
|
||||
ON eps.hostid = hosts.hostid
|
||||
LEFT JOIN comment_tallies ON eps.id = comment_tallies.eps_id
|
||||
WHERE series = ? AND eps.date < date(\'now\', \'+1 days\')
|
||||
ORDER BY eps.id DESC
|
||||
'
|
||||
|
||||
@@ -1 +1 @@
|
||||
<!--% query_tags = 'SELECT id, tags FROM eps' %-->
|
||||
<!--% query_tags = 'SELECT id, tags FROM eps WHERE eps.date <= date(\'now\')' %-->
|
||||
|
||||
@@ -50,11 +50,11 @@
|
||||
%-->
|
||||
|
||||
<item>
|
||||
<title><!--% item.comment_author_name | html_strip | xml_entity %--> says: <!--% item.comment_title | html_strip | xml_entity %--></title>
|
||||
<author>feedback.nospam@nospam.hackerpublicradio.org (<!--% item.comment_author_name | html_strip | xml_entity %-->)</author>
|
||||
<title><!--% item.comment_author_name | html_strip %--> says: <!--% item.comment_title | html_strip %--></title>
|
||||
<author>feedback.nospam@nospam.hackerpublicradio.org (<!--% item.comment_author_name | html_strip %-->)</author>
|
||||
<link><!--% absolute_url(http_baseurl) %-->eps/hpr<!--% zero_pad_left(item.eps_id) %-->/index.html#comments</link>
|
||||
<description><![CDATA[<strong>
|
||||
RE: hpr<!--% zero_pad_left(item.eps_id) %-->::<!--% item.episode_date %--> <em><!--% item.episode_title | html_strip | xml_entity %--></em> by <a href="<!--% absolute_url(http_baseurl) %-->correspondents/<!--% zero_pad_left(item.host_id) %-->.html"><!--% item.host %--></a></strong><!--% rss_show_series(item.series_name, item.series_id) | html_strip | xml_entity %--><br />
|
||||
RE: hpr<!--% zero_pad_left(item.eps_id) %-->::<!--% item.episode_date %--> <em><!--% item.episode_title | html_strip %--></em> by <a href="<!--% absolute_url(http_baseurl) %-->correspondents/<!--% zero_pad_left(item.host_id) %-->.html"><!--% item.host %--></a></strong><!--% rss_show_series(item.series_name, item.series_id) | html_strip %--><br />
|
||||
<!--% display_episode_duration(item.episode_duration) %--><!--% display_listen_in(item.eps_id) %--><br /><!--% item.comment_text FILTER html_line_break %-->
|
||||
]]></description>
|
||||
<pubDate><!--% format_feed_date(item.comment_timestamp) %--></pubDate>
|
||||
|
||||
@@ -41,7 +41,7 @@ or
|
||||
<span><label>Flag:</label> <!--% display_explicit(show.explicit) %-->.</span>
|
||||
<span><!--% show_series(show.series, show.seriesid) %--></span> <br>
|
||||
<!--% IF hide_tags == "" %--><!--% display_tags(show.tags) %--><!--% END %-->
|
||||
<!--% IF show.comentsTally || show.commentsTally == 0 %-->
|
||||
<!--% IF show.commentsTally || show.commentsTally == 0 %-->
|
||||
<span><label>Comments:</label> <!--% display_comments_tally(show.id, show.commentsTally) %--></span>
|
||||
<!--% END %-->
|
||||
<!--% END %-->
|
||||
@@ -56,7 +56,7 @@ or
|
||||
<p class="summary"><!--% show.summary %--></p>
|
||||
<!--% END %-->
|
||||
|
||||
<!--% MACRO twat_show_summary(show, hide_host) BLOCK %-->
|
||||
<!--% MACRO twt_show_summary(show, hide_host) BLOCK %-->
|
||||
|
||||
<h3 class="title"><a href="<!--% absolute_path(baseurl) %-->eps/twt<!--% zero_pad_left(show.id) %-->/index.html">Today with a Techie Ep.<!--% show.id %--> :: <!--% show.title %--></a> <!--% IF hide_host == "" %-->
|
||||
hosted by <a href="<!--% absolute_path(baseurl) %-->correspondents/<!--% zero_pad_left(show.hostid) %-->.html"><!--% show.host %--></a>
|
||||
|
||||
@@ -93,7 +93,7 @@
|
||||
<!--% END %-->
|
||||
|
||||
<!--% MACRO media_path(episode_id, episode_type, media_type, baseurl, media_baseurl) BLOCK %-->
|
||||
<!--% IF episode_type == "twat" %-->
|
||||
<!--% IF episode_type == "twt" %-->
|
||||
<!--% episode_type = "twt" %-->
|
||||
<!--% padding = 3 %-->
|
||||
<!--% media_folder = "eps/"; padding = 3 %-->
|
||||
@@ -117,16 +117,74 @@
|
||||
<!--% IF folder %-->
|
||||
<!--% folder = folder %--><!--% ELSE %--><!--% folder = "hpr" %-->
|
||||
<!--% END %-->
|
||||
<small><a href="<!--% absolute_path(baseurl) %-->eps/<!--% folder %--><!--% zero_pad_left(links.earliest) %-->/index.html" rel="first"><< First</a>,
|
||||
<!--% arrow_first = "arrow-first.svg" %-->
|
||||
<!--% arrow_prev = "arrow-previous.svg" %-->
|
||||
<!--% arrow_next = "arrow-next.svg" %-->
|
||||
<!--% arrow_last = "arrow-last.svg" %-->
|
||||
<nav class="episodes" aria-description="Navigation to other episodes"><span><a href="<!--% absolute_path(baseurl) %-->eps/<!--% folder %--><!--% zero_pad_left(links.earliest) %-->/index.html" rel="first" aria-label="first episode"><!--% INSERT $arrow_first %--><span class="no-css"><< </span>First</a></span>,
|
||||
<!--% IF links.previous %-->
|
||||
<a href="<!--% absolute_path(baseurl) %-->eps/<!--% folder %--><!--% zero_pad_left(links.previous) %-->/index.html" rel="previous">< Previous</a>,
|
||||
<span><a href="<!--% absolute_path(baseurl) %-->eps/<!--% folder %--><!--% zero_pad_left(links.previous) %-->/index.html" rel="previous" aria-label="previous episode"><!--% INSERT $arrow_prev %--><span class="no-css">< </span>Previous</a></span>,
|
||||
<!--% ELSE %-->
|
||||
<span><</span> Previous,
|
||||
<span class="no-link"><!--% INSERT $arrow_prev %--><span class="no-css">< </span>Previous</span>,
|
||||
<!--% END %-->
|
||||
<!--% IF links.next %-->
|
||||
<a href="<!--% absolute_path(baseurl) %-->eps/<!--% folder %--><!--% zero_pad_left(links.next) %-->/index.html" rel="next">Next ></a>,
|
||||
<span><a href="<!--% absolute_path(baseurl) %-->eps/<!--% folder %--><!--% zero_pad_left(links.next) %-->/index.html" rel="next" aria-label="next episode">Next<span class="no-css"> ></span><!--% INSERT $arrow_next %--></a></span>,
|
||||
<!--% ELSE %-->
|
||||
Next <span>></span>
|
||||
<span class="no-link">Next<span class="no-css"> ></span><!--% INSERT $arrow_next %--></span>,
|
||||
<!--% END %-->
|
||||
<a href="<!--% absolute_path(baseurl) %-->eps/<!--% folder %--><!--% zero_pad_left(links.latest) %-->/index.html" rel="last">Latest >></a></small>
|
||||
<span><a href="<!--% absolute_path(baseurl) %-->eps/<!--% folder %--><!--% zero_pad_left(links.latest) %-->/index.html" rel="last" aria-label="latest episode">Latest<span class="no-css"> >></span><!--% INSERT $arrow_last %--></a></span></nav>
|
||||
<!--% END %-->
|
||||
|
||||
<!--% MACRO get_new_year_show_start BLOCK %-->
|
||||
<!--% start_year = date.format(date.now, '%Y') %-->
|
||||
<!--% IF date.format(date.now, '%m') != 12 || date.format(date.now, '%j') == 1 %-->
|
||||
<!--% start_year = start_year - 1 %-->
|
||||
<!--% END %-->
|
||||
<time datetime="<!--% start_year %-->-12-31T10:00Z"><!--% start_year %-->-12-31 10:00 UTC (5:00 AM EST)</time>
|
||||
<!--% END %-->
|
||||
|
||||
<!--% MACRO get_new_year_show_end BLOCK %-->
|
||||
<!--% end_year = date.format(date.now, '%Y') %-->
|
||||
<!--% IF date.format(date.now, '%m') == 12 || date.format(date.now, '%j') == 1 %-->
|
||||
<!--% end_year = end_year + 1 %-->
|
||||
<!--% END %-->
|
||||
<time datetime="<!--% end_year %-->-01-01T12:00Z"><!--% end_year %-->-01-01 12:00 UTC (7:00 AM EST)</time>
|
||||
<!--% END %-->
|
||||
|
||||
<!--% MACRO get_new_year_show_ordinal_year BLOCK %-->
|
||||
<!--% ordinal_year = date.format(date.now, '%Y') - 2011 %-->
|
||||
<!--% IF date.format(date.now, '%m') != 12 || date.format(date.now, '%j') == 1 %-->
|
||||
<!--% ordinal_year = ordinal_year - 1 %-->
|
||||
<!--% END %-->
|
||||
<!--% years.0 = 'th'
|
||||
years.1 = 'st'
|
||||
years.2 = 'nd'
|
||||
years.3 = 'rd'
|
||||
years.4 = 'th'
|
||||
years.5 = 'th'
|
||||
years.6 = 'th'
|
||||
years.7 = 'th'
|
||||
years.8 = 'th'
|
||||
years.9 = 'th'
|
||||
years.14 = 'Fourteenth'
|
||||
years.15 = 'Fifteenth'
|
||||
years.16 = 'Sixteenth'
|
||||
years.17 = 'Seventeenth'
|
||||
years.18 = 'Eighteenth'
|
||||
years.19 = 'Nineteenth'
|
||||
years.20 = 'Twentieth'
|
||||
years.30 = 'Thirtieth'
|
||||
years.40 = 'Fortieth'
|
||||
years.50 = 'Fiftieth' %-->
|
||||
<!--% index = ordinal_year % 10 %-->
|
||||
<!--% IF ordinal_year < 21 || (index == 0 && ordinal_year < 51) %-->
|
||||
<!--% years.$ordinal_year %-->
|
||||
<!--% ELSE %-->
|
||||
<!--% ordinal_year %--><sup><!--% years.$index %--></sup>
|
||||
<!--% END %-->
|
||||
<!--% END %-->
|
||||
|
||||
<!--% MACRO make_sfw(swf, sfw_text, nsfw_text) BLOCK %-->
|
||||
<!--% IF swf == 0 %--><!--% sfw_text %-->
|
||||
<!--% ELSE %--><!--% nsfw_text %-->
|
||||
<!--% END %--><!--% END %-->
|
||||
|
||||