js/j07hide.html
<html>
<head>
<title> <?php echo basename(__file__, '.php'); ?> </title>
<style type="text/css">
#layer {position:absolute; top:12em; left: 12em; width: 340; height:246; border: 1em solid red; padding-left: 2em;
background-image: url("pn.jpg"); background-repeat: no-repeat; background-color: yellow; }
</style>
<script type="text/javascript">
function hide(id, hi) {
document.getElementById(id).hidden = hi;
console.log('hide(' + id + ', ' + hi + ')');
}
function showChildren(nd) {
for (var i=0; i < nd.children.length; i++) {
if (nd.children[i] == null) {
} else if (nd.children[i].hidden) {
nd.children[i].hidden = false;
} else {
showChildren(nd.children[i]);
}
}
}
function hideSisters(nd, hi) {
var t = '', iH, iS;
if (nd.constructor.name == 'HTMLInputElement') {
if (hi) {
iH = nd;
for (var iS=nd.nextSibling; iS != null && iS.constructor.name == 'Text' ; iS=iS.nextSibling)
t = t + ', ' + iS;
} else {
iS = nd;
for (iH=nd.previousSibling; iH != null && iH.constructor.name == 'Text' ; iH=iH.previousSibling)
t = t + ', prev' + iH;
}
if (iH != null && iH.constructor.name == 'HTMLInputElement') {
iH.hidden = hi;
} else {
t = t + ' >>>bad hideInput ' + iH;
}
if (iS != null && iS.constructor.name == 'HTMLInputElement') {
iS.hidden = ! hi;
} else {
t = t + ' >>>bad hideInput ' + iS;
iS = nd;
}
} else if (nd.constructor.name == 'HTMLImageElement') {
iS = nd;
} else {
console.log('implement hide show for ' + nd.constructor.name);
}
for (var si=iS.nextSibling; si != null && si.constructor.name == 'Text' ; si=si.nextSibling) {
t = t + ', ' + si + (' con=' + si.constructor.name);
}
t = t + ' >>>hide>>> ';
for ( ; si != null ; si=si.nextSibling) {
t = t + ', ' + si.constructor.name;
si.hidden = hi;
}
console.log('hi=' + hi + ' !hi=' + (! hi) + ' sisterchain' + t.substr(1));
}
function hiEv(ev, hi) {
console.log('hiEv(target=' + ev.target + ' src=' + ev.target.src + ' par=' + ev.target.parentNode + ', ' + hi + ')');
var nd = ev.target;
if (nd.constructor.name != 'HTMLImageElement') {
hideSisters(nd, hi);
} else if (nd.src.endsWith('/plus.jpg')) {
nd.src = nd.src.substr(0, nd.src.length-9) + '/minus.jpg';
hideSisters(nd, false);
} else if (nd.src.endsWith('/minus.jpg')) {
nd.src = nd.src.substr(0, nd.src.length-10) + '/plus.jpg';
hideSisters(nd, true);
} else {
console.log('implement hide/show for target=' + ev.target + ' src=' + ev.target.src + ' par=' + ev.target.parentNode + ', ' + hi + ')');
}
}
function scrollEv(ev, top=true) {
var nd = ev.target;
console.log('scrollEv(target=' + nd + ' par=' + nd.parentNode + ', ' + top + ')');
nd.scrollIntoView(top);
}
</script>
</head>
<body>
<h1 >hide or show element</h1>
<input type="button" value="hide eins" onclick="hide('l1', true);" />
<input type="button" value="show eins" onclick="hide('l1', false);" />
<input type="button" value="show list" onclick="showChildren(document.getElementById('o1'));" />
<input type="button" value="scroll to #src" onclick="document.getElementById('src').scrollIntoView();" />
<ol id=o1>
<li id=l1>eins
<ol><li>elf</li><li>zwoelf</li><li>13</li></ol>
<li><input type="button" value="hide" onclick="hiEv(event, true);" />
<input type="button" value="show" onclick="hiEv(event, false);" />
zwei <div>
<ol><li><input type="button" value="hide" onclick="hiEv(event, true);" />
<input type="button" value="show" onclick="hiEv(event, false);" /> einUndZwanzig<ol><li>211</li><li>212</li></ol></ol>mid21
<ol><li><img src="minus.jpg" onclick="hiEv(event);" /> einUndZwanzigAfter<ol><li>21A</li><li>21B</li>
<li><img src="minus.jpg" onclick="hiEv(event);" /> einUndZwanzigCCCC<ol><li>21C1</li><li>21C2</li></ol></ol></ol>
end21</div></li>
<li value=345>
<img src="minus.jpg" onclick="hiEv(event);" /> zweiUndZwanzig</li>
<li>dreiUndZwanzig</li></ol>
zweiEnd
</li>
<li>drei</li>
<li>vier</li>
<li>fuenf <input type="button" value="scroll this to top" onclick="scrollEv(event);" /></li>
</ol>
<h1 id="src">Source <?php echo __file__; ?> </h1>
<?php highlight_file(__file__) ?>
<ol><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li><li>a</li></ol>
</body>
</html>