Prvni commit.

This commit is contained in:
vojta@alfred
2026-02-01 00:00:07 +01:00
commit 4e5c55e846
213 changed files with 17991 additions and 0 deletions
+404
View File
@@ -0,0 +1,404 @@
/*
* [Česky]
* Projekt: Robot Karel
* Copyright: Viz KOPIROVANI v kořenovém adresáři projektu
*
* [English]
* Project: Karel, the Robot
* Copyright: See COPYING in the top level directory
*/
// JavaScript - funkce pro práci se styly
// ===========================================================================
// =~ Tovární nastavení ~=====================================================
// Styl nastavený uživatelem
nastaveni.styl = hodnota_cookie("styl");
// ===========================================================================
// =~ Globální proměnné ~=====================================================
// Názvy alternativních stylů
styly = new Array();
// Všechny pojmenované styly
styly.pojmenovane_styly = new Array();
// Všechny obrázky ve všech stylech
styly.obrazky = new Array();
styly.posledni_obrazek = undefined;
styly.pridane_obrazky = " ";
// Stav nahrávání
styly.NAHRANO = 0;
styly.CHYBA = 1;
styly.ZRUSENO = 2;
// Všechny soubory se styly, pokud se nepodařilo zjistit obrázky
styly.soubory = new Array();
styly.posledni_soubor = undefined;
styly.pridane_soubory = " ";
// ===========================================================================
// =~ Základní nastavení ~====================================================
// Zjisti všechny styly v dokumentu
var linky = document.getElementsByTagName("link");
var link_styly = new Array();
var nacteno = " ";
for ( var i = 0; i < linky.length; i++ ) {
if ( linky[i].getAttribute("rel").indexOf("stylesheet") != -1 ) {
link_styly.push( linky[i] );
var jmeno;
if ( (jmeno=linky[i].getAttribute("title")) ) {
styly.pojmenovane_styly.push( linky[i] );
var jmeno_esc = escape(jmeno);
if ( nacteno.indexOf(" "+jmeno_esc+" ") == -1 ) {
var id=linky[i].getAttribute("id");
if ( nastaveni.styl == null ) {
nastaveni.styl = jmeno;
}
styly.push( {jmeno:jmeno, trida:id} );
nacteno += jmeno_esc+" ";
}
}
}
}
// ===========================================================================
// =~ Načti všechny obrázky ~=================================================
// Přidá obrázek do fronty, pokud ještě nebyl přidán
styly.pridej_obrazek = function (obrazek)
{
var escape_url = escape(obrazek.url);
if ( styly.pridane_obrazky.indexOf(" "+escape_url+" ") == -1 ) {
styly.obrazky.push(obrazek);
styly.pridane_obrazky += escape_url + " ";
return true;
} else {
return false;
}
}
// Připraví obrázek na automatické stažení na pozadí
styly.priprav_obrazek = function (url)
{
var obrazek = new Image();
obrazek.onload = function () {
window.setTimeout(function () { styly.dalsi_obrazek(styly.NAHRANO); }, 0);
}
obrazek.onerror = function () {
window.setTimeout(function () { styly.dalsi_obrazek(styly.CHYBA); }, 0);
}
obrazek.onabort = function () {
window.setTimeout(function () { styly.dalsi_obrazek(styly.ZRUSENO); }, 0);
}
return { url: url, obrazek: obrazek };
}
// Spouští stahování obrázku (dalšího) na pozadí
styly.dalsi_obrazek = function (posledni_stav)
{
if ( this.posledni_obrazek == undefined ) {
if ( !this.obrazky.length ) {
return;
}
this.posledni_obrazek = 0;
} else {
if ( posledni_stav == styly.NAHRANO ) {
ladici_vypis(DETAIL, "styly.dalsi_obrazek",
this.obrazky[this.posledni_obrazek].url, "nahráno");
this.posledni_obrazek++;
} else {
if ( posledni_stav == styly.CHYBA ) {
ladici_vypis(CHYBA, "styly.dalsi_obrazek",
this.obrazky[this.posledni_obrazek].url,
"nepodařilo se nahrát obrázek");
} else {
ladici_vypis(CHYBA, "styly.dalsi_obrazek",
this.obrazky[this.posledni_obrazek].url, "zrušeno");
}
return;
}
}
if ( this.posledni_obrazek >= this.obrazky.length ) {
if ( this.obrazky.length ) {
ladici_vypis(INFORMACE, "styly.dalsi_obrazek", "nahráno " +
this.obrazky.length + " obrázků do vyrovnávací paměti");
}
return;
}
var obrazek = this.obrazky[this.posledni_obrazek];
if ( ! obrazek ) return;
obrazek.obrazek.src = obrazek.url;
}
styly.notifikace_nahravace = function ()
{
if ( styly.posledni_soubor >= styly.soubory.length ) return;
var soubor = styly.soubory[styly.posledni_soubor];
if ( soubor.notifikovano ) return;
var nahravac = styly.soubory[styly.posledni_soubor].nahravac;
if ( nahravac.readyState == 4 ) {
soubor.notifikovano = true;
if ( nahravac.status == 200 || nahravac.status == 304
|| ( nahravac.status == 0 && nahravac.responseText ) ) {
setTimeout( function() { styly.dalsi_soubor(styly.NAHRANO); }, 0 );
} else {
setTimeout( function() { styly.dalsi_soubor(styly.CHYBA); }, 0 );
}
}
}
// ===========================================================================
// =~ Vlastní zpracování CSS ~================================================
// Přidá soubor do fronty, pokud ještě nebyl přidán
styly.pridej_soubor = function (url)
{
var escape_url = escape(url);
if ( styly.pridane_soubory.indexOf(" "+escape_url+" ") == -1 ) {
styly.soubory.push( { url: url } );
styly.pridane_soubory += escape_url + " ";
return true;
} else {
return false;
}
}
// Započítej soubor do souborů ve frontě
styly.zapocitej_soubor = function (url)
{
var escape_url = escape(url);
if ( styly.pridane_soubory.indexOf(" "+escape_url+" ") == -1 ) {
styly.pridane_soubory += escape_url + " ";
return true;
} else {
return false;
}
}
// Spouští stahování obrázku (dalšího) na pozadí
styly.dalsi_soubor = function (posledni_stav)
{
if ( this.posledni_soubor == undefined ) {
this.posledni_soubor = 0;
} else {
var soubor = this.soubory[this.posledni_soubor];
var url = soubor.url.slice(soubor.url.indexOf("style/"));
var nahravac = soubor.nahravac;
if ( posledni_stav == styly.NAHRANO ) {
ladici_vypis(DETAIL, "styly.dalsi_soubor", url, "nahráno");
this.zpracuj_soubor( url, nahravac.responseText );
this.posledni_soubor++;
delete soubor.nahravac;
} else {
ladici_vypis(CHYBA, "styly.dalsi_soubor",
soubor.url, "nepodařilo se nahrát");
return;
}
}
if ( this.posledni_soubor >= this.soubory.length ) {
if ( this.obrazky.length == 0 ) {
ladici_vypis(CHYBA, "styly-funkce",
"vyrovnávací paměť obrázků je prázdná, očekávejte různá zpoždění");
if ( /^https?:[\/][\/]/.exec(document.URL) ) {
alert(
"Nelze dopředu načíst všechny obrázky, " +
"nenalezena vhodná metoda.\n\nOčekávejte různá zpoždění." );
}
} else {
this.dalsi_obrazek();
}
return;
}
var soubor = this.soubory[this.posledni_soubor];
if ( soubor && soubor.url ) {
soubor.nahravac = ajax.vrat_nahravac();
ajax.nahraj_soubor_pozdeji(soubor.nahravac, soubor.url,
styly.notifikace_nahravace);
}
}
// Zpracování obsahu souboru se styly
styly.zpracuj_soubor = function (soubor, obsah)
{
var pridano = 0;
var url_obrazku;
var regex = /(-image|filter:progid):[^"']*['"]\.\.\/([^'"]+)['"]/g; // "
while ( url_obrazku = regex.exec(obsah) ) {
var obrazek = styly.priprav_obrazek( url_obrazku[2] );
if ( styly.pridej_obrazek(obrazek) ) {
pridano++;
}
}
ladici_vypis(LADENI, "styly.zpracuj_soubor", soubor, "přidáno " + pridano + " obrázků");
}
// ===========================================================================
// =~ Zjisti všechny obrázky ~================================================
styly.nahraj_obrazky = function ()
{
// Které linky byly analyzovány
var pocet_analyzovano = 0;
// Projdi všechny styly a najdi background-image
if ( document.styleSheets ) {
ladici_vypis(LADENI, "styly.nahraj_obrazky", "zkouším metodu document.styleSheets");
for ( var i = 0; i < document.styleSheets.length; i++ ) {
var styleSheet = document.styleSheets[i];
var rules = new Array();
if ( styleSheet.rules ) rules = styleSheet.rules;
if ( !rules && styleSheet.cssRules ) rules = styleSheet.cssRules;
if ( !rules ) continue;
var nacteno = 0;
for ( var j = 0; j < rules.length; j++ ) {
var cssRule = rules[j];
var style = cssRule.style;
if ( typeof(style) != "object" ) continue;
var url = undefined;
if ( style.backgroundImage && style.backgroundImage != "none" ) {
url = style.backgroundImage;
} else if ( style.filter ) {
url = style.filter;
}
if ( url && url.length > 4 ) {
url = url.slice(url.indexOf('images/'));
url = url.slice(0, url.indexOf('"'));
var obrazek = styly.priprav_obrazek( url );
if ( styly.pridej_obrazek(obrazek) ) {
nacteno++;
}
}
}
var styl = styleSheet.href.slice(styleSheet.href.indexOf('style/'));
ladici_vypis(LADENI, "styly.nahraj_obrazky", styl, "nalezeno " + nacteno + " obrázků");
if ( nacteno && styly.zapocitej_soubor(styleSheet.href) ) {
pocet_analyzovano++;
}
}
ladici_vypis(LADENI, "styly.nahraj_obrazky",
"nalezeno " + pocet_analyzovano + " stylových souborů prohlížeče");
} else {
ladici_vypis(LADENI, "styly.nahraj_obrazky", "metoda document.styleSheets není dostupná");
}
// Alternativní metoda - XMLHttpRequest
if ( styly.obrazky.length == 0 || pocet_analyzovano < link_styly.length ) {
// Načti všechny styly ručně a najdi v nich background-image
if ( ajax.je_funkcni() ) {
if ( styly.obrazky.length > 0 ) {
ladici_vypis(LADENI, "styly.nahraj_obrazky", "zkouším dočíst styly metodou XMLHttpRequest");
} else {
ladici_vypis(LADENI, "styly.nahraj_obrazky", "zkouším metodu XMLHttpRequest");
}
for ( var i = 0; i < link_styly.length; i++ ) {
var url = link_styly[i].href;
if ( styly.pridej_soubor(url) ) {
var styl = url.slice(url.indexOf('style/'));
ladici_vypis(LADENI, "styly.nahraj_obrazky", styl, "bude načten");
pocet_analyzovano++;
}
}
ladici_vypis(INFORMACE, "styly.nahraj_obrazky",
"nalezeno celkem " + pocet_analyzovano + " stylových souborů");
} else {
if ( pocet_analyzovano == 0 ) {
ladici_vypis(CHYBA, "styly.nahraj_obrazky",
"nenalezena metoda pro načtení všech obrázků");
} else {
ladici_vypis(CHYBA, "styly.nahraj_obrazky",
"nenalezena metoda pro dočtení zbylých stylových souborů");
}
}
} else {
ladici_vypis(INFORMACE, "styly.nahraj_obrazky",
"nalezeno celkem " + pocet_analyzovano + " stylových souborů");
}
setTimeout( function() { styly.dalsi_soubor(); }, 0 );
}
po_spusteni( function() { styly.nahraj_obrazky(); } );
// ===========================================================================
// =~ Aktivuj správný styl ~==================================================
for ( var i = 0; i < styly.pojmenovane_styly.length; i++ ) {
var link = styly.pojmenovane_styly[i];
var jmeno = link.getAttribute("title");
if ( jmeno != nastaveni.styl ) {
link.disabled = true;
} else {
link.disabled = false;
}
}
// ===========================================================================
// =~ Základní funkce pro práci se styly ~====================================
styly.zmen_styl = function(styl, povolit)
{
for ( var i = 0; i < styly.pojmenovane_styly.length; i++ ) {
var link = styly.pojmenovane_styly[i];
if ( (povolit && link.title == styl) ||
(!povolit && link.title != styl) ) {
link.disabled = !povolit;
ladici_vypis(LADENI, "styly.zmen_styl", link.href.match(/style.*/)[0],
"vybraný:"+formatuj_text(!link.disabled));
}
}
}
// Vyber styl po puštění klávesy
styly.vyber_klavesou = function()
{
var styl;
ladici_vypis(LADENI, "styly.vyber_klavesou", "hledám vybraný styl");
for ( var i = 0; i < styly.length; i++ ) {
var element = document.getElementById('styl-'+i);
if ( element && element.checked ) {
styl = styly[i].jmeno;
ladici_vypis(LADENI, "styly.vyber_klavesou", "nalezen styl "+styl);
}
}
if ( !styl ) {
ladici_vypis(CHYBA, "styly.vyber_klavesou", "nenalezen vybraný styl");
return false;
} else {
this.vyber(styl);
}
}
// Vyber styl
styly.vyber = function(styl)
{
if ( styl == nastaveni.styl ) {
ladici_vypis(LADENI, "styly.vyber", "žádná změna stylu, zůstává "+styl);
return true;
} else {
ladici_vypis(LADENI, "styly.vyber", "změna stylu na "+styl);
}
// Nejdříve povolíme
this.zmen_styl( styl, true );
// Potom zakážeme
this.zmen_styl( styl, false );
nastav_cookie("styl", styl, 365);
if ( hodnota_cookie("styl") != styl ) {
ladici_vypis(CHYBA, "styly.vyber", "nepodařilo se nastavit cookie");
}
nastaveni.styl = styl;
return true;
}