var actualChapter = 0; var actualPrep = 0; var questionsCount = 0; var testOrder = new Array(); var sections = ["toc", "thumbs", "single"] var displayMode = "normal" window.addEventListener("load", init) var baseurl = this.location.href; function init(evt) { var chapter = -1; var prep = -1; if (baseurl.indexOf("?") > -1) { var end = baseurl.substring(baseurl.indexOf("?")+1); var attrs = end.match(/[^\&]+=[^\&]+/g); if (attrs) { for (var i = 0; i < attrs.length; i++) { var attr = attrs[i]; var name = attr.substring(0,attr.indexOf("=")); var val = attr.substring(attr.indexOf("=")+1); if (name == "chapter") { chapter = parseInt(val); } if (name == "prep") { prep = parseInt(val); } } } baseurl = baseurl.substring(0, baseurl.indexOf("?")) } if (chapter != -1) { showChapter(chapter); if (prep > 0) { showPreparate(prep-1); } } //showSection("toc") } function hltab(uzel) { var tabs = uzel.parentNode.getElementsByTagName("LI"); for (var i =0; i < tabs.length; i++) { tabs[i].className = (tabs[i] == uzel) ? "active" : "" } } function showToc() { showSection("toc") } function generateToc() { var vystup = "" document.getElementById("toc").innerHTML = vystup } function nextChapter() { if (actualChapter < chapters.length-1) { actualChapter++; showChapter(actualChapter) } } function prevChapter() { if (actualChapter > 0) { actualChapter--; showChapter(actualChapter) } } function showChapter(index) { actualChapter = index; var chapter = chapters[index]; var vystup = "" // vystup += "\"Náhledy\"" if (index > 0) { vystup += "\"Předchozí\"" } else {vystup += "\"Předchozí\"/"} vystup += chapter.titul if (index < chapters.length-1) { vystup += "\"Následující\"" } else {vystup += "\"Následující\"/"} document.getElementById("maintitle").innerHTML = vystup if (chapter.podtitul != "" ) { document.getElementById("subtitle").innerHTML = chapter.podtitul document.getElementById("subtitle").style.display = "block" } else { document.getElementById("subtitle").style.display = "none" } if (chapter.popis && chapter.popis != "" ) { document.getElementById("ch_description").innerHTML = chapter.popis document.getElementById("ch_description").style.display = "block" } else { document.getElementById("ch_description").style.display = "none" } actualPrep = 0; showSection("thumbs"); generateThumbs() /*showPreparate(0) */ history.pushState({}, popis, baseurl + "?chapter=" + actualChapter); } function showSection(sid) { document.getElementById("zahlavi").style.display = (sid == "thumbs" || sid == "single") ? "block" : "none" for (var i = 0; i < sections.length; i++) { document.getElementById(sections[i]).style.display = (sid == sections[i] ) ? "block" : "none"; } } /* ************************* generovani prehledu nahledu */ function generateThumbs() { showSection("thumbs") document.getElementById("subsubsection").style.display = "none" var thumbs = document.getElementById("thumbs") var vystup = "" var preparaty = chapters[actualChapter].preparaty var sections = chapters[actualChapter].sekce; secs = { unsorted: [] } if (chapters[actualChapter].sekce) { for (var i = 0; i < sections.length; i++ ) { secs[sections[i].id] = [] } } for (var i =0; i < preparaty.length; i++) { if (!preparaty[i].sekce ||preparaty[i].sekce == "" ) secs.unsorted.push( {prep: preparaty[i], index: i} ) else secs[preparaty[i].sekce].push( {prep: preparaty[i], index: i} ) } for (var i = 0; i < secs.unsorted.length; i++) { vystup += generateThumb(secs.unsorted[i]) } for (var i= 0; i < chapters[actualChapter].sekce.length; i++) { var sec = secs[chapters[actualChapter].sekce[i].id] vystup += "

" + chapters[actualChapter].sekce[i].titul + "<\/h3>" for (var j=0; j < sec.length; j++) { vystup += generateThumb(sec[j]) } } vystup += "<\/menu>"; thumbs.innerHTML = vystup; history.pushState({}, popis, baseurl + "?chapter=" + actualChapter); } function generateThumb(preparat) { var vystup = "" var file = preparat.prep.preparat; var desc = preparat.prep.titul; var label = chapters[actualChapter].label + "–" desc = desc.replace(/(\s)([ksvziouKSCVZIOU])(\s)/g,"$1$2 ") /* */ var chunks = desc.split(" "); desc = chunks[0]; for (var j = 1; j < chunks.length; j++) { if (desc.length + chunks[j].length + 1 < 55 ) { desc += " " + chunks[j]; } else break; } if (desc.indexOf("") > 0 && desc.indexOf("<\/em>") ==-1 ) desc += "" desc += "…"; file = file.substring(0, file.indexOf(".")); var type = ""; if (preparat.prep.type) type = "class='" + preparat.prep.type + "'"; vystup += "
" vystup += "náhled preparátu" vystup += "
" + label + (preparat.index + 1) + " " + desc + "
"; vystup += "
" return vystup } function getSubsection(sid) { var secs = chapters[actualChapter].sekce; for (var i = 0; i < secs.length; i++) { if (secs[i].id == sid) return secs[i] } return false; } /* *************** navigace mezi preparaty *****************/ function nextPreparate() { if (actualPrep < chapters[actualChapter].preparaty.length-1) { actualPrep++; showPreparate(actualPrep) } } function prevPreparate() { if (actualPrep > 0) { actualPrep--; showPreparate(actualPrep) } } function showPreparate(index) { actualPrep = index; showSection("single"); var first = (index == 0) ? "firstOn" : "firstOff"; var last = (index == chapters[actualChapter].preparaty.length -1) ? "lastOn" : "lastOff"; document.getElementById("mainFigure").className = "figure popiskyOff legendaOff" + " " + first + " " + last; document.getElementById("legenda").innerHTML = "" var vystup = "" var prep = chapters[actualChapter].preparaty[index]; var ssc = document.querySelector("#subsubsection") if (prep.sekce) { var subsec = getSubsection(prep.sekce) ssc.style.display = "block"; ssc.querySelector("h3").innerHTML = subsec.titul; ssc.querySelector("div").innerHTML = subsec.popis; } else {ssc.style.display = "none"} var label = chapters[actualChapter].label + "-" vystup += "\"Náhledy\"" vystup += label + (index+1) + " " + prep.titul document.getElementById("figtitle").innerHTML = vystup //generovani popisku var fig1 = document.getElementById("preparat"); var f_name = prep.preparat.substring(0, prep.preparat.indexOf(".")) var f_type = prep.preparat.substring(prep.preparat.indexOf(".")+1) var pic = "" var p_height = 480 if (displayMode == "fullscreen") { p_height = Math.min(650, prep.origH ); } if (f_type == "svg" ) { pic = "" pic+= "\""" pic += "<\/object>" } else { var pic = "\"""; } var svg = "" if (prep.graphics) { svg = "" for (var i =0; i < prep.graphics.length; i++) { var graph = prep.graphics[i]; var style = ""; if (graph.type == "path") { var markerEnd = (graph.markerEnd) ? " marker-end='url(#" + graph.markerEnd + ")'" : ""; //svg += ""; if (graph.style && graph.style != "") { style = " style='" + graph.style + "'"; } svg += "" } if (graph.type == "text") { if (graph.style && graph.style != "") { style = " style='" + graph.style + "'"; } svg += "" + graph.text + ""; } } svg += "" } fig1.innerHTML = pic + svg hookEvent('fig_preparat', 'mousewheel', resizePic); //vystup = "\"Preparát\"" /* var puvodni = fig1.getElementsByTagName("DIV") for (var i = puvodni.length-1; i >-1; i--) fig1.removeChild(puvodni[i]) */ var sfy = p_height/480; document.getElementById("fig_preparat").addEventListener("click", addDesc) for (var i=0; i < prep.popisky.length; i++) { var pop = prep.popisky[i]; var cx = Math.round(pop[0]*sfy - 10 + 10*sfy-10) var cy = Math.round(pop[1]*sfy - 0 + 10*sfy-10) var desc = fig1.appendChild(document.createElement("DIV")) desc.setAttribute("class", "popisek"); if (pop.length > 3) desc.classList.add("orient-" + pop[3]); //desc.setAttribute("style", "left: " + (pop[0]-10) + "px; top: " + (pop[1]-0) + "px;"); desc.setAttribute("style", "left: " + cx + "px; top: " + cy + "px;"); var legenda = prep.legenda[pop[2]-1]; legenda = legenda.replace(/(\s)([ksvziouKSVZAIOU])\s/g,"$1$2 ") desc.setAttribute("alt", prep.legenda[pop[2]-1] ); desc.innerHTML = "     " //"?" //pop[2]; var div = desc.appendChild(document.createElement("P")) var inter = div.appendChild(document.createElement("SPAN")) inter.setAttribute("class", "popis_obsah"); inter.innerHTML = legenda } var tl_visible = (prep.popisky.length == 0) ? "hidden" : "visible" var labels = document.getElementById("mainFigure").getElementsByTagName("LABEL") for (var i = 0; i < labels.length; i++) { labels[i].style.visibility = tl_visible; } //generovani legendy vystup = ""; for (var i = 0; i < prep.legenda.length; i++) { vystup += "
  • " + prep.legenda[i] + "<\/li>" } document.getElementById("legenda").innerHTML = vystup; //embryo + rez var sf = 0.6 var d = 120; if (prep.rez.length > 3) d = prep.rez[3]; vystup = "\"embryo\"" var rotace = "-webkit-transform: rotate(" + prep.rez[2] + "deg); -moz-transform: rotate(" + prep.rez[2] + "deg);" var delka = " width: " + (d*sf) + "px;" vystup += "
     
    " document.getElementById("embryo").innerHTML = vystup; //spodni popis obrazku var popis = prep.popis; popis = popis.replace(/(\s)([ksvziouKSVZAIOU])\s/g,"$1$2 ") document.getElementById("popis").innerHTML = popis ; history.pushState({}, popis, baseurl + "?chapter=" + actualChapter + "&prep=" + (index+1)); } var dCount = 0; function addDesc(evt) { var tgt = evt.target var box = tgt.getBoundingClientRect(); var cx = Math.round(evt.clientX - box.left) -12; var cy = Math.round(evt.clientY - box.top) -12; if (evt.ctrlKey) { // klik na pozadi + CTRL = pridani noveho krouzku dCount++; document.getElementById("vystupni").value += ", [" + cx + ", " + cy + ", " + dCount + "]"; } else { // detachEdits(); } } /************************* testova cast *******************************/ function randomizer() { return Math.floor(3*Math.random()+1)-2 } function removeClicks() { var descs = document.getElementById("preparat").getElementsByTagName("DIV"); for (var j = 0; j < descs.length; j++) { descs[j].setAttribute("onclick", "") } } function startTest2() { hideInfos(); var figure = document.getElementById("mainFigure") figure.className = figure.className.replace("popiskyOn", "popiskyOff") figure.className = figure.className.replace("legendaOff", "legendaOn") questionsCount = 0; testOrder = new Array() var test = document.getElementById("test_legenda") var legenda_ol = document.getElementById("legenda") var figure = document.getElementById("mainFigure").className var leg = chapters[actualChapter].preparaty[actualPrep].legenda var items = new Array() for (var i =0; i < leg.length; i++) { items.push(leg[i]) } items.sort(randomizer) var vystup = "" for (var i = 0; i< items.length; i++ ) { vystup += "
  • " + items[i] + "<\/li>"; } legenda_ol.innerHTML = vystup var descs = document.getElementById("preparat").getElementsByTagName("DIV"); for (var k =0; k < descs.length; k++) testOrder.push(k); testOrder.sort(randomizer); for (var j = 0; j < descs.length; j++) { descs[j].setAttribute("onclick", "") // descs[j].className = ( j == testOrder[0] ) ? "popisek questioned" : "popisek hidden" if ( j == testOrder[0] ) descs[j].classList.add("questioned") else { descs[j].classList.add("hidden") } descs[j].setAttribute("title", ""); } } function checkAnswer2(answer) { var items = document.getElementById("preparat").getElementsByTagName("DIV") if (questionsCount == items.length) return; var spravna = items[testOrder[questionsCount]]; spravna.classList.remove("questioned"); //spravna.className = (spravna.getAttribute("alt") == answer ) ? "popisek correct" : "popisek wrong"; if (spravna.getAttribute("alt") == answer ) spravna.classList.add("correct") else spravna.classList.add("wrong"); if (++questionsCount < items.length ) { var newItem = items[testOrder[questionsCount]] newItem.classList.add("questioned"); newItem.classList.remove("hidden"); } //else removeClicks() } function showInfos() { var items = document.getElementById("legenda").getElementsByTagName("LI") var vystup = "" for (var i = 0; i< items.length; i++ ) { var item = items[i] if (!item.classList.contains("hidden")) items[i].classList.add("hidden"); } var descs = document.getElementById("preparat").getElementsByTagName("DIV"); for (var j = 0; j < descs.length; j++) { var desc = descs[j]; desc.setAttribute("onclick", ""); desc.classList.remove("hidden"); desc.classList.remove("questioned"); desc.classList.remove("correct"); desc.classList.remove("wrong"); desc.classList.add("infos"); //descs[j].setAttribute("title", descs[j].getAttribute("alt")); } } function hideInfos() { var descs = document.getElementById("preparat").getElementsByTagName("DIV"); for (var j = 0; j < descs.length; j++) { var desc = descs[j]; desc.setAttribute("onclick", "") desc.classList.add("hidden"); desc.classList.remove("infos"); } } function toggleDesc(visible) { var figure = document.getElementById("mainFigure"); var svg = document.getElementById("desc_graphics"); if (visible ) { showInfos(); if (svg) svg.style.visibility = "visible"; figure.className = figure.className.replace("legendaOn", "legendaOff") figure.className = figure.className.replace("popiskyOff", "popiskyOn") } else { hideInfos() if (svg) svg.style.visibility = "hidden"; figure.className = figure.className.replace("popiskyOn", "popiskyOff") } } function toggleLeg(bt) { var figure = bt.parentNode.parentNode if (bt.className == "btOn" ) { bt.className = "btOff"; bt.setAttribute("title", "Skrýt legendu") figure.className = figure.className.replace("legendaOff", "legendaOn") } else { bt.className = "btOn"; bt.setAttribute("title", "Zobrazit legendu") figure.className = figure.className.replace("legendaOn", "legendaOff") } } function getPosX(obj) { var curleft = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft; if(obj.offsetParent) while(1) { curleft += obj.offsetLeft; if(!obj.offsetParent) break; obj = obj.offsetParent; } else if(obj.x) curleft += obj.x; return curleft; } function getPosY(obj) { var curtop = - (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop); if(obj.offsetParent) while(1) { curtop += obj.offsetTop; if(!obj.offsetParent) break; obj = obj.offsetParent; } else if(obj.y) curtop += obj.y; return curtop; } function showPos(evt, uzel) { var mouseX = evt.clientX - getPosX(uzel) var mouseY = evt.clientY - getPosY(uzel) document.getElementById("info").innerHTML = "" + mouseX + ", " + mouseY + ", scroll: " + uzel.scrollLeft + ", " + uzel.scrollTop } function setScroll(uzel, sx, sy) { uzel = document.getElementById(uzel); uzel.scrollTop = sy uzel.scrollLeft = sy } function hookEvent(element, eventName, callback) { if(typeof(element) == "string") element = document.getElementById(element); if(element == null) return; if(element.addEventListener) { if(eventName == 'mousewheel') element.addEventListener('DOMMouseScroll', callback, false); element.addEventListener(eventName, callback, false); } else if(element.attachEvent) element.attachEvent("on" + eventName, callback); } function unhookEvent(element, eventName, callback) { if(typeof(element) == "string") element = document.getElementById(element); if(element == null) return; if(element.removeEventListener) { if(eventName == 'mousewheel') element.removeEventListener('DOMMouseScroll', callback, false); element.removeEventListener(eventName, callback, false); } else if(element.detachEvent) element.detachEvent("on" + eventName, callback); } function cancelEvent(e) { e = e ? e : window.event; if(e.stopPropagation) e.stopPropagation(); if(e.preventDefault) e.preventDefault(); e.cancelBubble = true; e.cancel = true; e.returnValue = false; return false; } function resizePic(e) { e = e ? e : window.event; var raw = e.detail ? e.detail : e.wheelDelta; var normal = e.detail ? e.detail * -1 : e.wheelDelta / 40; //document.getElementById('scrollContent').innerHTML = " Raw Value: " + raw + " Normalized Value: " + normal; changeSize("fig_preparat", normal ) cancelEvent(e); } function changeSize(fig, sf) { //sf = +-3 var figure = document.getElementById(fig); var svgDesc = document.querySelector("#desc_graphics g"); //var obr = figure.getElementsByTagName("IMG")[0] // alert(figure) var prep = chapters[actualChapter].preparaty[actualPrep] var nh = figure.height + sf*20; nh = Math.max(nh, 480) nh = Math.min(nh, prep.origH) var sfy = nh/480; figure.width = prep.origW/prep.origH*nh; figure.height = nh; if (svgDesc) { svgDesc.setAttribute("transform", "scale(" + sfy + ") translate(" + (-10)*(sfy-1) + ", " + (-20)*(sfy-1) + ")"); } var descs = figure.parentNode.childNodes; var dcount =-1 for (var i = 0; i < descs.length; i++) { if (descs[i].nodeType == 1 && descs[i].nodeName == "DIV") { dcount++; var cx = Math.round(prep.popisky[dcount][0]*sfy - 10 + 10*sfy-10) var cy = Math.round(prep.popisky[dcount][1]*sfy - 0 + 10*sfy-10) descs[i].style.left = "" + cx + "px" descs[i].style.top = "" + cy + "px" } } var zoomIn = document.getElementById("zoomIn"); var zoomOut = document.getElementById("zoomOut"); zoomOut.removeAttribute("disabled"); zoomOut.setAttribute("src","design/Misc-Zoom-Out-icon.png"); zoomIn.removeAttribute("disabled"); zoomIn.setAttribute("src","design/Misc-Zoom-In-icon.png"); if (nh == 480) { // minimalni zvetseni zoomOut.setAttribute("disabled","disabled"); zoomOut.setAttribute("src","design/Misc-Zoom-Out-icon_dis.png"); } if (nh == prep.origH) { // minimalni zvetseni zoomIn.setAttribute("disabled","disabled"); zoomIn.setAttribute("src","design/Misc-Zoom-In-icon_dis.png"); } } function startDrag(evt) { /* var mouseX = evt.clientX - getPosX(canvas_axon) var mouseY = evt.clientY - getPosY(canvas_axon) var bid = evt.target.parentNode.getAttribute("id") bid = bid.substring(bid.indexOf("_")+1) var bod = objects[bid] offsetX = mouseX - bod.ax; offsetY = mouseY - bod.ay; bod.isDragged = true; draggedPoint = bid */ } function checkDrag(evt) { /* if (draggedPoint != null ) { var bod = objects[draggedPoint] var mouseX = evt.clientX - getPosX(canvas_axon) // canvas_axon.offsetLeft; var mouseY = evt.clientY - getPosY(canvas_axon) // canvas_axon.offsetTop; bod.ax = mouseX - offsetX; bod.ay = mouseY - offsetY; bod.projectAxon() clearCanvases() updateCanvases() } */ } function stopDrag(evt) { /* var bid = evt.target.parentNode.getAttribute("id") bid = bid.substring(bid.indexOf("_")+1) var bod = objects[bid] bod.isDragged = false; draggedPoint = null; */ } function getSVGInfo(uzel) { alert(uzel.parentNode.getAttribute("title")) uzel.setAttribute("class", "selected") var svg = document.getElementById("fig_preparat").getSVGDocument() var doc = svg.getElementsByTagName("svg")[0] doc.setAttribute("class", "clickable") var objs = svg.getElementsByTagName("g"); var titles = new Array() for (var i = 0; i < objs.length; i++) { if (objs[i].getAttribute("title") != undefined) titles.push(objs[i].getAttribute("title")) } }