Position: fixed pro Profiler?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
mancze
Člen | 58
+
0
-

Dlouho jsem váhal, zda kvůli tomuto detailu zakládat vlákno, ale nakonec mi to nedalo. Rád pro svoje development prostředí používám profiler debugeru a k tomu routing debugger. Jsem maximálně spokojen, jen mi nesedí pozicování pro profiler. Daleko vhodnější se mi zdá fixní pozice, nebo jsem sám?

Ano, zřejmě to je docela dané osobní preferencí, ale jaksi ta fixní pozice se mi zdá logičtější a příjemnější při scrollování. Ale třeba nás je většina, komu se zamlouvá position: fixed. Kdybych se nezeptal, nezjistím to :).

Přirozeně stačí zaměnit jeden řádek ve zdroji, ale vzhledem k poměrně častým aktualizacím by to mohlo být časem otavné. Mno, pokud existují důvody (byť preferenční) pro stávající pozicicování, považujte tento thread za bezpředmětný 0:).

Honza Marek
Člen | 1664
+
0
-

Taky bych dal fixed

pmg
Člen | 372
+
0
-

I'd also get it fixed. :-)

phx
Člen | 651
+
0
-

Osobne mi to je ceklem fuk, ale pokud by mel byt fixni tak aby NIC neprekryval. Tz nekde pod patickou webu nejaky di pres celou sirku.

mancze
Člen | 58
+
0
-

phx napsal(a):

Osobne mi to je ceklem fuk, ale pokud by mel byt fixni tak aby NIC neprekryval. Tz nekde pod patickou webu nejaky di pres celou sirku.

Můžeš jej přece přesunout myší, ne? Řekl bych, že pozice dole vpravo na obrazovce není tak moc používaná, abys profiler pořád musel přesouvat.

Nebo jsem tě špatně pochopil… Mimochodem přece ani nyní neni zaručeno, že ti profiler nic nepřekryje, ne?

phx
Člen | 651
+
0
-

Ja jsem tedy pochopil, ze fixed bude nepresouvatelny.

A co udelat ze profiler bude mit id=profiler a kazdy si ve stylech nadefinuje kde ho chce ve vychozi pozici? JS pak bude posouvat furt stejne, jen budeme mit moznost ovlivnit uvodni umisteni.

wnc
Člen | 7
+
0
-

Mě současná podoba vyhovuje, a i kdyby ne, tak si ji přestiluju a je to.

Jakub Šulák
Člen | 222
+
0
-

Osobně bych považoval za nejlepší upravit profiler takto:

  1. změnit pozicování na fixed (aby po scrollu byl stále v pravém dolním rohu)
  2. přidat tlačítko pro minimalizaci (po minimalizaci například jen zůstane malý čtvereček 10×10px, s tlačítkem pro maximalizaci
  3. přidat tlačítko pro zavření profileru.

Myslím, že toto by bylo nejlepší výchozí chování.

můj názor…

gawan
Člen | 110
+
0
-

Jakub Šulák napsal(a):

Osobně bych považoval za nejlepší upravit profiler takto:

  1. změnit pozicování na fixed (aby po scrollu byl stále v pravém dolním rohu)
  2. přidat tlačítko pro minimalizaci (po minimalizaci například jen zůstane malý čtvereček 10×10px, s tlačítkem pro maximalizaci
  3. přidat tlačítko pro zavření profileru.

Myslím, že toto by bylo nejlepší výchozí chování.

můj názor…

súhlasím

mancze
Člen | 58
+
0
-

Jakub Šulák napsal(a):

  1. přidat tlačítko pro zavření profileru.

Souhlasím se vším až na tento bod. Mít dvě tlačítka na políčku o velikosti 10×10px se mi nezdá rozumné. Tlačítko pro zavření se mi zdá zbytečné – stačí přece profiler přetáhnout za kraj obrazovky (a protože position:fixed nepřidá scrollbary, ničemu to nevadí).

Honza Marek
Člen | 1664
+
0
-

10×10 je málo… minimalizovaný profiler by mohl vypadat třeba jako nápis Profiler s rámečkem. No a tlačítko zavřít stačí mít jen u maximalizovaného profileru.

PetrP
Člen | 587
+
0
-

Otázka je, potřebuje člověk koukat na profiler celou dobu co si prohlíží stránku?

Jakub Šulák
Člen | 222
+
0
-

Moc této tvé otázce nerozumím? Máš na mysli, proč si profiler nezapínat, jen když je potřeba? Osobně jej vůbec nevypínám, jelikož někdy mě stránka, u které bych to nečekal vyletí, že trvá dlouho – zjišťuji takto (ne sice právě vhodným způsobem) problémy s výkonem.

David Grudl
Nette Core | 8218
+
0
-

Position:fixed je výborný nápad. Přiznám se, že jako brzda internetu jsem ještě před pár týdny používal IE6, takže position:fixed mě vůbec nenapadlo použít, ale s IE8 už šlape. Dokonce to řeší bug Opery.

Nový profiler si můžete vyzkoušet v poslední revizi.

Jakub Šulák
Člen | 222
+
0
-

I s minimalizací – super!
Ještě na dvojklik úplné zavření a bylo by to úplně dokonalé :-)

Jan Tvrdík
Nette guru | 2595
+
0
-

Kdyby si profiler ještě pamatoval souřadnice z minulé stránky (cookies), tak by to bylo naprosto úžasné.

na1k
Člen | 288
+
0
-

Tak tedy přihodím vlastní úpravu pro pamatování nastavené pozice :)
(Je to jen pár řádků, ale pro přehlednost celá skriptová část ze souboru Nette\Debug.templates\profiler.phtml)

