HG-Optimierung

Vereinfachte Navigation auf Hartgeld.com

当前为 2015-08-30 提交的版本,查看 最新版本

// ==UserScript==
// @name        HG-Optimierung
// @namespace   hgtools
// @include     http://www.hartgeld.com/*
// @version     2.4
// @grant       none
// @description Vereinfachte Navigation auf Hartgeld.com
// ==/UserScript==

(function () { 

   ///////////////////////////////////////////////////////////////////////////////////
   // Startseite
   if (self == top) {
      
      // CSS
      var cssstring = (function () {/*
         <style>
         #heute {
            padding-top: 2px;
         }
         #olframe {
            display:none;
            height:100%;
            position:fixed;
            top:0;
            right:0;
            z-index:10000;
         }
         #dragbar,
         #dragbarex {
            position: absolute;
            left: -12px;
            height:100%;
            width:10px;
            cursor: col-resize;
         }
         #closeborder {
             border: 1px solid #666;
             opacity: 0.8;
             float:left;
             position: absolute;
             left:0px;
             background:#fff;
             border-radius:25px;
         }
         #close {
             top: 0px;
             left: 0px;
             position: relative;
             height:20px;
             width:20px;
             padding:4px;
             font-size:25px;
             display:block;
             text-decoration:none;
         }
         #lesefenster,
         #iframeph {
            box-shadow: -10px 10px 13px -3px rgba(158,158,158,1);
            width:100%;
            height:100%;
            background:#fff;
            overflow:auto;
            border:none;
         }
         #iframeph {
            box-shadow: none;
            position:absolute;
            display:none;
         }
         #extframe {
            box-shadow: -10px 10px 13px -3px rgba(158,158,158,1);
            height:100%;
            position:fixed;
            top:0;
            right:0;
            z-index:11000;
            background:#fff;
            display:none;
         }
         #externfenster {
            overflow:auto;
            width:100%;
            height:100%;
            border:none;
         }
         #externcloseborder {
             border: 1px solid #666;
             opacity: 0.8;
             position: absolute;
             left:0px;
             background:#fff;
             border-radius:30px;
         }
         #externclose {
             top: -1px;
             left: -10px;
             position: relative;
             height:20px;
             width:20px;
             padding:17px;
             font-size:50px;
             display:block;
             text-decoration:none;
         }
         .markierterubrik {
            background: #f5b201;
            color: #000 !important;
            padding: 1px 6px;
            border-radius:3px;
            font-weight:bold;
         }
         #wartebild {
            -moz-animation: spin 1s infinite linear;
            -webkit-animation: spin 1s infinite linear;  
            position: absolute;
            left: 45%;
            top: 45%;
         }
         @-moz-keyframes spin {
             0% {-moz-transform: rotate(0deg);}
             100% {-moz-transform: rotate(360deg);};
         }
         @-webkit-keyframes spin {
             0% {-webkit-transform: rotate(0deg);}
             100% {-webkit-transform: rotate(360deg);};
         }
         #rubrikenaktualisieren {
            height:30px;
         }
         </style>
         
         */}).toString().match(/[^]*\/\*([^]*)\*\/\}$/)[1];
      $('head').append(cssstring);

   

      // Links umbauen
      $('.tab-content .infolinks a').each(function() {
        var value = $(this).attr('href');
        $(this).attr('url', value);
      });

      // von auto auf fixe Position ändern
      function AutoZentrierungInMargin() {
         $('.container-fluid').css("position", "absolute");
         var left = ($(window).width() - $('.container-fluid').width()) / 2 - 14 + "px";
         return left;
      }

      // In Abhängigkeit der Fenstergröße die Overlays einstellen
      function Fenstergroesse(schmal, breit) {
         if ($(window).width() > 1600) {
            return breit;
         }
         return schmal;
      }

      
      // Iframe für externe URLs
      $('body').append('<div id="extframe" style="width:' + Fenstergroesse("90%", "50%") + ';"><div id="dragbarex"></div><div id="externcloseborder"><a id="externclose" href="##">&#10006;</a></div><iframe id="externfenster" ></iframe></div>');
      
      $('body').on('click', '#externclose', function() {
         $('#extframe').hide();
         $('#externfenster').attr('src', '');
      });

      window.ExterneURL = function(url) {
         $('#externfenster').attr('src', url);
         $('#extframe').fadeIn(300);
      }


      // Rubrikenlinks-Funktionalität
      var neu = 0;
      var letzterubrik;
      
      // Für Iframe-Abfrage, welche Rubrikenseite gerade offen ist:
      window.AktuelleRubrik = function() {
         return $(letzterubrik).text();
      }

      $('.tab-content').on('click', '.infolinks a', function(event) {
         event.preventDefault();
         if (neu == 0) {
            // margin: 0 auto in 0 x umwandeln
            $('.container-fluid').css({"margin-left": AutoZentrierungInMargin()});
            $('.container-fluid').animate({'marginLeft': '0'}, 300);
            
            // $('.container-fluid').css({"position": "relative"});
            $('.container-fluid').prepend('<div id="olframe" style="width:' + Fenstergroesse("70%", "85%") + ';"><div id="dragbar"></div><div id="closeborder"><a id="close" href="##">&#10006;</a></div><div id="iframeph"><img id="wartebild" src="http://www.hartgeld.com/images/seiten/Logo-HG_kl.jpg"></div><iframe id="lesefenster" ></iframe></div>');

            $('#olframe').fadeIn(300);
         }
         
         $(this).addClass('markierterubrik');
         MarkiertenBereichAufheben();
         
         $('#iframeph').fadeIn(300); 

         var url = $(this).attr('url');
         $('#lesefenster').attr('src', url);

         letzterubrik = $(this);
         neu = 1;
      });

      function MarkiertenBereichAufheben() {
         if (neu) {
            $(letzterubrik).removeClass('markierterubrik');
            letzterubrik = 0;
         }
      }

      $('.container-fluid').on('click', '#close', function() {
         $('#lesefenster').fadeOut(300, function(){ $('#olframe').remove();});
         $('.container-fluid').animate({'marginLeft': AutoZentrierungInMargin()}, 300);
         MarkiertenBereichAufheben();
         neu = 0;
      });
      
      
      // Breite Rubriken-Overlay ändern
      $('.container-fluid').on('mouseover', '#dragbar', function() {
         $('#dragbar').css({"border-right": "3px dashed #666"});
      });
      $('.container-fluid').on('mouseout', '#dragbar', function() {
         $('#dragbar').css({"border-right": "none"});
      });
      
      var i = 0;
      var dragging = false;
      $(window).on('mousedown', '#dragbar', function(e) {
         e.preventDefault();

         dragging = true;
         var main = $('#olframe');
         var ghostbar = $('<div>',
            { id:'ghostbar', css: 
               {
                  borderRightWidth: '3px',
                  borderRightColor: '#666',
                  borderRightStyle: 'dashed',
                  position: 'absolute',
                  cursor: 'col-resize',
                  zIndex: '10001',
                  height: main.outerHeight(),
                  top: main.offset().top,
                  left: main.offset().left-2
               }
            }).appendTo('body');
         $('#lesefenster').css({"pointer-events": "none"});
         
         $(document).mousemove(function(e) {
            ghostbar.css("left", e.pageX);
            $('#olframe').css(
               {  "left": e.pageX,
                  "width": $(document).width() - e.pageX
               });
         });
      });

      $(document).mouseup(function(e) {
         if (dragging) {
            $('#lesefenster').css({"pointer-events": "initial"});
            $('#ghostbar').remove();
            $(document).unbind('mousemove');
            dragging = false;
         }
      });

      $(window).on('resize', function(event) {
         $('#extframe').css({"width": Fenstergroesse('90%', '50%'), "right": "0", "left": "unset"});
         $('#olframe').css({"width": Fenstergroesse('70%', '85%'), "right": "0", "left": "unset"});
      });    
      
      // Breite Externerlink-Overlay ändern
      $('body').on('mouseover', '#dragbarex', function() {
         $('#dragbarex').css({"border-right": "3px dashed #666"});
      });
      $('body').on('mouseout', '#dragbarex', function() {
         $('#dragbarex').css({"border-right": "none"});
      });
      
      var i = 0;
      var draggingex = false;
      $(window).on('mousedown', '#dragbarex', function(e) {
         e.preventDefault();

         draggingex = true;
         var main = $('#extframe');
         var ghostbar = $('<div>',
            { id:'ghostbar', css: 
               {
                  borderRightWidth: '3px',
                  borderRightColor: '#666',
                  borderRightStyle: 'dashed',
                  position: 'absolute',
                  cursor: 'col-resize',
                  zIndex: '10001',
                  height: main.outerHeight(),
                  top: main.offset().top,
                  left: main.offset().left-2
               }
            }).appendTo('body');
         $('#externfenster').css({"pointer-events": "none"});
         $('#lesefenster').css({"pointer-events": "none"});
         
         $(document).mousemove(function(e) {
            ghostbar.css("left", e.pageX);
            $('#extframe').css(
               {  "left": e.pageX,
                  "width": $(document).width() - e.pageX
               });
         });
      });

      $(document).mouseup(function(e) {
         if (draggingex) {
            $('#externfenster').css({"pointer-events": "initial"});
            $('#lesefenster').css({"pointer-events": "initial"});
            $('#ghostbar').remove();
            $(document).unbind('mousemove');
            draggingex = false;
         }
      });

      // RSS-Feed lesen
      // (Falls automatisch: Nur zwischen 7 und 20:30 Uhr)
      $('#heute').on('click', '#aktualisieren', function(event) {
         event.preventDefault();

         var datum = new Date();
         var infolinks = '';
         var rubrikaktiv = '';

         $('#heute').animate({'opacity': '0.01'}, 100, function() {
         
            $.get('http://www.hartgeld.com/component/obrss/hartgeld-com-fed.html', function(data) {
               var $xml = $(data);
               $xml.find("item").each(function() {
                  var $this = $(this),
                     item = {
                        title: $this.find("title").text(),
                        link: '/' + $this.find("link").text().split('/')[3],
                        day: $this.find("pubDate").text().substring(8, 10),
                        hour: $this.find("pubDate").text().substring(11, 13),
                        minute: $this.find("pubDate").text().substring(14, 16),
                  }
                  if (item.day == datum.getDate()) {
                     var stunde = parseInt(item.hour) + 2;
                     if (stunde < 10) {
                        stunde = '0' + stunde;
                     }
                     
                     var zeit = parseInt(stunde) * 60 + parseInt(item.minute);
                     if (zeit > neuestezeit) {
                        infolinks += '<p class="infolinks"><span class="label label-important">Neu ' + stunde + ':' + item.minute + '</span>&nbsp;&nbsp;<a url="' + item.link + '" href="' + item.link + '">' + item.title + '</a> </p>';
                     } else {
                        infolinks += '<p class="infolinks"><i class="icon-file"></i> ' + stunde + ':' + item.minute + '&nbsp;&nbsp;<a url="' + item.link + '" href="' + item.link + '">' + item.title + '</a> </p>';
                     }
                  }
               });
               $('#heute').empty();
               $('#heute').prepend(infolinks);
               $('#heute').animate({'opacity': '1'}, 100);
               AktualisierungsButtonanzeigen();
               ZeitNeuesteRubrik();
               ZuletztaktiveRubrikmarkieren();
            });
         });
      });
      
      function AktualisierungsButtonanzeigen() {
         $('#heute').prepend('<div id="rubrikenaktualisieren"><a id="aktualisieren" class="bodyText_fett" href="##">Rubriken aktualisieren&raquo;</a></div>');
      }
      AktualisierungsButtonanzeigen();

      // Letzte Rubrik abenfalls wieder als aktiv markieren
      function ZuletztaktiveRubrikmarkieren() {
         $('#heute p a').each(function() {
            if ($(this).text() == $(letzterubrik).text()) {
               letzterubrik = $(this);
               $(this).addClass('markierterubrik');
            }
         });
      }

      // Rubriken in Array laden, um nach Aktualisierung zu vergleichen und neue markieren
      var neuestezeit = 0;
      function ZeitNeuesteRubrik() {
         var zeitstring = $('#heute p').first().text().match(/([0-2][0-9])\:([0-5][0-9])/);
         neuestezeit = parseInt(zeitstring[1]) * 60 + parseInt(zeitstring[2]);
      }
      ZeitNeuesteRubrik();
      
      // Tabs korrigieren, da nach Aktualisierung die neu geladenen Rubriken nicht mehr ausgeblendet werden
      $('.nav-tabs a').on('click', function() {
         var tab = $(this).attr('href');
         if (tab != '#heute') {
            $('#heute').css("display", "none");
         } else {
            $('#heute').css("display", "block");
         }
      })
      
      
      // Wenn iframe geladen wurde, iframe-Ladeseite ausblenden
      window.IframeGeladen = function() {
         $('#iframeph').fadeOut(300); 
      }
      
   }
   
   ///////////////////////////////////////////////////////////////////////////////////
   // Inhaltsseite
   else {
      
      // CSS
      var cssstring = (function () {/*
         <style>
         @media screen and (min-width: 1300px) {
            .artikel {
               max-width:600px;
            }
         }
         .container-fluid {
            margin:0;
         }
         .header-fixed,
         .werbebox3 p { 
            display: none;
         }
         hr {
            margin-top: 50px;
            border-bottom: 1px solid #bbb;
            border-top: none;
         }
         .bodyText_fett,
         .bodyText strong {
         }
         #main {
            margin-top: 10px;
         }
         .tagesdatum {
            display: inline !important;
            padding:1px 8px 3px;
            background: #44e;
            color: #fff;
            border-radius: 3px;
         }
         .leerzeile {
            margin-bottom: 15px;
            width:100%;
            height:1px;
         }
         .blase {
            display: inline;
            text-decoration:none !important;
            font-size: 20px;
            position: relative;
            top: -20px;
            left:3px;
            z-index:10;
            transition-property: top, opacity;
            transition-duration: 0.2s;
            transition-delay: 0.3s;
            transition-timing-function: ease;
            opacity:0;
            color:#fff !important;
            text-shadow: 0 -1px #333, 1px 0 #333, 0 1px #333, -1px 0 #333;
         }
         .blasehover {
            transition-delay: 0.7s;
            opacity:1;
            top: 2px;
         }
         .blasehover:hover {
            color: #03f !important; 
         }
         #mailsenden {
            display:none;
            position: absolute; 
            padding: 5px 10px 10px; 
            font-size: 20px;
            text-decoration:none;
            color:#fff;
            text-shadow: 0 -1px #333, 1px 0 #333, 0 1px #333, -1px 0 #333;
         }
         #mailsenden:hover {
            color: #03f; 
         }
         #urloverlay {
            display:none;
            box-shadow: -5px 5px 10px -3px rgba(158,158,158,1); 
            border-radius:3px;
            position: absolute; 
            padding: 2px 8px 4px; 
            background: #eeeeff; 
            color: #333; 
            font-weight: bold;
            z-index:1000;
         }
         .kommentarwe {
            background: #eeeeff;
            display: block;
            padding: 0px 5px 2px;
         }
         .bodyText_blau + br + .bodyText_blau::before {
            padding-top:10px;
            content: "";
            display:block;
         }
         .bodyText_blau + br,
         .bodyText_blau br,
         .bodyText_fett br {
            display:none;
         }
         #alteinhalte {
            display:none;
         }
         #alteinhalteschalter {
            display:block;
            margin-top: 50px;
         }
         .exneuesfenster {
            text-decoration:none !important;
            cursor:pointer;
            color: #666;
            padding-right: 3px;
         }
         .exneuesfenster:visited {
            color: #999 !important;
         }
         </style>
         
         */}).toString().match(/[^]*\/\*([^]*)\*\/\}$/)[1];
      $('head').append(cssstring);
      

      var mtext = '';
      var seitenrubrik = encodeURIComponent(parent.AktuelleRubrik());
      
      // Mailoverlay
      $('.artikel').prepend('<a title="Diesen Absatz kommentieren" id="mailsenden" href="##">&#128172;</a>');
            
      // URLoverlay
      $('.artikel').prepend('<div id="urloverlay"></div>');
      
      // Textmarkierungs-Mailzitat
      $('.artikel').mouseup(function(event) {
         var temp = document.getSelection().toString();
         if (temp != '') {
            mtext = temp;
            $('#mailsenden').css({
               left: event.pageX,
               top: event.pageY-25
            }).slideDown('fast');
         }
      });

      $('.artikel').mousedown(function(event) {
         if (event.target.id == 'mailsenden') {
            Mailinhalt(mtext);
            event.preventDefault();
         }
         SchliessePopup();
      });
      
      function SchliessePopup() {
         $('#mailsenden').slideUp('fast');

         if (window.getSelection) {
            window.getSelection().removeAllRanges();
         } else if (document.selection) {
            document.selection.empty();
         }
      }
      
      function Textkuerzen(text) {
         var maxtextlaenge = 500;
         // Blase und >>> Pfeile enfernen
         text = text.replace(/?|❭/g, '');
         if (text.length > maxtextlaenge) {
            var trimmedString = text.substr(0, maxtextlaenge);
            trimmedString = trimmedString.substr(0, Math.min(trimmedString.length, trimmedString.lastIndexOf(" ")));
            return trimmedString + ' [...]';
         } else {
            return text;
         }
      }
      
      function Mailinhalt(zitat) {
         window.location.href = "mailto:[email protected]?subject=Neuer Leserkommentar zu Seite \"" + seitenrubrik + "\"&body=Sehr geehrtes Hartgeld-Team,%0A%0Azu folgendem Eintrag auf der Seite \"" + seitenrubrik + "\" möchte ich gerne wie untenstehend kommentieren:%0A%0A%0AIhr Eintrag:%0A" + encodeURIComponent(Textkuerzen(zitat)) + "%0A%0A%0AMein Kommentar dazu:%0A%0A";
      }
      
      // Externe Seitenlinks umwandeln für Overlay-Anzeige
      $('.artikel p a').not('#mailsenden').each(function() {
         $(this).addClass('extern');
         $(this).after('&nbsp;<a target="_blank" class="exneuesfenster" title="Link in neuem Fenster öffnen">&#10093;&#10093;&#10093;</a>')
      });

      $('.extern').click(function(event) {
         event.preventDefault();
         parent.ExterneURL($(this).attr('href'));
      });
      $('.exneuesfenster').click(function(event) {
         $(this).attr('href', $(this).prev().attr('href'));
      });
      
      // URL Hover
      $('.artikel p a').not('#mailsenden, .exneuesfenster').hover(
         function(event) {            
            clearTimeout($(this).data('timeout'));
            var ax = document.createElement('a');
            ax.href = $(this).attr('href');
            $('#urloverlay').text(ax.hostname);
            var position = $(this).position();
            $('#urloverlay').css({
               top: position.top-25,
               left: $(this).LinkePositionvonLink().left
               // Left: position.left
               // top: event.pageY-40,
               // left: event.pageX-50
            }).show();
         }, 
         function() {
            var t = setTimeout(function() {
               $('#urloverlay').hide();
            }, 100);
            $(this).data('timeout', t);
         }
      );
      
      // Linke Position von Inline-Link bei Zeilenumbruch errechnen
      $.fn.LinkePositionvonLink = function() {
         var el = $('<i/>').css('display', 'inline').insertBefore(this[0]);
         var pos = el.offset();
         el.remove();
         return pos;
      };
      
      // WE-Kommentare anders färben
      // muss vor Kommentar-Sprechblasen kommen
      $('.bodyText_blau, .bodyText_fett_blau').each(function() {
         if ($(this).text().match(/(WE\.|PS: )/)) {
            $(this).addClass('kommentarwe');
         }
      });
     
      // Auto-Kommentar-Links
      $('.artikel p.bodyText_fett, .artikel p .bodyText_fett, .artikel p .bodyText_fett .bodyText_fett, .artikel p strong, .artikel p.bodyText_blau, .artikel p .bodyText_blau, .artikel p.bodyText_fett_rot, .artikel p .bodyText_fett_rot').not('p a + .bodyText_blau, .bodyText_blau .bodyText .bodyText_fett, p.bodyText_blau .bodyText, p .bodyText_fett + .bodyText_fett').each(function() {
         $(this).addClass('kommentarhover');
         $(this).append('<a title="Diesen Absatz kommentieren" href="##" class="blase">&#128172;</a>');
      });

      $('.artikel .kommentarhover').hover(
         function() {
            $(this).children('.blase').toggleClass('blasehover');
         }, 
         function() {
            $(this).children('.blase').toggleClass('blasehover');
         }
      );

      $('.artikel .kommentarhover').on('click', '.blase', function(event) {
         event.preventDefault();
         Mailinhalt($(this).parent().text());
      });
      
      // Ältere Inhalte ausblenden
      var endeaktuell = $('.artikel hr').first();
      if (endeaktuell.length > 0) {
         $(endeaktuell).before('<a id="alteinhalteschalter" class="bodyText_fett" href="##">&Auml;ltere Inhalte anzeigen &raquo;</a><div id="alteinhalte"></div>');
         $(endeaktuell).nextAll().each(function() {
            $('#alteinhalte').append(this);
         });
         $('#alteinhalte').prepend(endeaktuell);

         $('.artikel').on('click', '#alteinhalteschalter', function(event) {
            event.preventDefault();
            $('#alteinhalte').slideDown('slow');
            $('#alteinhalteschalter').css({"display": "none"});
         });
      }
      
      // Datumsblöcke Klasse einfügen
      $('.artikel p.bodyText_fett_blau .cdate').each(function() {
         $(this).parent().addClass('tagesdatum');
         $(this).parent().after('<div class="leerzeile"></div>');
      });
      
      
      // Datum umstellen
      var eintragsdatum = $('.cdate').first();
      if (eintragsdatum.length > 0) {
         monate = new Array(); monate['01'] = 'Januar'; monate['02'] = 'Februar'; monate['03'] = 'M&auml;rz'; monate['04'] = 'April'; monate['05'] = 'Mai'; monate['06'] = 'Juni'; monate['07'] = 'Juli'; monate['08'] = 'August'; monate['09'] = 'September'; monate['10'] = 'Oktober'; monate['11'] = 'November'; monate['12'] = 'Dezember';
         var datumsteile = eintragsdatum.text().split('-');

         var tag = datumsteile[2].replace(':', '');
         var datum = new Date();
         var heute = '';
         if (tag == datum.getDate()) {
            heute = 'Heute, ';
         }
         $(eintragsdatum).text(heute + tag + '. ' + monate[datumsteile[1]] + ' ' + datumsteile[0])
      }
      

      // Meldung an Parent Window, sobald Seite fertig geladen wurde
      var script = document.createElement("script");
      script.type = "text/javascript";
      script.text  = "parent.IframeGeladen();";
      document.body.appendChild(script);
   }
   
}());