Files
Malin f55c91276e feat: add videodb media index with Docker stack
- Add videodb PHP/MySQL media collection manager (Blu-ray, DVD, CD)
- Dockerfile: PHP 8.1 + Apache with GD/mysqli/exif extensions
- docker-compose.yml: app on port 6761 + MySQL 8.0 with health checks
- docker-entrypoint.sh: auto-generates config.inc.php from env vars,
  waits for MySQL, initializes DB schema idempotently
- init-db.php: CLI schema installer using app's own prefix_query() logic
- Persistent volumes for DB, cache, and cover images

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 09:49:52 +02:00

161 lines
4.1 KiB
JavaScript

/**
* Prototype javascript effects for filtering
*
* @package Templates
* @author Andreas Goetz <cpuidle@gmx.de>
* $Id: index.js,v 1.10 2009/03/26 11:17:21 andig2 Exp $
*/
/**
* Using global responder to manage indicator handling for multiple requests
*/
Ajax.Responders.register({
onCreate: function() {
if (Ajax.activeRequestCount > 0 && $('indicator1')) {
$('indicator1').setStyle({display: 'inline'});
}
},
onComplete: function() {
if(Ajax.activeRequestCount == 0 && $('indicator1')) {
$('indicator1').setStyle({display: 'none'});
}
}
});
/**
* Clean pre-populated text from input controls
*/
function clearInput(id, term_to_clear)
{
el = $(id);
if (el) {
// Clear input if it matches default value
if (el.value == term_to_clear) el.value = '';
// If the value is blank, then put back term
else if (el.value == '') el.value = term_to_clear;
}
}
Event.observe(document, 'dom:loaded', function()
{
/**
* More/less columns
*/
function send_request(event, val) {
$('columns_less').setAttribute('listcolumns', val);
new Ajax.Request('index.php', {
parameters: {ajax_render: 1, listcolumns: val},
onSuccess: function(transport) {
$('content').update(transport.responseText);
}
});
Event.stop(event);
}
$('columns_less').observe('click', function(event) {
var val = $('columns_less').getAttribute('listcolumns');
val = (val > 1) ? val-1 : 1;
send_request(event, val);
});
$('columns_more').observe('click', function(event) {
var val = $('columns_less').getAttribute('listcolumns');
val++;
send_request(event, val);
});
/**
* Render list contents and update item count
*/
function render_list(transport, json) {
$('content').update(transport.responseText);
$('count').update(json.totalresults);
// paged display
if (json.maxpageno) {
$('pageno').update(json.pageno);
$('maxpageno').update(json.maxpageno);
}
}
/**
* Filters
*/
$('showtv').observe('click', function(event) {
new Ajax.Request('index.php', {
parameters: {ajax_render: 1, showtv: ($('showtv').checked) ? 1 : 0},
onSuccess: render_list
});
});
// radio buttons
$$('#filtersalphabet input[type="radio"]').invoke('observe', 'click', function(event) {
new Ajax.Request('index.php', {
parameters: {ajax_render: 1, filter: event.element().value},
onSuccess: render_list
});
});
/*
// seen links
$$('div.list_seen a').invoke('observe', 'click', function(event) {
Event.stop(event);
$('filter'+event.element().readAttribute('filter')).click();
});
*/
/**
* Owner selection
*/
$$('#owner').invoke('observe', 'change', function(event) {
new Ajax.Request('index.php', {
parameters: {ajax_render: 1, owner: $F('owner')},
onSuccess: render_list
});
});
/**
* Media selection
*/
$$('#mediafilter').invoke('observe', 'change', function(event) {
new Ajax.Request('index.php', {
parameters: {ajax_render: 1, mediafilter: $F('mediafilter')},
onSuccess: render_list
});
});
/**
* Order selection
*/
$$('#order').invoke('observe', 'change', function(event) {
new Ajax.Request('index.php', {
parameters: {ajax_render: 1, order: $F('order')},
onSuccess: render_list
});
});
/**
* Quicksearch
*/
$('quicksearch').focus();
new Ajax.Autocompleter("quicksearch", "item_choices", "index.php", {paramName: "ajax_quicksearch",
minChars: 1, frequency: 0.2,
afterUpdateElement: function(text, li) {
document.location = 'show.php?id='+li.id;
}
});
/**
* Enable disabled controls
*/
// $$('.autoenable').invoke('writeAttribute', {disabled: false});
// $('quicksearch').writeAttribute({disabled: false});
});