<script type="text/javascript">
/* <![CDATA[ */
document.getElementById('netteProfiler').onmousedown = function(e) {
	e = e || event;
	this.posX = parseInt(this.style.left + '0');
	this.posY = parseInt(this.style.top + '0');
	this.mouseX = e.clientX;
	this.mouseY = e.clientY;

	var thisObj = this;

	document.documentElement.onmousemove = function(e) {
		e = e || event;
		thisObj.style.left = (e.clientX - thisObj.mouseX + thisObj.posX) + "px";
		thisObj.style.top = (e.clientY - thisObj.mouseY + thisObj.posY) + "px";
		return false;
	};

	document.documentElement.onmouseup = function(e) {
                document.cookie = 'netteProfilerPosition=' + thisObj.style.left + ':' + thisObj.style.top + '; path=/';
		document.documentElement.onmousemove = null;
		document.documentElement.onmouseup = null;
		return false;
	};
};

document.getElementById('netteProfilerIcon').onclick = function(e) {
	var arrow = this.getElementsByTagName('abbr')[0];
	var panel = this.nextSibling;
	var collapsed = panel.currentStyle ? panel.currentStyle.display == 'none' : getComputedStyle(panel, null).display == 'none';

	arrow.innerHTML = collapsed ? String.fromCharCode(0x25bc) : 'Profiler ' + String.fromCharCode(0x25ba);
	panel.style.display = collapsed ? 'block' : 'none';
	arrow.parentNode.style.position = collapsed ? 'absolute' : 'static';

	document.cookie = 'netteProfilerVisible=' + collapsed*1 + '; path=/';
	return false;
}

document.body.appendChild(document.getElementById('netteProfilerContainer'));

if (document.cookie.indexOf('netteProfilerVisible=0') > -1) {
	document.getElementById('netteProfilerIcon').onclick();
}

if (document.cookie.indexOf('netteProfilerPosition') > -1) {
        var pos = document.cookie.match(/netteProfilerPosition=(\-?[0-9]+px):(\-?[0-9]+px)/);
        var profiler = document.getElementById('netteProfiler');
        profiler.style.left = pos[1];
        profiler.style.top = pos[2];
}
/* ]]> */
</script>
jasir
Člen | 746
+
0
-

na1k napsal(a):

Tak tedy přihodím vlastní úpravu pro pamatování nastavené pozice :)
(Je to jen pár řádků, ale pro přehlednost celá skriptová část ze souboru Nette\Debug.templates\profiler.phtml)

Pěkné, takto si již profiler pamatuje zda je otevřený/zavřený (nová revize) a nyní pozici.
Myslím, že by se to mělo přidat do frameworku.

David Grudl
Nette Core | 8218
+
0
-

Není problém to přidat, ale ptám se – je to skutečně potřeba? Nebude to spíš způsobovat problémy, že po zmenšení okna nebo přesunutí na jiný monitor se profiler dostane někam mimo a bude nedostupný?

jasir
Člen | 746
+
0
-

David Grudl napsal(a):

Není problém to přidat, ale ptám se – je to skutečně potřeba? Nebude to spíš způsobovat problémy, že po zmenšení okna nebo přesunutí na jiný monitor se profiler dostane někam mimo a bude nedostupný?

Výhody možnosti vlastního umístění tyto „nevýhody“ převáží.

PetrP
Člen | 587
+
0
-

Co takle zjištovat jestli umístění není mimo velikost okna, a jinak ho šoupnout na defaultní pozici.

na1k
Člen | 288
+
0
-

PetrP, to se stane snad jen výjimečně a v takovém případě stačí smazat cookie a použije se výchozi pozice, tzn. ta daná css styly

PetrP
Člen | 587
+
0
-

Hmm řešení z vymazáváním sušenek se mi nelíbí, tak jsem si napsal vlastní detekci toho jestli zalezl profiler za okraj (ze všech stran). Testováno v Opera 9.6, FF3, IE6, IE7, IE8, Chrome 1

// profiler.phtml
var _nettePos = document.cookie.match(/netteProfilerPosition=([0-9-]+px):([0-9-]+px)/);
if (_nettePos) {

	var h = window.innerHeight ? window.innerHeight : (
		document.documentElement && document.documentElement.clientHeight ?
			document.documentElement.clientHeight : document.getElementsByTagName('body')[0].clientHeight
	);
	var w = window.innerWidth ? window.innerWidth : (
		document.documentElement && document.documentElement.clientWidth ?
			document.documentElement.clientWidth : document.getElementsByTagName('body')[0].clientWidth
	);
	var ph = document.getElementById('netteProfiler').offsetHeight;
	var pw = document.getElementById('netteProfiler').offsetWidth;
	if(w && (parseInt(_nettePos[1])*-1)>(w-50))
		_nettePos[1] = ((w-50)*-1)+'px';
	if(h && (parseInt(_nettePos[2])*-1)>(h-50))
		_nettePos[2] = ((h-50)*-1)+'px';
	if(parseInt(_nettePos[1])>pw-50)
		_nettePos[1] = (pw-50)+'px';
	if(parseInt(_nettePos[2])>ph-50)
		_nettePos[2] = (ph-50)+'px';

	document.getElementById('netteProfiler').style.left = _nettePos[1];
	document.getElementById('netteProfiler').style.top = _nettePos[2];
}

Jen v IE6 (protože není position:fixed) to není nejlepší. Dalo by se to pro něj vypnout, nebo tu detekci rozšířit o scrollování (ale i tak je to v IE6 použitelné).

//edit (9. 2. 2010): upravil jsem trochu detekci
//edit (22. 2. 2010): změna zjišťování velikosti okna

Editoval PetrP (22. 2. 2010 13:44)