//var Bridge = new BridgeCommunication(); /** hviap-cc-replacement **/ function hviapCheck(mandator) { $('a').not('.cc-ed').each(function() { var thisHref = $(this).attr('href'); if (typeof thisHref != 'undefined' && thisHref.indexOf('hviap-cc') != -1) { thisHref = 'hviap' + ((mandator != 'ct') ? '-' + mandator : '') + thisHref.substr(8); $(this).attr('href', thisHref).addClass('cc-ed'); } }); var hviapReCheck = setTimeout('hviapCheck("' + mandator + '")', 2000); } $(document).ready(function() { var wls = window.location.search; if (wls.indexOf('mandator=') != -1) { var m = hviapCheck(wls.split('mandator=')[1]); } }); $(window).load(function() { /* Check for Android */ var ua = navigator.userAgent.toLowerCase(), isAndroid = ua.indexOf("android") > -1, //&& ua.indexOf("mobile"); android = 0; if (isAndroid) { android = 1; } var wls = window.location.search; var isDebug = (wls.indexOf('debug') != -1) ? 1 : 0; if (isDebug) { resizeMe(); } /** heise-online Sonderlocken */ /* Checkt, ob Tabelle im iFrame läuft */ var isIniFrame = (window.location != window.parent.location) ? 1 : 0; /* Fuegt ho-Stylesheet an */ if (isIniFrame === 1) { var newStr; $('head > link').each(function(e) { var that = $(this), href = that.attr('href'); if (href.indexOf('tabelle') >= 0) { var split = href.split('tabelle-20140819.css'); newStr = split[0] + "ho-tabelle-20140819.css"; } }); $('head').append(''); /* Target-Attr fuer alle im Body href-Attr ohne hviap Zusatz */ $('.fixme #scroller #original a').each(function(e) { var that = $(this), href = that.attr('href'), split = href.split('?url='); that.attr('href', split[1]); that.attr('target', '_blank'); }); } /** Preload */ $('.preload').fadeOut(400); $('
').prependTo('body'); // Sonderlocke fuer spezielle Tabelle sonderlocke_ct0215_148_150(); /** data-index check (Colspan-Elemente koennen falsche data-indizes in einer Zeile produzieren) */ $('.fixme #scroller #original div').each(function(e) { var that = $(this), thisColspanVal = that.data('colspan'), thisDataIndex = that.data('index'); if (thisColspanVal === undefined) { thisColspanVal = 1; } var diff = thisDataIndex + thisColspanVal; that.next().attr('data-index', diff); }); /** Sonderlocke fuer tb_b_head, die gleichen colspan wie der Titel haben */ if ($('.titel').data('colspan') >= 3) { var titleColspan = $('.fixme #original .titel').data('colspan'); tbbhead = $('.fixme #original .tb_b_head[data-index=0][data-colspan=' + titleColspan + ']'), tbbheadColspan = tbbhead.data('colspan'), tbbheadIndex = tbbhead.data('index'); tbbhead.attr('data-colspan', tbbheadColspan - 1).attr('data-index', tbbheadIndex + 1); $('
').insertBefore(tbbhead); } /** Rowspan Berechnung Die fehlenden Zellen müssen von der Zeile mit den wenigsten Elementen her aufgefüllt werden */ $('.fixme #scroller #original li').children('[data-rowspan]').each(function() { var that = $(this), rowspan = that.data('rowspan'), data_index = that.data('index'); /*...klone entsprechende Zelle und füge sie soviele Zeilen darunter hinzu, wie der Rowspan-Wert -1 angegeben ist */ target_row = that.parent().nextAll(); that.clone(true).insertBefore(target_row.slice(0, rowspan - 1).children('[data-index=' + data_index + ']')).css('color', 'rgba(0,0,0,0)').removeAttr('data-rowspan'); /* Erhöht den data-index der Zellen, die durch die neuen Elemente verschoben wurden */ target_row.slice(0, rowspan - 1).children('[data-index=' + data_index + ']').nextAll().each(function() { var that = $(this), thisDataIndex = that.attr('data-index'); if (thisDataIndex == '0' && that.hasClass('tb_b_head')) { var span = $(''); that.prepend(span); } that.attr('data-index', +thisDataIndex + 1); }); }); /** + Colspan-Gruppen im Inhaltsbereich und + Überschriftsgruppen bestimmen Dient dem korrekten Klappen von Spaltenueberschriften mit colspan Attribut */ var maxColspan = $('.fixme #scroller .titel').data('colspan'); var indexVar = 0; $('.fixme #scroller li:not(.partrow) div:not(.titel)').each(function() { var that = $(this), groupColSpanVal = that.attr('data-colspan'), dataIndexVal = that.attr('data-index'), groupCounter = []; if (groupColSpanVal !== undefined) { if (indexVar >= maxColspan - 1) { indexVar = 0; } indexVar = dataIndexVal - 1; for (var p = groupColSpanVal; p > 0; p--) { indexVar++; groupCounter.push(indexVar); } that.attr('data-grouparray', '[,' + groupCounter + ',]'); } }); /* tb_b_head sollen aussehen wie tb_z1_dunkel wenn alle Spalten colspan = 1 und daraufhin eine colspan = max tb_b oder tb_b_head folgt */ var li3 = $('.fixme #scroller #original li:nth-child(3) > .tb_b'); var li4 = $('.fixme #scroller #original li:nth-child(3) > .tb_b_head'); if (li3.length || li4.length) { if ($('.fixme #scroller #original li:nth-child(2) > .tb_b_head').length === maxColspan) { $('.fixme #scroller #original li:nth-child(2) .tb_b_head').each(function(e) { $(this).addClass('normal'); }); } } /* Füge fehlende Klapp-Icons hinzu */ $('.fixme li').has('.tb_b_head').each(function(e) { var that = $(this), thatChildren = that.children(); thatChildren.each(function() { var that = $(this); if (!that.children('.toggle').length && that.data('index') > 0 && that.prevAll().attr('data-colspan') === undefined && !that.children('.noicon').length) { that.prepend(''); } }); }); /* Alle Tabellenköpfe bekommen immer ein , das sie immer Fett sein sollen */ $('.fixme li .tb_b_head .kein_stil, .fixme li .tb_b .kein_stil').each(function(e) { var that = $(this); that.wrapInner(''); }); /* Löscht Rowclose-Icon in tb_b die aus mehreren Elementen bestehen (= ohne Partrow-Attr) */ $('.fixme #original .tb_b').parent('li').not('[data-partrow]').find('.toggle').remove(); /* Tabellen mit diesen Pfeilen werden korrekt angezeigt */ $('.fixme .gruenpfeilhoch, .fixme .rotpfeilrunter, .fixme .blaupfeilrechts').each(function(e) { var that = $(this); if (that.prev().length !== 0) { that.before('
'); } }); /* Tabellen mit doppelten Pfeilen reparieren (Seit neuer Xtension) */ $('.fixme .po, .fixme .pu').each(function(e) { var that = $(this); if (that.children().length === 0) { that.remove(); } }); /* tb_u Zeilen bekommen ein partrow */ $('.fixme #original div.tb_u').parent().addClass('partrow'); /* Wenn Tabelle aus 3 Spalten besteht, lösche die Icons aus den tb_b_head (Weil nicht mehr Klickbar) */ if ($('.titel').data('colspan') <= 3) { $('.tb_b_head').find('.toggle').remove(); } /* Lösche Icons aus tb_b_head, falls sie bei Zellen mit colspan Attr hinzugefügt wurden Lösche Icons aus tb_b_head, falls Zellen leer sind */ $('.tb_b_head').each(function() { var that = $(this); $('.tb_b_head[data-colspan]').find('.toggle').remove(); if (!that.text().trim().length) { that.find('.toggle').remove(); } }); /** + Berechnet die Breite der Zellen + Berechnet die korrekte Breite der colspan-Zellen + Berechnet die Höhe jeder Zelle in einer Zeile */ calcCellDimensions(); /** Cloning */ /* Gibt es ein .tb_z1 in der Tabelle? Definiert, ob eine fixe linke Spalte erzeugt werden soll */ var needLeftColumn = $('#scroller #original li:gt(0) .tb_z1').length; /* Header Table */ var fixedTable = $('').prependTo('.fixme'); $('#scroller #original .titel').parent().clone(true).appendTo($('#fixedTable')); $('#scroller #original .tb_b_head').parent().clone(true).appendTo($('#fixedTable')); /* Linke Spalte */ if (needLeftColumn) { var fixedTableLeft = $('').appendTo('#scroller'); $('#scroller #original li:gt(0)').clone(true).appendTo($('#fixedTableLeft')); $('#fixedTableLeft li div').not('div[data-index=0]').css('visibility', 'hidden'); /* Entfernt alle p die nicht benötigt werden */ $('#fixedTableLeft li .tb_b_head').parent().remove(); /* Entfernt die überflüssigen .tb_b_head */ } /* Top/Left Ecke (aus rein optischen Gründen sobald mehr als 1 tb_b_head vorhanden ist...)*/ if ($('#fixedTable .tb_b_head').size() > 1 && needLeftColumn) { var fixedTableSubheader = $('').prependTo('.fixme'); $('#scroller .tb_b_head[data-index=0]').clone(true).appendTo($('#fixedTableSubheader li')); $('#fixedTable .tb_b_head[data-index=0]').css('color', 'rgba(0,0,0,0)').css('background-color', '#fff'); var elementWidth = $('#fixedTableSubheader li div').outerWidth(); $('#fixedTableSubheader li').css('width', elementWidth - 1); } /* Löscht die zuvor geclonten Elemente aus der Scroll-Liste */ $('#scroller #original .titel').parent().remove(); $('#scroller #original .tb_b_head').parent().remove(); $('#scroller #original div.tb_u').css('color', 'rgba(0,0,0,0)'); /* Löscht Text in der ersten Tabellenspalte (die geklont wurde) */ if (needLeftColumn) { $('#scroller #original li div[data-index=0]').css('color', 'rgba(0,0,0,0)').css('background-color', '#fff'); $('#scroller #original li div[data-index=0] img').css('visibility', 'hidden'); } /* Löscht den Inhalt den verdeckten .tb_b Zellen */ $('#scroller #original .tb_b[data-index=0]').css('color', 'rgba(0,0,0,0)'); $('#scroller #original .tb_b[data-index=0]').find('.toggle').css('visibility', 'hidden'); /** Berechnet die gesamte Breite der Tabelle - kommt nach dem Cloning, da auch die neuen fixen Tabellenteile berechnet werden müssen */ calcTotalWidth(); /* Partrows brechen um, wenn Viewport schmaler als Zeile ist */ calcLineBreak(); /** Speichere Text der Titelzeilen mit colspan in data-Attr - Beim klappen von Spalten wird evtl eine Ellipse erzeugt, der Originaltext bleibt so erhalten */ $('.fixme #fixedTable [data-colspan]').each(function(e) { var that = $(this), text = that.children().text(), textWidth = that.find('span').width(); that.data('textValue', text); that.data('textWidth', textWidth); }); /** Click-Events der Spalten/Zeilen-Köpfe (sobald mehr als 2 Spalten vorhanden sind) */ /*...für Spalten / Columns */ if ($('.titel').data('colspan') >= 3) { $('.tb_b_head').has('.toggle').on('click', function(e) { var that = $(this), target_data_colspan = that.attr('data-colspan'); target_data_attr = that.attr('data-index'); target_width = that.attr('data-width'); /* Überprüfe, ob evtl Titelgruppen verkleinert/vergößert werden müssen */ if (that.hasClass('colclose')) { $('[data-grouparray*=",' + target_data_attr + ',"]').each(function(e) { var that = $(this), parentHeaderWidthNew = that.width(); that.css("width", parentHeaderWidthNew + (target_width - 4)); }); } else if (!that.hasClass('colclose')) { $('[data-grouparray*=",' + target_data_attr + ',"]').each(function(e) { var that = $(this), parentHeaderWidthNew = that.width(); that.css("width", parentHeaderWidthNew - (target_width - 4)); }); } /* Toggle entsprechende Spalten */ if (target_data_attr !== 0 && target_data_colspan === undefined) { $('[data-index="' + target_data_attr + '"]:not([data-colspan])').toggleClass('colclose'); $('[data-index="' + target_data_attr + '"]strong').toggle(); $('[data-index="' + target_data_attr + '"]sup').toggle(); $('[data-index="' + target_data_attr + '"] > span').toggleClass('rowopen'); /*Icon*/ $('[data-index="' + target_data_attr + '"] img').toggle(); /*Image*/ $('[data-index="' + target_data_attr + '"] .gruenpfeilhoch').toggle(); /* Grüner Pfeil */ $('[data-index="' + target_data_attr + '"] .rotpfeilrunter').toggle(); /* Roter Pfeil */ $('[data-index="' + target_data_attr + '"] .blaupfeilrechts').toggle(); /* Blauer Pfeil */ /* Neuberechnung der Breite */ /* Berechne die Breite aller Elemente in einer Zeile */ var width = 0; $('.fixme #fixedTable .tb_b_head').parent().eq(0).children().each(function(index) { var that = $(this); width += that.outerWidth(true); }); /* Setze Breite aller Container (Kopf; linke, fixe Spalte; Haupttabelle) */ $('.fixme #scroller #original, .fixme #fixedTable, .fixme #fixedTableLeft').css('width', width); $('.fixme div.tb_b, .fixme div.tb_u, .fixme .titel').css('width', width); $('.fixme .partrow div.tb_b').parent().css('width', width); $('.fixme .titel').attr('data-totalWidth', width); /* Berechne Zeilenumbrueche */ calcLineBreak(); /* Zellen mit colspan werden umgebrochen, sobald Text länger als Zelle wird Zusaetzlich werden alle Siblings ebenfalls in ihrer Höhe verändert, damit die Zeile einheitlich bleibt */ $('.fixme #scroller [data-colspan]').not('.partrowClosed, .partrowClosed_big, .partrowClosed_big_2').each(function(e) { var that = $(this); that.siblings().andSelf().css('height', ''); var tallest = 0; that.siblings().andSelf().each(function() { var that = $(this), thisHeight = that.height(); if (thisHeight > tallest) { tallest = thisHeight; } }); that.siblings().andSelf().height(tallest); }); /* Sobald eine colspan-Zelle in den Titelspalten schmaler als ihr Inhalt wird, ersetze den Text durch eine Ellipse */ $('.fixme #fixedTable [data-colspan][data-grouparray*=",' + target_data_attr + ',"]').each(function(e) { var that = $(this), cellWidth = that.width(), currentText = that.data('textValue'), textWidth = that.data('textWidth'); if (cellWidth < textWidth) { if (that.find('strong').length) { that.children().children().html("\u2026"); } else { that.children().children().html("\u2026"); } } else { if (that.find('strong').length) { that.children().children().html("" + currentText + ""); } else { that.children().children().html(currentText); } } }); /* Sonderlocke für Zeilen mit mehreren .tb_b (welche kein Colspan besitzen) */ $('#fixedTableLeft li, #scroller #original li').not('.partrow').find('div.tb_b').each(function(index) { var that = $(this), tb_bColspan = that.attr('data-colspan'), /* Besitzt das .tb_b ein colspan? */ dataWidth = that.attr('data-width'); if (tb_bColspan === undefined) { that.css('width', dataWidth); } }); } /* Fixed-Elemente müssen erneut positioniert werden (falls 3 Head-Zeilen vorhanden sind) */ fixedPosition(); /* Dimensionen der Liste wurden verändert -> iScroll refreshen */ if (android === 0) { setTimeout(function() { myScroll.refresh(); }, 0); } else if (android === 1) { setTimeout(function() { myScrollAndroid.refresh(); }, 0); } /* Aktuelle Translate-Value des #scroller Divs an fixed-ELemente übergeben */ setTimeout(function() { translateValue('#scroller #original'); }, 100); /* Zentriere Tabelle erneut, da sich die groesse geaendert hat */ centerTabelle(isIniFrame); }); } /*... für Zeilen / Rows */ $('.fixme .partrow').on('click', function(e) { /* Definiere die Trennlinie */ var that = $(this), partrowNum = that.attr('data-partrow'), thisHeight = that.children().height(); /* Wende entsprechende Styles auf Trennlinie an */ if (that.children().children().length !== 0) { /* alle Trennlinien die ein beinhalten (.find('strong')*/ $('[data-partrow="' + partrowNum + '"] div span').not('.new').toggleClass('rowopen'); /*Icon*/ $('[data-partrow="' + partrowNum + '"]').children().toggleClass('partrowClosed'); /* Blende alle Reihen bis zur nächsten Trennlinie aus */ $('#scroller #original li[data-partrow=' + partrowNum + ']').nextUntil('.partrow').toggle(); $('#fixedTableLeft li[data-partrow=' + partrowNum + ']').nextUntil('.partrow').toggle(); } /* Zentriere alle img-Elemente */ centerImg(); /* Dimensionen der Liste wurden verändert -> iScroll refreshen */ if (android === 0) { setTimeout(function() { myScroll.refresh(); }, 0); } else if (android === 1) { setTimeout(function() { myScrollAndroid.refresh(); }, 0); } /* Aktuelle Translate-Value des #scroller Divs an fixed-ELemente übergeben */ setTimeout(function() { translateValue('#scroller #original'); }, 100); /* Zentriere Tabelle erneut, da sich die groesse geaendert hat */ centerTabelle(isIniFrame); }); /** * Rotate Minimize Buttons */ $('.tb_b_head span.toggle').each(function(e) { $(this).html('⌃'); }); $('.partrow span.toggle').each(function(e) { $(this).html('⌃'); }); /** * Change rotation on click */ $('.tb_b_head').on('click', function(e) { var that = $(this); var toggle = that.find('span.toggle'); if (toggle.hasClass('rowopen')) { toggle.css('transform', 'rotate(90deg)'); } else { toggle.css('transform', 'rotate(270deg)'); } }); $('.partrow').on('click', function(e) { var that = $(this); var toggle = that.find('span.toggle'); }); /** iScroll NEU */ var myScroll, myScrollAndroid, myScrollAndroidHeader; if (android === 1) { if (navigator.userAgent.match(/Android [\d+\.]{3,5}/) && parseFloat(navigator.userAgent.match(/Android [\d+\.]{3,5}/)[0].replace('Android ', '')) < 4.4) { clickOpt = false; } else { clickOpt = true; } if (isIniFrame === 0) { myScrollAndroid = new IScroll('#scroller', { scrollX: true, scrollY: true, hScrollbar: false, vScrollbar: false, probeType: 3, mouseWheel: true, click: clickOpt }); myScrollAndroidHeader = new IScroll('#fixedTable', { scrollX: false, scrollY: false, hScrollbar: false, vScrollbar: false, probeType: 3, mouseWheel: false, click: clickOpt }); myScrollAndroid.on('scroll', updatePosition); myScrollAndroid.on('scrollEnd', updatePosition); } else if (isIniFrame === 1) { myScrollAndroid = new IScroll('#scroller', { scrollX: true, scrollY: true, scrollbars: true, interactiveScrollbars: true, probeType: 3, mouseWheel: true, click: clickOpt }); myScrollAndroid.on('scroll', updatePosition); myScrollAndroid.on('scrollEnd', updatePosition); } } else if (android === 0) { if (isIniFrame === 0) { myScroll = new IScroll('#scroller', { scrollX: true, scrollY: true, hScrollbar: true, vScrollbar: true, scrollbars: true, interactiveScrollbars: true, probeType: 3, mouseWheel: true, click: true }); myScroll.on('scroll', updatePosition); myScroll.on('scrollEnd', updatePosition); } else if (isIniFrame === 1) { myScroll = new IScroll('#scroller', { scrollX: true, scrollY: true, scrollbars: true, interactiveScrollbars: true, probeType: 3, mouseWheel: true, click: true }); myScroll.on('scroll', updatePosition); myScroll.on('scrollEnd', updatePosition); } } document.body.addEventListener("touchmove", function(event) { event.preventDefault(); }, {capture: false, passive: false}); /*Zentriert die Tabelle, wenn: a)man sich in einem iFrame befindet b)die Tabelle kleiner als der Viewport ist */ centerTabelle(isIniFrame); linkFix(); }); function updatePosition() { $('#fixedTable .tb_b_head').parent().css('-webkit-transform', 'translate3d(' + this.x + 'px, 0, 0)') .css('-moz-transform', 'translate3d(' + this.x + 'px, 0, 0)') .css('-ms-transform', 'translate3d(' + this.x + 'px, 0, 0)') .css('-o-transform', 'translate3d(' + this.x + 'px, 0, 0)') .css('transform', 'translate3d(' + this.x + 'px, 0, 0)'); $('#fixedTableLeft').css('-webkit-transform', 'translate3d(0,' + this.y + 'px, 0)') .css('-moz-transform', 'translate3d(0,' + this.y + 'px, 0)') .css('-ms-transform', 'translate3d(0,' + this.y + 'px, 0)') .css('-o-transform', 'translate3d(0,' + this.y + 'px, 0)') .css('transform', 'translate3d(0,' + this.y + 'px, 0)'); /* Wenn Tabelle nach links gescrollt wird, fuege weißen Rand an erste fixe Spalte hinzu */ if (this.x < 0) { $('#fixedTableLeft [data-index=0]').removeClass('fixedTableLeftScrollingBorder_2').addClass('fixedTableLeftScrollingBorder'); $('#fixedTableSubheader').addClass('fixedTableSubHeaderScrollingBorder'); } else if (this.x >= 0) { $('#fixedTableLeft [data-index=0]').removeClass('fixedTableLeftScrollingBorder').addClass('fixedTableLeftScrollingBorder_2'); $('#fixedTableSubheader').removeClass('fixedTableSubHeaderScrollingBorder'); } } /** Aktueller transform:translate Value an fixed-Elemente übergeben */ function translateValue(el) { var transform = $(el).css("-webkit-transform") || $(el).css("-moz-transform") || $(el).css("-ms-transform") || $(el).css("-o-transform") || $(el).css("transform"); var values = transform.match(/-?[0-9\.]+/g); var matX = values[4]; var matY = values[5]; $('#fixedTable .tb_b_head').parent().css('-webkit-transform', 'translate3d(' + matX + 'px, 0, 0)') .css('-moz-transform', 'translate3d(' + matX + 'px, 0, 0)') .css('-ms-transform', 'translate3d(' + matX + 'px, 0, 0)') .css('-o-transform', 'translate3d(' + matX + 'px, 0, 0)') .css('transform', 'translate3d(' + matX + 'px, 0, 0)'); $('#fixedTableLeft').css('-webkit-transform', 'translate3d(0,' + matY + 'px, 0)') .css('-moz-transform', 'translate3d(0,' + matY + 'px, 0)') .css('-ms-transform', 'translate3d(0,' + matY + 'px, 0)') .css('-o-transform', 'translate3d(0,' + matY + 'px, 0)') .css('transform', 'translate3d(0,' + matY + 'px, 0)'); } /** iScroll Container neu berechnen (resize) */ function resizeiScroll() { var headerHeight = $('#fixedTable').outerHeight(); $('#scroller').css('width', $(window).width()); $('#scroller').css('height', $(window).height() - headerHeight); $('body').scrollLeft(0).scrollTop(0); setTimeout(function() { translateValue('#scroller #original'); }, 100); } /** Funktion fuer alle Zeilen/Spalten/Zellen, deren Text passend zum Viewport umgebrochen werden müssen Beinhaltet auch fixedPosition(), da die Position der fixen Elemente angepasst werden muss */ function calcLineBreak() { var totalWidth = $('.titel').attr('data-totalWidth'), windowWidth = $(window).width(); /* Partrows */ $('.fixme .partrow div.tb_b').each(function(f) { var widthGesamt = 0; $(this).children().each(function(e) { widthGesamt += $(this).width(); if (widthGesamt <= windowWidth - 20) { $(this).parent().css('height', ""); $(this).parent().width(totalWidth - 22); } else if (widthGesamt > windowWidth - 20) { $(this).parent().width(windowWidth - 20); $(this).parent().css('height', ""); } }); }); /* Titel */ $('.fixme .titel').each(function() { var that = $(this); if (that.width() <= windowWidth - 20) { that.width(totalWidth - 22); that.css('height', ""); } if (that.width() > windowWidth - 20) { that.width(windowWidth - 20); that.css('height', ""); } }); /* Tabellenlegende */ $('.fixme div.tb_u').each(function() { var that = $(this); if (that.width() <= windowWidth - 20) { that.width(totalWidth - 22); that.css('height', ""); } if (that.width() > windowWidth - 20) { that.width(windowWidth - 20); that.css('height', ""); that.parent().width(totalWidth); } }); fixedPosition(); } /** Brechnet Dimensionen der Zellen (abhängig von Viewport-Größe) */ var var1 = 0, var2 = 0, var3 = 0; function calcCellDimensions() { /** Viewport Check */ /* (Tablet klein ODER Phone) UND mehr als 2 Spalten */ if ((($('.smallViewport').css('line-height') === '1px' || $('.smallViewport').css('line-height') === '2px')) && $('.titel').data('colspan') !== 2) { $('body').data('small', 1); ++var1; var2 = 0; var3 = 0; /* Normal */ } else if ($('.smallViewport').css('line-height') === '0px') { $('body').data('small', 0); ++var2; var1 = 0; var3 = 0; /* (Tablet klein ODER Phone) UND 2 Spalten */ } else if ((($('.smallViewport').css('line-height') === '1px' || $('.smallViewport').css('line-height') === '2px')) && $('.titel').data('colspan') === 2) { var windowWidth = $(window).width(), cellcount = $('.fixme .titel').data('colspan'); newCellWidth = windowWidth / cellcount; $('.fixme li:not(.partrow) div:not(.tb_u, .titel)').each(function() { $(this).css('width', newCellWidth - 22); $('.fixme #fixedTableSubheader li').css('width', newCellWidth - 1); }); $('.fixme ul img').css('max-width', (newCellWidth - 22) - 20); $('body').data('small', 2); var1 = 0; var2 = 0; var3 = 1; } /** Spieletabellen Zellen groß genug */ if ($('.artrubrik_spielekritik').length != 0 && $('.smallViewport').css('line-height') === '0px') { $('.artrubrik_spielekritik .tb_z1').css('min-width', '125'); $('.artrubrik_spielekritik .tb_z1_dunkel').css('min-width', '125'); $('.artrubrik_spielekritik .tb_z2').css('min-width', '225'); $('.artrubrik_spielekritik .tb_z2_dunkel').css('min-width', '225'); } else { $('.artrubrik_spielekritik .tb_z1').css('min-width', '0'); $('.artrubrik_spielekritik .tb_z1_dunkel').css('min-width', '0'); $('.artrubrik_spielekritik .tb_z2').css('min-width', '0'); $('.artrubrik_spielekritik .tb_z2_dunkel').css('min-width', '0'); } /** Beim Wechsel von Normal -> Tablet klein; Tablet -> Phone wird Breite+Hoehe berechnet Speichere Status der eingeklappten Spalten/Zeilen */ if (var1 === 1 || var2 === 1 || var3 === 1) { /* Eingeklappte Zellen in Arrays sammeln */ var eingeklappteSpalten = []; var eingeklappteZeilen = []; $('.fixme #fixedTable .tb_b_head.colclose').each(function(e) { var that = $(this); eingeklappteSpalten.push(that); }); $('.fixme #scroller #fixedTableLeft .tb_b.partrowClosed').each(function(e) { var that = $(this); eingeklappteZeilen.push(that); }); /* Ausklappen */ for (var i = 0; i < eingeklappteSpalten.length; i++) { eingeklappteSpalten[i].trigger('click'); } for (var j = 0; j < eingeklappteZeilen.length; j++) { eingeklappteZeilen[j].trigger('click'); } /* Berechne Breite der einzelnen Zellen */ if ($('body').data('small') === 1) { equalWidth(140); } else if ($('body').data('small') === 0) { equalWidth(240); } /* Berechnung der Breite von colspan-Zellen (nach equalWidth, da wir Einzelzellenbreite für colspans vorher wissen muessen) */ $('.fixme div[data-colspan]').not('.fixme .tb_b, .fixme .titel, .fixme .tb_u').each(function(e) { var that = $(this); var colspanVal = that.data('colspan'); var numbers; /* GroupArray der colspan-Zelle auslesen */ var thisGroupArray = that.attr('data-grouparray'); if (thisGroupArray !== undefined) { numbers = thisGroupArray.match(/\d+/g); } /* Durch Array laufen und passende .tb_b_head-Widths suchen und addieren */ var cellWidths = 0; for (var i = 0; i < numbers.length; i++) { var thisWidth = $('.fixme div[data-index="' + numbers[i] + '"]').not('[data-colspan]').outerWidth(); cellWidths += thisWidth; } that.css('width', cellWidths - 22); }); /* Höhe berechnen */ equalHeight(); /* Einklappen*/ for (var k = 0; k < eingeklappteSpalten.length; k++) { eingeklappteSpalten[k].trigger('click'); } for (var l = 0; l < eingeklappteZeilen.length; l++) { eingeklappteZeilen[l].trigger('click'); } } /* always equal height, test for 4881 */ equalHeight(); /* Zentriere img-Elemente */ centerImg(); /* Färbe kostenlos wenn vorhanden */ colorKostenlos(); } /** Jede Zelle pro Zeile bekommt gleiche Höhe */ function equalHeight() { /* Reset der Zeilenhöhe + img-Margin */ $('.fixme ul li').children().css('height', ''); $('.fixme li div:not(.tb_z1, .tb_z1_dunkel)').find('img').css('margin-top', ''); /* Neuberechnung der Zeilenhöhe */ $('.fixme ul li').each(function() { var that = $(this), tallest = 0; $(this).children().each(function() { var that = $(this), thisHeight = that.height(); if (thisHeight > tallest) { tallest = thisHeight; } }); that.children().height(tallest); /* fixedTableSubheader-Zellen behalten ihre ursprüngliche Höhe, da sie nie verändert wird */ if ($('.fixme #fixedTableSubheader').length) { $('.fixme #fixedTableSubheader li div').each(function(e) { var that = $(this); var origHeight = $('.fixme #fixedTable li').has('.tb_b_head').eq(e).children('[data-index=0]').height(); that.height(origHeight); }); } }); } /** Jede Spalte bekommt gleiche minimal nötige Breite */ function equalWidth(widthThreshold) { var eLength = $('.fixme .titel').data('colspan'); /* Berechne maximale Breite einer Spalte */ var calcRowWidth = function() { var innerMaxWidth = 0; $('.fixme li:not(.partrow) div:not(.tb_u, .titel, [data-colspan])[data-index="' + i + '"]').each(function(e) { var that = $(this), elementWidth = 0; /* Wenn Zelle ein toggle-icon hat, muss dessen Breite berücksichtig werden */ if (that.children().is('.toggle')) { elementWidth = that.textWidth() + 45; } else { elementWidth = that.textWidth() + 15; } /* Spalte darf nicht breiter als x Pixel werden */ if (elementWidth > widthThreshold) { elementWidth = widthThreshold; } /* Bestimme groesste Zellenbreite in Spalte */ if (elementWidth > innerMaxWidth) { innerMaxWidth = elementWidth; } }); return innerMaxWidth; }; var minrowWidth = widthThreshold; for (i = 0; i <= eLength - 1; i++) { if (i === 0) { var firstRowWidth = calcRowWidth(); $('.fixme #fixedTableSubheader li').css('width', firstRowWidth + 21); } var rowWidth = calcRowWidth(); //console.log('rowWidth = '); //console.log(rowWidth); //console.log('minrowWidth = '); //console.log(minrowWidth); if (rowWidth <= minrowWidth) { minrowWidth = rowWidth; } if (typeof(cellusedaspadding) !== 'undefined') { minrowWidth = rowWidth; } $('.fixme li:not(.partrow) div:not(.tb_u, .titel, [data-colspan])[data-index="' + i + '"]').css('width', rowWidth).attr('data-width', rowWidth); $('.fixme ul div img').css('max-width', minrowWidth); } } /** Berechnet die gesamte Breite der Tabelle - eigene Funktion, da bei resize oder orientationchange die erste Spalte neu berechnet wird - es aendert sich dadurch die maximale Tabellenbreite */ function calcTotalWidth() { var totalWidth = 0; if ($('.fixme #scroller #original .titel').attr('data-colspan') === 1) { $('.fixme #scroller #original li .tb_z1:eq(0)').parent().children().each(function(index) { totalWidth += $(this).outerWidth(true); }); } else { $('.fixme #scroller #original li .tb_z1:eq(0)').parent().children().each(function(index) { totalWidth += $(this).outerWidth(true); }); } $('.titel').attr('data-totalWidth', totalWidth); $('.fixme #scroller #original, .fixme #fixedTable, .fixme #fixedTableLeft, .fixme #scroller .partrow').css('width', totalWidth); } /** LinkFix für Links in der ersten Zeile (Vorallem wichtig bei KV und Spieletabellen) */ function linkFix() { if (document.getElementsByClassName('artrubrik_spielekritik').length || document.getElementsByClassName('artrubrik_kurztest').length) { var e = document.getElementById('original').getElementsByClassName('tb_z2'); var object = e[0].getElementsByClassName('kein_stil'); var string, add; if (object[0].innerHTML.match(/http:\/\/
" + link.text() + "" ); link.remove(); } } } } /** Mögliche Images zentrieren (nur Bilder die im Inhaltsbereich vorkommen, nicht in den linken fixed-Elementen) */ function centerImg() { $('.fixme li div:not(.tb_z1, .tb_z1_dunkel)').find('img').each(function() { var that = $(this); if (that.parent().find('img').length === 1) { var imageHeight = that.height(); var cellHeight = that.parent().height(); that.css('margin-top', ''); if (imageHeight < cellHeight) { that.css('margin-top', (cellHeight / 2) - imageHeight / 2); } } }); } /* Zentriert die Tabellen */ function centerTabelle(isIniFrame) { if (isIniFrame === 1) { var breiteTabelle = $('.fixme .titel').outerWidth(); var hoeheTabelle = $('.fixme #scroller #original').outerHeight() + $('.fixme #fixedTable').outerHeight(); var breiteViewport = $(window).width(); var hoeheViewport = $(window).height(); var centerX = breiteViewport / 2 - breiteTabelle / 2; if (breiteTabelle <= breiteViewport) { $('.fixme').css('left', centerX); $('.fixme .iScrollVerticalScrollbar').css('right', centerX + 1); } else if (breiteTabelle > breiteViewport) { $('.fixme').css('left', 0); $('.fixme .iScrollVerticalScrollbar').css('right', 1); } var centerY = hoeheViewport / 2 - hoeheTabelle / 2; if (hoeheTabelle <= hoeheViewport) { $('.fixme').css('top', centerY); $('.fixme .iScrollHorizontalScrollbar').css('bottom', centerY); } else if (hoeheTabelle > hoeheViewport) { $('.fixme').css('top', 0); $('.fixme .iScrollHorizontalScrollbar').css('bottom', 0); } } } /** Resize-Funktion */ $(window).resize(function() { /* Checkt, ob Tabelle im iFrame läuft */ var isIniFrame = (window.location != window.parent.location) ? 1 : 0; resizeiScroll(); calcLineBreak(); calcCellDimensions(); calcTotalWidth(); centerTabelle(isIniFrame); }); /** OrientationEvent */ if (window.DeviceOrientationEvent) { window.addEventListener('orientationchange', resizeiScroll, false); window.addEventListener('orientationchange', calcLineBreak, false); window.addEventListener('orientationchange', calcCellDimensions, false); window.addEventListener('orientationchange', calcTotalWidth, false); window.addEventListener('orientationchange', centerTabelle, false); } /** Positionierung der Fixed-Elemente vom oberen Viewport-Rand */ function fixedPosition() { var titleHeight = $('#fixedTable .titel').outerHeight(); var headerHeight = $('#fixedTable').outerHeight(); var fixedTableLeftWidth = $('#fixedTableLeft').outerWidth(); $('.fixme #scroller').css('top', headerHeight) .css('height', $(window).height() - headerHeight); $('.fixme #fixedTableLeft').css('top', '0'); $('.fixme #fixedTableSubheader').css('top', titleHeight); } /** Funktion färbt kostenlos */ function colorKostenlos() { if ($('.fixme #original .tb_z2 .kostenlos').length) { //nichts } else { if ($('.fixme #original .tb_z2 strong').text() == 'kostenlos') { $('.fixme #original .tb_z2 strong').css('color', '#31A1AB'); } else if ($('.fixme #original .tb_z2_dunkel strong').text() == 'kostenlos') { $('.fixme #original .tb_z2_dunkel strong').css('color', '#31A1AB'); } } } /** * Resize test */ function resizeMe() { var wls = window.location.search; console.log('resizeMe'); var bodyHeight = $('body').height(); var bodyWidth = $('body').width(); $('#bhval').text('height: ' + bodyHeight + 'px / width: ' + bodyWidth + 'px (' + px2em(bodyWidth) + 'em)'); if (wls.indexOf('fontSize') != -1) { var size = parseFloat(wls.split('fontSize=')[1]); $('body').removeClass('fontSize12 fontSize14 fontSize16 fontSize20 fontSize24').addClass('fontSize' + size); } } function px2em(pxVal) { return 1 + (0.0625 * pxVal); } /** Funtion zur Breitenbestimmung von Text */ $.fn.textWidth = function(text, font) { if (!$.fn.textWidth.fakeEl) { $.fn.textWidth.fakeEl = $('').hide().appendTo(document.body); } $.fn.textWidth.fakeEl.text(text || this.val() || this.text()).css('font', font || this.css('font')); return $.fn.textWidth.fakeEl.width(); }; function sonderlocke_ct0215_148_150() { var titel = $('.fixme #scroller #original li .titel').text(); if (titel === 'Kombinationsmöglichkeiten Display-Anschlüsse') { $('.fixme #scroller #original .tb_b_head[data-index="0"] strong:contains("Display-Eingang")').css('float', 'right'); $('.fixme #scroller #original .tb_b_head[data-index="0"] strong:contains("Grafik-Ausgang")').css('float', 'left').after(''); } }