Mirko Live

stream wpisów na żywo

  1. // ==UserScript==
  2. // @name Mirko Live
  3. // @namespace http://www.wykop.pl/
  4. // @version 0.4.5.1
  5. // @description stream wpisów na żywo
  6. // @author You
  7. // @match http://www.wykop.pl/mikroblog/*
  8. // @match http://www.wykop.pl/wpis/*
  9. // @grant none
  10. // ==/UserScript==
  11.  
  12. var interwal_ms, sound_1;
  13. var audio = new Audio();
  14.  
  15. handleDefaultAjaxRefresh = function($el, data) {
  16.  
  17. if (data.html) {
  18. $el = $("#itemsStream");
  19. var list = $($(data.html).html());
  20. list.find('.dC').addClass('newComment');
  21. $d = list.prependTo($el);
  22. $e = $d.find('div.media-content');
  23. $e.hide();
  24. //console.log('length ' + $d.length);
  25.  
  26. var h = 0;
  27. $d.each(function(){
  28. h += $(this).outerHeight();
  29. //console.log(h);
  30. });
  31. //console.log('B ' + h);
  32.  
  33. var t = $(window).scrollTop();
  34.  
  35.  
  36. if (t){
  37. $(window).scrollTop(t + h + 3);
  38.  
  39. $e.each(function(i){
  40. $(this).find('img').one('load', function(){
  41. var $Dd = $(this).closest('.media-content');
  42. $Dd.show();
  43. var heiHgt = $Dd.outerHeight();
  44. //console.log(heiHgt);
  45. $(window).scrollTop($(window).scrollTop() + heiHgt + 13);
  46. });
  47. });
  48. } else {
  49. $e.show();
  50. }
  51.  
  52. $el.find('.newComment').animate({
  53. "border-left-color": 'transparent'
  54. }, 2000);
  55.  
  56. if (sound_1) {
  57. audio.play();
  58. }
  59.  
  60. $("#newEntriesCounter").text("");
  61. //$("#rightFooterBoxCounter").find(".active-counter").text("");
  62. //$("#rightFooterBoxCounter").hide();
  63. console.log('nowy wpis - dodałem');
  64. wykop.bindLazy();
  65.  
  66. setTimeout(function(){
  67. wykop.checkNewEntries();
  68. }, interwal_ms);
  69.  
  70. } else {
  71. if (data.count > 0) {
  72. var lastItem = $(wykop.params.ajaxAutoRefresh.selector);
  73. var link = wykop.params.ajaxAutoRefresh.url + 'type/' + lastItem.data().type + '/id/' + lastItem.data().id + '/hash/' + wykop.params.hash + '/html/1';
  74. $("#newEntriesCounter").html("<div class=\"type-light-warning active-annotation\"><a href=\"#\" class=\"dark ajax space\" data-ajaxurl=\"" + link + "\">" + wykop.varietyFromNumber(data.count, ["Pojawił się", "Pojawiły się", "Pojawiło się"]) + " <b class=\"red\">" + data.count + " " + wykop.varietyFromNumber(data.count, ["nowy wpis", "nowe wpisy", "nowych wpisów"]) + "</b>, " + wykop.varietyFromNumber(data.count, ["pokaż go", "pokaż je", "pokaż je"]) + "</a></div>");
  75. console.log('nowe wpisy - klikam!');
  76. $('#newEntriesCounter > div > a').trigger("click");
  77. //$("#newEntriesCounter").fadeIn();
  78. //$("#rightFooterBoxCounter").show();
  79. //$("#rightFooterBoxCounter").find(".active-counter").text(data.count);
  80. } else {
  81. $("#rightFooterBoxCounter").hide();
  82. $("#newEntriesCounter").hide().text("");
  83. console.log('brak nowych wpisów!');
  84. setTimeout(function(){
  85. wykop.checkNewEntries();
  86. }, interwal_ms);
  87. }
  88. }
  89. };
  90.  
  91. $(document).ready(function(){
  92.  
  93. if (document.location.pathname.match('/mikroblog/')){
  94.  
  95. // button/link do live
  96. $('#site > div > div.grid.m-reset-float > div > div.nav.bspace.rbl-block > ul:last-child').append('<li id="live"><a href="http://www.wykop.pl/mikroblog/live/"><span style="font-weight: bold; font-size: 30px; vertical-align: middle;" id="green_icon">•</span><span> live</span></a></li>');
  97.  
  98. if (document.location.pathname.match('/live')){
  99.  
  100. //ładowanie ustawień użytkownika z localstorage
  101. if (localStorage.mirkoLiveSound !== undefined && localStorage.mirkoLiveInterval !== undefined){
  102. interwal_ms = +localStorage.mirkoLiveInterval;
  103. sound_1 = +localStorage.mirkoLiveSound;
  104.  
  105. // ładowanie panelu ustawień czita po prawej
  106. $('#site > div > div.grid-right.m-reset-float.m-reset-margin.m-reset-width.m-hide').prepend('<div class="r-block mirko-live"><h4>Mirko live ustawienia <a id="mirko-live-rozwin" href=""><i class="fa fa-chevron-down"></i></a> </h4><ul id="ukryte-ustawienia" <="" ul="" style="display: block;"><li><p>odświeżanie (ms)</p><select> <option value="50">50ms</option><option value="100">100ms</option><option value="150">150ms</option><option value="250">250ms</option><option value="350">350ms</option><option value="500">500ms</option><option value="1000">1000ms</option><option value="2000">2000ms</option><option value="5000">5000ms</option></select><p>dźwięk </p><select><option value="1">wł.</option><option value="0">wył.</option></select><br><p>zmień dźwięk (link do .mp3, .wav)</p><input type="text" name="audio_url" id="audio_url"><br><a href="#" style="color:red" id="deafult_audio">przywróć domyślny dźwięk</a><br><br><button class="submit " tabindex="2" id="mirko-live-save">zapisz</button></li></ul></div>');
  107. $("#ukryte-ustawienia > li > select:nth-child(2) > option[value='" + interwal_ms + "']").attr("selected","selected");
  108. $("#ukryte-ustawienia > li > select:nth-child(4) > option[value='" + sound_1 + "']").attr("selected","selected");
  109. } else {
  110. interwal_ms = 250;
  111. sound_1 = 1;
  112. localStorage.mirkoLiveInterval = 250;
  113. localStorage.mirkoLiveSound = 1;
  114. $('#site > div > div.grid-right.m-reset-float.m-reset-margin.m-reset-width.m-hide').prepend('<div class="r-block mirko-live"><h4>Mirko live ustawienia <a id="mirko-live-rozwin" href=""><i class="fa fa-chevron-down"></i></a> </h4><ul id="ukryte-ustawienia" <="" ul="" style="display: block;"><li><p>odświeżanie (ms)</p><select> <option value="50">50ms</option><option value="100">100ms</option><option value="150">150ms</option><option value="250" selected>250ms</option><option value="350">350ms</option><option value="500">500ms</option><option value="1000">1000ms</option><option value="2000">2000ms</option><option value="5000">5000ms</option></select><p>dźwięk </p><select><option value="1" selected>wł.</option><option value="0">wył.</option></select><br><p>zmień dźwięk (mp3, wav)</p><input type="text" name="audio_url" id="audio_url"><br><br><button class="submit " tabindex="2" id="mirko-live-save">zapisz</button></li></ul></div>');
  115. }
  116.  
  117. //zwiń panel ustawień
  118. $('#ukryte-ustawienia').hide();
  119.  
  120. // ładowanie Audio
  121. if (localStorage.mirkoLiveAudio !== undefined){
  122. audio.setAttribute('src', localStorage.mirkoLiveAudio);
  123. audio.load();
  124. } else {
  125. //default audio
  126. audio.setAttribute('src', 'http://www.soundjay.com/switch/switch-7.wav');
  127. audio.load();
  128. }
  129.  
  130.  
  131. // start funkcji
  132. wykop.handleDefaultAjaxRefresh = handleDefaultAjaxRefresh;
  133. setTimeout(function(){
  134. wykop.ajaxAutoRefreshJob = function(){};
  135. },4000);
  136.  
  137. // button "live"
  138. $('#site > div > div.grid.m-reset-float > div > div.nav.bspace.rbl-block > ul:nth-child(3) > li.active').removeClass('active');
  139. $('#live').html('<li class="active"><a href="http://www.wykop.pl/mikroblog/live/"><span style="color: green; font-weight: bold; font-size: 30px; vertical-align: middle;" id="green_icon">•</span><span> live</span></a></li>');
  140.  
  141. // rozwijanie panelu ustawień
  142. $('#mirko-live-rozwin').on('click', function(e){
  143. e.preventDefault();
  144. var t = $(this);
  145. t.children(':first').toggleClass('fa-chevron-down fa-chevron-up');
  146. $('#ukryte-ustawienia').toggle();
  147. });
  148.  
  149.  
  150. // zapisywanie ustawień
  151. $('#mirko-live-save').on('click', function(e){
  152. e.preventDefault();
  153.  
  154. interwal_ms = +$('#ukryte-ustawienia > li > select:nth-child(2)').val();
  155. sound_1 = +$('#ukryte-ustawienia > li > select:nth-child(4)').val();
  156. localStorage.mirkoLiveInterval = interwal_ms;
  157. localStorage.mirkoLiveSound = sound_1;
  158.  
  159. var t = $('#audio_url').val();
  160. if (t.length > 0){
  161. audio.setAttribute('src', t);
  162. localStorage.mirkoLiveAudio = t;
  163. audio.load();
  164. }
  165.  
  166. $('#ukryte-ustawienia').slideUp('1000', function(){
  167. $('#mirko-live-rozwin > i').toggleClass('fa-chevron-down fa-chevron-up');
  168. });
  169.  
  170. });
  171.  
  172. // przywracanie domyślnego dźwięku
  173.  
  174. $('#deafult_audio').on('click', function(e){
  175. e.preventDefault();
  176. localStorage.removeItem('mirkoLiveAudio');
  177. alert('Przywrócono domyślny dźwięk, odźwież stronę');
  178. });
  179.  
  180.  
  181. // animacja buttona "live"
  182. setInterval(function(){
  183. $('#green_icon').css('visibility','hidden');
  184. setTimeout(function(){
  185. $('#green_icon').css('visibility','visible');
  186. },1000);
  187. },2000);
  188.  
  189.  
  190. // czyszczenie starych wpisów
  191. setInterval(function(){
  192. $('#itemsStream > li:nth-child(n+50)').remove();
  193. console.log('usunięto stare wpisy');
  194. },30000);
  195.  
  196. }
  197. }
  198.  
  199. if (document.location.pathname.match('/wpis/')){
  200. $('#site > div > div.grid.m-reset-float > div > div.nav.bspace.rbl-block > ul:last-child').append('<li id="live"><a href="http://www.wykop.pl/mikroblog/live/"><span style="font-weight: bold; font-size: 30px; vertical-align: middle;" id="green_icon">•</span><span> live</span></a></li>');
  201. }
  202.  
  203. /*
  204. if (document.location.pathname.match('/tag/')){
  205. var tagName = $('#input-tag').val();
  206. $('div.rbl-block.media-header > div > ul:nth-child(4)').append('<li id="live"><a href="http://www.wykop.pl/tag/wpisy/' + tagName + '/#live"><span style="font-weight: bold; font-size: 30px; vertical-align: middle;" id="green_icon">•</span><span> live</span></a></li>');
  207.  
  208. if (location.hash == '#live' || location.hash == '#live/') {
  209. $('div.rbl-block.media-header > div > ul:nth-child(4) > li').removeClass('active');
  210. $('#live').html('<li class="active"><a href="http://www.wykop.pl/tag/wpisy/' + tagName + '/#live"><span style="color: green; font-weight: bold; font-size: 30px; vertical-align: middle;" id="green_icon">•</span><span> live</span></a></li>');
  211. }
  212. }
  213. */
  214. });