README update
This commit is contained in:
@@ -27,16 +27,20 @@ This demo runs with sample XMLTV feeds to showcase the interface.
|
|||||||
## ✨ Features
|
## ✨ Features
|
||||||
|
|
||||||
- 🎛️ **Timeline grid** — horizontal EPG-style view with a live "now" indicator
|
- 🎛️ **Timeline grid** — horizontal EPG-style view with a live "now" indicator
|
||||||
|
- 📅 **Date in timebar** — midnight markers show the day/date so you always know where you are
|
||||||
- 📱 **Responsive** — optimized list view on mobile
|
- 📱 **Responsive** — optimized list view on mobile
|
||||||
- ⏱️ **Live progress bar** on the currently airing program
|
- ⏱️ **Live progress bar** on the currently airing program
|
||||||
- 🕶️ **Past programs** automatically dimmed
|
- 🕶️ **Past programs** automatically dimmed
|
||||||
- 📋 **Hover tooltip** — title, synopsis, season/episode, schedule, duration
|
- 📋 **Hover tooltip** — title, synopsis, season/episode, schedule, duration
|
||||||
|
- 🎬 **Program popup** — click any program for full details + IMDb search link
|
||||||
- 🔗 **One-click copy** buttons for EPG & M3U URLs in the topbar
|
- 🔗 **One-click copy** buttons for EPG & M3U URLs in the topbar
|
||||||
- ▶️ **Built-in HLS player** — click any channel or live program to watch in a PiP overlay
|
- ▶️ **Built-in HLS player** — click any channel or live program to watch in a PiP overlay
|
||||||
- 🔀 **HTTP→HTTPS proxy** — streams Tunarr over HTTP transparently from an HTTPS page
|
- 🔀 **HTTP→HTTPS proxy** — streams Tunarr over HTTP transparently from an HTTPS page
|
||||||
- 🎨 **Theme system** — drop a CSS file in `themes/` and it appears in the menu automatically
|
- 🎨 **Theme system** — drop a CSS file in `themes/` and it appears in the menu automatically
|
||||||
- 📡 **Multi-EPG sources** — configure multiple EPG/M3U sources, switch from the topbar
|
- 📡 **Multi-EPG sources** — configure multiple EPG/M3U sources, switch from the topbar
|
||||||
- 👤 **Personal EPG** — optionally let visitors use your instance with their own EPG/M3U URLs (saved in localStorage)
|
- 👤 **Personal EPG** — optionally let visitors use your instance with their own EPG/M3U URLs (saved in localStorage)
|
||||||
|
- 🔍 **Search** — filter the grid by channel name or program title/synopsis (debounced)
|
||||||
|
- 🌍 **i18n** — auto-detects browser language, supports EN / FR / ES (add your own in `locales/`)
|
||||||
- ⚙️ **Guided setup** on first launch — no config files to edit manually
|
- ⚙️ **Guided setup** on first launch — no config files to edit manually
|
||||||
- 🔄 **Auto-reload** EPG every 30 minutes
|
- 🔄 **Auto-reload** EPG every 30 minutes
|
||||||
- 0️⃣ **Zero JS dependencies** — vanilla PHP, hls.js loaded from CDN
|
- 0️⃣ **Zero JS dependencies** — vanilla PHP, hls.js loaded from CDN
|
||||||
@@ -208,21 +212,25 @@ gridtv/
|
|||||||
├── Dockerfile
|
├── Dockerfile
|
||||||
├── docker-compose.yml
|
├── docker-compose.yml
|
||||||
├── .gitignore # config.json excluded
|
├── .gitignore # config.json excluded
|
||||||
|
├── locales/ # i18n translation files
|
||||||
|
│ ├── en.json
|
||||||
|
│ ├── fr.json
|
||||||
|
│ └── es.json
|
||||||
├── themes/ # CSS theme files
|
├── themes/ # CSS theme files
|
||||||
│ ├── default.css
|
│ ├── default.css
|
||||||
│ ├── magazine.css
|
│ ├── magazine.css
|
||||||
│ ├── cyberpunk.css
|
│ ├── cyberpunk.css
|
||||||
│ └── steampunk.css
|
│ └── steampunk.css
|
||||||
└── src/
|
└── src/
|
||||||
├── config.php # Config loader + migration
|
├── config.php # Config loader, migration, locale detection
|
||||||
├── tpl/ # HTML templates
|
├── tpl/ # HTML templates
|
||||||
│ ├── head.php # DOCTYPE, <head>, CSS
|
│ ├── head.php # DOCTYPE, <head>, CSS
|
||||||
│ ├── topbar.php # Topbar (nav, source switcher, search, theme)
|
│ ├── topbar.php # Topbar (nav, source switcher, search, theme)
|
||||||
│ ├── grid.php # Grid + mobile + PiP + overlays
|
│ ├── grid.php # Grid + mobile + PiP + overlays
|
||||||
│ ├── modals.php # Personal EPG modal
|
│ ├── modals.php # Program info modal + Personal EPG modal
|
||||||
│ └── footer.php # JS modules loader, </body></html>
|
│ └── footer.php # JS modules loader, </body></html>
|
||||||
└── js/ # JavaScript modules
|
└── js/ # JavaScript modules
|
||||||
├── config.js # Constants + PHP-injected vars
|
├── config.js # Constants + PHP-injected vars (incl. locale)
|
||||||
├── utils.js # Helpers, clock, EPG fetch
|
├── utils.js # Helpers, clock, EPG fetch
|
||||||
├── epg.js # Grid rendering
|
├── epg.js # Grid rendering
|
||||||
├── mobile.js # Mobile list view
|
├── mobile.js # Mobile list view
|
||||||
@@ -232,6 +240,7 @@ gridtv/
|
|||||||
├── player.js # HLS PiP player
|
├── player.js # HLS PiP player
|
||||||
├── themes.js # Theme switcher
|
├── themes.js # Theme switcher
|
||||||
├── search.js # Search + filter (debounced)
|
├── search.js # Search + filter (debounced)
|
||||||
|
├── program.js # Program info modal + IMDb link
|
||||||
└── live.js # Live updates + responsive
|
└── live.js # Live updates + responsive
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -296,6 +305,22 @@ GridTV parses the standard **XMLTV format**. Tested with:
|
|||||||
- ✅ [Jellyfin](https://jellyfin.org/)
|
- ✅ [Jellyfin](https://jellyfin.org/)
|
||||||
- ✅ Any XMLTV-compliant source
|
- ✅ Any XMLTV-compliant source
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🌍 Internationalization
|
||||||
|
|
||||||
|
GridTV auto-detects the visitor's browser language and serves the matching locale. Supported out of the box: **English**, **French**, **Spanish**.
|
||||||
|
|
||||||
|
To add a new language, create a file in `locales/` based on an existing one:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cp locales/en.json locales/de.json
|
||||||
|
# then translate the values
|
||||||
|
```
|
||||||
|
|
||||||
|
GridTV will automatically pick it up for browsers with that language set — no code changes needed.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🤝 Contributing
|
## 🤝 Contributing
|
||||||
@@ -322,7 +347,10 @@ GNU Affero General Public License v3.0 (AGPLv3)
|
|||||||
- Personal EPG (localStorage)
|
- Personal EPG (localStorage)
|
||||||
- Modular codebase (src/tpl + src/js)
|
- Modular codebase (src/tpl + src/js)
|
||||||
- Docker support
|
- Docker support
|
||||||
- **Search** — filter grid by channel name or program title/synopsis
|
- **Search** — filter grid by channel name or program title/synopsis (debounced)
|
||||||
|
- **Date in timebar** — midnight markers with day/date in the ruler
|
||||||
|
- **Program popup** — full details + IMDb search link on any program click
|
||||||
|
- **i18n** — EN / FR / ES with browser auto-detection, extensible via locales/
|
||||||
|
|
||||||
### 🔜 Coming soon
|
### 🔜 Coming soon
|
||||||
- **Favorites** — pin channels to the top of the grid (localStorage)
|
- **Favorites** — pin channels to the top of the grid (localStorage)
|
||||||
|
|||||||
Reference in New Issue
Block a user