function get_window_width() { return window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; } function get_window_height() { return window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight; } var serialiseObject = function(obj) { var pairs = []; for (var prop in obj) { if (!obj.hasOwnProperty(prop)) { continue; } if (Object.prototype.toString.call(obj[prop]) == '[object Object]') { pairs.push(serialiseObject(obj[prop])); continue; } pairs.push(prop + '=' + obj[prop]); } return pairs.join('&'); } function Ajax(obj){ if(typeof obj.processData == "undefined") obj.processData = true; var request = new XMLHttpRequest(); request.onreadystatechange = function(){ if(request.readyState == 1){ if(obj.contentType != false) if(typeof obj.contentType == "undefined"){ request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); }else{ if(obj.contentType)request.setRequestHeader('Content-Type', obj.contentType); } } if(request.readyState == 4){ if(request.status == 200){ try { if(obj.success){ var resp; switch(obj.dataType){ case "json": resp = JSON.parse(request.response); break; default: resp = request.response; break; } obj.success(resp); } } catch (e){ console.error("1MD::AJAX ERROR OCCURED!",e); if(obj.fail)obj.fail(e); } }else if(obj.fail)obj.fail(); } }; if(obj.progress){ request.upload.addEventListener('progress', obj.progress, false); } request.open(obj.type, obj.url); if(obj.processData){ obj.data = serialiseObject(obj.data); } request.send(obj.data); } function clone(obj) { if (obj === null || typeof(obj) !== 'object' || 'isActiveClone' in obj) return obj; if (obj instanceof Date) var temp = new obj.constructor(); else var temp = obj.constructor(); for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { obj['isActiveClone'] = null; temp[key] = clone(obj[key]); delete obj['isActiveClone']; } } return temp; } function isMobile() { return /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(navigator.userAgent) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(navigator.userAgent.substr(0,4)); } function addClass(el,className){ if (el.classList) el.classList.add(className); else el.className += ' ' + className; } function removeClass(el,className){ if (el.classList) el.classList.remove(className); else el.className = el.className.replace(new RegExp('(^|\\b)' + className.split(' ').join('|') + '(\\b|$)', 'gi'), ' '); } function toggleClass(el,className) { if (el.classList) { el.classList.toggle(className); } else { var classes = el.className.split(' '); var existingIndex = classes.indexOf(className); if (existingIndex >= 0) classes.splice(existingIndex, 1); else classes.push(className); el.className = classes.join(' '); } } function hasClass(el,className) { return new RegExp('(\\s|^)'+className+'(\\s|$)').test(el.className); } function getScrollTop() { return window.scrollY || document.documentElement.scrollTop; } function scrollShouldAjaxLoad(el, offset, preset) { offset = offset || 100; preset = preset || false; if(!el) { return false; } try { var windowHeight = Math.max(document.documentElement.clientHeight, window.innerHeight || 0); var r = el.getBoundingClientRect(); if(el.offsetHeight + r.top - offset < windowHeight) { if(preset) { if(el.offsetHeight + r.top + preset > windowHeight) { return true; } return false; } return true; } return false; } catch(e) { return false; } } var smoothScroll = { documentVerticalScrollPosition: function(){ if(self.pageYOffset) return self.pageYOffset; if(document.documentElement && document.documentElement.scrollTop) return document.documentElement.scrollTop; if(document.body.scrollTop) return document.body.scrollTop; return 0; }, viewportHeight: function(){ return (document.compatMode === "CSS1Compat") ? document.documentElement.clientHeight : document.body.clientHeight; }, documentHeight: function(){ return (document.height !== undefined) ? document.height : document.body.offsetHeight; }, documentMaximumScrollPosition: function(){ return this.documentHeight() - this.viewportHeight(); }, elementVerticalClientPosition: function(element){ var rectangle = element.getBoundingClientRect(); return rectangle.top; }, verticalTickToPosition: function(currentPosition, targetPosition){ var filter = 0.2; var fps = 60; var difference = parseFloat(targetPosition) - parseFloat(currentPosition); var arrived = (Math.abs(difference) <= 0.5); if(arrived){ scrollTo(0.0, targetPosition); return; } currentPosition = (parseFloat(currentPosition) * (1.0 - filter)) + (parseFloat(targetPosition) * filter); scrollTo(0.0, Math.round(currentPosition)); var self = this; setTimeout(function(){ self.verticalTickToPosition(currentPosition, targetPosition); }, (1000 / fps)); }, toElement: function(element, padding){ if(!element){ console.warn("Couldn't find target element."); return; } var targetPosition = this.documentVerticalScrollPosition() + this.elementVerticalClientPosition(element) - padding; var currentPosition = this.documentVerticalScrollPosition(); var maximumScrollPosition = this.documentMaximumScrollPosition(); if(targetPosition > maximumScrollPosition) targetPosition = maximumScrollPosition; this.verticalTickToPosition(currentPosition, targetPosition); } }; function Cookie(name, defaultValue, path) { this.name = name; this.value = null; this.path = path || "/"; var ca = document.cookie.split(';'); for(var i=0; i 120) { addClass(body, "shrink"); } else { removeClass(body, "shrink"); } } const NavbarSearchItem_Product = props => { const { data: p, active, highlightIndex, onMouseEnter, } = props; return {p.title}
{p.title}
{p.price} Kč
}; const NavbarSearchItem_Generic = props => { const { data: r, active, highlightIndex, onMouseEnter, } = props; return {r.title} }; const NavbarSearchItem_Post = props => { const { data: p, active, highlightIndex, onMouseEnter, } = props; return {p.title}
{p.title}
} class NavbarSearch extends React.Component { constructor(props) { super(props) this.state = { value: "", opened: false, nodes: [], highlighted: -1, preloading: false, used: false, }; this.loading = false; this.blurTimeout = undefined; this.searchTimeout = undefined; this.rowTypes = [ { type: "ranking", title: __navSearchLang.acZebricky, component: NavbarSearchItem_Post, }, { type: "review", title: __navSearchLang.acRecenze, component: NavbarSearchItem_Post, }, { type: "blogPost", title: __navSearchLang.acClanky, component: NavbarSearchItem_Post, }, { type: "product", title: __navSearchLang.acProdukty, component: NavbarSearchItem_Product, }, { type: "category", title: __navSearchLang.acKategorieProduktu, component: NavbarSearchItem_Generic, }, { type: "brand", title: __navSearchLang.acVyrobci, component: NavbarSearchItem_Generic, }, ]; this._open = this.open.bind(this); this._close = this.close.bind(this); this._toggleOpen = this.toggleOpen.bind(this); this._search = this.search.bind(this); this._onChange = this.onChange.bind(this); this._onBlur = this.onBlur.bind(this); this._onFocus = this.onFocus.bind(this); this._onMouseEnter = this.onMouseEnter.bind(this); this._onKeyDown = this.onKeyDown.bind(this); } componentDidUpdate(prevProps, prevState, snapshot) { if(!prevState.opened && this.state.opened) { const input = this.refs.input; input.focus() input.select() } } open() { this.setState({ opened: true, }) this.props.onToggle?.(true) } close() { this.setState({ opened: false, }) this.props.onToggle?.(false) } toggleOpen() { if(this.state.opened) { this.close() } else { this.open() } } async search() { if(this.loading) return; this.loading = true; const nextState = {}; try { const fd = new FormData(); fd.append("request", "index/search") fd.append("query", this.state.value) fd.append("all", "1") const r = await fetch(`${__httppath}/ajax/`, { method: "POST", body: fd, }); const e = await r.json(); if(e.status == "OK") { nextState.nodes = e.data.nodes; nextState.highlighted = -1; nextState.used = true; } else { console.error(e) } } catch(err) { console.error(err) } finally { nextState.preloading = false; this.setState(nextState) this.loading = false; } } onChange(ev) { const val = ev.currentTarget.value; const isSearchable = val.length >= 3; this.setState({ value: val, preloading: isSearchable, }, () => { if(isSearchable) { clearTimeout(this.searchTimeout) this.searchTimeout = setTimeout(this._search, 750); } }) } onBlur() { clearTimeout(this.blurTimeout) this.blurTimeout = setTimeout(this._close, 300); } onFocus() { clearTimeout(this.blurTimeout) } onMouseEnter(ev) { const hlindex = parseInt(ev.currentTarget.dataset.jsHlindex); this.setState({ highlighted: hlindex, }) } onKeyDown(ev) { switch(ev.key) { case "ArrowDown": { ev.preventDefault() const nodeCount = this.state.nodes.length; let next = this.state.highlighted + 1; if(next > nodeCount - 1) next = -1; this.setState({ highlighted: next, }) } break; case "ArrowUp": { ev.preventDefault() const nodeCount = this.state.nodes.length; let next = this.state.highlighted - 1; if(next < -1) next = nodeCount - 1; this.setState({ highlighted: next, }) } break; case "Enter": const hl = this.state.highlighted; if(hl > -1 && this.state.nodes[hl] !== undefined) { window.location.href = this.state.nodes[hl].link; } else { window.location.href = `${__httppath}/hledat/?q=${encodeURIComponent(this.state.value)}`; } break; case "Escape": this.refs.input.blur() break; } } render() { let hlIterator = -1; let results; const { nodes, highlighted, preloading, used, opened, value, } = this.state; if(used && opened) { const segments = []; for(const t of this.rowTypes) { const results = nodes.filter(e => e.type == t.type); if(results.length == 0) continue; segments.push(
{t.title}
{results.map(r => { hlIterator++; return React.createElement(t.component, { key: r.id, data: r, active: highlighted == hlIterator, highlightIndex: hlIterator, onMouseEnter: this._onMouseEnter, }) })}
) } results = (
{segments} {nodes.length > 0 ? __navSearchLang.acVsechnyVysledky : __navSearchLang.acZadneVysledky}
); } return
{preloading &&
} {results}
} } const onNavbarSearchToggle = opened => { if(opened) { $navbar.navbar.classList.add("search-active") } else { $navbar.navbar.classList.remove("search-active") } }; ReactDOM.render(, document.getElementById("navbar-search")) var siTriggers = document.querySelectorAll("[data-subitems-trigger]"); var siCloses = document.querySelectorAll("[data-subitems-close]"); for(var i=0; i { if(trigger.hasAttribute("href")) { trigger.addEventListener("click", (ev) => { if(window.innerWidth < 768) { ev.preventDefault() } }) } }) var trackedProducts = document.querySelectorAll("a[data-tr-product]"); for(var i=0; i
); } }); var $SHOWCOOKIECONFIRM = new Cookie("_ccf", "1"); if($SHOWCOOKIECONFIRM.value === "1") { ReactDOM.render(, document.getElementById("cookie-confirm")); } var ArticleGallery = React.createClass({ getDefaultProps() { return { /* selector všech obrázků, který se mají wrapnout do figure elementu nebo zobrazovat v galerii */ imageSelector: "img", /* selector obrázků, který nebudou wrapnutý do figure elementu, pouze se budou zobrazovat v galerii */ imageSelectorGalleryOnly: undefined, }; }, getInitialState() { return { open: false, active: -1, loading: false, zoomed: false, zoomLevel: 1 }; }, zoomMin: 1, zoomMax: 10, images: [], componentWillMount() { const galleryOnlyImages = this.props.imageSelectorGalleryOnly ? Array.from(document.querySelectorAll(this.props.imageSelectorGalleryOnly)) : []; const allImages = []; for(const img of Array.from(document.querySelectorAll(this.props.imageSelector))) { const src = img.getAttribute("data-src"); if(src === null) continue; allImages.push(img) } for(let i=0; i { this.setState({ open: true, active: i, }) }) img.style.setProperty("cursor", "pointer", "important") } } else { const maxWidth = img.getAttribute("width") || 620; const isDirectlyInFigure = img.parentNode.tagName.toLowerCase() === "figure"; const isDirectlyInAnchor = img.parentNode.tagName.toLowerCase() === "a"; const isInFigure = isDirectlyInFigure || (isDirectlyInAnchor && img.parentNode.parentNode.tagName.toLowerCase() === "figure"); // ujištění, že figure existuje let figure; if(isDirectlyInFigure) { figure = img.parentNode; } else if(isInFigure) { figure = img.parentNode.parentNode; } else { figure = document.createElement("figure"); const elementToAppend = isDirectlyInAnchor ? img.parentNode : img; elementToAppend.parentNode.insertBefore(figure, elementToAppend) figure.appendChild(elementToAppend) } figure.className = "imageFigure"; figure.style.setProperty("--js-max-width", `${maxWidth}px`) // případné obalení obrázku do odkazu const href = img.getAttribute("data-custom-link"); if(href && !isDirectlyInAnchor) { let isExternal, to; const hasProtocol = href.match(/^(https?:)?\/\//) !== null; if(hasProtocol) { const url = new URL(href); isExternal = !url.hostname.endsWith(__domain); to = href; } else { isExternal = false; to = __httppath + href; } const a = document.createElement("a"); a.setAttribute("href", to) if(isExternal) { a.setAttribute("target", "_blank") a.setAttribute("rel", "nofollow noopener") } img.parentNode.insertBefore(a, img) a.appendChild(img) } // ujištění, že figure je v odstavci (odstavce mají padding) if(figure.parentNode.tagName.toLowerCase() !== "p") { const p = document.createElement("p"); figure.parentNode.insertBefore(p, figure) p.appendChild(figure) } const figcaption = figure.querySelector(":scope > figcaption"); if(figcaption !== null) { figcaption.className = "imageFigure__caption"; } if(img.parentNode.tagName.toLowerCase() !== "a") { img.addEventListener("click", () => { this.setState({ open: true, active: i, }) }) } // vhození obrázku do wrapperu pro lazy loading const cage = document.createElement("div"); cage.className = "imageFigure__cage"; cage.style.setProperty("--js-ratio", `${parseFloat(img.getAttribute("data-ratio"))}%`) img.parentNode.insertBefore(cage, img) cage.appendChild(img) // vytvoření loadingu pro lazy loading const cover = document.createElement("div"); cover.className = "imageFigure__cage__cover"; cage.appendChild(cover) } img.removeAttribute("data-ratio") } }, componentDidMount() { let b = new Blazy({ selector: "[data-article-image]", offset: 500, success: el => { if(el.nextSibling?.classList.contains("imageFigure__cage__cover")) { el.nextSibling.setAttribute("data-js-css-loaded", "true") } } }); }, handleAction(type, data) { switch(type) { case "next": var a = this.state.active+1; if(a > this.images.length-1) a = 0; this.setState({ active: a, zoomed: false }); break; case "prev": var a = this.state.active-1; if(a < 0) a = this.images.length-1; this.setState({ active: a, zoomed: false }); break; case "close": if(this.state.zoomed) { this.setState({ zoomed: false, zoomLevel: 1 }); removeClass(document.body, "no-scroll"); } else { this.setState({ open: false }); } break; case "loaded": this.setState({ loading: false }); break; case "next-or-zoom": this.handleAction(get_window_width() < 768 ? "zoom" : "next"); break; case "zoom": this.setState({ zoomed: true }); addClass(document.body, "no-scroll"); break; case "zoom-add": var a = this.state.zoomLevel+1 > this.zoomMax ? this.zoomMax : this.state.zoomLevel+1; this.setState({ zoomLevel: a }); break; case "zoom-sub": var a = this.state.zoomLevel-1 < this.zoomMin ? this.zoomMin : this.state.zoomLevel-1; this.setState({ zoomLevel: a }); break; } }, render() { if(this.images.length < 1 || this.state.active < 0) return ; var arrowLeft, arrowRight; var class_ = "article-gallery"; if(this.state.open) class_ += " active"; if(this.images.length > 1) { arrowLeft = (
); arrowRight = (
); } var loading; /*if(this.state.loading) { loading =
loading
; }*/ var zoomStuff = []; if(this.state.zoomed) { zoomStuff.push(
Image
); zoomStuff.push(
); zoomStuff.push(
= this.zoomMax ? " blocked" : "")} onClick={this.handleAction.bind(null, "zoom-add")} />); zoomStuff.push(
); } return (
Image
{loading} {arrowLeft} {arrowRight}
{zoomStuff}
); } }); function remoteUnwrapper(uw) { var content = uw.querySelector(".content"); var inner = content.querySelector(".inner"); var isOpened = hasClass(uw, "opened"); if(!isOpened) { content.style.height = "0px"; setTimeout(function(){ content.style.height = inner.offsetHeight+"px"; addClass(uw, "opened"); }, 50) } else { content.style.height = inner.offsetHeight+"px"; setTimeout(function(){ content.style.height = "0px"; removeClass(uw, "opened"); }, 50) } } function getUnwrappersReady() { var unwrappers = document.getElementsByClassName("unwrapper"); for(var i=0; i" +"Thumbs "+(e.data.recommends ? "up" : "down")+"" +""+self.props.lang["recommends"+(e.data.recommends ? 1 : 0)+"_"+self.props.type]+"" +"
"; } if(e.data.rating != null) { rating = "
" +""+self.props.lang.hodnoceniCelkem+":" +"
" +"
" +"
" +"
" +"Star mask" +"
" +"
"; } } var appendedComment = document.createElement("div"); appendedComment.className = "comment"; appendedComment.innerHTML = "
" +"
" +"
" +"
" +"
"+e.data.name+(e.data.wa ? "" : "")+"
" +"
"+self.props.months["m"+e.data.month]+" "+e.data.day+", "+e.data.year+"
" +"
" +recommends +rating +"
" +"
" +"
"+e.data.text+"
" +"
" +"
" +"
" +"
" +"" +"
" +"
" +"
" +"
"; document.querySelector("[data-subcomments='"+self.parent+"']").appendChild(appendedComment); var v = document.querySelector("[data-dynamic-comment-voter='"+e.data.added+"']"); ReactDOM.render(, v); var t = document.getElementById("total-comment-count"); if(t) t.innerHTML = parseInt(t.innerHTML)+1; document.querySelector("[data-dynamic-comment-button='"+e.data.added+"']").addEventListener("click", function(){ if(typeof FloatingCommentAdder_ != "undefined") { FloatingCommentAdder_.handleAction("set-and-open", { parent: e.data.added, respondTo: e.data.name }); } }); iName.value = ""; iText.value = ""; if(iRnEmail !== null) iRnEmail.value = ""; ReactDOM.findDOMNode(self.refs.securityResult).value = ""; if(self.props.ratable) { self.refs.stars.handleAction("vote", 0); self.refs.recommends.handleAction("vote", 2); } var noComments = document.getElementById("comments-none"); if(noComments) { noComments.innerHTML = ""; noComments.className = "m-b-lg p-b-xs"; } if(self.props.ratable && e.data.rating != null) { var crCount = document.getElementById("comment-rating-count"); var crAverage = document.getElementById("comment-rating-average"); var crProgress = document.getElementById("comment-rating-progress"); var crStars = document.getElementById("comment-rating-stars"); if(crCount && crProgress && crAverage) { var count = parseInt(crCount.innerHTML); var average = parseFloat(crAverage.innerHTML); var newAverage = Math.round(((count*average+e.data.rating)/(count+1))*100)/100; crAverage.innerHTML = newAverage; crCount.innerHTML = count+1; crProgress.style.width = (newAverage*20)+"%"; crStars.className = "star-rating g-b rated-"+(Math.round(newAverage*2)*10); } } self.setState({ window: 1, open: true, loading: false, securityQuestion: self.handleAction("generate-security-question"), rnType: "none", }); Ajax({ url: "/ajax/", type: "POST", data: { request: "comment/rn", id: e.data.added, type: self.props.type, }, }) break; default: self.setState({ loading: false }); alert(self.props.lang.generalError); break; } break; } }, fail(e) { self.setState({ loading: false }); alert(self.props.lang.serverError); } }); break; case "close": this.setState({ open: false, window: 0 }); break; case "set-and-open": this.parent = data.parent; this.setState({ open: true, window: 0, respondTo: data.respondTo }); if(this.props.variant == "floating") ReactDOM.findDOMNode(this.refs.name).focus(); break; case "focus": ReactDOM.findDOMNode(this.refs.name).focus(); break; } }, render() { var finishWindow, heading = [], content; if(this.props.variant == "static") { heading.push(

{this.props.lang[this.props.ratable ? "pridatRecenzi" : (this.props.type == "kr" ? "pridatKomentar_kr" : "pridatKomentar")]}

); } else if(this.props.variant == "floating") { heading.push(

{this.props.lang.pridatReakci}

); heading.push({this.props.lang[this.props.ratable ? "naRecenziOd" : (this.props.type == "kr" ? "naKomentarOd_kr" : "naKomentarOd")]+" "+this.state.respondTo}); } if(this.state.window == 1 && this.state.open) { finishWindow = (
{heading} {this.props.lang.zavrit}
{this.props.lang.odeslano}
{this.props.lang.text1}
{this.props.lang.dekujeme}
{this.props.lang.odejit}
); } if(this.props.variant == "static" || (this.props.variant == "floating" && this.state.window == 0)) { var rating, radio; if(this.props.ratable) { rating = (
{this.props.lang["doporucujes_"+this.props.type]}
); radio = (
{this.props.lang.celkoveHodnoceni}
); } content = (