Prvni commit.
This commit is contained in:
@@ -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;
|
||||
}
|
||||
Reference in New Issue
Block a user