Poselství

22. 6. 2012 | V kategorii Povídky | Přidejte komentář

Moje první povídka, původně zveřejněná na blogu na Lupě, 1. 2. 2010

Přišlo to jako blesk z čistého nebe.

– Máme signál.

Asi centimetrová zelená kontrolka na pulsním demodulátoru mluvila za vše.

– Kde se zapíná audio?

Sálem se rozlehl skřípavý zvuk signálu ze zdroje vzdáleného několik světelných let v nekonečném vesmíru.

– Opakuje se to v krátkých symetrických paketech. Pozemské vlivy jsme vyloučili, pane profesore. Je to nepochybně z jiné galaxie.

– Svolejte tým.

Od začátku vysílání uběhlo nekonečných třináct minut, když přístroj opět ztichl.
Ticho v sále by se dalo porcovat na milimetrové plátky.

– Udělali jsme, co jsme mohli.

Centrum pro sledování vesmírné komunikace se probudilo jako mraveniště před letní bouřkou. Data uložená na serveru se během několika vteřin začala automaticky přenášet na desítky dešifrovacích center po celé planetě. Světové týmy odborníků na demodulaci signálu, dekompresi, dešifrování, lingvistiku a sémantiku byly najednou v centru pozornosti.

Uběhlo dlouhých sedmadvacet dnů…

– Zkontrolovali jste to?

– Řešení přišlo ze tří nezávislých center, všichni to ověřili snad stokrát. Máme souvislý text, ale týmy pro lingvistickou analýzu kompletně pohořely.

– Musíme to zveřejnit v tomto stavu?

– Není jiná možnost, pane prezidente.

Text zprávy nikomu nedával smysl, přesto byl všem až bolestně povědomý.

„To být lukrativní zpráva od pan P’tchuk Bej-C’ch-an, výkonný syn ředitel Federální Galactic Rozvoj Banka. Je pochopitelné pochybnost, protože nevíte. Dostal jsem tvuj odkaz na Muj dotaz pro Ty, kostýmy navrhla muj obchodní vztah…“

Máme několik odstavců uzavřených v DIVu .text. Skryli jsme vše kromě prvního odstavce.

$('.text p').slice(1, 999).hide();

Další odstavce chci zobrazovat postupně, tedy až po kompletním zobrazení předchozího. Pokud bychom to poslali do JQuery běžným způsobem, zobrazily by se nám všechny odstavce najednou.

$('.text p:hidden').slideDown(1000,'linear');

Proto jsem vytvořil funkci showNextElement(), která je volána po dokončení animace.

function showNextElement(obj){
     if($(obj).next()){
       $(obj).next().slideDown(1000,'linear',function(){
            showNextElement($(this));
       });
     }
}
showNextElement($('.text p').eq(0));

A tomu se, milé děti, říká rekurze.

Včera jsem potřeboval jednoduchou věc na Bookmarky.cz: zobrazit a skrývat tlačítko (pro smazání) u každého odkazu. Stránka používá JQuery, tak by to nebyl problém.

$('.prepinac').toggle(
  function(){
     $('.t_tlacitko').show();
  },
  function(){
     $('.t_tlacitko').hide();
  }
)

JQuery funguje tak, že najde všechny objekty odpovídající kritériu “.t_tlacitko” a každému nastaví nový styl. Problém se vyjeví v okamžiku, kdy na stránce potřebujeme vytvořit nový element .t_tlacitko. Ten dostane do vínku pouze výchozí styl, tedy u nového prvku se tlačítko se zobrazí, i když máme ostatní pěkně schované. Bylo by třeba updatovat všechny prvky po každém vytvoření záložky, což by asi nikdo soudný nedělal.

Ideální je skrývat je přímo změnou pravidla v CSS. Přiznám se, myslel jsem, že to lze javascriptem snadněji. Internet Explorer totiž používá pro CSSrules jiné označení než standardy-uznávající okolní svět.

Nakonec jsem našel toto řešení:

/*****Library - directly change css rule *****/
//Example:changecss('.ClassName','width','280px'); changecss('#IDname','color','red');
function changecss(theClass,element,value) {
	var cssRules;
	for (var S = 0; S < document.styleSheets.length; S++){
		try{
			document.styleSheets[S].insertRule(theClass+' { '+element+': '+value+'; }',document.styleSheets[S][cssRules].length);
		} catch(err){
			try{document.styleSheets[S].addRule(theClass,element+': '+value+';');
			}catch(err){
				try{
					if (document.styleSheets[S]['rules']) {
						cssRules = 'rules';
					} else if (document.styleSheets[S]['cssRules']) {
						cssRules = 'cssRules';
					} else {
						//no rules found... browser unknown
					}
					for (var R = 0; R < document.styleSheets[S][cssRules].length; R++) {
						if (document.styleSheets[S][cssRules][R].selectorText == theClass) {
							if(document.styleSheets[S][cssRules][R].style[element]){
								document.styleSheets[S][cssRules][R].style[element] = value;
								break;
							}
						}
					}
				} catch (err){}
				}
			}
		}
	}

Vykonání skriptu by mělo být je mnohem rychlejší než pomocí JQuery, protože neměníme styl postupně u všech prvků, ale přímo v hlavním CSS.

$('.prepinac').toggle(
  function(){
     changecss('.t_tlacitko','display','block')  
   },
  function(){
     changecss('.t_tlacitko','display','none')  
  }
)

Pár jednoduchých hacků pro odlišení IE6+a-
Samozřejmě lepší bude asi


apod., ale i tohle se může občas hodit.

IE 6 a nižší

* html {}

IE 7 a vyšší

*:first-child+html {} * html {}

Pouze IE 7

*:first-child+html {}

IE 7 a moderní prohlížeče

html>body {}

Moderní prohlížeče (vyšší než IE 7)

html>/**/body {}

(z http://www.webdevout.net , neověřeno )

Jedna věc mi ve Windows 7 opravu vadila. Ano, jsou to ty obrovské ikony na liště.
Zobrazení panelu s malými roztomilými ikonami z předchozích verzí, na které jsme zvyklí,  lze naštěstí nastavit i tady.

Zobrazení panelu Rychlé spuštění ve Windows 7

Klikneme pravým tlačítkem na lištu. Z kontextové nabídky vybereme

Panely nástrojů > Nový panel nástrojů..

Do horního řádku zkopírujte adresu

%appdata%\Microsoft\Internet Explorer\Quick Launch

Výber potvrďte tlačítkem Vybrat složku.

Vpravo dole se objeví panel s ikonami. Pravým tlačítkem ještě schováme popisy a s trochou zručnosti přesuneme panel vlevo.

« novější článkydalší články »