🏠 Home 

PTT Long Change

Change on PTT.cc.


Install this script?
  1. // ==UserScript==
  2. // @name PTT Long Change
  3. // @description Change on PTT.cc.
  4. // @author Lalong
  5. // @include https://www.ptt.cc/bbs/*
  6. // @include https://www.ptt.cc/man/*
  7. // @include https://www.ptt.cc/ask/over18*
  8. // @version 2.7.12
  9. // @require https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js
  10. // @namespace https://greasyfork.org/zh-TW/scripts/33714-ptt-long-change
  11. // @grant GM_addStyle
  12. // ==/UserScript==
  13. GM_addStyle ( `
  14. .topbar{
  15. background-color:rgba(0, 0, 136, 0.4);opacity: 0;transition: opacity 0.3s;
  16. }
  17. .topbar:hover{
  18. background-color:rgba(10, 106, 196, 0.4);opacity:1;
  19. }
  20. .push-userid{
  21. height:31px;
  22. display:inline-block;
  23. transition: all 0.1s ease;
  24. }
  25. .push-userid:hover{
  26. cursor:pointer;
  27. }
  28. .oPo{
  29. position:absolute;
  30. transition: all 0.1s ease;
  31. display:inline-block;
  32. cursor:pointer;
  33. z-index:10;
  34. }
  35. .activeId{
  36. background-color:#444;
  37. border-radius:5px 5px 0px 0px;
  38. }
  39. .pushIdSelect{
  40. background-color:navy;
  41. }
  42. a{
  43. text-decoration:none;
  44. }
  45. a:visited{
  46. color: #aaa;
  47. }
  48. a:hover{
  49. color:black;
  50. }
  51. .pwe-floor{
  52. position:absolute;
  53. left:-4.5em;
  54. width:4em;
  55. text-align:right;
  56. color:gray;
  57. }
  58. .pwe-hover{
  59. border-radius:5px 0px 0px 5px;
  60. text-align:center;
  61. background-color:black;
  62. color:white;
  63. border:1.5px solid grey;
  64. z-index: 5;
  65. }
  66. .id-backColor{
  67. background-color:#113f1b;
  68. }
  69. .id-backColor.pushIdSelect{
  70. background-color:navy;
  71. }
  72. .id_dropDown{
  73. border-radius:0px 10px 10px 10px;
  74. position: absolute;
  75. background-color: #444;
  76. z-index: 10;
  77. white-space: nowrap;
  78. display:none;
  79. }
  80. .drop-menu{
  81. display: block;
  82. padding: 1ex;
  83. color: #aaa;
  84. line-height: 1em;
  85. }
  86. .overlay{
  87. position: absolute;
  88. z-index:2;
  89. background-color:#404040;
  90. border-radius:3px 3px 3px 3px;
  91. width:100%;
  92. }
  93. .overlay:hover, .title:hover{
  94. background-color:#C0C0C0;
  95. color:black;
  96. cursor:pointer;
  97. }
  98. img{
  99. cursor:pointer;
  100. }
  101. ` );
  102. var board = $('.board').eq(0).text().split(' ')[1];//看板名稱
  103. $(document).ready(function(){
  104. var findA=$('a');
  105. var key=false;
  106. for(var aItem=0;aItem< findA.length;aItem++)
  107. {
  108. var aTarget=$('a').eq(aItem);
  109. if(/(?=.*imgur\.com\/a\/)/.test(aTarget.prop('href'))){
  110. setTimeout(mainF, 5000);
  111. key=true;
  112. break;
  113. }
  114. }
  115. if(!key){
  116. mainF();
  117. }
  118. //top bar
  119. $(document).scroll(function() {
  120. if( $(this).scrollTop() == 0 ){
  121. if($('#topbar-container').hasClass("topbar")){
  122. $('#topbar-container').removeClass('topbar');
  123. }
  124. }
  125. else{
  126. if(!$('#topbar-container').hasClass("topbar")){
  127. $('#topbar-container').addClass('topbar');
  128. }
  129. }
  130. });
  131. });
  132. function mainF(){
  133. //自動skip已滿18頁面
  134. if( $('.btn-big').length > 0){$('.btn-big')[0].click();}
  135. //背景塗黑
  136. $('body').css('background-color','black');
  137. //頂端bar隱形樣式
  138. //$('#topbar-container').addClass('topbar');
  139. //$("#topbar").css({"background-color":"#0c0a66"})
  140. //底部bar去除
  141. $('#navigation-container').remove();
  142. //頂端bar右邊兩個去除
  143. //$(".right:contains('關於我們')").after('<input type="color" id="html5colorpicker" onchange="clickColor(0, -1, -1, 5)" value="#113f1b" style="width:5%;">');
  144. $('.right').remove();
  145. //$("#html5colorpicker").addClass("right").addClass("small");
  146. var poName =$('.article-meta-value').eq(0).text().trim().split(' ')[0];
  147. //真‧推文的樓層
  148. var floorTop=$('.f2:contains("※ 發信站: 批踢踢實業坊")');
  149. var pushes;
  150. if(floorTop.length>0){
  151. pushes = floorTop.nextAll('.push');
  152. }
  153. else{
  154. pushes = $('.push');
  155. }
  156. var snNormal=0,snPush=0,snBad=0,snString='',hoverColor='';
  157. for(var i = 0; i<pushes.length; i++){
  158. var iNum = i + 1;
  159. var oMain=pushes.eq(i);
  160. if(oMain.children('.push-tag').length > 0)
  161. {
  162. //push-tag:'→ ','推 ','噓 '
  163. switch(oMain.children('.push-tag').text())
  164. {
  165. case '→ ':
  166. snNormal++;
  167. snString='第 '+snNormal+' <span style="color:#f66;">→</span>';
  168. hoverColor = 'white';
  169. break;
  170. case '推 ':
  171. snPush++;
  172. snString='第 '+snPush+' 推';
  173. hoverColor = 'white';
  174. break;
  175. case '噓 ':
  176. snBad++;
  177. snString='第 '+snBad+' 噓';
  178. hoverColor = '#f66';
  179. break;
  180. }
  181. var sPush = "<span class='pwe-floor' data-hover='"+snString+"' data-color='"+hoverColor+"'>"+iNum+" 樓 </span>";
  182. oMain.prepend(sPush);
  183. oMain.hover(function(){
  184. var oFinal=$(this).children('.pwe-floor');
  185. var oPushTag=$(this).children('.push-tag');
  186. oFinal.attr('data-floor',$(this).children('.pwe-floor').text());
  187. //oFinal.text(oFinal.attr('data-hover').replace(/\ /g, ''));
  188. oFinal.html(oFinal.attr('data-hover'));
  189. var oLeft = oFinal.position().left;
  190. var tagWidth = oPushTag.width();
  191. var tagLeft = oPushTag.position().left;
  192. var setWidth = (tagLeft+tagWidth-oLeft-16)+'px';
  193. oFinal.css('width',setWidth);
  194. oFinal.css('color',oFinal.attr('data-color'));
  195. oFinal.addClass('pwe-hover');
  196. },function(){
  197. var oFinal=$(this).children('.pwe-floor');
  198. oFinal.html(oFinal.attr('data-floor'));
  199. oFinal.css({'width':'','color':''});
  200. oFinal.removeClass('pwe-hover');
  201. });
  202. }
  203. }
  204. //先append div
  205. var dropDownHtml='<div class="id_dropDown"></div>';
  206. $('body').append(dropDownHtml);
  207. //含簽名檔的推文ID變色
  208. var pushesAll=$('.push');
  209. for(var j=0; j<pushesAll.length; j++){
  210. var pushesAllId = pushesAll.eq(j).children('.push-userid');
  211. var pushEqJ=pushesAll.eq(j);
  212. var id = pushesAllId.text().trim();
  213. if(id == poName){ //作者推文底色
  214. pushEqJ.addClass('id-backColor');
  215. }
  216. //推文設定id
  217. pushesAllId.attr('id',id);
  218. pushesAllId.addClass(id);
  219. pushEqJ.click(changeColor);
  220. pushesAllId.click(activeColor);
  221. pushesAllId.click(dropDownMenu);
  222. }
  223. body_click();
  224. var oPo=$('#main-content').find('.article-meta-tag:contains("作者")').next();
  225. var oPoName = oPo.text().trim().split(' ')[0];
  226. oPo.attr('id',oPoName);
  227. oPo.addClass('oPo');
  228. oPo.addClass(oPoName);
  229. oPo.click(activeColor);
  230. oPo.click(dropDownMenu);
  231. //更改標題為連結同標題看板搜尋
  232. var title =$('#main-content').find('.article-meta-tag:contains("標題")').next();
  233. var linktitle = title.text().replace('Re:','').trim();//去掉Re:的標題名稱
  234. title.addClass('title');
  235. title.click(function(){
  236. window.location.href = 'https://www.ptt.cc/bbs/'+board+'/search?q=thread%3A'+linktitle;
  237. });
  238. //Imgur網址隱藏(ptt網頁版會自動開圖)
  239. var allA=$('a');
  240. for(var aItem=0;aItem< allA.length;aItem++)
  241. {
  242. var aTarget=$('a').eq(aItem);
  243. if(/(?=.*imgur)/.test(aTarget.prop('href'))){
  244. aTarget.css('color','black');
  245. }
  246. }
  247. //Img點擊縮小放大
  248. $("img").click(slide);
  249. //去除低調
  250. $('.f0').removeClass('f0');
  251. //自動更新推文打開
  252. $('#article-polling').click();
  253. //移除"本網站已依##網站內容分級規定處理。此區域為限制級,未滿十八歲者不得瀏覽。"字眼
  254. $('.bbs-footer-message').remove();
  255. };
  256. function changeColor(){
  257. var id = $(this).children('.push-userid').prop('id');
  258. var target = $('.'+id).parent();
  259. if(target.hasClass('pushIdSelect')){
  260. target.removeClass('pushIdSelect');
  261. }
  262. else{
  263. $('.pushIdSelect').removeClass('pushIdSelect');
  264. target.addClass('pushIdSelect');
  265. }
  266. };
  267. function activeColor(){
  268. var target = $(this);
  269. if(!target.hasClass('activeId')){
  270. $('.oPo').removeClass('activeId',100);
  271. $('.push-userid').removeClass('activeId');
  272. target.addClass('activeId');
  273. }
  274. };
  275. function dropDownMenu(){
  276. var _this=$(this);
  277. _this.addClass('NowDropDown');
  278. var idDropDown=$('.id_dropDown');
  279. var iOffset=_this.offset();
  280. var top=iOffset.top+_this.outerHeight();
  281. var left=iOffset.left;
  282. if(idDropDown.hasClass('menuShow')){
  283. idDropDown.animate({left:left}, 100, 'linear');
  284. idDropDown.animate({top:top}, 100, 'linear');
  285. }
  286. else{
  287. idDropDown.css('top',top);
  288. idDropDown.css('left',left);
  289. idDropDown.fadeIn(150);
  290. idDropDown.addClass('menuShow');
  291. }
  292. writeDropMenu(_this.prop('id'));
  293. };
  294. function writeDropMenu(sId){
  295. //var sBoard=$('.article-metaline-right').find('.article-meta-value').text().trim();
  296. var sHtml='';
  297. sHtml += '<div>';
  298. sHtml += '<a href="/bbs/'+board+'/search?q=author:'+sId+'" class="drop-menu">Search 此板 '+sId+' 的文章</a>';
  299. sHtml += '<a href="/bbs/ALLPOST/search?q=author:'+sId+'" class="drop-menu">Search ALLPOST 板 '+sId+' 的文章</a>';
  300. sHtml += '<a href="https://www.google.com/search?q=site%3Aptt.cc%20'+sId+'" target="_blank" class="drop-menu" >Google PTT '+sId+'</a>';
  301. sHtml += '<a href="https://www.google.com/search?q='+sId+'" target="_blank" class="drop-menu" >Google '+sId+'</a>';
  302. sHtml += '</div></div>';
  303. $('.id_dropDown').html(sHtml);
  304. }
  305. function slide(){
  306. var target=$(this);
  307. if(!target.hasClass('imgSmall')){
  308. var pxHeight;
  309. var pxWidth;
  310. if(!target.hasClass('overDiv')){
  311. pxHeight = target.height()+'px';
  312. pxWidth = target.width();
  313. //var divWidth = target.parent().width()/2-pxWidth/2;
  314. target.parent().css('text-align','center');
  315. target.before('<div class="overlay">'+target.prop('src')+'</div>');
  316. target.prev().css('height','25px');
  317. //target.prev().css({'height':'25px','width':pxWidth+'px','left':divWidth+'px'});
  318. target.prev().click(clickDiv);
  319. }
  320. else{
  321. target.prev().show();
  322. }
  323. target.attr('data-height',pxHeight);
  324. target.addClass('imgSmall');
  325. target.addClass('overDiv');
  326. target.animate({width:pxWidth+'px'},1);
  327. target.animate({height:"0px"},100);
  328. }
  329. }
  330. function clickDiv(){
  331. var target=$(this).next();
  332. $(this).hide();
  333. if(target.hasClass('imgSmall')){
  334. target.removeClass('imgSmall');
  335. target.animate({height:target.attr('data-height')},101);
  336. }
  337. }
  338. function body_click(){
  339. $(document).on('click', function (evt) {
  340. if(!$(evt.target).parent().parent().hasClass('id_dropDown') && !$(evt.target).hasClass('NowDropDown')){
  341. $('.oPo').removeClass('activeId',100);
  342. $('.push-userid').removeClass('activeId',100);
  343. $('.NowDropDown').removeClass('NowDropDown');
  344. $('.id_dropDown').removeClass('menuShow');
  345. $('.id_dropDown').fadeOut(100);
  346. }
  347. });
  348. };