docs: replace jekyll with docusaurus

- jsnon5 not handled by pre-commit

Co-authored-by: Zachary Klosko <zklosko@users.noreply.github.com>
This commit is contained in:
jo 2022-02-09 08:01:07 +01:00 committed by Jonas L
parent 9eab3b8d17
commit 8d8e55f236
42 changed files with 8428 additions and 4263 deletions

11
docs/.gitignore vendored
View File

@ -1,11 +0,0 @@
## Custom .gitignore
################################################################################
## Github Jekyll .gitignore
## See https://github.com/github/gitignore/blob/master/Jekyll.gitignore
################################################################################
_site/
.sass-cache/
.jekyll-cache/
.jekyll-metadata

View File

@ -1,11 +0,0 @@
---
layout: 404
linkto: /search
linktext: Search
img: /img/car-radio-unsplash.jpg
photocredit: Top photo by <a href="https://unsplash.com/@shotaspot?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Frank Albrecht</a> on <a href="https://unsplash.com/s/photos/radio?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a>
---
# DEAD AIR
Sorry... there's nothing there.

View File

@ -1,5 +0,0 @@
source 'https://rubygems.org'
gem 'kramdown', '>= 2.3.0'
gem 'jekyll', '~> 4.1'

View File

@ -1,33 +0,0 @@
# Contributing to the docs
**Note:** External components for the website (Bootstrap, jQuery, Font Awesome etc.) are
now being served from CDNs instead of from the repo itself. You must be connected to the internet in order to test the site.
## Running Jekyll
Follow [these instructions](https://jekyllrb.com/docs/installation/) to install Ruby, then:
```
# Install Jekyll and Bundler gems
gem install jekyll bundler
# Install Jekyll dependencies
cd docs #must run in docs folder
bundler install
# Run Jekyll server
jekyll serve
```
## Where to find things
```
/docs -> main folder
|-- /_docs -> actual documentation lives here in markdown files
|-- /_includes -> the equilivant of components, can be inserted into HTML files
|-- /_layouts -> the HTML styling templates that make up each page
|-- /css -> CSS files live here
|-- /img -> all images, screenshots live here
|-- _config.yml -> main settings file for Jekyll
|-- Gemfile -> dependencies file for Jekyll
```

View File

@ -1,22 +0,0 @@
title: LibreTime
description: An open source radio automation server made for (and by) low-power FM stations and the rest of us.
logo: 144px.png
baseurl: "" # The subpath of your site, e.g. /blog
url: "https://libretime.org" # The base hostname & protocol for your site, e.g. http://example.com
layouts_dir: _layouts
includes_dir: _includes
favicon: favicon.ico
exclude: ["README"]
# Collections Settings
collections:
docs:
output: true
permalink: /docs/:name
# Build settings
plugins:
- kramdown

View File

@ -1,55 +0,0 @@
<footer class="footer-dark text-white font-weight-light text-white-55 pt-11 pb-5 overflow-hidden">
<div class="container ">
<div class="row justify-content-md-between">
<div class="col-md-12 col-lg-4 mb-4 mr-lg-auto">
<img class="mb-3" src="/img/logo.png" alt="Libretime" style="width: 170px;">
<p class="small font-weight-light mb-3">LibreTime is an open source radio automation solution helping communities broadcast with ease.</p>
</div>
<div class="col-sm-4 col-lg-2 mb-4">
<h4 class="h6 text-white mb-3">Contribute</h4>
<!-- Links -->
<ul class="list-unstyled">
<li class="mb-3"><a class="link-white-55" href="/contribute">Develop</a></li>
<li class="mb-3"><a class="link-white-55" href="https://opencollective.com/libretime">Donate</a></li>
</ul>
<!-- End Links -->
</div>
<div class="col-sm-4 col-lg-2 mb-4">
<h4 class="h6 text-white mb-3">Support</h4>
<!-- Links -->
<ul class="list-unstyled">
<li class="mb-3"><a class="link-white-55" href="/docs">Docs</a></li>
<li class="mb-3"><a class="link-white-55" href="/docs/troubleshooting">Troubleshooting</a></li>
</ul>
<!-- End Links -->
</div>
<div class="col-sm-4 col-lg-2 mb-4">
<h4 class="h6 text-white mb-3">Community</h4>
<!-- Links -->
<ul class="list-unstyled">
<li class="mb-3"><a class="link-white-55" href="https://discourse.libretime.org/">Discourse</a></li>
<li class="mb-3"><a class="link-white-55" href="https://chat.libretime.org/">Mattermost</a></li>
</ul>
<!-- End Links -->
</div>
</div>
<hr class="my-5 opacity-10">
<div class="row">
<div class="col-md-7">
<p class="small font-weight-light mb-md-0">Code licensed under AGPLv3; docs licensed under GPLv2. More details <a href="http://sourcefabric.booktype.pro/airtime-25-for-broadcasters/about-this-manual/">here</a>.</p>
{% if page.photocredit %}
<div class="small font-weight-light mb-md-0">{{page.photocredit}}</div>
{% endif %}
</div>
</div>
</div>
</footer>

View File

@ -1,16 +0,0 @@
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">
<!-- Custom fonts, icons for this template -->
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.14.0/css/all.min.css" rel="stylesheet" type="text/css">
<link href='https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800' rel='stylesheet' type='text/css'>
<link href='https://fonts.googleapis.com/css?family=Merriweather:400,300,300italic,400italic,700,700italic,900,900italic' rel='stylesheet' type='text/css'>
<!-- Custom styles for this template -->
<link href="/css/creative.min.css" rel="stylesheet">
<title>{{ site.title }} - {{ page.title }}</title>

View File

@ -1,25 +0,0 @@
<nav class="navbar navbar-expand-lg navbar-light fixed-top navbar-shrink" id="mainNav">
<div class="container">
<a class="navbar-brand js-scroll-trigger" href="/index">
{{ site.title }} </a>
<button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarResponsive">
<ul class="navbar-nav ml-auto">
<li class="nav-item ml-lg-4 mb-2 mb-lg-0">
<a class="nav-link px-0" href="/install"> Install</a>
</li>
<li class="nav-item ml-lg-4 mb-2 mb-lg-0">
<a class="nav-link px-0" href="/docs">Docs</a>
</li>
<li class="nav-item ml-lg-4 mb-2 mb-lg-0">
<a class="nav-link px-0" href="https://github.com/libretime/libretime" target="_blank"><i class="fab fa-github mr-1"></i> Star on Github</a>
</li>
<li class="nav-item ml-lg-4 mb-2 mb-lg-0">
<a class="nav-link px-0" href="/search"><i class="fas fa-search"></i></a>
</li>
</ul>
</div>
</div>
</nav>

View File

@ -1,43 +0,0 @@
<!-- Optional JavaScript -->
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js" integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI" crossorigin="anonymous"></script>
<script src="https://unpkg.com/bootstrap-table@1.16.0/dist/bootstrap-table.min.js"></script>
<!-- For Scroll to Top text; from https://getflywheel.com/layout/sticky-back-to-top-button-tutorial/ -->
<script>
// Set a variable for our button element.
const scrollToTopButton = document.getElementById('js-top');
const scrollFunc = () => {
// Get the current scroll value
let y = window.scrollY;
// If the scroll value is greater than the window height, let's add a class to the scroll-to-top button to show it!
if (y > 0) {
scrollToTopButton.className = "top-link show";
} else {
scrollToTopButton.className = "top-link hide";
}
};
window.addEventListener("scroll", scrollFunc);
const scrollToTop = () => {
// Let's set a variable for the number of pixels we are from the top of the document.
const c = document.documentElement.scrollTop || document.body.scrollTop;
// If that number is greater than 0, we'll scroll back to 0, or the top of the document.
// We'll also animate that scroll with requestAnimationFrame:
// https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame
if (c > 0) {
window.requestAnimationFrame(scrollToTop);
// ScrollTo takes an x and a y coordinate.
// Increase the '10' value to get a smoother/slower scroll!
window.scrollTo(0, c - c / 10);
}
};
// When the button is clicked, run our ScrolltoTop function above!
scrollToTopButton.onclick = function(e) {
e.preventDefault();
scrollToTop();
}
</script>

View File

@ -1,71 +0,0 @@
<script src="/lunr.js"></script>
<script>
{% assign counter = 0 %}
var documents = [{% for page in site.pages %}{% if page.url contains '.xml' or page.url contains 'assets' %}{% else %}{
"id": {{ counter }},
"url": "{{ site.url }}{{ page.url }}",
"title": "{{ page.title }}",
"body": "{{ page.content | markdownify | replace: '.', '. ' | replace: '</h2>', ': ' | replace: '</h3>', ': ' | replace: '</h4>', ': ' | replace: '</p>', ' ' | strip_html | strip_newlines | replace: ' ', ' ' | replace: '"', ' ' }}"{% assign counter = counter | plus: 1 %}
}, {% endif %}{% endfor %}{% for page in site.without-plugin %}{
"id": {{ counter }},
"url": "{{ site.url }}{{ page.url }}",
"title": "{{ page.title }}",
"body": "{{ page.content | markdownify | replace: '.', '. ' | replace: '</h2>', ': ' | replace: '</h3>', ': ' | replace: '</h4>', ': ' | replace: '</p>', ' ' | strip_html | strip_newlines | replace: ' ', ' ' | replace: '"', ' ' }}"{% assign counter = counter | plus: 1 %}
}, {% endfor %}{% for doc in site.docs %}{
"id": {{ counter }},
"url": "{{ site.url }}{{ doc.url }}",
"title": "{{ doc.title }}",
"body": "{{ doc.content | markdownify | replace: '.', '. ' | replace: '</h2>', ': ' | replace: '</h3>', ': ' | replace: '</h4>', ': ' | replace: '</p>', ' ' | strip_html | strip_newlines | replace: ' ', ' ' | replace: '"', ' ' }}"{% assign counter = counter | plus: 1 %}
}{% if forloop.last %}{% else %}, {% endif %}{% endfor %}];
var idx = lunr(function () {
this.ref('id')
this.field('title')
this.field('body')
documents.forEach(function (doc) {
this.add(doc)
}, this)
});
function lunr_search(term) {
document.getElementById('lunrsearchresults').innerHTML = '<ul></ul>';
if(term) {
document.getElementById('lunrsearchresults').innerHTML = "<p>Search results for '" + term + "'</p>" + document.getElementById('lunrsearchresults').innerHTML;
//put results on the screen.
var results = idx.search(term);
if(results.length>0){
//console.log(idx.search(term));
//if results
for (var i = 0; i < results.length; i++) {
// more statements
var ref = results[i]['ref'];
var url = documents[ref]['url'];
var title = documents[ref]['title'];
var body = documents[ref]['body'].substring(0,160)+'...';
document.querySelectorAll('#lunrsearchresults ul')[0].innerHTML = document.querySelectorAll('#lunrsearchresults ul')[0].innerHTML + "<li class='lunrsearchresult mb-2'><a href='" + url + "'><span class='title'>" + title + "</span><br /><span class='body'>"+ body +"</span><br /><span class='url'>"+ url +"</span></a></li>";
}
} else {
document.querySelectorAll('#lunrsearchresults ul')[0].innerHTML = "<li class='lunrsearchresult'>No results found...</li>";
}
}
return false;
}
</script>
<style>
#lunrsearchresults {padding-top: 0.2rem;}
.lunrsearchresult {padding-bottom: 1rem;}
.lunrsearchresult .title {color: #f05f40;}
.lunrsearchresult .url {color: gray;}
.lunrsearchresult a {display: block; color: black;}
.lunrsearchresult a:hover, .lunrsearchresult a:focus {text-decoration: none;}
.lunrsearchresult a:hover .title {text-decoration: underline;}
</style>
<form onSubmit="return lunr_search(document.getElementById('lunrsearch').value);">
<p><input type="text" class="form-control" id="lunrsearch" name="q" maxlength="255" value="" placeholder="Search via Lunr.js" /></p>
</form>
<div id="lunrsearchresults">
<ul class="list-line mb-0"></ul>
</div>

View File

@ -1,29 +0,0 @@
---
layout: default
---
<style>
header.masthead {
padding-top: 10rem;
padding-bottom: calc(10rem - 56px);
background-image: url("{{ page.img }}");
background-position: center center;
background-size: cover;
}
body{
font-family:Merriweather,'Helvetica Neue',Arial,sans-serif;
padding-top: 0px;
}
</style>
<!-- Splash Image -->
<header class="masthead text-center text-white d-flex">
<div class="container my-auto">
<div class="row">
<div class="col-lg-10 mx-auto">
{{ content }}
<a class="btn btn-primary btn-xl js-scroll-trigger" href="{{ page.linkto }}">{{ page.linktext }}</a>
</div>
</div>
</div>
</header>

View File

@ -1,76 +0,0 @@
---
layout: default
---
<!-- Promo Section -->
<section class="bg-primary">
<div class="container">
<div class="d-flex mh-25rem pt-11 py-6">
<div class="align-self-center">
<h1 class="text-white font-weight-light mb-3">{{ page.title }}</h1>
<nav aria-label="breadcrumb">
<ol class="breadcrumb breadcrumb-light">
<li class="breadcrumb-item"><a href="/">Home</a></li>
<li class="breadcrumb-item"><a href="/docs">Docs</a></li>
<li class="breadcrumb-item active" aria-current="page">{{ page.title }}</li>
</ol>
</nav>
</div>
</div>
</div>
<!-- SVG BG -->
<svg class="position-absolute bottom-0 left-0" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 1920 323" enable-background="new 0 0 1920 323" xml:space="preserve">
<polygon fill="#ffffff" style="fill-opacity: .05;" points="-0.5,322.5 -0.5,121.5 658.3,212.3 "></polygon>
<polygon fill="#ffffff" style="fill-opacity: .1;" points="-2,323 1920,323 1920,-1 "></polygon>
</svg>
<!-- End SVG BG -->
</section>
<!-- End Promo Section -->
<main>
<p>
<div class="container py-10">
<div class="row">
<div class="col-lg-8 mb-11 mb-lg-4 pr-lg-6">
{{ content }}
</div>
<div class="col-lg-4 mb-4">
<div class="card p-3 border-0 shadow">
<div class="card-header pb-0">
<h4 class="h5 mb-3">In This Section</h4>
</div>
<div class="card-body">
<ul class="list-line mb-0">
{% for doc in site.docs %}
{% if doc.category == page.category %}
<li class="mb-2"><a class="link-muted" href="{{doc.url}}">{{doc.title}}</a></li>
{% endif %}
{% endfor %}
</ul>
</div>
</div>
<br>
<!-- Edit Page -->
<a class="card border-0 bg-primary link-white text-white mb-4" href="https://github.com/Libretime/libretime/edit/main/docs/{{ page.path }}">
<div class="card-body z-index-1">
<div class="d-flex align-items-center">
<i class="fa fa-pencil-alt fa-3x mr-4"></i>
<p class="mb-0">Help improve this page</p>
</div>
</div>
<!-- SVG BG -->
<svg class="position-absolute bottom-0 left-0" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 1920 323" enable-background="new 0 0 1920 323" xml:space="preserve">
<polygon fill="#ffffff" style="fill-opacity: .05;" points="-0.5,322.5 -0.5,121.5 658.3,212.3 "></polygon>
<polygon fill="#ffffff" style="fill-opacity: .1;" points="-2,323 1920,323 1920,-1 "></polygon>
</svg>
<!-- End SVG BG -->
</a>
</div>
</div>
</div>
</main>

View File

@ -1,26 +0,0 @@
<!doctype html>
<html lang="en">
<head>
{% include head.html %}
</head>
<body id="page-top">
<!-- Navigation -->
{% include navbar.html %}
<!-- Scroll to Top link -->
<a class="top-link hide" href="" id="js-top">
<svg class="bi bi-arrow-up-circle-fill" width="4em" height="4em" viewBox="0 0 16 16" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zm-10.646.354a.5.5 0 1 1-.708-.708l3-3a.5.5 0 0 1 .708 0l3 3a.5.5 0 0 1-.708.708L8.5 6.207V11a.5.5 0 0 1-1 0V6.207L5.354 8.354z"/>
</svg>
<span class="screen-reader-text">Back to top</span>
</a>
{{content}}
{% include footer.html %}
{% include scripts.html %}
</body>
</html>

View File

@ -1,202 +0,0 @@
---
layout: default
---
<style>
header.masthead {
padding-top: 10rem;
padding-bottom: calc(10rem - 56px);
background-image: url("{{ page.img }}");
background-position: center center;
background-size: cover;
}
body{
font-family:Merriweather,'Helvetica Neue',Arial,sans-serif;
padding-top: 0px;
}
</style>
<!-- Splash Image -->
<header class="masthead text-center text-white d-flex">
<div class="container my-auto">
<div class="row">
<div class="col-lg-10 mx-auto">
{{ content }}
<a class="btn btn-primary btn-xl js-scroll-trigger" href="{{ page.linkto }}">{{ page.linktext }}</a>
</div>
</div>
</div>
</header>
<!-- Features Block -->
<section id="features">
<div class="container">
<div class="row">
<div class="col-lg-12 text-center">
<h2 class="section-heading">Key features include</h2>
</div>
</div>
</div>
<div class="container">
<div class="row">
<div class="col-lg-3 col-md-6 text-center">
<div class="service-box mt-5 mx-auto">
<i class="fas fa-4x fa-music text-primary mb-3 sr-icon-1"></i>
<h3 class="mb-3">Library Intelligence</h3>
<p class="text-muted mb-0">From designing intelligent &amp; automated playlists to drag-and-drop visual editing &amp; cuing, managing your library and playlists has never been simpler.</p>
</div>
</div>
<div class="col-lg-3 col-md-6 text-center">
<div class="service-box mt-5 mx-auto">
<i class="fas fa-4x fa-th-list text-primary mb-3 sr-icon-2"></i>
<h3 class="mb-3">Programming</h3>
<p class="text-muted mb-0">Schedule your live and pre-programmed shows easily with a drag-and-drop style calendar, additionally all content broadcasted is logged for efficient reporting to media licensing authorities.</p>
</div>
</div>
<div class="col-lg-3 col-md-6 text-center">
<div class="service-box mt-5 mx-auto">
<i class="fas fa-4x fa-users text-primary mb-3 sr-icon-3"></i>
<h3 class="mb-3">DJ Management</h3>
<p class="text-muted mb-0">Libretime's user management allows for the simple creation of hierarchical staff who can control their broadcast slots associated with them from anywhere on the planet!</p>
</div>
</div>
<div class="col-lg-3 col-md-6 text-center">
<div class="service-box mt-5 mx-auto">
<i class="fas fa-4x fa-broadcast-tower text-primary mb-3 sr-icon-4"></i>
<h3 class="mb-3">AM/FM &amp; Web</h3>
<p class="text-muted mb-0">LibreTime is flexible, allowing you to run your internet radio station entirely from a cloud VM with its built-in Icecast server or plug its analog output into the mixer at your broadcast AM or FM station.</p>
</div>
</div>
</div>
</div>
</section>
<!-- Screenshots gallery -->
<section class="p-0" id="screenshots">
<div class="container-fluid p-0">
<div class="row no-gutters popup-gallery">
<div class="col-lg-4 col-sm-6">
<a class="portfolio-box" href="/docs/dashboard">
<img class="img-fluid" src="/img/portfolio/library.jpg" alt="">
<div class="portfolio-box-caption">
<div class="portfolio-box-caption-content">
<div class="project-category text-faded">
Intelligent Library
</div>
</div>
</div>
</a>
</div>
<div class="col-lg-4 col-sm-6">
<a class="portfolio-box" href="/docs/listener-stats">
<img class="img-fluid" src="/img/portfolio/stream-stats.jpg" alt="">
<div class="portfolio-box-caption">
<div class="portfolio-box-caption-content">
<div class="project-category text-faded">
Streaming Listener Statistics
</div>
</div>
</div>
</a>
</div>
<div class="col-lg-4 col-sm-6">
<a class="portfolio-box" href="/docs/scheduling-shows">
<img class="img-fluid" src="/img/portfolio/scheduling.jpg" alt="">
<div class="portfolio-box-caption">
<div class="portfolio-box-caption-content">
<div class="project-category text-faded">
Show Scheduling
</div>
</div>
</div>
</a>
</div>
<div class="col-lg-4 col-sm-6">
<a class="portfolio-box" href="/docs/microsite">
<img class="img-fluid" src="/img/portfolio/builtin-microsite.jpg" alt="">
<div class="portfolio-box-caption">
<div class="portfolio-box-caption-content">
<div class="project-category text-faded">
Built-in Microsite
</div>
</div>
</div>
</a>
</div>
<div class="col-lg-4 col-sm-6">
<a class="portfolio-box" href="/docs/playout-history">
<img class="img-fluid" src="/img/portfolio/playout-history.jpg" alt="">
<div class="portfolio-box-caption">
<div class="portfolio-box-caption-content">
<div class="project-category text-faded">
Playout History &amp; Auditing
</div>
</div>
</div>
</a>
</div>
<div class="col-lg-4 col-sm-6">
<a class="portfolio-box" href="/docs/podcasts">
<img class="img-fluid" src="/img/portfolio/podcasts.jpg" alt="">
<div class="portfolio-box-caption">
<div class="portfolio-box-caption-content">
<div class="project-category text-faded">
Podcast Automation &amp; Scheduling
</div>
</div>
</div>
</a>
</div>
</div>
</div>
</section>
<!-- "Our Biggest Fans" Section -->
<section class="" id="biggest-fans">
<div class="container text-center">
<div class="row">
<div class="col-lg-12 text-center">
<h2 class="section-heading">Our Biggest Fans</h2>
</div>
</div>
<p>
<div class="station-logos">
<div class="station-logos-row">
<a class="station-logos-col" href="https://www.wrir.org" target="_blank">
<img src="img/stations/wrir973.png" alt="WRIR 97.3 FM">
</a>
<a class="station-logos-col" href="http://wcrsfm.org/" target="_blank">
<img src="img/stations/wrcs927.png" alt="WCRS 92.7 FM">
</a>
<a class="station-logos-col" href="https://rabe.ch/" target="_blank">
<img src="img/stations/rabe956.svg" alt="Rabe 95.6">
</a>
<a class="station-logos-col" href="https://campus-clermont.net/" target="_blank">
<img src="img/stations/radiocampus933.png" alt="Radio Campus 93.3">
</a>
</div>
</div>
</div>
</section>
<div class="container">
<section class="" id="get-started">
<div class="col-lg-10 mx-auto text-center">
<h2 class="section-heading">Get started with Libretime <span class="badge badge-secondary">Alpha</span></h2>
<br>
<div class="row">
{% for action in page.actions %}
<div class="col-sm-6">
<div class="card">
<div class="card-body">
<h5 class="card-title">{{action.title}}</h5>
<p class="card-text">{{action.text}}</p>
<a href="{{action.linkto}}" class="btn btn-primary">{{action.linktext}}</a>
</div>
</div>
</div>
{% endfor %}
</div>
</div>
</section>
</div>

View File

@ -1,366 +0,0 @@
/*!
* Start Bootstrap - Libretime v1.0.0 ()
* Copyright 2013-2018
* Licensed under MIT (https://github.com/BlackrockDigital/libretime-website/blob/master/LICENSE)
*/
body,html{
width:100%;height:100%
}
body{
font-family:Merriweather,'Helvetica Neue',Arial,sans-serif;
padding-top: 57px;
}
hr{
max-width:auto;border-width:2px;border-color:#f05f40
}
hr.light{
border-color:#fff
}
img{
width:100%;
max-width: 600px;
}
a{
color:#f05f40;
-webkit-transition:all .2s;
transition:all .2s;
}
a:hover{
color:#f05f40
}
h1,h2,h3,h4,h5,h6{
font-family:'Open Sans','Helvetica Neue',Arial,sans-serif;
}
h1,h2{
margin-top: 30px; /* adding padding on top of lead headings */
}
/* Correcting overscroll on TOC links */
:target{
padding-top: 57px;
}
/* Table Properties */
table{
padding: 20px;
}
th{
background-color: #f05f40;
text-align: center;
color: white;
}
tr, td{
padding: 5px;
text-align: left;
border: 2px solid #f05f40
}
/* Theme Colors */
.bg-primary{
background-color:#f05f40!important
}
.bg-dark{
background-color:#212529!important
}
.footer-dark{
background-color:#212529!important;
padding:2rem 0
}
.text-faded{
color:rgba(255,255,255,.9)
}
div.text-footer{
text-align: center;
}
/* Changed padding */
section{padding:2rem 0}
.section-heading{margin-top:0}
::-moz-selection{color:#fff;background:#212529;text-shadow:none}
::selection{color:#fff;background:#212529;text-shadow:none}
img::-moz-selection{color:#fff;background:0 0}
img::selection{color:#fff;background:0 0}
img::-moz-selection{color:#fff;background:0 0}
#mainNav{
border-bottom:1px solid rgba(33,37,41,.1);background-color:#fff;font-family:'Open Sans','Helvetica Neue',Arial,sans-serif;-webkit-transition:all .2s;transition:all .2s
}
#mainNav .navbar-brand{
font-weight:700;
text-transform:uppercase;
color:#f05f40;
font-family:'Open Sans','Helvetica Neue',Arial,sans-serif
}
#mainNav .navbar-brand:focus,
#mainNav .navbar-brand:hover{color:#f05f40}
#mainNav .navbar-nav>li.nav-item>a.nav-link,
#mainNav .navbar-nav>li.nav-item>a.nav-link:focus{
font-size:.9rem;font-weight:700;text-transform:uppercase;color:#212529
}
#mainNav .navbar-nav>li.nav-item>a.nav-link:focus:hover,
#mainNav .navbar-nav>li.nav-item>a.nav-link:hover{color:#f05f40}
#mainNav .navbar-nav>li.nav-item>a.nav-link.active,
#mainNav .navbar-nav>li.nav-item>a.nav-link:focus.active{color:#f05f40!important;background-color:transparent}
#mainNav .navbar-nav>li.nav-item>a.nav-link.active:hover,
#mainNav .navbar-nav>li.nav-item>a.nav-link:focus.active:hover{background-color:transparent}
@media (min-width:992px){
#mainNav{border-color:transparent;background-color:transparent
}
#mainNav .navbar-brand{color:rgba(255,255,255,.7)}
#mainNav .navbar-brand:focus,#mainNav .navbar-brand:hover{color:#fff}
#mainNav .navbar-nav>li.nav-item>a.nav-link{padding:.5rem 1rem}
#mainNav .navbar-nav>li.nav-item>a.nav-link,
#mainNav .navbar-nav>li.nav-item>a.nav-link:focus{color:rgba(255,255,255,.7)}
#mainNav .navbar-nav>li.nav-item>a.nav-link:focus:hover,
#mainNav .navbar-nav>li.nav-item>a.nav-link:hover{color:#fff}
#mainNav.navbar-shrink{border-bottom:1px solid rgba(33,37,41,.1);background-color:#fff}
#mainNav.navbar-shrink .navbar-brand{color:#f05f40}
#mainNav.navbar-shrink .navbar-brand:focus,
#mainNav.navbar-shrink .navbar-brand:hover{color:#f05f40}
#mainNav.navbar-shrink .navbar-nav>li.nav-item>a.nav-link,
#mainNav.navbar-shrink .navbar-nav>li.nav-item>a.nav-link:focus{color:#212529}
#mainNav.navbar-shrink .navbar-nav>li.nav-item>a.nav-link:focus:hover,
#mainNav.navbar-shrink .navbar-nav>li.nav-item>a.nav-link:hover{color:#f05f40}}
header.masthead{
padding-top:10rem;padding-bottom:calc(10rem - 56px);
background-image:url(../img/header.jpg);
background-position:center center;
background-size:cover
}
header.masthead hr{
margin-top:30px;
margin-bottom:30px
}
header.masthead h1{font-size:2rem}
header.masthead p{font-weight:300}
@media (min-width:768px){
header.masthead p{font-size:1.15rem}
}
@media (min-width:992px){
header.masthead{
height:100vh;min-height:650px;padding-top:0;padding-bottom:0
}
header.masthead h1{font-size:3rem}
}
@media (min-width:1200px){
header.masthead h1{font-size:4rem}
}
.service-box{max-width:400px}
.portfolio-box{position:relative;display:block;max-width:650px;margin:0 auto}
.portfolio-box .portfolio-box-caption{
position:absolute;bottom:0;display:block;width:100%;height:100%;text-align:center;opacity:0;color:#fff;background:rgba(240,95,64,.9);-webkit-transition:all .2s;transition:all .2s
}
.portfolio-box .portfolio-box-caption .portfolio-box-caption-content{
position:absolute;top:50%;width:100%;-webkit-transform:translateY(-50%);transform:translateY(-50%);text-align:center
}
.portfolio-box .portfolio-box-caption .portfolio-box-caption-content .project-category,.portfolio-box .portfolio-box-caption .portfolio-box-caption-content .project-name{
padding:0 15px;font-family:'Open Sans','Helvetica Neue',Arial,sans-serif
}
.portfolio-box .portfolio-box-caption .portfolio-box-caption-content .project-category{
font-size:14px;font-weight:600;text-transform:uppercase
}
.portfolio-box .portfolio-box-caption .portfolio-box-caption-content .project-name{font-size:18px}.portfolio-box:hover .portfolio-box-caption{opacity:1}.portfolio-box:focus{outline:0}
@media (min-width:768px){
.portfolio-box .portfolio-box-caption .portfolio-box-caption-content .project-category{font-size:16px}
.portfolio-box .portfolio-box-caption .portfolio-box-caption-content .project-name{font-size:22px}
}
.text-primary{color:#f05f40!important}
.btn{
font-weight:700;text-transform:uppercase;border:none;border-radius:300px;font-family:'Open Sans','Helvetica Neue',Arial,sans-serif
}
.btn-xl{padding:1rem 2rem}
.btn-primary{background-color:#f05f40;border-color:#f05f40}
.btn-primary:active,.btn-primary:focus,.btn-primary:hover{color:#fff;background-color:#ee4b28!important}
.btn-primary:active,.btn-primary:focus{
-webkit-box-shadow:0 0 0 .2rem rgba(240,95,64,.5)!important;box-shadow:0 0 0 .2rem rgba(240,95,64,.5)!important
}
.btn-outline-full-width{border:1px solid #888;margin:5px;width:100%}
/* Blockquotes */
blockquote {
border: 2px solid #f05f40;
border-radius: 0px;
font-size: .9rem;
margin: 10px;
padding: 10px 20px;
}
blockquote p {
margin: 0;
line-height: 25px;
}
blockquote .small {
display: block;
font-size: 80%;
color: brown;
text-align: right;
}
/* Code Blocks */
code {
color: #ad462e;
font-size: .9rem;
}
pre.highlight {
border-left: 2px solid #212529;
background: white;
color: black;
font-size: .9rem;
margin: 10px;
padding: 10px 20px;
}
/* Scroll to Top */
.top-link {
transition: all .25s ease-in-out;
position: fixed;
bottom: 0;
right: 0;
display: inline-flex;
cursor: pointer;
align-items: center;
justify-content: center;
margin: 0 3em 3em 0;
border-radius: 50%;
padding: .25em;
width: 50px;
height: 50px;
background-color: #F8F8F8;
}
.show {
visibility: visible;
opacity: 1;
}
.hide {
visibility: hidden;
opacity: 0;
}
.screen-reader-text {
position: absolute;
clip-path: inset(50%);
margin: -1px;
border: 0;
padding: 0;
width: 1px;
height: 1px;
overflow: hidden;
word-wrap: normal !important;
clip: rect(1px, 1px, 1px, 1px);
&:focus {
display: block;
top: 5px;
left: 5px;
z-index: 100000;
clip-path: none;
background-color: #eee;
padding: 15px 23px 14px;
width: auto;
height: auto;
text-decoration: none;
line-height: normal;
color: #444;
font-size: 1em;
clip: auto !important;
}
}
/* Station Logos for Splash Page */
.station-logos img {
max-height: 200px;
max-width: 200px;
margin: auto;
}
.station-logos-row {
display: flex;
}
.station-logos-col {
flex: 25%;
padding: 5px;
}
/*------------------------------------
List
------------------------------------*/
.list-line {
list-style: none;
padding-left: 0;
}
.list-line li {
position: relative;
color: #FF6745;
padding-left: 1.5rem;
}
.list-line li::before {
position: absolute;
top: 0;
left: 0;
content: "-";
color: #FF6745;
}
.list-icon {
list-style: none;
padding-left: 0;
}
.list-icon li {
position: relative;
color: #212529;
padding-left: 1.8rem;
margin-bottom: 1.8rem;
}
.list-icon li::before {
position: absolute;
top: 0;
left: 0;
}
.list-icon-star li::before {
content: "\f005";
font-family: "Font Awesome 5 Free";
font-weight: 400;
color: #007bff;
}

View File

@ -1,141 +0,0 @@
---
layout: default
title: Docs
---
<main>
<section class="text-center pt-11 pb-6">
<div class="container">
<div class="w-md-75 w-lg-50 mx-auto text-center mb-5">
<h2 class="h3 text-center">Knowledge Base</h2>
<p>All of the guides you need to set up, maintain, and use Libretime, all in one place.</p>
</div>
<div class="row">
<div class="col-md-4 mb-5">
<div class="card p-3 border-0 shadow">
<div class="card-header border-0"><i class="fas fa-save fa-3x text-dark"></i></div>
<div class="card-body pt-0">
<h4 class="h5 mb-2"><a class="link-dark" href="/install">Install</a></h4>
<p class="card-text mb-4">Get Libretime up and running in just 10 minutes.</p>
</div>
</div>
</div>
<div class="col-md-4 mb-5">
<div class="card p-3 border-0 shadow">
<div class="card-header border-0"><i class="fas fa-wrench fa-3x text-dark"></i></div>
<div class="card-body pt-0">
<h4 class="h5 mb-2"><a class="link-dark" href="/docs/host-configuration">Configure</a></h4>
<p class="card-text mb-4">Prepare Libretime for primetime.</p>
</div>
</div>
</div>
<div class="col-md-4 mb-5">
<div class="card p-3 border-0 shadow">
<div class="card-header border-0"><i class="far fa-clock fa-3x text-dark"></i></div>
<div class="card-body pt-0">
<h4 class="h5 mb-2"><a class="link-dark" href="/docs/scheduling-shows">Schedule Shows</a></h4>
<p class="card-text mb-4">Putting in your first show? Start here.</p>
</div>
</div>
</div>
<div class="col-md-4 mb-5">
<div class="card p-3 border-0 shadow">
<div class="card-header border-0"><i class="fa fa-users fa-3x text-dark"></i></div>
<div class="card-body pt-0">
<h4 class="h5 mb-2"><a class="link-dark" href="/docs/users">User Accounts</a></h4>
<p class="card-text mb-4">Learn how to add, change, and delete user accounts.</p>
</div>
</div>
</div>
<div class="col-md-4 mb-5">
<div class="card p-3 border-0 shadow">
<div class="card-header border-0"><i class="fas fa-people-carry fa-3x text-dark"></i></div>
<div class="card-body pt-0">
<h4 class="h5 mb-2"><a class="link-dark" href="/contribute">Contribute to Libretime</a></h4>
<p class="card-text mb-4">Love what we do? Help us out!</p>
</div>
</div>
</div>
<div class="col-md-4 mb-5">
<div class="card p-3 border-0 shadow">
<div class="card-header border-0"><i class="fa fa-exclamation-triangle fa-3x text-dark"></i></div>
<div class="card-body pt-0">
<h4 class="h5 mb-2"><a class="link-dark" href="/docs/troubleshooting">Troubleshooting</a></h4>
<p class="card-text mb-4">Something not working? Here's a quick guide to fixing Libretime.</p>
</div>
</div>
</div>
</div>
</div>
</section>
<!-- Section -->
<div class="container">
<div class="card shadow-sm">
<div class="card-body p-4 px-md-7">
<div class="d-md-flex align-items-center">
<div class="w-100 mb-3 mb-md-0 pr-md-5">
<h2 class="h4 font-weight-light mb-0">Can't find what you're looking for?</h2>
<p class="font-weight-light mb-0">Ask for help on our Github repo!</p>
</div>
<div class="text-md-right w-100">
<a class="btn btn-dark" href="https://github.com/LibreTime/libretime/issues/new/choose">Submit a Request</a>
</div>
</div>
</div>
</div>
</div>
<!-- End Section -->
<section class="py-11">
<div class="container">
<div class="row">
<div class="col-md-4 mb-5 mb-md-0">
<i class="fas fa-headphones-alt fa-2x text-dark mb-3"></i>
<h3 class="h5 mb-2">Using Libretime</h3>
<ul class="list-unstyled">
{% for doc in site.docs %}
{% if doc.category == "interface" %}
<li class="mb-2"><a class="link-muted" href="{{doc.url}}">{{doc.title}}</a></li>
{% endif %}
{% endfor %}
</ul>
</div>
<div class="col-md-4 mb-5 mb-md-0">
<i class="fas fa-user-tie fa-2x text-dark mb-3"></i>
<h3 class="h5 mb-2">For Program Managers</h3>
<ul class="list-unstyled">
{% for doc in site.docs %}
{% if doc.category == "manager" %}
<li class="mb-2"><a class="link-muted" href="{{doc.url}}">{{doc.title}}</a></li>
{% endif %}
{% endfor %}
</ul>
</div>
<div class="col-md-4 mb-5 mb-md-0">
<i class="fas fa-user-secret fa-2x text-dark mb-3"></i>
<h3 class="h5 mb-2">For System Administrators</h3>
<ul class="list-unstyled">
{% for doc in site.docs %}
{% if doc.category == "admin" %}
<li class="mb-2"><a class="link-muted" href="{{doc.url}}">{{doc.title}}</a></li>
{% endif %}
{% endfor %}
</ul>
</div>
</div>
</div>
</section>
</main>

View File

@ -1,25 +0,0 @@
---
layout: home
title: Home
linkto: index#get-started
linktext: Get Libretime
img: /img/radio-unsplash.jpg
photocredit: Top photo by <a href="https://unsplash.com/@leowieling?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Leo Wieling</a> on <a href="https://unsplash.com/s/photos/radio?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a>
actions:
- title: Stable Release
text: The best so far. Just extract and run <code>sudo bash install -fiap</code>.
linkto: https://github.com/LibreTime/libretime/releases/download/3.0.0-alpha.10/libretime-3.0.0-alpha.10.tar.gz
linktext: Download 3.0-alpha-10
- title: Rolling Commits
text: Want the latest and greatest? Install from the source code.
linkto: /install
linktext: Install from Source
---
# BROADCAST WITHOUT LIMITS
Libretime is an open source radio automation and broadcasting solution helping communities get on-air with ease.
The platform can be easily deployed on dedicated hardware and VMs, on-prem or in the cloud, "free as in freedom" free.
Let your station underwrite its own destiny.

File diff suppressed because it is too large Load Diff

View File

@ -1,29 +0,0 @@
---
layout: default
title: Search
---
<section class="bg-primary">
<div class="container">
<div class="d-flex mh-25rem pt-11 py-6">
<div class="align-self-center">
<h1 class="text-white font-weight-light mb-3">{{ page.title }}</h1>
<nav aria-label="breadcrumb">
<ol class="breadcrumb breadcrumb-light">
<li class="breadcrumb-item"><a href="/">Home</a></li>
<li class="breadcrumb-item active" aria-current="page">Search</li>
</ol>
</nav>
</div>
</div>
</div>
</section>
<section class="pt-11 pb-6">
<div class="container-lg">
{% include search-lunr.html %}
</div>
</section>

View File

@ -1,15 +0,0 @@
#!/usr/bin/env bash
echo "Installing Ruby"
apt-get update -y && apt-get install -y ruby-full build-essential zlib1g-dev
export GEM_HOME=".gems"
export PATH=".gems/bin:$PATH"
echo "Installing Jekyll"
cd docs || (echo "Could not cd in docs" && exit 1)
gem install jekyll bundler
# Running Jekyll
jekyll serve

149
website/.gitignore vendored Normal file
View File

@ -0,0 +1,149 @@
## Custom .gitignore
################################################################################
# production
/build
# generated files
.cache-loader
# misc
.env.local
.env.development.local
.env.test.local
.env.production.local
## Github Node .gitignore
## See https://github.com/github/gitignore/blob/main/Node.gitignore
################################################################################
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*
.pnpm-debug.log*
# Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
# Runtime data
pids
*.pid
*.seed
*.pid.lock
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
*.lcov
# nyc test coverage
.nyc_output
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# Bower dependency directory (https://bower.io/)
bower_components
# node-waf configuration
.lock-wscript
# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release
# Dependency directories
node_modules/
jspm_packages/
# Snowpack dependency directory (https://snowpack.dev/)
web_modules/
# TypeScript cache
*.tsbuildinfo
# Optional npm cache directory
.npm
# Optional eslint cache
.eslintcache
# Optional stylelint cache
.stylelintcache
# Microbundle cache
.rpt2_cache/
.rts2_cache_cjs/
.rts2_cache_es/
.rts2_cache_umd/
# Optional REPL history
.node_repl_history
# Output of 'npm pack'
*.tgz
# Yarn Integrity file
.yarn-integrity
# dotenv environment variable files
.env
.env.development.local
.env.test.local
.env.production.local
.env.local
# parcel-bundler cache (https://parceljs.org/)
.cache
.parcel-cache
# Next.js build output
.next
out
# Nuxt.js build / generate output
.nuxt
dist
# Gatsby files
.cache/
# Comment in the public line in if your project uses Gatsby and not Next.js
# https://nextjs.org/blog/next-9-1#public-directory-support
# public
# vuepress build output
.vuepress/dist
# vuepress v2.x temp and cache directory
.temp
.cache
# Docusaurus cache and generated files
.docusaurus
# Serverless directories
.serverless/
# FuseBox cache
.fusebox/
# DynamoDB Local files
.dynamodb/
# TernJS port file
.tern-port
# Stores VSCode versions used for testing VSCode extensions
.vscode-test
# yarn v2
.yarn/cache
.yarn/unplugged
.yarn/build-state.yml
.yarn/install-state.gz
.pnp.*

25
website/README.md Normal file
View File

@ -0,0 +1,25 @@
# Website
This website is built using [Docusaurus 2](https://docusaurus.io/), a modern static website generator.
### Installation
```
$ yarn
```
### Local Development
```
$ yarn start
```
This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server.
### Build
```
$ yarn build
```
This command generates static content into the `build` directory and can be served using any static contents hosting service.

3
website/babel.config.js Normal file
View File

@ -0,0 +1,3 @@
module.exports = {
presets: [require.resolve("@docusaurus/core/lib/babel/preset")],
};

View File

@ -0,0 +1,108 @@
// @ts-check
// Note: type annotations allow type checking and IDEs autocompletion
const lightCodeTheme = require("prism-react-renderer/themes/github");
const darkCodeTheme = require("prism-react-renderer/themes/dracula");
/** @type {import('@docusaurus/types').Config} */
const config = {
title: "Libretime",
tagline: "Broadcast without limits",
url: "https://libretime.org",
baseUrl: "/",
onBrokenLinks: "throw",
onBrokenMarkdownLinks: "throw",
favicon: "img/favicon.ico",
organizationName: "libretime",
projectName: "libretime",
trailingSlash: true,
plugins: [
[
require.resolve("@cmfcmf/docusaurus-search-local"),
{
indexBlog: false,
indexPages: false,
},
],
],
i18n: {
defaultLocale: "en",
locales: ["en"],
},
presets: [
[
"classic",
/** @type {import('@docusaurus/preset-classic').Options} */
({
docs: {
path: "../docs",
sidebarPath: require.resolve("./sidebars.js"),
editUrl: "https://github.com/libretime/libretime",
},
blog: false,
theme: {
customCss: require.resolve("./src/css/custom.css"),
},
}),
],
],
themeConfig:
/** @type {import('@docusaurus/preset-classic').ThemeConfig} */
({
navbar: {
title: "Libretime",
logo: {
alt: "Libretime tower",
src: "img/logo.svg",
},
items: [
{ to: "/contribute", label: "Contribute", position: "left" },
{ type: "localeDropdown", position: "right" },
{
href: "https://github.com/libretime/libretime",
label: "GitHub",
position: "right",
},
],
},
footer: {
style: "dark",
links: [
{
title: "Community",
items: [
{
label: "Discourse",
href: "https://discourse.libretime.org",
},
{
label: "Mattermost",
href: "https://chat.libretime.org",
},
],
},
{
title: "More",
items: [
{
label: "GitHub",
href: "https://github.com/libretime/libretime",
},
],
},
],
copyright: `Code licensed under AGPLv3; docs licensed under GPLv2.`,
},
prism: {
theme: lightCodeTheme,
darkTheme: darkCodeTheme,
additionalLanguages: ["apacheconf", "ini"],
},
}),
};
module.exports = config;

45
website/package.json Normal file
View File

@ -0,0 +1,45 @@
{
"name": "website",
"version": "0.0.0",
"private": true,
"scripts": {
"docusaurus": "docusaurus",
"start": "docusaurus start",
"build": "docusaurus build",
"swizzle": "docusaurus swizzle",
"deploy": "docusaurus deploy",
"clear": "docusaurus clear",
"serve": "docusaurus serve",
"write-translations": "docusaurus write-translations",
"write-heading-ids": "docusaurus write-heading-ids",
"typecheck": "tsc"
},
"dependencies": {
"@cmfcmf/docusaurus-search-local": "^0.10.0",
"@docusaurus/core": "^2.0.0-beta.15",
"@docusaurus/preset-classic": "^2.0.0-beta.15",
"@mdx-js/react": "^1.6.21",
"clsx": "^1.1.1",
"prism-react-renderer": "^1.3.1",
"react": "^17.0.2",
"react-dom": "^17.0.2"
},
"devDependencies": {
"@docusaurus/module-type-aliases": "2.0.0-beta.15",
"@tsconfig/docusaurus": "^1.0.4",
"@types/node": "^17.0.16",
"typescript": "^4.5.5"
},
"browserslist": {
"production": [
">0.5%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
}
}

31
website/sidebars.js Normal file
View File

@ -0,0 +1,31 @@
/**
* Creating a sidebar enables you to:
- create an ordered group of docs
- render a sidebar for each doc of that group
- provide next/previous navigation
The sidebars can be generated from the filesystem, or explicitly defined here.
Create as many sidebars as you want.
*/
// @ts-check
/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */
const sidebars = {
// By default, Docusaurus generates a sidebar from the docs folder structure
tutorialSidebar: [{ type: "autogenerated", dirName: "." }],
// But you can create a sidebar manually
/*
tutorialSidebar: [
{
type: 'category',
label: 'Tutorial',
items: ['hello'],
},
],
*/
};
module.exports = sidebars;

View File

@ -0,0 +1,11 @@
.features {
display: flex;
align-items: center;
padding: 2rem 0;
width: 100%;
}
.featureSvg {
height: 200px;
width: 200px;
}

View File

@ -0,0 +1,75 @@
import useBaseUrl from "@docusaurus/useBaseUrl";
import React from "react";
import clsx from "clsx";
import styles from "./HomepageFeatures.module.css";
type FeatureItem = {
title: string;
image: string;
description: JSX.Element;
};
const FeatureList: FeatureItem[] = [
{
title: "Easy to Use",
image: "/img/undraw_happy_news.svg",
description: (
<>
Libretime was designed from the ground up to be easily installed and
used to get your radio station on the air quickly.
</>
),
},
{
title: "Powerful Library Management",
image: "/img/undraw_upload.svg",
description: (
<>
Import everything from music to sweepers to full-length programs, then
have shows and podcasts scheduled automatically.
</>
),
},
{
title: "AM/FM & Web",
image: "/img/undraw_podcast.svg",
description: (
<>
Audio playout to your broadcasting console or transmitter, or start an
internet radio station directly from the cloud. Libretime can do it all.
</>
),
},
];
function Feature({ title, image, description }: FeatureItem) {
return (
<div className={clsx("col col--4")}>
<div className="text--center">
<img
className={styles.featureSvg}
alt={title}
src={useBaseUrl(image)}
/>
</div>
<div className="text--center padding-horiz--md">
<h3>{title}</h3>
<p>{description}</p>
</div>
</div>
);
}
export default function HomepageFeatures(): JSX.Element {
return (
<section className={styles.features}>
<div className="container">
<div className="row">
{FeatureList.map((props, idx) => (
<Feature key={idx} {...props} />
))}
</div>
</div>
</section>
);
}

View File

@ -0,0 +1,39 @@
/**
* Any CSS included here will be global. The classic template
* bundles Infima by default. Infima is a CSS framework designed to
* work well for content-centric websites.
*/
/* You can override the default Infima variables here. */
:root {
--ifm-color-primary: #ee4b28;
--ifm-color-primary-dark: #e83812;
--ifm-color-primary-darker: #db3511;
--ifm-color-primary-darkest: #b42c0e;
--ifm-color-primary-light: #f06142;
--ifm-color-primary-lighter: #f16b4f;
--ifm-color-primary-lightest: #f48c75;
--ifm-code-font-size: 95%;
}
/* For readability concerns, you should choose a lighter palette in dark mode. */
html[data-theme="dark"] {
--ifm-color-primary: #e57962;
--ifm-color-primary-dark: #e06146;
--ifm-color-primary-darker: #de5538;
--ifm-color-primary-darkest: #c43d21;
--ifm-color-primary-light: #ea917e;
--ifm-color-primary-lighter: #ec9d8c;
--ifm-color-primary-lightest: #f3c1b6;
}
.docusaurus-highlight-code-line {
background-color: rgba(0, 0, 0, 0.1);
display: block;
margin: 0 calc(-1 * var(--ifm-pre-padding));
padding: 0 var(--ifm-pre-padding);
}
html[data-theme="dark"] .docusaurus-highlight-code-line {
background-color: rgba(0, 0, 0, 0.3);
}

View File

@ -1,13 +1,10 @@
---
title: Contribute to LibreTime
layout: article
category: dev
permalink: /contribute
title: Contribute to Libretime
---
> LibreTime is a fork of AirTime due to stalled development of the open source
> version. For background on this, see this
> [open letter to the Airtime community](https://gist.github.com/hairmare/8c03b69c9accc90cfe31fd7e77c3b07d).
# Contribute to Libretime
LibreTime is a fork of AirTime due to stalled development of the open source version. For background on this, see this [open letter to the Airtime community](https://gist.github.com/hairmare/8c03b69c9accc90cfe31fd7e77c3b07d).
## Code of conduct
@ -26,14 +23,16 @@ report, reproduce the behavior, and find related reports.
Before creating bug reports, please check the following list, to be sure that
you need to create one:
- **Check the [LibreTime forum](https://discourse.libretime.org/)** for existing
- Check the [LibreTime forum](https://discourse.libretime.org/) for existing
questions and discussion.
- **Check that your issue does not already exist in the
[issue tracker](https://github.com/libretime/libretime/issues?q=is%3aissue+label%3abug)**.
- Check that your issue does not already exist in the
[issue tracker](https://github.com/libretime/libretime/issues?q=is%3aissue+label%3abug).
> **Note:** If you find a **Closed** issue that seems like it is the same thing
> that you're experiencing, open a new issue and include a link to the original
> issue in the body of your new one.
:::note
If you find a closed issue that seems like it is the same thing that you're experiencing, open a new issue and include a link to the original issue in the body of your new one.
:::
When you are creating a bug report, please include as many details as possible.
Fill out the [required template](https://github.com/libretime/libretime/issues/new?labels=bug&template=bug_report.md),
@ -72,9 +71,9 @@ financially, you can do so through our
## Translation
LibreTime can run in over 15 different languages due to the gracious help of our
volunteers. Is your language not supported? Follow [this guide](/docs/interface-localization)
to add your language to LibreTime!
LibreTime can run in over 15 different languages due to the gracious help of our volunteers.
Libretime is now localized using [Weblate](https://weblate.org/en/). If you would like to contribute a language translation, create an account and start working on [our Weblate page](https://hosted.weblate.org/projects/libretime/).
## Write documentation
@ -86,12 +85,3 @@ editing the existing content so it is more accessible or creating new content
Issues pertaining to the documentation are usually marked with the [Documentation](https://github.com/libretime/libretime/labels/documentation)
label.
Our site is built by Jekyll, which has an installation guide [here](https://jekyllrb.com/docs/installation/)
to help get you started. After cloning our repo locally, enter the `docs/`
directory and run
```
bundle install
jekyll serve
```

View File

@ -0,0 +1,28 @@
/**
* CSS files with the .module.css suffix will be treated as CSS modules
* and scoped locally.
*/
.heroBanner {
padding: 4rem 0;
text-align: center;
position: relative;
overflow: hidden;
}
@media screen and (max-width: 966px) {
.heroBanner {
padding: 2rem;
}
}
.buttons {
display: flex;
align-items: center;
justify-content: center;
}
.buttonPadding {
margin-left: 0.25rem !important;
margin-right: 0.25rem !important;
}

View File

@ -0,0 +1,52 @@
import React from "react";
import clsx from "clsx";
import Layout from "@theme/Layout";
import Link from "@docusaurus/Link";
import useDocusaurusContext from "@docusaurus/useDocusaurusContext";
import styles from "./index.module.css";
import HomepageFeatures from "../components/HomepageFeatures";
function HomepageHeader() {
const { siteConfig } = useDocusaurusContext();
return (
<header className={clsx("hero hero--primary", styles.heroBanner)}>
<div className="container">
<h1 className="hero__title">{siteConfig.title}</h1>
<p className="hero__subtitle">{siteConfig.tagline}</p>
<div className={styles.buttons}>
<Link
className={clsx(
"button button--secondary button--lg",
styles.buttonPadding
)}
to="/docs/intro"
>
Get started 🚀
</Link>
<Link
className={clsx(
"button button--secondary button--lg",
styles.buttonPadding
)}
to="/release-notes"
>
Release Notes
</Link>
</div>
</div>
</header>
);
}
export default function Home(): JSX.Element {
const { siteConfig } = useDocusaurusContext();
return (
<Layout title={siteConfig.title} description={siteConfig.tagline}>
<HomepageHeader />
<main>
<HomepageFeatures />
</main>
</Layout>
);
}

View File

@ -1,28 +1,14 @@
![](https://github.com/LibreTime/libretime/raw/main/logo/logotype.png)
---
title: Libretime 3.0 Alpha 10 Released
---
The complete LibreTime documentation is available at [libretime.org](http://libretime.org).
# Release Notes for Libretime 3.0 Alpha 10
The full tarball for the `3.0.0-alpha.10` release of LibreTime is available [here](https://github.com/LibreTime/libretime/releases/download/3.0.0-alpha.10/libretime-3.0.0-alpha.10.tar.gz).
The full tarball for the **3.0.0-alpha.10** release of LibreTime is available [here](https://github.com/LibreTime/libretime/releases/download/3.0.0-alpha.10/libretime-3.0.0-alpha.10.tar.gz).
Since this is an alpha release there will be bugs in the code.
Please report new issues and/or feature requests in [the issue tracker](https://github.com/LibreTime/libretime/issues). Join our [discourse](https://discourse.libretime.org/) or chat to us on our [Mattermost instance](https://chat.libretime.org/e) if you need help and for general discussion.
## Table of Contents
- [Features](#features-3.0.0-alpha.10)
- [Bugfixes](#bugfixes-3.0.0-alpha.10)
- [Deprecated Features](#deprecated-3.0.0-alpha.10)
- [Contributors](#contributors-3.0.0-alpha.10")
- [Installation](#install-3.0.0-alpha.10")
- [Updating](#update-3.0.0-alpha.10")
- [Known Issues](#issues-3.0.0-alpha.10")
- [Interface Customization Issues](#issues-interface-issues-3.0.0-alpha.10")
- [No watched folder support](#issues-watched-3.0.0-alpha.10")
- [No Line In recording support](#issues-line-in-3.0.0-alpha.10")
- [Playout won't work if locale is missing](#issues-no-locale-3.0.0-alpha.10")
<a id="features-3.0.0-alpha.10"/>
Please report new issues and/or feature requests in the [issue tracker](https://github.com/LibreTime/libretime/issues). Join our [discourse](https://discourse.libretime.org/) or chat to us on our [Mattermost](https://chat.libretime.org/e) instance if you need help and for general discussion.
## Features
@ -33,8 +19,6 @@ Please report new issues and/or feature requests in [the issue tracker](https://
- Move Python scripts into `/usr/local/bin`
- Add REST API v2 (unstable and subject to change)
<a id="bugfixes-3.0.0-alpha.10">
## Bug Fixes
- Renamed airtime_analyzer to libretime-analyzer
@ -48,8 +32,6 @@ Please report new issues and/or feature requests in [the issue tracker](https://
- Clean up CORS setup in the installer
- Pin the `setuptools` version to ensure older versions of LibreTime can still be installed
<a id="deprecated-3.0.0-alpha.10">
## Deprecated Features
- Removed broken Soundcloud integration
@ -58,28 +40,24 @@ Please report new issues and/or feature requests in [the issue tracker](https://
- Removed SysV and Upstart init system files
- Removed broken My Podcasts feature
<a id="contributors-3.0.0-alpha.10">
## Contributors
The LibreTime project wants to thank the following contributors for authoring PRs to this release:
- @jooola
- @paddatrapper
- @xabispacebiker
- @malespiaut
- @zklosko
- @brekemeier
- @jeromelebleu
- @danielhjames
- @rjhelms
- @hairmare
<a id="install-3.0.0-alpha.10">
- [@jooola](https://github.com/jooola)
- [@paddatrapper](https://github.com/paddatrapper)
- [@xabispacebiker](https://github.com/xabispacebiker)
- [@malespiaut](https://github.com/malespiaut)
- [@zklosko](https://zklosko.github.io)
- [@brekemeier](https://github.com/brekemeier)
- [@jeromelebleu](https://github.com/jeromelebleu)
- [@danielhjames](https://github.com/danielhjames)
- [@rjhelms](https://github.com/rjhelms)
- [@hairmare](https://github.com/hairmare)
## Installation
The main installation docs may be found at [https://libretime.org/install/](https://libretime.org/install). They describe a "developer" install using the bundled `install` script.
The main installation docs may be found [here](/docs/getting-started/install/). They describe a "developer" install using the bundled `install` script.
We are preparing packages for supported distros and you can take those for a spin if you would like to. Usually the packages get built pretty soon after a release is published. If the current version is not available from the below sources you should wait for a while until they get uploaded.
@ -89,20 +67,18 @@ We are preparing packages for supported distros and you can take those for a spi
Please reference these links for further information on how to install from packages. The install docs will get updated to show how to install packages once we have validated that the packages work properly and when the packages are available from a repository allowing you to automate updating to a new version.
If you want to skip the installer GUI completely you can configure LibreTime using `legacy/build/airtime.example.conf` as an template. Due to some python/PHP differences you must remove all comments from the example to use it 😞. You'll also have to create some folder structures manually and check if the music dir got properly created directly in the database. Referencing a second `install -fiap` install on a non productive system for reference can help with this type of bootstrap.
<a id="update-3.0.0-alpha.10">
If you want to skip the installer GUI completely you can configure LibreTime using `legacy/build/airtime.example.conf` as an template. Due to some Python/PHP differences you must remove all comments from the example to use it 😞. You'll also have to create some folder structures manually and check if the music dir got properly created directly in the database. Referencing a second install -fiap install on a non productive system for reference can help with this type of bootstrap.
## Updating
See [the docs](https://libretime.org/docs/upgrading) for complete information on updating. Please ensure that you have proper [backups](https://libretime.org/docs/backing-up-the-server) and a rollback scenario in place before updating.
See [the docs](/docs/upgrading) for complete information on updating. Please ensure that you have proper backups and a rollback scenario in place before updating.
If the update does not go smoothly, it may cause significant downtime, so you should always have a fallback system available during the update to ensure broadcast continuity.
If you installed from GitHub you can `git pull` in your local working copy and re-run the `./install` script with the same `--web-root` and `--web-user` arguments you used during the initial install. Tarball users can leave out the git pull part and just call the new version of the install script.
Once the update has taken place, you will need to run the following commands to clean up old scripts and configuration:
```
```shell
# Remove the old packages
sudo pip3 uninstall \
airtime-playout \
@ -146,50 +122,38 @@ sudo rm -f \
/usr/bin/sqlformat
```
<a id="issues-3.0.0-alpha.10">
## Known Issues
The following issues may need a workaround for the time being. Please search the [issues](https://github.com/LibreTime/libretime/issues) before reporting problems not listed below.
<a id="issues-interface-issues-3.0.0-alpha.10">
The following issues may need a workaround for the time being. Please search [the issues](https://github.com/LibreTime/libretime/issues) before reporting problems not listed below.
### Interface Customization Issues
The UI works best if you don't use it in an opinionated fashion and change just the bare minimal.
<a id="issues-watched-3.0.0-alpha.10">
### No watched folder support
Currently LibreTime does not support watching folders. Uploading files through the web interface works fine and can be automated via a REST API. Re-implementing watched folder support is on the roadmap. Please consider helping out with the code to help speed things along if you want to use the feature. This is tracked in [#70](https://github.com/LibreTime/libretime/issues/70).
<a id="issues-line-in-3.0.0-alpha.10">
### No line in support
This feature went missing from LibreTime due to the fact that we based our code off of the saas-dev branch of legacy upstream and support for recording hasn't been ported to the new airtime analyzer ingest system. #42 currently tracks the progress being made on line in recording. This is tracked in [#42](https://github.com/LibreTime/libretime/issues/42).
<a id="issues-no-locale-3.0.0-alpha.10">
### Playout won't work if locale is missing
Some minimal OS installs do not have a default locale configured. This only seems to affect some VPS installs as they often do not have a locale setup in the default images provided. This is tracked in [#317](https://github.com/LibreTime/libretime/issues/317).
You can set up the locale using a combination of the following commands. You might also want to consult the documentation of your VPS provider as it may contain an official way to set up locales when provisioning a VPS.
```bash
```shell
# Set locale using systemds localectl
localectl set-locale LANG="en_US.utf8"
```
These instructions do not seem to work on all Debian based distros so you might need to use `update-locale` as follows.
These instructions do not seem to work on all Debian based distros so you might need to use update-locale as follows.
```
```shell
#Purge all locales but en_US.UTF-8
sudo locale-gen --purge en_US.UTF-8
#Populate LANGUAGE=
sudo update-locale LANGUAGE="en_US.UTF-8"
```
<a id="#issues-no-i18n-3.0.0-alpha.10">

0
website/static/.nojekyll Normal file
View File

View File

Before

Width:  |  Height:  |  Size: 70 KiB

After

Width:  |  Height:  |  Size: 70 KiB

View File

@ -0,0 +1,15 @@
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="163.839" height="127.68" viewBox="0 0 4335 3378" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" image-rendering="optimizeQuality" fill-rule="evenodd" clip-rule="evenodd">
<defs>
<style>
.fil2{fill:#e62129}
</style>
</defs>
<g id="Layer_x0020_1">
<g id="_986080032">
<path d="M3469 230 3701-2c393 393 635 935 635 1533 0 599-242 1141-635 1534l-232-232c333-333 539-793 539-1302 0-508-206-968-539-1301z" fill="none" />
<path d="M2167 614c225 0 431 81 590 215l-233 233c-99-75-223-120-357-120-133 0-257 45-356 120l-233-233c159-134 365-215 589-215zm141 1824 111 942h-504l112-942c-169-26-323-98-449-204l233-233c85 64 187 106 299 117v-117h-57c-70 0-127-58-127-128v-546c0-70 57-128 127-128h229c70 0 127 58 127 128v546c0 70-57 128-127 128h-57v117c112-11 214-53 299-117l233 233c-126 106-280 178-449 204zm8-1171c27 0 49 21 49 48s-22 49-49 49c-26 0-48-22-48-49s22-48 48-48zm-126 15c19 0 34 15 34 33 0 19-15 33-34 33-18 0-33-14-33-33 0-18 15-33 33-33zm-105 5c15 0 28 13 28 28 0 16-13 28-28 28-16 0-28-12-28-28 0-15 12-28 28-28zm-94 7c12 0 21 9 21 21s-9 21-21 21-21-9-21-21 9-21 21-21zm325 115c27 0 49 22 49 49 0 26-22 48-49 48-26 0-48-22-48-48 0-27 22-49 48-49zm-126 15c19 0 34 15 34 34 0 18-15 33-34 33-18 0-33-15-33-33 0-19 15-34 33-34zm-105 6c15 0 28 12 28 28 0 15-13 28-28 28-16 0-28-13-28-28 0-16 12-28 28-28zm-94 6c12 0 21 10 21 22 0 11-9 21-21 21s-21-10-21-21c0-12 9-22 21-22zm325 115c27 0 49 22 49 49s-22 49-49 49c-26 0-48-22-48-49s22-49 48-49zm-126 16c19 0 34 15 34 33s-15 33-34 33c-18 0-33-15-33-33s15-33 33-33zm-105 5c15 0 28 13 28 28 0 16-13 28-28 28-16 0-28-12-28-28 0-15 12-28 28-28zm-94 7c12 0 21 9 21 21s-9 21-21 21-21-9-21-21 9-21 21-21zm325 115c27 0 49 22 49 48 0 27-22 49-49 49-26 0-48-22-48-49 0-26 22-48 48-48zm-126 15c19 0 34 15 34 33 0 19-15 34-34 34-18 0-33-15-33-34 0-18 15-33 33-33zm-105 5c15 0 28 13 28 28 0 16-13 29-28 29-16 0-28-13-28-29 0-15 12-28 28-28zm-94 7c12 0 21 10 21 21 0 12-9 22-21 22s-21-10-21-22c0-11 9-21 21-21zm325 115c27 0 49 22 49 49s-22 49-49 49c-26 0-48-22-48-49s22-49 48-49zm-126 16c19 0 34 15 34 33s-15 33-34 33c-18 0-33-15-33-33s15-33 33-33zm-105 5c15 0 28 12 28 28 0 15-13 28-28 28-16 0-28-13-28-28 0-16 12-28 28-28zm-94 7c12 0 21 9 21 21s-9 21-21 21-21-9-21-21 9-21 21-21zm-240-749c-107 106-173 254-173 416 0 163 66 310 173 417l-232 232c-166-166-269-395-269-649 0-253 103-482 269-648l232 232zm1065-232c166 166 269 395 269 648 0 254-103 483-269 649l-232-232c107-107 173-254 173-417 0-162-66-310-173-416l232-232z" fill="#474443" />
<path class="fil2" d="M1308 2390c-220-220-356-523-356-859 0-335 136-639 356-859l-232-232c-279 280-452 665-452 1091s173 812 452 1091l232-232zM3027 672c220 220 355 524 355 859 0 336-135 639-355 859l232 232c279-279 452-665 452-1091s-173-811-452-1091l-232 232z" />
<path class="fil2" d="M866 2833c-333-333-539-793-539-1302 0-508 206-968 539-1301L634-2C241 391-1 933-1 1531c0 599 242 1141 635 1534l232-232zM3469 230c333 333 539 793 539 1301 0 509-206 969-539 1302l232 232c393-393 635-935 635-1534 0-598-242-1140-635-1533l-232 232z" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.1 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 11 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 15 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 15 KiB

6
website/tsconfig.json Normal file
View File

@ -0,0 +1,6 @@
{
"extends": "@tsconfig/docusaurus/tsconfig.json",
"compilerOptions": {
"baseUrl": "."
}
}

7799
website/yarn.lock Normal file

File diff suppressed because it is too large Load Diff