Compare commits
2 Commits
main
...
kdmurrayhp
Author | SHA1 | Date | |
---|---|---|---|
cf687fe0db | |||
e0ef6c7613 |
@ -6,7 +6,11 @@ If git is not installed on the operating system, please install it now
|
|||||||
To retrieve the code from the repository on anhonesthost.net (a username and
|
To retrieve the code from the repository on anhonesthost.net (a username and
|
||||||
password are required), run:
|
password are required), run:
|
||||||
|
|
||||||
`git clone https://repo.anhonesthost.net/HPR/hpr_generator.git`
|
`git clone https://repo.anhonesthost.net/rho_n/hpr_generator.git`
|
||||||
|
|
||||||
|
To retrieve the code from the repository on gitlab.com, run:
|
||||||
|
|
||||||
|
`git clone https://gitlab.com/roan.horning/hpr_generator.git`
|
||||||
|
|
||||||
On success, an "hpr_generator" directory will be created in the folder from
|
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.
|
which the clone command was executed containing a local copy of the git repository.
|
||||||
@ -37,9 +41,8 @@ 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.
|
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/),
|
Make sure both the [make](https://www.gnu.org/software/make/manual/make.html)
|
||||||
[make](https://www.gnu.org/software/make/manual/make.html),
|
command and the [cpan](https://perldoc.perl.org/CPAN) command are available.
|
||||||
and [cpan](https://perldoc.perl.org/CPAN) commands are available.
|
|
||||||
Install them using the operating system's package manager, or from source.
|
Install them using the operating system's package manager, or from source.
|
||||||
|
|
||||||
Run commands:
|
Run commands:
|
||||||
@ -48,21 +51,9 @@ Run commands:
|
|||||||
cpan Config::Std
|
cpan Config::Std
|
||||||
cpan Template
|
cpan Template
|
||||||
cpan Template::Plugin::DBI
|
cpan Template::Plugin::DBI
|
||||||
cpan Template::Plugin::HTML::Strip
|
|
||||||
cpan DBD::SQLite
|
cpan DBD::SQLite
|
||||||
cpan Date::Calc
|
cpan Date::Calc
|
||||||
cpan Tie::DBI
|
cpan Tie::DBI
|
||||||
cpan Text:CSV_XS
|
|
||||||
```
|
|
||||||
|
|
||||||
## 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.
|
|
||||||
|
|
||||||
It can be run from any directory. To run from the utils directory:
|
|
||||||
|
|
||||||
```
|
|
||||||
./check-dependencies.sh
|
|
||||||
```
|
```
|
||||||
|
|
||||||
# Create the HPR database
|
# Create the HPR database
|
||||||
@ -186,7 +177,7 @@ baseurl: file://</path/to>/hpr_generator/public_html
|
|||||||
```
|
```
|
||||||
|
|
||||||
Replace \<path/to\> with the full path to the hpr_generator directory. For
|
Replace \<path/to\> with the full path to the hpr_generator directory. For
|
||||||
example: `file:///home/HPR/development/hpr_generator/public_html`
|
example: `file:///home/rho_n/development/hpr_generator/public_html`
|
||||||
|
|
||||||
## Configuring the website media file links
|
## Configuring the website media file links
|
||||||
|
|
||||||
|
16
README.md
16
README.md
@ -25,7 +25,7 @@ Static web page generator for the Hacker Public Radio website.
|
|||||||
- ``GRANT SELECT ON hpr_hpr.* TO 'hpr-generator'@'localhost';``
|
- ``GRANT SELECT ON hpr_hpr.* TO 'hpr-generator'@'localhost';``
|
||||||
- ``GRANT EXECUTE 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
|
||||||
* Pod::Usage
|
* Pod::Usage
|
||||||
* Config::Std
|
* Config::Std
|
||||||
* Template
|
* Template
|
||||||
@ -35,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 or DBD::mysql
|
* DBD::SQLite or DBD:mysql
|
||||||
* Date::Calc
|
* Date::Calc
|
||||||
* Text::CSV_XS
|
* Text::CSV_XS
|
||||||
* HTML::Entities
|
* HTML::Entities
|
||||||
@ -54,26 +54,24 @@ Generate pages based on the same template:
|
|||||||
`site-generator correspondent=1,3,5..10`
|
`site-generator correspondent=1,3,5..10`
|
||||||
|
|
||||||
## Support
|
## Support
|
||||||
Please [submit an Issue](https://repo.anhonesthost.net/HPR/hpr_generator/issues),
|
Please [submit an Issue](https://repo.anhonesthost.net/rho_n/hpr_generator/issues),
|
||||||
and add the label "**Help Request**" for help running or installing the site-generator.
|
and add the label "**Help Request**" for help running or installing the site-generator.
|
||||||
|
|
||||||
For discussing HPR site generation in general, please [submit an Issue](https://repo.anhonesthost.net/HPR/hpr_generator/issues) and add the label "**General Discussion**".
|
For discussing HPR site generation in general, please [submit an Issue](https://repo.anhonesthost.net/rho_n/hpr_generator/issues) and add the label "**General Discussion**".
|
||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
Happy to take any contributions or suggestions.
|
Happy to take any contributions or suggestions.
|
||||||
|
|
||||||
To contribute code or documentation, please create a fork of the project and [submit a pull request](https://repo.anhonesthost.net/HPR/hpr_generator/pulls) or send a patch. If an issue exists that is related to your patch, please assign the issue to yourself, or if it is already assigned to someone else, please coordinate with them to minimize duplicated efforts.
|
To contribute code or documentation, please create a fork of the project and [submit a pull request](https://repo.anhonesthost.net/rho_n/hpr_generator/pulls) or send a patch. If an issue exists that is related to your patch, please assign the issue to yourself, or if it is already assigned to someone else, please coordinate with them to minimize duplicated efforts.
|
||||||
|
|
||||||
If you have found an error in the code or the generated HTML, please [submit an Issue](https://repo.anhonesthost.net/HPR/hpr_generator/issues),
|
If you have found an error in the code or the generated HTML, please [submit an Issue](https://repo.anhonesthost.net/rho_n/hpr_generator/issues),
|
||||||
and add the label "**Bug Found**".
|
and add the label "**Bug Found**".
|
||||||
|
|
||||||
To make a suggestion, please [submit an Issue](https://repo.anhonesthost.net/HPR/hpr_generator/issues),
|
To make a suggestion, please [submit an Issue](https://repo.anhonesthost.net/rho_n/hpr_generator/issues),
|
||||||
and add the label "**Feature Request**".
|
and add the label "**Feature Request**".
|
||||||
|
|
||||||
## Authors and acknowledgment
|
## Authors and acknowledgment
|
||||||
* Roan "Rho`n" Horning
|
* Roan "Rho`n" Horning
|
||||||
* Dave Morriss
|
|
||||||
* gordons
|
* gordons
|
||||||
* Ken Fallon
|
* Ken Fallon
|
||||||
* norrist
|
* norrist
|
||||||
|
|
||||||
|
@ -4,515 +4,275 @@
|
|||||||
https://creativecommons.org/publicdomain/
|
https://creativecommons.org/publicdomain/
|
||||||
|
|
||||||
*/
|
*/
|
||||||
/*
|
|
||||||
* See the following for the modern CSS responsive design techniques used in this file:
|
|
||||||
* - MDN web docs: Responsive design
|
|
||||||
* -- 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
|
|
||||||
* -- https://css-tricks.com/linearly-scale-font-size-with-css-clamp-based-on-the-viewport/
|
|
||||||
*/
|
|
||||||
|
|
||||||
html {
|
p.meta span label { font-weight: bold; }
|
||||||
margin: 0;
|
@media only screen and (min-width: 479px) {
|
||||||
padding: 0;
|
|
||||||
display: block;
|
body {background: #dfdfdf;}
|
||||||
|
div, h1, h2, h3, h4, h5, h6, p, ul, ol, li, dl, dt, dd, img, form, fieldset, input, textarea, blockquote {
|
||||||
|
font-family: Verdana, Arial, Helvetica, sans-serif;/* 1em/1.5 OpenDyslexic, */
|
||||||
|
color: #4D4D4D; /* HPR Grey */
|
||||||
|
background: white;
|
||||||
}
|
}
|
||||||
|
|
||||||
body {
|
|
||||||
display: block;
|
|
||||||
background: #dfdfdf;
|
|
||||||
font-size: 1rem; /* fallback for browsers that don't support the clamp function) */
|
|
||||||
font-size: clamp(1rem, 15px + 0.3vw, 1.07rem);
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
div,
|
|
||||||
h1,
|
|
||||||
h2,
|
|
||||||
h3,
|
|
||||||
h4,
|
|
||||||
h5,
|
|
||||||
h6,
|
|
||||||
p,
|
|
||||||
ul,
|
|
||||||
ol,
|
|
||||||
li,
|
|
||||||
dl,
|
|
||||||
dt,
|
|
||||||
dd,
|
|
||||||
img,
|
|
||||||
form,
|
|
||||||
fieldset,
|
|
||||||
input,
|
|
||||||
textarea,
|
|
||||||
blockquote {
|
|
||||||
font-family: Verdana, Arial, Helvetica, sans-serif; /* 1em/1.5 OpenDyslexic, */
|
|
||||||
color: #4D4D4D; /* HPR Grey */
|
|
||||||
background: white;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1 {
|
|
||||||
font-size: 1.5rem;
|
|
||||||
margin: 1.25rem 0 0.75rem 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
h2,
|
|
||||||
article * h1 {
|
|
||||||
font-size: 1.45rem;
|
|
||||||
margin: 1.25rem 0 0.75rem 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
h3,
|
|
||||||
article * h2 {
|
|
||||||
font-size: 1.25rem;
|
|
||||||
margin: 1.25rem 0 0.75rem 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
h4,
|
|
||||||
article * h3 {
|
|
||||||
font-size: 1.15rem;
|
|
||||||
margin: 1.25rem 0 0.75rem 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
img {
|
|
||||||
max-width: 100%;
|
|
||||||
height: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
ul {
|
|
||||||
padding-left: 1.15rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
li {
|
|
||||||
line-height: 1.25;
|
|
||||||
}
|
|
||||||
|
|
||||||
a {
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
a:hover {
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
hr {
|
|
||||||
background: #4D4D4D;
|
|
||||||
border: 0;
|
|
||||||
height: 0.25em;
|
|
||||||
}
|
|
||||||
|
|
||||||
audio {
|
|
||||||
padding: .7em 0em .5em 0em;
|
|
||||||
clear: both;
|
|
||||||
position: relative;
|
|
||||||
z-index: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.audcredit {
|
|
||||||
font-size: 75%;
|
|
||||||
margin-bottom: 1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
p.meta {
|
|
||||||
line-height: 1.25;
|
|
||||||
}
|
|
||||||
|
|
||||||
p.meta span label {
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
article>p,
|
|
||||||
#maincontent>p {
|
|
||||||
line-height: 1.45;
|
|
||||||
}
|
|
||||||
|
|
||||||
article#previous_five_weeks>* {
|
|
||||||
line-height: 1.35;
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
article#previous_five_weeks>h3 {
|
|
||||||
margin: 1.5rem 0 0.5rem 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#container {
|
#container {
|
||||||
max-width: 58rem;
|
width: 100%;
|
||||||
margin: 0.25rem;
|
max-width: 58em;
|
||||||
padding: 0.75rem; /* fallback for browsers that don't support the clamp function) */
|
margin: auto;
|
||||||
padding: clamp(0.75rem, -0.25rem + 3vw, 2.0rem);
|
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
padding: .5em;
|
||||||
|
border: thin solid;
|
||||||
background: white;
|
background: white;
|
||||||
border: thin solid #4D4D4D;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.shadow {
|
.shadow {
|
||||||
-moz-box-shadow: 2px 3px 6px 3px #675958;
|
-moz-box-shadow: 2px 3px 6px 3px #675958;
|
||||||
-webkit-box-shadow: 2px 3px 6px 3px #675958;
|
-webkit-box-shadow: 2px 3px 6px 3px #675958;
|
||||||
box-shadow: 2px 3px 6px 3px #675958;
|
box-shadow: 2px 3px 6px 3px #675958;}
|
||||||
}
|
|
||||||
|
|
||||||
.thick_bar {
|
#hprlogo {
|
||||||
background-color: #4D4D4D;
|
display: block;
|
||||||
color: white;
|
position: relative;
|
||||||
padding: 0.5rem;
|
top: 0;
|
||||||
margin: 1rem 0 1rem 0;
|
left: 0;
|
||||||
}
|
border: 0;
|
||||||
|
margin: 0.75em;
|
||||||
img#hprlogo {
|
float:left;
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#hpr_banner {
|
#hpr_banner {
|
||||||
/* display: inline-block; */
|
display: block;
|
||||||
border: 0;
|
position: relative;
|
||||||
margin: 0 0 0rem 0;
|
border: 0;
|
||||||
padding: 0;
|
margin: 0.75em;
|
||||||
|
float: left;
|
||||||
}
|
}
|
||||||
|
|
||||||
#hpr_banner p {
|
#hpr_banner h1 {margin: -.25em 0em -.5em 0em;}
|
||||||
margin: 0 0 0.5rem 0;
|
#hpr_banner h2 {font-size: 100%; font-weight: lighter; }
|
||||||
}
|
#hpr_banner h3 {font-size: 90%; font-weight: lighter; }
|
||||||
|
|
||||||
#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 {
|
#accessible_menu {
|
||||||
font-size: smaller;
|
font-size: small;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The main navigation menu */
|
/* The main navigation menu */
|
||||||
header>nav.menu {
|
.menu {
|
||||||
display: block;
|
background: #4D4D4D; /* HPR Grey */
|
||||||
background-color: #4D4D4D; /* HPR Grey */
|
text-align: Left;
|
||||||
text-align: Left;
|
clear:both; /* Forces the menu to appear after the HPR Header block */
|
||||||
clear: both; /* Forces the menu to appear after the HPR Header block */
|
padding: 0em 0em;
|
||||||
padding: 0;
|
margin: 0em 0em;
|
||||||
margin: 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
header>nav.menu ul {
|
.menu ul ul { /* Causes the sub menus not to be displayed, until hover shows them */
|
||||||
margin: 0;
|
display: none;
|
||||||
padding: 0.5rem;
|
|
||||||
background-color: inherit;
|
|
||||||
color: white;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
header>nav.menu ul li {
|
#main_menu li a {display: block;}
|
||||||
display: inline-block;
|
|
||||||
background-color: inherit;
|
.menu ul li { padding: .25em 0em;}
|
||||||
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 {
|
.menu ul { /* The menu bar background across screen */
|
||||||
color: white;
|
background: #4D4D4D; /* HPR Grey */
|
||||||
text-decoration: none;
|
color: white;
|
||||||
display: block;
|
padding: 0 10px; /* Keeps sub menus to the left */
|
||||||
padding: 0.25rem 0;
|
list-style: none;
|
||||||
|
position: relative;
|
||||||
|
margin: 0;
|
||||||
|
display: inline-table;
|
||||||
}
|
}
|
||||||
|
|
||||||
header>nav.menu ul li a:hover {
|
.menu ul:after { /* Forces the dropdown to be a block with non float */
|
||||||
border-bottom: thin solid white;
|
content: "";
|
||||||
padding: 0.15rem 0;
|
clear: both;
|
||||||
-webkit-transition: 0.3s ease-in-out color;
|
display: block;
|
||||||
-moz-transition: 0.3s ease-in-out color;
|
|
||||||
transition: 0.3s ease-in-out color;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
header>nav.menu ul li a:visited {
|
.menu ul li {
|
||||||
color: #EDEDED;
|
background: #4D4D4D; /* HPR Grey */
|
||||||
|
color: white;
|
||||||
|
float: left;
|
||||||
|
padding: .5em 1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
a:active,
|
.menu ul li a {
|
||||||
header>nav.menu ul li a:active {
|
background: #4D4D4D; /* HPR Grey */
|
||||||
color: red;
|
color: white;
|
||||||
|
display: block;
|
||||||
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
pre {
|
.menu ul ul {
|
||||||
/* Add background, border and scrollbar to <pre> */
|
background: #4D4D4D; /* HPR Grey */
|
||||||
background: #eee;
|
color: white;
|
||||||
border: 1px solid #ddd;
|
padding: 0;
|
||||||
overflow: auto;
|
position: absolute;
|
||||||
clear: both;
|
top: 100%;
|
||||||
padding: 0.5rem
|
|
||||||
}
|
}
|
||||||
|
|
||||||
code {
|
.menu ul ul li {
|
||||||
background: #eee;
|
background: #4D4D4D; /* HPR Grey */
|
||||||
border-radius: 0.2rem;
|
color: white;
|
||||||
font-size: 0.95rem;
|
float: none;
|
||||||
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
pre code {
|
.menu ul ul ul {
|
||||||
padding-right: 0.5rem;
|
position: absolute;
|
||||||
font-size: 0.85rem;
|
left: 100%;
|
||||||
line-height: 1;
|
top:0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
hr {
|
||||||
|
background: #4D4D4D; /* HPR Grey */
|
||||||
|
border: 0;
|
||||||
|
height: 0.25em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The multi colum footer layout */
|
||||||
|
|
||||||
|
#footer_page {
|
||||||
|
width:100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.column {
|
||||||
|
width:12%;
|
||||||
|
background-color: white;
|
||||||
|
color: #4D4D4D; /* HPR Grey */
|
||||||
|
float:left;
|
||||||
|
margin:0 10px;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.column li {
|
||||||
|
list-style:none;
|
||||||
|
padding: .25em 0em;
|
||||||
|
font-size: 85%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.thick_bar {
|
||||||
|
width:100%;
|
||||||
|
background-color: #4D4D4D; /* HPR Grey */
|
||||||
|
color: white;
|
||||||
|
float:left;
|
||||||
|
clear: both;
|
||||||
|
height:1.5em;
|
||||||
|
padding: .5em 0em .5em 0em;
|
||||||
|
font-size: 1em;
|
||||||
|
margin: 1em 0em 1em 0em;
|
||||||
|
}
|
||||||
|
|
||||||
|
#more_info {margin: auto;}
|
||||||
|
nav.column { display: block; padding: 0em 1em 0em 1em;}
|
||||||
|
#copyright {
|
||||||
|
font-size: small;
|
||||||
|
width:100%;
|
||||||
|
float:left;
|
||||||
|
}
|
||||||
|
|
||||||
|
article, #copyright p {
|
||||||
|
padding: 0 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
audio {padding: .7em 0em .5em 0em; clear: both; position: relative; z-index:auto;}
|
||||||
|
.audcredit { font-size: 75%;margin-bottom: 1em;}
|
||||||
|
h1.showtitle { font-size: 125%;}
|
||||||
|
|
||||||
|
/* Full Index Page styling */
|
||||||
|
#index_full h2.title {
|
||||||
|
font-weight: lighter;
|
||||||
|
margin-bottom: -.5em;
|
||||||
|
padding: .5em 0em 0em 0em;
|
||||||
|
font-size: 110%;}
|
||||||
|
|
||||||
|
#index_full p.meta {font-size: 85%;}
|
||||||
|
|
||||||
|
#small {
|
||||||
|
font-size: small;
|
||||||
|
}
|
||||||
|
|
||||||
|
p.author { font-size: 85%;}
|
||||||
|
p.shownotes { padding: .5em;}
|
||||||
|
#maincontent footer p { /* font-size: 75%; */ margin-bottom: 1em;}
|
||||||
|
/* link styling */
|
||||||
|
a:link {text-decoration: none;}
|
||||||
|
|
||||||
|
table {
|
||||||
|
width:100%;
|
||||||
|
}
|
||||||
|
table, th, td {
|
||||||
|
border-collapse: collapse;
|
||||||
|
padding: 2px;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
table#t01, table#t01 th, table#t01 td {
|
||||||
|
border: 1px solid black;
|
||||||
|
}
|
||||||
|
table#t01 th, table#t01 td {
|
||||||
|
padding: 5px;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
table#t01 tr:nth-child(even) {
|
||||||
|
background-color: #eee;
|
||||||
|
}
|
||||||
|
table#t01 tr:nth-child(odd) {
|
||||||
|
background-color:#fff;
|
||||||
|
}
|
||||||
|
table#t01 th {
|
||||||
|
background-color: #4D4D4D;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre { /* Add background, border and scrollbar to <pre> */
|
||||||
|
background: #eee;
|
||||||
|
border: 1px solid #ddd;
|
||||||
|
overflow: auto;
|
||||||
|
clear: both;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.hosts {
|
||||||
|
background: white
|
||||||
|
}
|
||||||
|
table.hosts tr:nth-child(even) { background-color:#cccccc; }
|
||||||
|
table.hosts tr:nth-child(odd) { background-color:white; }
|
||||||
|
table.hosts tr td img { vertical-align:middle }
|
||||||
|
|
||||||
pre.comment {
|
pre.comment {
|
||||||
white-space: pre-wrap;
|
white-space: pre-wrap;
|
||||||
|
padding: 2px;
|
||||||
line-height: 1.2rem;
|
line-height: 1.2rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
table.hosts {
|
h3.title { margin: 1.25rem 0 0.75rem 0 }
|
||||||
font-size: clamp(0.82rem, -0.25rem + 3vw, 1.0rem);
|
p.meta { margin: 0.25rem 0 }
|
||||||
width: 100%;
|
p.summary { margin: 0.25rem 0 }
|
||||||
background: white;
|
p.listen-in { margin-top: 0 }
|
||||||
margin: 0 auto;
|
|
||||||
border-collapse: collapse;
|
|
||||||
display: inline-table;
|
|
||||||
|
|
||||||
|
@media only screen and (max-width: 680px) {
|
||||||
|
#container {width: 95%;}
|
||||||
|
img#hprlogo {float: left; max-width: 85px; padding: .35em;}
|
||||||
|
.column {width: 15%;}
|
||||||
|
h1 {font-size: 140%;}
|
||||||
|
h2 {font-size: 120%;}
|
||||||
|
h3 {font-size: 100%;}
|
||||||
|
nav.column { display: block; padding: 0em .25em 0em .25em;}
|
||||||
|
#footer_page li {font-size: 85%; padding: .5em .25em .5em .25em;}
|
||||||
|
footer p {font-size: 75%;}
|
||||||
|
audio {float: none; }
|
||||||
}
|
}
|
||||||
|
|
||||||
table#t01,
|
@media only screen and (max-width: 479px) {
|
||||||
table.hosts {
|
body {background: #ffffff; color: #4D4D4D; font-family: Verdana, Arial, Helvetica, sans-serif;/* 1em/1.5 OpenDyslexic, */}
|
||||||
display: block;
|
li {font-size: 100%; padding: .75em 0em .75em 0em; margin-left: -.25em;}
|
||||||
overflow-x: auto;
|
img#hprlogo {float: left; max-width: 65px; padding: .35em;}
|
||||||
}
|
.column {width: auto;}
|
||||||
|
h1#sitename { clear: both;}
|
||||||
table#t01 tbody,
|
a:link {text-decoration: none;}
|
||||||
table.hosts tbody {
|
audio {padding: .7em 0em .5em 0em; width: 95%; max-width: 300px;}
|
||||||
display: table;
|
.audcredit { font-size: 65%; margin-bottom: 1em;}
|
||||||
}
|
|
||||||
|
|
||||||
table#t01 tr:nth-child(even),
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
footer #copyright {
|
|
||||||
font-size: smaller;
|
|
||||||
margin-left: 0.5rem;
|
|
||||||
margin-right: 0.5rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
fieldset>table,
|
|
||||||
fieldset>table thead,
|
|
||||||
fieldset>table tbody,
|
|
||||||
fieldset>table tr,
|
|
||||||
fieldset>table th,
|
|
||||||
fieldset>table td,
|
|
||||||
fieldset>table td input,
|
|
||||||
fieldset>table td textarea {
|
|
||||||
display: block;
|
|
||||||
font-size: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
fieldset>table {
|
|
||||||
width: calc(100vw + -16vw + -1rem);
|
|
||||||
max-width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
fieldset>table td input,
|
|
||||||
fieldset>table td textarea {
|
|
||||||
width: calc(100vw + -16vw + -1.5rem);
|
|
||||||
max-width: 100%;
|
|
||||||
border: thin solid #DFDFDF;
|
|
||||||
margin-bottom: 0.5rem;
|
|
||||||
padding: 0.5rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
fieldset>table td select {
|
|
||||||
margin-bottom: 0.5rem;
|
|
||||||
padding: 0.25rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
fieldset>table td input[type="radio"] {
|
|
||||||
display: initial;
|
|
||||||
width: initial;
|
|
||||||
margin-bottom: 0.5rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
fieldset>input {
|
|
||||||
background: #4D4D4D;
|
|
||||||
color: white;
|
|
||||||
font-weight: 600;
|
|
||||||
padding: 0.5rem;
|
|
||||||
border: thin solid #DFDFDF;
|
|
||||||
border-radius: 0.2rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media only screen and (min-width: 58rem) {
|
|
||||||
#container {
|
|
||||||
margin: 0.5rem auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.shadow {
|
|
||||||
-moz-box-shadow: 1px 2px 5px 2px #675958;
|
|
||||||
-webkit-box-shadow: 1px 2px 5px 2px #675958;
|
|
||||||
box-shadow: 1px 2px 5px 2px #675958;
|
|
||||||
}
|
|
||||||
|
|
||||||
img#hprlogo {
|
|
||||||
margin-bottom: 1.5rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
#hpr_banner {
|
|
||||||
float: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
#hpr_banner h1#sitename {
|
|
||||||
font-size: 2rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
#hpr_banner h2 {
|
|
||||||
font-size: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
header>hr {
|
|
||||||
clear: right;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.hosts td:first-child {
|
|
||||||
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 thead,
|
|
||||||
fieldset>table tbody,
|
|
||||||
fieldset>table tr,
|
|
||||||
fieldset>table th,
|
|
||||||
fieldset>table td,
|
|
||||||
fieldset>table td input,
|
|
||||||
fieldset>table td textarea {
|
|
||||||
display: revert;
|
|
||||||
width: revert;
|
|
||||||
}
|
|
||||||
|
|
||||||
fieldset>table tr {
|
|
||||||
vertical-align: baseline;
|
|
||||||
}
|
|
||||||
|
|
||||||
fieldset>table tr:nth-child(3) {
|
|
||||||
vertical-align: top;
|
|
||||||
}
|
|
||||||
|
|
||||||
fieldset>table tr:nth-child(3) td:first-child {
|
|
||||||
padding-top: 0.5rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
fieldset>table tr:nth-last-child(3) td:first-child {
|
|
||||||
padding-top: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
fieldset>table tr:nth-last-child(2) {
|
|
||||||
vertical-align: top;
|
|
||||||
}
|
|
||||||
|
|
||||||
fieldset>table tr:nth-last-child(2) td:first-child {
|
|
||||||
padding-top: 0.75rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
fieldset>table td input[type="radio"] {
|
|
||||||
margin-top: 1.5rem;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 7.1 KiB |
Binary file not shown.
Before Width: | Height: | Size: 7.5 KiB |
Binary file not shown.
Before Width: | Height: | Size: 16 KiB |
Binary file not shown.
Before Width: | Height: | Size: 8.0 KiB |
@ -122,6 +122,7 @@ use Text::CSV_XS;
|
|||||||
use HTML::Entities qw(encode_entities);
|
use HTML::Entities qw(encode_entities);
|
||||||
use Date::Calc;
|
use Date::Calc;
|
||||||
use DBI;
|
use DBI;
|
||||||
|
use DBD::SQLite;
|
||||||
use Tie::DBI;
|
use Tie::DBI;
|
||||||
use Template;
|
use Template;
|
||||||
use Template::Plugin::Date;
|
use Template::Plugin::Date;
|
||||||
@ -290,23 +291,26 @@ sub parse_page_arg {
|
|||||||
# Split page name from page ids if available.
|
# Split page name from page ids if available.
|
||||||
my ($page, $ids) = split(/=/, $page_arg);
|
my ($page, $ids) = split(/=/, $page_arg);
|
||||||
my @ids;
|
my @ids;
|
||||||
$ids = "" unless defined $ids;
|
|
||||||
|
|
||||||
# Parse the page ids and push them onto @ids array
|
if(!$ids) {
|
||||||
my @ids_by_comma = split(/\,/, $ids);
|
$ids = "";
|
||||||
foreach my $id_by_comma (@ids_by_comma) {
|
}
|
||||||
my @ids_for_range = split(/\.\./, $id_by_comma);
|
else {
|
||||||
if ((scalar @ids_for_range) == 2) {
|
# Parse the page ids and push them onto @ids array
|
||||||
push @ids, $ids_for_range[0]..$ids_for_range[1];
|
my @ids_by_comma = split(/\,/, $ids);
|
||||||
}
|
foreach my $id_by_comma (@ids_by_comma) {
|
||||||
elsif ((scalar @ids_for_range) == 1) {
|
my @ids_for_range = split(/\.\./, $id_by_comma);
|
||||||
push @ids, $ids_for_range[0];
|
if ((scalar @ids_for_range) == 2) {
|
||||||
}
|
push @ids, $ids_for_range[0]..$ids_for_range[1];
|
||||||
else {
|
}
|
||||||
verbose (1, "\nWarning: Page $page id range $id_by_comma could not be parsed.");
|
elsif ((scalar @ids_for_range) == 1) {
|
||||||
|
push @ids, $ids_for_range[0];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
verbose (1, "\nWarning: Page $page id range $id_by_comma could not be parsed.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return ('page' => $page, 'ids' => [@ids]);
|
return ('page' => $page, 'ids' => [@ids]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -323,7 +327,7 @@ sub get_ids_from_db {
|
|||||||
|| die $tt->error(), "\n";
|
|| die $tt->error(), "\n";
|
||||||
|
|
||||||
# Starts with a newline and comma
|
# Starts with a newline and comma
|
||||||
return split(/,/, substr($selected_ids, 1));
|
return split(/,/, substr($selected_ids, 2));
|
||||||
}
|
}
|
||||||
|
|
||||||
sub get_filename {
|
sub get_filename {
|
||||||
|
14
site.cfg
14
site.cfg
@ -31,7 +31,7 @@ content: page.tpl.html
|
|||||||
baseurl: https://hackerpublicradio.org/
|
baseurl: https://hackerpublicradio.org/
|
||||||
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://hub.hackerpublicradio.org/ccdn.php?filename=/eps/hpr$eps_id/
|
media_baseurl: https://archive.org/download/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
|
||||||
|
|
||||||
@ -97,10 +97,6 @@ content: content-episode.tpl.html
|
|||||||
multipage: true
|
multipage: true
|
||||||
filename: eps/hpr[id]/index.html
|
filename: eps/hpr[id]/index.html
|
||||||
|
|
||||||
[download]
|
|
||||||
navigation: navigation-get-shows.tpl.html
|
|
||||||
content: content-download.tpl.html
|
|
||||||
|
|
||||||
[syndication]
|
[syndication]
|
||||||
navigation: navigation-get-shows.tpl.html
|
navigation: navigation-get-shows.tpl.html
|
||||||
content: content-syndication.tpl.html
|
content: content-syndication.tpl.html
|
||||||
@ -128,14 +124,6 @@ media_baseurl: https://www.hackerpublicradio.org/eps/
|
|||||||
navigation: navigation-about.tpl.html
|
navigation: navigation-about.tpl.html
|
||||||
content: content-mumble-howto.tpl.html
|
content: content-mumble-howto.tpl.html
|
||||||
|
|
||||||
[contact]
|
|
||||||
navigation: navigation-about.tpl.html
|
|
||||||
content: content-contact.tpl.html
|
|
||||||
|
|
||||||
[promote]
|
|
||||||
navigation: navigation-about.tpl.html
|
|
||||||
content: content-promote.tpl.html
|
|
||||||
|
|
||||||
[comments_viewer]
|
[comments_viewer]
|
||||||
navigation: navigation-about.tpl.html
|
navigation: navigation-about.tpl.html
|
||||||
content: content-comments_viewer.tpl.html
|
content: content-comments_viewer.tpl.html
|
||||||
|
@ -66,9 +66,8 @@
|
|||||||
<p>See the section <a href="<!--% absolute_url(baseurl,'about.html#stuff_you_need_to_know') %-->" >stuff you need to know</a> for more information.</p>
|
<p>See the section <a href="<!--% absolute_url(baseurl,'about.html#stuff_you_need_to_know') %-->" >stuff you need to know</a> for more information.</p>
|
||||||
<h3 id="recent_policy_changes">Recent Policy Changes</h3>
|
<h3 id="recent_policy_changes">Recent Policy Changes</h3>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="https://lists.hackerpublicradio.com/pipermail/hpr/2024-October/004791.html">Clarification that contributions are CC BY-SA 4.0 unless otherwise stated</a></li>
|
|
||||||
<li><a href="https://lists.hackerpublicradio.com/pipermail/hpr/2021-July/004191.html">HPR will move #oggcastplanet on libera,
|
<li><a href="https://lists.hackerpublicradio.com/pipermail/hpr/2021-July/004191.html">HPR will move #oggcastplanet on libera,
|
||||||
and we will also include links to the matrix</a>, and <a href="https://infosec.exchange/@hpr">Mastodon</a> channel</li>
|
and we will also include links to the matrix, and <a href="https://botsin.space/@hpr">Mastodon</a> channel</a></li>
|
||||||
<li><a href="https://lists.hackerpublicradio.com/pipermail/hpr/2021-August/004200.html">Existing shows will be
|
<li><a href="https://lists.hackerpublicradio.com/pipermail/hpr/2021-August/004200.html">Existing shows will be
|
||||||
flagged with the current version and new shows will default to "Attribution 4.0 International (CC BY 4.0)"</a></li>
|
flagged with the current version and new shows will default to "Attribution 4.0 International (CC BY 4.0)"</a></li>
|
||||||
<li><a href="https://lists.hackerpublicradio.com/pipermail/hpr/2021-November/004328.html">The Intro Outro will be
|
<li><a href="https://lists.hackerpublicradio.com/pipermail/hpr/2021-November/004328.html">The Intro Outro will be
|
||||||
@ -277,7 +276,7 @@
|
|||||||
and we'll get in touch with you with all you need to know about getting your show published.<br />
|
and we'll get in touch with you with all you need to know about getting your show published.<br />
|
||||||
You can chat with other podcasters using IRC in the <strong>#oggcastplanet</strong> channel on the
|
You can chat with other podcasters using IRC in the <strong>#oggcastplanet</strong> channel on the
|
||||||
<a href="https://web.libera.chat/gamja/?channels=oggcastplanet">libera.chat</a> network.
|
<a href="https://web.libera.chat/gamja/?channels=oggcastplanet">libera.chat</a> network.
|
||||||
Follow us on <a href="https://infosec.exchange/@hpr">Mastodon</a> (use the tag <strong>#hpr</strong>)
|
Follow us on <a href="https://botsin.space/@hpr">Mastodon</a> (use the tag <strong>#hpr</strong>)
|
||||||
and on <a href="https://twitter.com/hpr">Twitter</a> (use the tag <strong>#hpr</strong>).
|
and on <a href="https://twitter.com/hpr">Twitter</a> (use the tag <strong>#hpr</strong>).
|
||||||
We have a <a href="https://www.facebook.com/HenryPartickReilly">Facebook</a> and
|
We have a <a href="https://www.facebook.com/HenryPartickReilly">Facebook</a> and
|
||||||
<a href="https://www.linkedin.com/groups?mostPopular=&gid=3737302">LinkedIn</a> group,
|
<a href="https://www.linkedin.com/groups?mostPopular=&gid=3737302">LinkedIn</a> group,
|
||||||
@ -583,10 +582,9 @@
|
|||||||
|
|
||||||
<h1 id="reserve_queue">Feed the reserve queue<a href="<!--% absolute_url(baseurl,'about.html#reserve_queue') %-->">.</a></h1>
|
<h1 id="reserve_queue">Feed the reserve queue<a href="<!--% absolute_url(baseurl,'about.html#reserve_queue') %-->">.</a></h1>
|
||||||
<p>
|
<p>
|
||||||
The reserve queue is intended only to be used in the cases where there is still a gap in the schedule one week prior to release.
|
The reserve queue is intended only to be used in the cases where there is still a gap in the schedule 24 hours prior to release.
|
||||||
This was known as the emergency queue, but now can also be used when the hosts don't care when the shows are scheduled.
|
This was known as the emergency queue, but now can also be used when the hosts don't care when the shows are scheduled.
|
||||||
They will be used on a first come first go basis, when there is no conflict with the scheduling guidelines.
|
They will be used on a first come first go basis, when there is no conflict with the scheduling guidelines.
|
||||||
These shows contain a message alerting listeners to the fact that we had free slots that were not filled.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<hr />
|
<hr />
|
||||||
@ -594,12 +592,11 @@
|
|||||||
<h1 id="scheduling_guidelines">Scheduling Guidelines</h1>
|
<h1 id="scheduling_guidelines">Scheduling Guidelines</h1>
|
||||||
<ol>
|
<ol>
|
||||||
<li>You must have your audio recording ready to upload <strong>before</strong> you pick a slot.</li>
|
<li>You must have your audio recording ready to upload <strong>before</strong> you pick a slot.</li>
|
||||||
<li>New hosts, Interviews, and other time critical shows should use the first free slot.</li>
|
|
||||||
<li>Always try and fill any free slots that are available in the upcoming two weeks.</li>
|
<li>Always try and fill any free slots that are available in the upcoming two weeks.</li>
|
||||||
<li>When the queue is filling up then leave some slots free for new contributors.</li>
|
<li>If the queue is filling up then please consider leaving some slots free for new contributors.</li>
|
||||||
<li>Post non urgent shows into the first empty week.</li>
|
<li>If you have a non urgent show then find a empty week and schedule it then.</li>
|
||||||
<li>If you are uploading a series of shows then post them one every two weeks.</li>
|
<li>If you are uploading a series of shows, consider scheduling one every two weeks.</li>
|
||||||
<li>If you have a non urgent show that is timeless, then add it to the <a href="<!--% absolute_url(baseurl,'about.html#reserve_queue') %-->">Reserve Queue</a>.</li>
|
<li>Interviews may be released sooner.</li>
|
||||||
</ol>
|
</ol>
|
||||||
|
|
||||||
<hr />
|
<hr />
|
||||||
@ -824,7 +821,7 @@
|
|||||||
<li id="Short_Summary"><strong>Summary:</strong> <em>Mandatory</em><br />
|
<li id="Short_Summary"><strong>Summary:</strong> <em>Mandatory</em><br />
|
||||||
This is a short 100 character summary of what your show is about.
|
This is a short 100 character summary of what your show is about.
|
||||||
Please fill this out as it is used once the show has gone off the main page, on the mobile site,
|
Please fill this out as it is used once the show has gone off the main page, on the mobile site,
|
||||||
on printed brochures, on text to speech announcements, on twitter, <a href="https://infosec.exchange/@hpr">Mastodon</a> etc.</li>
|
on printed brochures, on text to speech announcements, on twitter, <a href="https://botsin.space/@hpr">Mastodon</a> etc.</li>
|
||||||
<li id="Theme"><strong>Theme:</strong> <em>Automatic</em><br />
|
<li id="Theme"><strong>Theme:</strong> <em>Automatic</em><br />
|
||||||
The Intro, and the Outro will be added automatically. Please do not add it.
|
The Intro, and the Outro will be added automatically. Please do not add it.
|
||||||
</li>
|
</li>
|
||||||
@ -1149,7 +1146,7 @@
|
|||||||
<li>You can join the <strong>#oggcastplanet</strong> channel on IRC.
|
<li>You can join the <strong>#oggcastplanet</strong> channel on IRC.
|
||||||
Visit the <a href="http://webchat.freenode.net/?channels=oggcastplanet">freenode.net</a> network to sign up.</li>
|
Visit the <a href="http://webchat.freenode.net/?channels=oggcastplanet">freenode.net</a> network to sign up.</li>
|
||||||
<li>A number of HPR messages may be found on Twitter and
|
<li>A number of HPR messages may be found on Twitter and
|
||||||
<a href="https://infosec.exchange/@hpr">Mastodon</a>.</li>
|
<a href="https://botsin.space/@hpr">Mastodon</a>.</li>
|
||||||
<li>There is a <a href="https://t.me/+6fEhQrf5IEc4ZGU8">chat group on Telegram</a></li>
|
<li>There is a <a href="https://t.me/+6fEhQrf5IEc4ZGU8">chat group on Telegram</a></li>
|
||||||
<li>An HPR tradition exists where we record a 26-hour show at the turn of the year celebrating the
|
<li>An HPR tradition exists where we record a 26-hour show at the turn of the year celebrating the
|
||||||
arrival of the New Year around the world. We use Mumble to record the show and anyone can connect
|
arrival of the New Year around the world. We use Mumble to record the show and anyone can connect
|
||||||
|
@ -28,7 +28,7 @@
|
|||||||
|
|
||||||
<article>
|
<article>
|
||||||
<header>
|
<header>
|
||||||
<h1><!--% item.comment_author_name %--> says: <!--% item.comment_title %--></h1>
|
<h1><a href="<!--% absolute_path(baseurl) %-->eps/hpr<!--% zero_pad_left(item.eps_id) %-->/index.html#comment_<!--% item.comment_id %-->"><!--% item.comment_author_name %--> says</a>: <!--% item.comment_title %--></h1>
|
||||||
<p><small>Posted at <!--% item.comment_timestamp %--> relating to the show <a href="<!--% absolute_path(baseurl) %-->eps/hpr<!--% zero_pad_left(item.eps_id) %-->/index.html">hpr<!--% item.eps_id %--></a> which was released on <!--% item.episode_date %--> by <a href="<!--% absolute_path(baseurl) %-->correspondents/<!--% zero_pad_left(item.host_id) %-->.html"><!--% item.host %--></a> entitled <em><!--% item.episode_title %--></em></small>
|
<p><small>Posted at <!--% item.comment_timestamp %--> relating to the show <a href="<!--% absolute_path(baseurl) %-->eps/hpr<!--% zero_pad_left(item.eps_id) %-->/index.html">hpr<!--% item.eps_id %--></a> which was released on <!--% item.episode_date %--> by <a href="<!--% absolute_path(baseurl) %-->correspondents/<!--% zero_pad_left(item.host_id) %-->.html"><!--% item.host %--></a> entitled <em><!--% item.episode_title %--></em></small>
|
||||||
</p>
|
</p>
|
||||||
</header>
|
</header>
|
||||||
|
@ -1,21 +0,0 @@
|
|||||||
<article>
|
|
||||||
<header>
|
|
||||||
<h1>Contact</h1>
|
|
||||||
</header>
|
|
||||||
<p>We are always looking for more hosts...</p>
|
|
||||||
<ul>
|
|
||||||
<li>email: <strong>admin -at- hackerpublicradio org</strong><br />
|
|
||||||
<em>As an anti-spam measure you will get an error back but we do get your email.</em></li>
|
|
||||||
<li>Website: <a href="http://www.hackerpublicradio.org" target="_blank">www.hackerpublicradio.org</a></li>
|
|
||||||
<li>Mailist: <a href="http://www.hackerpublicradio.org/maillist" target="_blank">Maillist</a></li>
|
|
||||||
<li><a href="https://web.libera.chat/gamja/?channels=oggcastplanet" target="_blank">#oggcastplanet</a></li>
|
|
||||||
<li><a href="https://www.facebook.com/home.php?sk=group_130169220378872¬if_t=group_r2j" target="_blank">Facebook</a></li>
|
|
||||||
<li><a href="https://www.linkedin.com/company/hackerpublicradio/" target="_blank">Linked-In</a></li>
|
|
||||||
<li><a href="http://itunes.apple.com/us/podcast/hacker-public-radio/id281699640" target="_blank">iTunes</a></li>
|
|
||||||
</ul>
|
|
||||||
<h2>Mail List</h2>
|
|
||||||
<p>
|
|
||||||
HPR is governed by the community, so decisions about how Hacker Public Radio should be run are made on the mailing list you can join it by going to :<br />
|
|
||||||
<a href="http://www.hackerpublicradio.org/maillist">http://www.hackerpublicradio.org/maillist</a>
|
|
||||||
</p>
|
|
||||||
</article>
|
|
@ -3,10 +3,15 @@
|
|||||||
<!--% PROCESS 'shared-utils.tpl.html' %-->
|
<!--% PROCESS 'shared-utils.tpl.html' %-->
|
||||||
<!--% PROCESS "queries-correspondent-${constants.database}.tpl.html" %-->
|
<!--% PROCESS "queries-correspondent-${constants.database}.tpl.html" %-->
|
||||||
<!--% USE DBI(constants.driver, constants.user, constants.password) %-->
|
<!--% USE DBI(constants.driver, constants.user, constants.password) %-->
|
||||||
|
<!--% query_hpr_show_count = DBI.prepare('
|
||||||
|
SELECT id
|
||||||
|
FROM eps
|
||||||
|
WHERE eps.hostid = ?
|
||||||
|
')
|
||||||
|
%-->
|
||||||
<!--% results_hpr_shows = DBI.prepare(query_hpr_shows)
|
<!--% results_hpr_shows = DBI.prepare(query_hpr_shows)
|
||||||
%-->
|
%-->
|
||||||
<!--% results_hpr_show_count = DBI.prepare(query_hpr_show_count) %-->
|
<!--% hpr_shows_to_count = query_hpr_show_count.execute(id); %-->
|
||||||
<!--% hpr_shows_to_count = results_hpr_show_count.execute(id); %-->
|
|
||||||
<!--% hpr_shows = results_hpr_shows.execute(id); %-->
|
<!--% hpr_shows = results_hpr_shows.execute(id); %-->
|
||||||
<!--% hpr_show_count = 0 %-->
|
<!--% hpr_show_count = 0 %-->
|
||||||
<!--% FOREACH show IN hpr_shows_to_count %-->
|
<!--% FOREACH show IN hpr_shows_to_count %-->
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
on h.hostid = e.hostid
|
on h.hostid = e.hostid
|
||||||
order by h.host'
|
order by h.host'
|
||||||
) %-->
|
) %-->
|
||||||
<tr>
|
<tr height="80">
|
||||||
<td><!--% get_avatar(host.hostid, host.host, host_cnt > 8) %--></td>
|
<td><!--% get_avatar(host.hostid, host.host, host_cnt > 8) %--></td>
|
||||||
|
|
||||||
<td><strong><!--% host.host %--></strong><br>
|
<td><strong><!--% host.host %--></strong><br>
|
||||||
|
@ -1,56 +0,0 @@
|
|||||||
<article>
|
|
||||||
<header>
|
|
||||||
<h1>Download Archive</h1>
|
|
||||||
<p>Please be aware that our Archive exceeds <strong>62Gb</strong> <em>(Ogg: 21Gb, Spx: 16Gb, mp3: 25Gb)</em>. We are happy for you to download them, but please make sure that you are not going to incur additional bandwidth charges on your side.</p>
|
|
||||||
<p>We will be happy to post you DVD's of the episodes anywhere in the world if bandwidth is an issue.</p>
|
|
||||||
</header>
|
|
||||||
<h2>Full Episode Guide</h2>
|
|
||||||
<p>
|
|
||||||
The <a href="./eps/index.html">compete episode guide</a> is available to you, and it lists all the shows on one page going right back to the very first episode.
|
|
||||||
</p>
|
|
||||||
<h2>Command line download</h2>
|
|
||||||
<p>
|
|
||||||
You can download the audio of the episodes directly from the command line using the following commands:
|
|
||||||
</p>
|
|
||||||
<ul>
|
|
||||||
<li>ogg:<br />
|
|
||||||
<span style="font-family:monospace;">curl 'https://www.hackerpublicradio.org/eps/hpr[0001-3657].ogg' -o "hpr#1.ogg"</span></li>
|
|
||||||
<li>spx:<br />
|
|
||||||
<span style="font-family:monospace;">curl 'https://www.hackerpublicradio.org/eps/hpr[0001-3657].spx' -o "hpr#1.spx"</span></li>
|
|
||||||
<li>mp3:<br />
|
|
||||||
<span style="font-family:monospace;">curl 'https://www.hackerpublicradio.org/eps/hpr[0001-3657].mp3' -o "hpr#1.mp3"</span></li>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
<h2>Full RSS feed, BitTorrent and Magnet links</h2>
|
|
||||||
<p>The full rss feed is updated daily and contains the complete show note with links to supporting articles. The torrent/magnet also contains this information and is a snaphot of the archive taken between 2007 and November 2013. </p>
|
|
||||||
<ul>
|
|
||||||
<li><span style="font-family:monospace;">ogg: <a href="hpr_total_ogg_rss.php">rss</a>, <a href="https://www.talkgeektome.us/torrents/HPR-Ogg-2007-Nov2013.torrent">torrent</a>, <a href="magnet:?xt=urn:btih:390C66903BBB2B6A067C438C70B2E90988AA8207&dn=HPR-Ogg-2007-Nov2013&tr=http%3A%2F%2Ftracker.info-underground.net%3A16880%2Fannounce">magnet</a></span></li>
|
|
||||||
<li><span style="font-family:monospace;">spx: <a href="hpr_total_spx_rss.php">rss</a>, <a href="https://www.talkgeektome.us/torrents/HPR-Mp3-2007-Nov2013.torrent">torrent</a>, <a href="magnet:?xt=urn:btih:E2573BEF0209B8C2E3C7908BAF220EC34D4A5B8E&dn=HPR-Speex-2007-Nov2013&tr=http%3A%2F%2Ftracker.info-underground.net%3A16880%2Fannounce">magnet</a></span></li>
|
|
||||||
<li><span style="font-family:monospace;">mp3: <a href="hpr_total_rss.php">rss</a>, <a href="https://www.talkgeektome.us/torrents/HPR-Mp3-2007-Nov2013.torrent">torrent</a>, <a href="magnet:?xt=urn:btih:6E9492AD78BCCA2B8D6A42C9C0BCAB0E6FA778F8&dn=HPR-Mp3-2007-Nov2013&tr=http%3A%2F%2Ftracker.info-underground.net%3A16880%2Fannounce">magnet</a></span></li>
|
|
||||||
</ul>
|
|
||||||
<h3>Direct download of the remaining shows</h3>
|
|
||||||
<p>
|
|
||||||
You can download the remaining episodes since the torrent was created directly from the command line using the following commands:
|
|
||||||
</p>
|
|
||||||
<ul>
|
|
||||||
<li>ogg:<br />
|
|
||||||
<span style="font-family:monospace;">curl 'https://www.hackerpublicradio.org/eps/hpr[1391-3657].ogg' -o "hpr#1.ogg"</span>
|
|
||||||
</li>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
<ul>
|
|
||||||
<li>spx:<br />
|
|
||||||
<span style="font-family:monospace;">curl 'https://www.hackerpublicradio.org/eps/hpr[1391-3657].spx' -o "hpr#1.spx"</span>
|
|
||||||
</li>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
<ul>
|
|
||||||
<li>mp3:<br />
|
|
||||||
<span style="font-family:monospace;">curl 'https://www.hackerpublicradio.org/eps/hpr[1391-3657].mp3' -o "hpr#1.mp3"</span>
|
|
||||||
</li>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
<footer>
|
|
||||||
<p>Big to DeepGeek and the team for providing the BitTorrent service.</p>
|
|
||||||
</footer>
|
|
||||||
</article>
|
|
@ -17,7 +17,7 @@
|
|||||||
<p class="meta"><!--% episode_navigation %-->
|
<p class="meta"><!--% episode_navigation %-->
|
||||||
</p>
|
</p>
|
||||||
<p><!--% show_avatar(episode.hostid, episode.host) %-->
|
<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>
|
Hosted by <a href="<!--% absolute_path(baseurl) %-->correspondents/<!--% zero_pad_left(episode.hostid) %-->.html"><!--% episode.host %--></a> on <span><!--% 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) %-->
|
<!--% display_tags(episode.tags) %-->
|
||||||
|
|
||||||
<label>Comments: </label><!--% display_comments_tally(episode.id, episode.eps_tally) %--> <br>
|
<label>Comments: </label><!--% display_comments_tally(episode.id, episode.eps_tally) %--> <br>
|
||||||
@ -56,7 +56,7 @@ Subscribe to the comments <a href="<!--% absolute_path(baseurl) %-->comments.rss
|
|||||||
<!--% FOREACH comment IN comments_result %-->
|
<!--% FOREACH comment IN comments_result %-->
|
||||||
<h5 id="comment_<!--% comment.id %-->"><a href="/eps/hpr<!--% zero_pad_left(episode.id) %-->/index.html#comment_<!--% comment.id %-->">Comment #<!--% comment_index %--></a> posted on <!--% comment.comment_timestamp %--> by <!--% comment.comment_author_name %--></h5>
|
<h5 id="comment_<!--% comment.id %-->"><a href="/eps/hpr<!--% zero_pad_left(episode.id) %-->/index.html#comment_<!--% comment.id %-->">Comment #<!--% comment_index %--></a> posted on <!--% comment.comment_timestamp %--> by <!--% comment.comment_author_name %--></h5>
|
||||||
<h4><!--% comment.comment_title %--></h4>
|
<h4><!--% comment.comment_title %--></h4>
|
||||||
<p class="comment"><!--% comment.comment_text FILTER html_line_break %--></p>
|
<!--% comment.comment_text FILTER html_para %-->
|
||||||
<!--% comment_index = comment_index + 1 %-->
|
<!--% comment_index = comment_index + 1 %-->
|
||||||
<!--% END %-->
|
<!--% END %-->
|
||||||
|
|
||||||
@ -110,18 +110,9 @@ Subscribe to the comments <a href="<!--% absolute_path(baseurl) %-->comments.rss
|
|||||||
</tr>
|
</tr>
|
||||||
<!-- . -->
|
<!-- . -->
|
||||||
<tr>
|
<tr>
|
||||||
<td>Who is the <strong>host</strong> of this show?</td>
|
<td>What is the <strong>HOST_ID</strong> for the host of this show?</td>
|
||||||
<td>
|
<td>
|
||||||
<select required name="hostid" id="hostid">
|
<input required type="text" name="hostid" size="20" maxlength="5" placeholder="Type the host number"></td>
|
||||||
<option value="Spammer" selected="selected">Spammer</option>
|
|
||||||
<option value="Spammer">Linus Torvalds</option>
|
|
||||||
<option value="Spammer">Marie Curie</option>
|
|
||||||
<option value="<!--% episode.hostid %-->"><!--% episode.host %--></option>
|
|
||||||
<option value="Spammer">Alan Turing</option>
|
|
||||||
<option value="Spammer">Terry Pratchett</option>
|
|
||||||
<option value="Spammer">Yuri Gagarin</option>
|
|
||||||
</select>
|
|
||||||
<td>
|
|
||||||
<td>
|
<td>
|
||||||
<!-- . -->
|
<!-- . -->
|
||||||
<tr>
|
<tr>
|
||||||
|
@ -55,7 +55,7 @@
|
|||||||
<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>
|
<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>
|
<h3><!--% latest_episodes.summary%--></h3>
|
||||||
<p class="meta"$><!--% show_avatar(latest_episodes.hostid, latest_episodes.host, host_cnt) %-->
|
<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>
|
Hosted by <a href="<!--% absolute_path(baseurl) %-->correspondents/<!--% zero_pad_left(latest_episodes.hostid) %-->.html"><!--% latest_episodes.host %--></a> on <!--% 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) %-->
|
<!--% display_tags(latest_episodes.tags) %-->
|
||||||
<span><!--% show_series(latest_episodes.series, latest_episodes.seriesid) %--></span>
|
<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>
|
<span><label>Comments: </label><!--% display_comments_tally(latest_episodes.id, latest_episodes.eps_tally) %--></span><br>
|
||||||
@ -69,7 +69,7 @@
|
|||||||
</article>
|
</article>
|
||||||
<!--% host_cnt = host_cnt + 1 %-->
|
<!--% host_cnt = host_cnt + 1 %-->
|
||||||
<!--% END %-->
|
<!--% END %-->
|
||||||
<article id="previous_five_weeks">
|
<article>
|
||||||
<header>
|
<header>
|
||||||
<hr>
|
<hr>
|
||||||
<h1>Previous five weeks</h1>
|
<h1>Previous five weeks</h1>
|
||||||
|
@ -1,22 +0,0 @@
|
|||||||
<article>
|
|
||||||
<header>
|
|
||||||
<h1>Please promote HPR</h1>
|
|
||||||
</header>
|
|
||||||
<p>Feel free to use the promotional material to spread the word in your podcasts, or have them played on to other shows.</p>
|
|
||||||
<h2>General HPR promotion</h2>
|
|
||||||
<ul>
|
|
||||||
<li><a href="./media/promos/HPRpromoKlaatu.ogg">Klaatu explains HPR Daily podcast by the www.hackerpublicradio.org Community for the www.hackerpublicradio.org Community</a></li>
|
|
||||||
<!--<li><a href="../media/promos/HPRpromoNewsCast.ogg">A News Caster tells us about HPR</a></li>
|
|
||||||
<li><a href="../media/promos/HPRpromoSkirlet.ogg">Skirlet tells us we need to listen to HPR</a></li>-->
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<h2>Requests for contributions</h2>
|
|
||||||
<p>
|
|
||||||
<ul>
|
|
||||||
<li><a href="./media/promos/Jude-aka-Mrs_Peter64_HPR-needs-shows.flac">Jude Mrs. Peter64 HPR needs shows</a></li>
|
|
||||||
<li><a href="./media/promos/hpr-contributor-promo-sax.ogg">slick0 basenet theme</a></li>
|
|
||||||
<li><a href="./media/promos/hpr-contributor-promo-basenettheme.ogg">slick0 sax roll</a></li>
|
|
||||||
</ul>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
</article>
|
|
@ -4,27 +4,27 @@
|
|||||||
<!--% PERL %-->
|
<!--% PERL %-->
|
||||||
$Template::Stash::PRIVATE = undef; # Allow . in tag
|
$Template::Stash::PRIVATE = undef; # Allow . in tag
|
||||||
<!--% END %-->
|
<!--% END %-->
|
||||||
<!--% USE String %-->
|
|
||||||
<!--% uniq_tag_count = 0 %-->
|
<!--% uniq_tag_count = 0 %-->
|
||||||
|
<!--% comma_re = '(?x)(?:^|,\s*)(?:"((?>[^"]*)(?:""[^"]*)*)"|([^",]*))'; %-->
|
||||||
|
<!--# 'Moka5,interview, "computer science"' -->
|
||||||
<!--% FOREACH episode IN DBI.query(query_tags);
|
<!--% FOREACH episode IN DBI.query(query_tags);
|
||||||
ep_id = episode.id;
|
ep_id = episode.id;
|
||||||
ep_tags = episode.tags;
|
ep_tags = episode.tags;
|
||||||
FOREACH tag_str IN ep_tags.csv_parse;
|
FOREACH tag_str IN ep_tags.split(comma_re);
|
||||||
NEXT UNLESS tag_str;
|
NEXT UNLESS tag_str;
|
||||||
NEXT IF tag_str == '';
|
NEXT IF tag_str == '';
|
||||||
tag = tag_str.lower;
|
tag = tag_str.lower;
|
||||||
tag_index = String.new(tag).push('_');
|
|
||||||
first_char = tag.substr(0,1);
|
first_char = tag.substr(0,1);
|
||||||
IF first_char == '.';
|
IF first_char == '.';
|
||||||
first_char = '.'; # Unicode .
|
first_char = '.'; # Unicode .
|
||||||
END;
|
END;
|
||||||
IF all_tags.${first_char}.exists(tag_index);
|
IF all_tags.${first_char}.exists(tag);
|
||||||
all_tags.${first_char}.${tag_index}.count = all_tags.${first_char}.${tag_index}.count + 1;
|
all_tags.${first_char}.${tag}.count = all_tags.${first_char}.${tag}.count + 1;
|
||||||
all_tags.${first_char}.${tag_index}.urls.push(ep_id);
|
all_tags.${first_char}.${tag}.urls.push(ep_id);
|
||||||
ELSE;
|
ELSE;
|
||||||
all_tags.${first_char}.${tag_index}.count = 1;
|
all_tags.${first_char}.${tag}.count = 1;
|
||||||
uniq_tag_count = uniq_tag_count + 1;
|
uniq_tag_count = uniq_tag_count + 1;
|
||||||
all_tags.${first_char}.${tag_index}.urls = [ep_id];
|
all_tags.${first_char}.${tag}.urls = [ep_id];
|
||||||
END;
|
END;
|
||||||
END;
|
END;
|
||||||
END %-->
|
END %-->
|
||||||
@ -53,7 +53,7 @@ END %-->
|
|||||||
<ul class="columns3">
|
<ul class="columns3">
|
||||||
<!--% FOREACH first_char IN all_first %-->
|
<!--% FOREACH first_char IN all_first %-->
|
||||||
<!--% IF all_tags.${first_char} %-->
|
<!--% IF all_tags.${first_char} %-->
|
||||||
<li><a href="<!--% absolute_path(baseurl) %-->tags.html#<!--% tag_to_id(String.new(all_tags.${first_char}.keys.sort.first).chop) %-->"><strong><!--% first_char %--></strong></a></li>
|
<li><a href="<!--% absolute_path(baseurl) %-->tags.html#<!--% all_tags.${first_char}.keys.sort.first %-->"><strong><!--% first_char %--></strong></a></li>
|
||||||
<!--% END %-->
|
<!--% END %-->
|
||||||
<!--% END %-->
|
<!--% END %-->
|
||||||
</ul>
|
</ul>
|
||||||
@ -63,12 +63,11 @@ END %-->
|
|||||||
<p class="ralign"><a href="<!--% absolute_path(baseurl) %-->tags.html#TOP">↑ Go to index</a></p>
|
<p class="ralign"><a href="<!--% absolute_path(baseurl) %-->tags.html#TOP">↑ Go to index</a></p>
|
||||||
<h3>Tags beginning with '<!--% first_char %-->'</h3>
|
<h3>Tags beginning with '<!--% first_char %-->'</h3>
|
||||||
<ul>
|
<ul>
|
||||||
<!--% FOREACH tag_index IN all_tags.${first_char}.keys.sort %-->
|
<!--% FOREACH tag IN all_tags.${first_char}.keys.sort %-->
|
||||||
<!--% tag = String.new(tag_index).chop; tag_id = String.new(tag_index).chop; %-->
|
|
||||||
<li>
|
<li>
|
||||||
<a id="<!--% tag_to_id(tag_id) %-->"><strong><!--% tag %--></strong></a>:
|
<a id="<!--% tag %-->"><strong><!--% tag %--></strong></a>:
|
||||||
<!--% ep_links = [] %-->
|
<!--% ep_links = [] %-->
|
||||||
<!--% FOREACH ep_id IN all_tags.${first_char}.${tag_index}.urls.nsort;
|
<!--% FOREACH ep_id IN all_tags.${first_char}.${tag}.urls.nsort;
|
||||||
ep_links.push("<a href=\"${absolute_path(baseurl)}eps/hpr" _ zero_pad_left(ep_id) _ '/index.html"'
|
ep_links.push("<a href=\"${absolute_path(baseurl)}eps/hpr" _ zero_pad_left(ep_id) _ '/index.html"'
|
||||||
' target="_blank" aria-label="' _ tag _
|
' target="_blank" aria-label="' _ tag _
|
||||||
' - show ' _ ep_id _ '">' _ ep_id _ '</a>');
|
' - show ' _ ep_id _ '">' _ ep_id _ '</a>');
|
||||||
|
@ -53,7 +53,7 @@
|
|||||||
<p class="meta"><!--% episode_navigation %-->
|
<p class="meta"><!--% episode_navigation %-->
|
||||||
</p>
|
</p>
|
||||||
<p><!--% show_avatar(episode.hostid, episode.host) %-->
|
<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>
|
Hosted by <a href="<!--% absolute_path(baseurl) %-->correspondents/<!--% zero_pad_left(episode.hostid) %-->.html"><!--% episode.host %--></a> on <span><!--% 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>
|
<!--% display_tags(episode.tags) %--> <br>
|
||||||
<!--% listen_now(episode, "twat", baseurl, media_baseurl) %-->
|
<!--% listen_now(episode, "twat", baseurl, media_baseurl) %-->
|
||||||
<!--% display_listen_in(episode.id, "twat") %-->
|
<!--% display_listen_in(episode.id, "twat") %-->
|
||||||
|
@ -52,7 +52,7 @@
|
|||||||
</h1>
|
</h1>
|
||||||
<h2>Your ideas, projects, opinions - podcasted.</h2>
|
<h2>Your ideas, projects, opinions - podcasted.</h2>
|
||||||
<h3>New episodes every weekday Monday through Friday.<br />
|
<h3>New episodes every weekday Monday through Friday.<br />
|
||||||
<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>
|
<em><small>This page was <a href="https://repo.anhonesthost.net/rho_n/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>
|
</div>
|
||||||
<hr />
|
<hr />
|
||||||
@ -67,7 +67,7 @@
|
|||||||
</main>
|
</main>
|
||||||
|
|
||||||
<footer id="footer_page">
|
<footer id="footer_page">
|
||||||
<h1 class="thick_bar">More Information...</h1>
|
<h1 class="thick_bar"><span style="padding-left: 1em;">More Information...</span></h1>
|
||||||
<div id="more_info">
|
<div id="more_info">
|
||||||
<nav class="column">
|
<nav class="column">
|
||||||
<h2>Ancestry</h2>
|
<h2>Ancestry</h2>
|
||||||
@ -82,7 +82,7 @@
|
|||||||
<h2>Social</h2>
|
<h2>Social</h2>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="<!--% absolute_url(baseurl,'/maillist') %-->" >Mailing list</a></li>
|
<li><a href="<!--% absolute_url(baseurl,'/maillist') %-->" >Mailing list</a></li>
|
||||||
<li><a rel="me" href="https://infosec.exchange/@hpr" >Mastodon</a></li>
|
<li><a href="https://botsin.space/@hpr" >Mastodon</a></li>
|
||||||
<li><a href="https://matrix.to/#/#hpr:matrix.org" >Matrix</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="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://web.libera.chat/gamja/?channels=oggcastplanet" target="_blank">#oggcastplanet</a></li>
|
||||||
@ -133,7 +133,7 @@
|
|||||||
</ul>
|
</ul>
|
||||||
</nav>
|
</nav>
|
||||||
</div><!-- more_info -->
|
</div><!-- more_info -->
|
||||||
<h1 class="thick_bar">Copyright Information</h1>
|
<h1 class="thick_bar"><span style="padding-left: 1em;">Copyright Information</span></h1>
|
||||||
<div id="copyright">
|
<div id="copyright">
|
||||||
<p>
|
<p>
|
||||||
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/">
|
||||||
@ -141,6 +141,7 @@
|
|||||||
<p>
|
<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>
|
</p>
|
||||||
|
<hr />
|
||||||
</div><!-- copyright -->
|
</div><!-- copyright -->
|
||||||
<hr />
|
<hr />
|
||||||
</footer>
|
</footer>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--% query_hpr_shows = '
|
<!--% query_hpr_shows = '
|
||||||
SELECT
|
SELECT
|
||||||
eps.id,
|
eps.id,
|
||||||
eps.explicit,
|
eps.explicit,
|
||||||
eps.date, eps.license, eps.duration,
|
eps.date, eps.license, eps.duration,
|
||||||
@ -16,9 +16,3 @@
|
|||||||
ORDER BY eps.id DESC
|
ORDER BY eps.id DESC
|
||||||
'
|
'
|
||||||
%-->
|
%-->
|
||||||
<!--% query_hpr_show_count = '
|
|
||||||
SELECT id
|
|
||||||
FROM eps
|
|
||||||
WHERE eps.hostid = ? AND eps.date < DATE_ADD(NOW(), INTERVAL 1 DAY)
|
|
||||||
'
|
|
||||||
%-->
|
|
||||||
|
@ -16,9 +16,3 @@
|
|||||||
ORDER BY eps.id + 0 DESC
|
ORDER BY eps.id + 0 DESC
|
||||||
'
|
'
|
||||||
%-->
|
%-->
|
||||||
<!--% query_hpr_show_count = '
|
|
||||||
SELECT id
|
|
||||||
FROM eps
|
|
||||||
WHERE eps.hostid = ? AND eps.date < date(\'now\', \'+1 days\')
|
|
||||||
'
|
|
||||||
%-->
|
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
<copyright>Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) License</copyright>
|
<copyright>Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) License</copyright>
|
||||||
<managingEditor>feedback.nospam@nospam.hackerpublicradio.org (HPR Feedback)</managingEditor>
|
<managingEditor>feedback.nospam@nospam.hackerpublicradio.org (HPR Feedback)</managingEditor>
|
||||||
<webMaster>admin.nospam@nospam.hackerpublicradio.org (HPR Webmaster)</webMaster>
|
<webMaster>admin.nospam@nospam.hackerpublicradio.org (HPR Webmaster)</webMaster>
|
||||||
<generator>https://repo.anhonesthost.net/HPR/hpr_generator</generator>
|
<generator>https://repo.anhonesthost.net/rho_n/hpr_generator</generator>
|
||||||
<docs>https://www.rssboard.org/rss-specification</docs>
|
<docs>https://www.rssboard.org/rss-specification</docs>
|
||||||
<ttl>600</ttl>
|
<ttl>600</ttl>
|
||||||
<image>
|
<image>
|
||||||
|
@ -14,7 +14,7 @@ from the series <em><a href="<!--% baseurl %-->series/<!--% zero_pad_left(series
|
|||||||
<!--% MACRO display_tags(tags) BLOCK %-->
|
<!--% MACRO display_tags(tags) BLOCK %-->
|
||||||
<span><label>Tags:</label> <em>
|
<span><label>Tags:</label> <em>
|
||||||
<!--% FOREACH tag IN tags.csv_parse %-->
|
<!--% FOREACH tag IN tags.csv_parse %-->
|
||||||
<a href="<!--% absolute_path(baseurl) %-->tags.html#<!--% tag_to_id(tag) %-->"><!--% tag %--></a><!--% IF loop.count == loop.size %-->.<!--% ELSE %-->,<!--% END %-->
|
<a href="<!--% absolute_path(baseurl) %-->tags.html#<!--% tag.lower %-->"><!--% tag %--></a><!--% IF loop.count == loop.size %-->.<!--% ELSE %-->,<!--% END %-->
|
||||||
<!--% END %--></em>
|
<!--% END %--></em>
|
||||||
</span>
|
</span>
|
||||||
<!--% END %-->
|
<!--% END %-->
|
||||||
@ -35,7 +35,7 @@ or
|
|||||||
<!--% END %-->
|
<!--% END %-->
|
||||||
|
|
||||||
<!--% MACRO show_meta(show, hide_tags) BLOCK %-->
|
<!--% MACRO show_meta(show, hide_tags) BLOCK %-->
|
||||||
<span><label>Released:</label> <!--% day_and_date(show.date) %-->.</span>
|
<span><label>Released:</label> <!--% show.date %-->.</span>
|
||||||
<span><label>Duration:</label> <!--% display_episode_duration(show.duration) %-->.</span>
|
<span><label>Duration:</label> <!--% display_episode_duration(show.duration) %-->.</span>
|
||||||
<span><label>Flag:</label> <!--% display_explicit(show.explicit) %-->.</span>
|
<span><label>Flag:</label> <!--% display_explicit(show.explicit) %-->.</span>
|
||||||
<span><!--% show_series(show.series, show.seriesid) %--></span> <br>
|
<span><!--% show_series(show.series, show.seriesid) %--></span> <br>
|
||||||
|
@ -49,24 +49,6 @@
|
|||||||
<!--% iso8601_date.format(date_to_format) %-->
|
<!--% iso8601_date.format(date_to_format) %-->
|
||||||
<!--% END %-->
|
<!--% END %-->
|
||||||
|
|
||||||
<!--% MACRO day_from_date(eps_date) BLOCK %-->
|
|
||||||
<!--% USE eps_day = date(format => '%A', locale => 'en_US', gmt => 1) %-->
|
|
||||||
<!--% eps_day.format("$eps_date 0:0:0") %-->
|
|
||||||
<!--% END %-->
|
|
||||||
|
|
||||||
<!--% MACRO day_and_date(eps_date) BLOCK %-->
|
|
||||||
<!--% day_from_date(eps_date) %-->, <!--% eps_date %-->
|
|
||||||
<!--% END %-->
|
|
||||||
|
|
||||||
<!--% MACRO tag_to_id(tag, is_index) BLOCK %-->
|
|
||||||
<!--% tag = tag.replace('\s+','_') %-->
|
|
||||||
<!--% IF is_index %-->
|
|
||||||
<!--% tag.upper %-->
|
|
||||||
<!--% ELSE %-->
|
|
||||||
<!--% tag.lower %-->
|
|
||||||
<!--% END %-->
|
|
||||||
<!--% END %-->
|
|
||||||
|
|
||||||
<!--% MACRO absolute_url(base, path) BLOCK %-->
|
<!--% MACRO absolute_url(base, path) BLOCK %-->
|
||||||
<!--% UNLESS base.empty %-->
|
<!--% UNLESS base.empty %-->
|
||||||
<!--% UNLESS base.substr(-1) == '/' %-->
|
<!--% UNLESS base.substr(-1) == '/' %-->
|
||||||
|
@ -1,73 +0,0 @@
|
|||||||
#!/bin/bash -
|
|
||||||
#===============================================================================
|
|
||||||
#
|
|
||||||
# FILE: check-dependencies.sh
|
|
||||||
#
|
|
||||||
# USAGE: ./check-dependencies.sh
|
|
||||||
#
|
|
||||||
# DESCRIPTION: Check that Perl module dependencies for the hpr_generator
|
|
||||||
# are installed.
|
|
||||||
#
|
|
||||||
# OPTIONS: ---
|
|
||||||
# REQUIREMENTS: ---
|
|
||||||
# BUGS: ---
|
|
||||||
# NOTES: ---
|
|
||||||
# AUTHOR: Roan "Rho`n" Horning (roan.horning@gmail.com)
|
|
||||||
# ORGANIZATION:
|
|
||||||
# CREATED: 09/05/2024 09:55:00 PM
|
|
||||||
# REVISION: ---
|
|
||||||
#===============================================================================
|
|
||||||
|
|
||||||
set -o nounset # Treat unset variables as an error
|
|
||||||
|
|
||||||
#--- FUNCTION ----------------------------------------------------------------
|
|
||||||
# NAME: is_module_installed
|
|
||||||
# DESCRIPTION: Tests if the supplied module is found on the system
|
|
||||||
# PARAMETERS: Name of the denpendent Perl module
|
|
||||||
# RETURNS: 0 if not found, 1 if found
|
|
||||||
#-------------------------------------------------------------------------------
|
|
||||||
function is_module_installed {
|
|
||||||
HR="----------------------"
|
|
||||||
perl -e "use ${1} "
|
|
||||||
if [ $? -ne 0 ]
|
|
||||||
then
|
|
||||||
echo ${HR}
|
|
||||||
else
|
|
||||||
echo "Found module ${1}"
|
|
||||||
echo ${HR}
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
MODULES=( \
|
|
||||||
"Getopt::Long" \
|
|
||||||
"Pod::Usage" \
|
|
||||||
"Config::Std" \
|
|
||||||
"Template" \
|
|
||||||
"Template::Plugin::File" \
|
|
||||||
"Template::Plugin::DBI" \
|
|
||||||
"Template::Plugin::HTML::Strip" \
|
|
||||||
"DBI" \
|
|
||||||
"Tie::DBI" \
|
|
||||||
"DBD::SQLite" \
|
|
||||||
"DBD::mysql" \
|
|
||||||
"Date::Calc" \
|
|
||||||
"Text::CSV_XS" \
|
|
||||||
)
|
|
||||||
|
|
||||||
echo "The following modules must be installed for the site-generator to function: "
|
|
||||||
for module in "${MODULES[@]}"
|
|
||||||
do
|
|
||||||
echo "* ${module}"
|
|
||||||
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 "----------------------"
|
|
||||||
|
|
||||||
for module in "${MODULES[@]}"
|
|
||||||
do
|
|
||||||
is_module_installed "${module}"
|
|
||||||
done
|
|
||||||
|
|
||||||
echo "Finished scanning."
|
|
Loading…
Reference in New Issue
Block a user