Prvni commit.
This commit is contained in:
@@ -0,0 +1,324 @@
|
||||
/*
|
||||
* [Č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 - objekt pro zobrazování nástrojových tipů a nápovědy
|
||||
|
||||
// ===========================================================================
|
||||
// =~ Třída nástrojových tipů ~===============================================
|
||||
|
||||
// Konstruktor
|
||||
function Tooltip()
|
||||
{
|
||||
// Prodleva od posledního zobrazení, kdy se tooltip ukáže okamžitě
|
||||
this.prejeti_mysi = 100;
|
||||
|
||||
// Čas před plným zobrazením tooltipu
|
||||
this.plne_zobrazeni = 500;
|
||||
|
||||
// Objekt, nad kterým je myš
|
||||
this.objekt = null;
|
||||
|
||||
// Informace použitá pro jednoznačné rozpoznání objektu (např. #id)
|
||||
this.info = null;
|
||||
|
||||
// Detaily k objektu, jako je např. obsah tooltipu
|
||||
this.detail = null;
|
||||
|
||||
// Tooltip je momentálně zobrazen
|
||||
this.zobrazen = false;
|
||||
|
||||
// Čas ukrytí tooltipu
|
||||
this.cas_skryti = null;
|
||||
|
||||
// Časovač spuštěný před prvním zobrazením
|
||||
this.casovac_zobrazeni = null;
|
||||
|
||||
// Objekt tooltipu, jehož obsah se obnovuje při každém zobrazení tooltipu
|
||||
this.tooltip = null;
|
||||
}
|
||||
|
||||
// Myš je nad objektem - zobraz tooltip, pokud to je nutné
|
||||
Tooltip.prototype.pres = function (objekt, info, detail)
|
||||
{
|
||||
// - Pokud nezobrazuji tooltip, zavolej this.pryc
|
||||
// - Jinak:
|
||||
// * Když nebyl tooltip nikdy zobrazen, spusť časovač. Časovač spusť, i když
|
||||
// je doba od posledního skrytí větší, než nastavení. Restartuj časovač,
|
||||
// pokud objekt není ten samý a časovač už byl spuštěn.
|
||||
// * Když je tooltip skryt a čas od posledního skrytí je menší, než
|
||||
// nastavení, zobraz tooltip.
|
||||
|
||||
if ( ! this.muzu_zobrazit(info, detail) ) {
|
||||
ladici_vypis(LADENI, "tooltip.pres", info, "nezobrazuji");
|
||||
this.pryc(objekt, info, detail);
|
||||
} else {
|
||||
var cas = new Date();
|
||||
var rozdil_casu;
|
||||
if ( this.cas_skryti ) {
|
||||
rozdil_casu = cas-this.cas_skryti;
|
||||
} else {
|
||||
rozdil_casu = 0;
|
||||
}
|
||||
if ( this.cas_skryti == null ||
|
||||
this.cas_skryti && rozdil_casu >= this.prejeti_mysi ||
|
||||
!jsou_shodne(info, this.info) && this.casovac_zobrazeni
|
||||
) {
|
||||
this.objekt = objekt;
|
||||
this.info = info;
|
||||
this.detail = detail;
|
||||
this.zastav_zobrazovani(info, detail);
|
||||
|
||||
var tento_objekt = this;
|
||||
this.casovac_zobrazeni = setInterval(
|
||||
function() { tento_objekt.zobraz(objekt, info, detail); },
|
||||
this.plne_zobrazeni
|
||||
);
|
||||
|
||||
ladici_vypis(LADENI, "tooltip.pres", info, "nastavení časovače na "+
|
||||
this.plne_zobrazeni+"ms");
|
||||
} else if ( this.cas_skryti && rozdil_casu < this.prejeti_mysi ) {
|
||||
this.zobraz(objekt, info, detail);
|
||||
} else {
|
||||
ladici_vypis(LADENI, "tooltip.pres", info, "žádná změna");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Myš opustila objekt - skryj tooltip, pokud to je potřeba
|
||||
Tooltip.prototype.pryc = function (objekt, info, detail)
|
||||
{
|
||||
// Pokud byl nastaven časovač, ale tooltip ještě nebyl zobrazen, zastav
|
||||
// zobrazování. Pokud už byl zobrazen stejný objekt, skryj ho.
|
||||
var shodne = jsou_shodne(info, this.info);
|
||||
if ( this.casovac_zobrazeni || shodne ) {
|
||||
if ( shodne ) {
|
||||
ladici_vypis(LADENI, "tooltip.pryc", info, "myš úplně opustila tooltip");
|
||||
this.objekt = null;
|
||||
this.info = null;
|
||||
this.detail = null;
|
||||
this.skryj(objekt, info, detail);
|
||||
}
|
||||
this.zastav_zobrazovani(info, detail);
|
||||
} else {
|
||||
ladici_vypis(LADENI, "tooltip.pryc", info, "žádná změna");
|
||||
}
|
||||
}
|
||||
|
||||
Tooltip.prototype.zrus = function (objekt, info, detail)
|
||||
{
|
||||
// Skryj tooltip
|
||||
ladici_vypis(LADENI, "tooltip.zrus", info, "zrušení tooltipu");
|
||||
this.skryj(objekt, info, detail);
|
||||
this.cas_skryti = null;
|
||||
}
|
||||
|
||||
// Zastav zobrazování
|
||||
Tooltip.prototype.zastav_zobrazovani = function (info, detail)
|
||||
{
|
||||
if ( this.casovac_zobrazeni ) {
|
||||
ladici_vypis(LADENI, "tooltip.zastav_zobrazovani", info, "zrušení časovače");
|
||||
clearInterval( this.casovac_zobrazeni );
|
||||
this.casovac_zobrazeni = null;
|
||||
}
|
||||
}
|
||||
|
||||
// Skryj tooltip
|
||||
Tooltip.prototype.skryj = function (objekt, info, detail)
|
||||
{
|
||||
this.zastav_zobrazovani(info, detail);
|
||||
ladici_vypis(LADENI, "tooltip.skryj", info, "skrytí tooltipu");
|
||||
if ( this.zobrazen ) {
|
||||
if ( this.tooltip ) {
|
||||
this.tooltip.style.display = "none";
|
||||
this.tooltip.style.visibility = "hidden";
|
||||
}
|
||||
this.cas_skryti = new Date();
|
||||
}
|
||||
this.zobrazen = false;
|
||||
}
|
||||
|
||||
// Zobraz tooltip
|
||||
Tooltip.prototype.zobraz = function (objekt, info, detail)
|
||||
{
|
||||
this.objekt = objekt;
|
||||
this.info = info;
|
||||
this.detail = detail;
|
||||
this.zastav_zobrazovani(info, detail);
|
||||
this.zobrazen = true;
|
||||
|
||||
if ( ! this.tooltip ) this.tooltip = this.vytvor(info, detail);
|
||||
if ( this.tooltip ) {
|
||||
this.tooltip.style.zIndex = -1;
|
||||
this.tooltip.style.left = this.tooltip.style.top = "0";
|
||||
this.tooltip.style.visibility = "hidden";
|
||||
this.tooltip.style.display = "block";
|
||||
|
||||
this.obnov(this.tooltip, info, detail);
|
||||
this.pozicuj(this.tooltip, objekt, info, detail);
|
||||
|
||||
this.tooltip.style.display = "block";
|
||||
this.tooltip.style.zIndex = 1;
|
||||
this.tooltip.style.visibility = "visible";
|
||||
}
|
||||
|
||||
ladici_vypis(LADENI, "tooltip.zobraz", info, "zobrazení tooltipu");
|
||||
}
|
||||
|
||||
// Změň pozici tooltipu
|
||||
Tooltip.prototype.pozicuj = function (tooltip, objekt, info, detail)
|
||||
{
|
||||
this.uprav_rozmery(tooltip);
|
||||
|
||||
var rozmery = this.vypocti_pozici(tooltip, objekt, true);
|
||||
if ( ! rozmery.uspech ) {
|
||||
var nove_rozmery =
|
||||
this.vypocti_pozici(tooltip, objekt, false);
|
||||
if ( nove_rozmery.uspech ) {
|
||||
rozmery = nove_rozmery;
|
||||
}
|
||||
}
|
||||
|
||||
tooltip.style.left = rozmery.levy+"px";
|
||||
tooltip.style.top = rozmery.horni+"px";
|
||||
}
|
||||
|
||||
// Vypočti pozici tooltipu
|
||||
Tooltip.prototype.vypocti_pozici = function (tooltip, objekt, dole)
|
||||
{
|
||||
var rozmery_objektu = this.zjisti_rozmery(objekt);
|
||||
ladici_vypis(LADENI, "tooltip.vypocti_pozici", rozmery_objektu, "objekt");
|
||||
|
||||
var rozmery = zjisti_rozmery();
|
||||
|
||||
var tooltip_velikost = zjisti_velikost(tooltip.element_tooltip);
|
||||
|
||||
var tooltip_rozmery = {
|
||||
levy: rozmery_objektu.levy,
|
||||
pravy: rozmery_objektu.levy + tooltip_velikost.x
|
||||
};
|
||||
|
||||
if ( dole ) {
|
||||
tooltip_rozmery.horni = rozmery_objektu.dolni;
|
||||
tooltip_rozmery.dolni = rozmery_objektu.dolni + tooltip_velikost.y;
|
||||
} else {
|
||||
tooltip_rozmery.horni = rozmery_objektu.horni - tooltip_velikost.y;
|
||||
tooltip_rozmery.dolni = rozmery_objektu.horni;
|
||||
}
|
||||
|
||||
/* Pozice X:
|
||||
* Levá pozice se shoduje s objektem
|
||||
-> Když pravý okraj přesahuje okno, posuň nadoraz
|
||||
-> Když levý okraj přesahuje okno, posuň nadoraz
|
||||
-> Když pravý okraj přesahuje stránku, posuň nadoraz
|
||||
-> Když levý okraj přesahuje stránku, posuň na nulu
|
||||
*/
|
||||
|
||||
if ( tooltip_rozmery.pravy > rozmery.okno.pravy ) {
|
||||
tooltip_rozmery = posun_x( tooltip_rozmery,
|
||||
rozmery.okno.pravy-tooltip_rozmery.pravy);
|
||||
}
|
||||
if ( tooltip_rozmery.levy < rozmery.okno.levy ) {
|
||||
tooltip_rozmery = posun_x( tooltip_rozmery,
|
||||
rozmery.okno.levy-tooltip_rozmery.levy);
|
||||
}
|
||||
if ( tooltip_rozmery.pravy > rozmery.stranka.pravy ) {
|
||||
tooltip_rozmery = posun_x( tooltip_rozmery,
|
||||
rozmery.stranka.pravy-tooltip_rozmery.pravy);
|
||||
}
|
||||
if ( tooltip_rozmery.levy < rozmery.stranka.levy ) {
|
||||
tooltip_rozmery = posun_x( tooltip_rozmery,
|
||||
rozmery.stranka.levy-tooltip_rozmery.levy);
|
||||
}
|
||||
|
||||
tooltip_rozmery.uspech = (
|
||||
tooltip_rozmery.levy >= rozmery.okno.levy &&
|
||||
tooltip_rozmery.pravy <= rozmery.okno.pravy &&
|
||||
tooltip_rozmery.horni >= rozmery.okno.horni &&
|
||||
tooltip_rozmery.dolni <= rozmery.okno.dolni
|
||||
);
|
||||
|
||||
ladici_vypis(LADENI, "tooltip.vypocti_pozici", tooltip_rozmery,
|
||||
"rozměry tooltipu");
|
||||
|
||||
return tooltip_rozmery;
|
||||
}
|
||||
|
||||
// Uprav rozměry tooltipu
|
||||
Tooltip.prototype.uprav_rozmery = function (tooltip)
|
||||
{
|
||||
// Zjisti aktuální velikosti
|
||||
var rozmery = zjisti_rozmery();
|
||||
|
||||
// Šířka maximálně 30% velikosti okna, ale při zmenšení ne méně než 250px,
|
||||
// ale rozhorně ne více, než jsou rozměry stránky (ať už to znamená cokoliv
|
||||
// pro IE)
|
||||
var max;
|
||||
max = Math.max( 250, Math.floor(0.3*(rozmery.okno.pravy-rozmery.okno.levy)));
|
||||
max = Math.min( max, rozmery.stranka.pravy-rozmery.stranka.levy );
|
||||
|
||||
// Největší velikost tooltipu
|
||||
tooltip.style.width = max+"px";
|
||||
|
||||
var tooltip_velikost = zjisti_velikost(tooltip.element_tooltip);
|
||||
tooltip.style.width = tooltip_velikost.x+"px";
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
// =~ Veřejně dostupné funkce ~===============================================
|
||||
|
||||
Tooltip.prototype.prekresli = function ()
|
||||
{
|
||||
if ( this.zobrazen ) {
|
||||
if ( this.tooltip ) {
|
||||
if ( this.muzu_zobrazit( info, detail ) ) {
|
||||
ladici_vypis(LADENI, "tooltip.prekresli", info, "překreslení tooltipu");
|
||||
this.zobraz( this.objekt, this.info, this.detail );
|
||||
} else {
|
||||
ladici_vypis(LADENI, "tooltip.prekresli", info,
|
||||
"nemůže být zobrazen, skrývám");
|
||||
this.skryj( this.objekt, this.info, this.detail );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
// =~ Veřejně editovatelné funkce ~===========================================
|
||||
|
||||
// Jestli zobrazit tooltip
|
||||
Tooltip.prototype.muzu_zobrazit = function (info, detail)
|
||||
{
|
||||
var muzu = ( detail != undefined && detail != null );
|
||||
if ( ! muzu ) {
|
||||
ladici_vypis(LADENI, "tooltip.muzu_zobrazit", info,
|
||||
"nemůžu zobrazit, detail:"+formatuj_text(detail));
|
||||
}
|
||||
return muzu;
|
||||
}
|
||||
|
||||
// Zjisti rozměry objektu pro zobrazení tooltipu
|
||||
Tooltip.prototype.zjisti_rozmery = function (objekt)
|
||||
{
|
||||
return zjisti_rozmery(objekt);
|
||||
}
|
||||
|
||||
// Obnov obsah tooltipu
|
||||
Tooltip.prototype.obnov = function (tooltip, info, detail)
|
||||
{
|
||||
}
|
||||
|
||||
// Vytvoř objekt tooltipu
|
||||
Tooltip.prototype.vytvor = function (info, detail)
|
||||
{
|
||||
var tooltip = tvoric.tooltip();
|
||||
var element = document.getElementById('stranka');
|
||||
element.insertBefore(tooltip, element.firstChild);
|
||||
return tooltip;
|
||||
}
|
||||
Reference in New Issue
Block a user