Greasy Fork

Greasy Fork is available in English.

NarrowHome_Custom

小説家になろうのホームを改造する

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name        NarrowHome_Custom
// @namespace   phodra
// @description 小説家になろうのホームを改造する
// @version     1.5
// @grant       none
// @include     http://syosetu.com/user/top/
// @include     https://syosetu.com/user/top/
// ==/UserScript==

(function (){
	$("#user_info, .kokuti_box").hide();
	
	$strong = $("<strong class='news'>");
	$strong.css(
		{
			'font-weight': 'bolder',
			'color': 'red'
		}
	);
	
	// 新着メッセージをメッセージボックスに統合
	var $msgInfo = $(".message_info:first");
	if( $msgInfo.size() ){
		// メッセージボックスに新着数表示
		var num = $msgInfo.text().match(/\d+/);

		var $menu_msg = $(".menu_message>a");
		// 名前が長いのでちょっと短くする
		$menu_msg.text("メッセージ");
		$menu_msg.append( $strong.text("(" + num + ")") );
		// 元の新着通知を非表示
		$msgInfo.hide();
	}

	// 感想が書かれました
	var $news = $("div.news_box");
	if( $news.size() ){
		$("div.normal_box:eq(1) li:first>a").append(
			$strong.text(" !")
		);
		$news.hide();
	}

	// センターカラムの順番を入れ替え
	var $main = $("#main_top");
	var $favuserblog = $("#favuserblog");
	var $writermenu = $("#writter_menu_top");
	var $userbox = $(".usertop_box");
	$main.append($favuserblog);
	$main.append($writermenu);
	$main.append($userbox);
	$main.children().css(
		{
			'margin-top': '5px',
			'margin-bottom': '5px'
		}
	);
	$main.children(":first").css( 'margin-top', 0 );

	// お知らせをコンパクト化
	$("#user_info").hide();
	var $headlog = $("#head_log");
	$headlog.css(
		{
			'width': 'auto',
			'float': 'right',
		}
	);
	var $notice = $("<div id='mini_info'>");
	$notice.css(
		{
			'overflow': 'hidden',
			'margin': "8px 3px 0 2px"
		}
	);
	$headlog.after($notice);
	var noticeWidth = $notice.width();
	
	var shrink = "●";
	var $shrink = $("<a>");
	$shrink.text( shrink );
	$notice.append($shrink);
	var shrinkWidth = $shrink.width();
	$shrink.remove();
	
	var $infos = $("#official li>a");
	var infoCount = $infos.size();
	var $ci = []; // Compact Info
	for( var i=0; i<infoCount; i++ )
	{
		$ci[i] = $infos.eq(i).clone();
		var txt = $ci[i].text();
		$ci[i].text( shrink + txt );
		$ci[i].attr( 'title', txt );
		$ci[i].css(
			{
				'display': 'inline-block',
				'width': shrinkWidth,
				'overflow': 'hidden',
				'text-overflow': 'clip',
				'white-space': 'nowrap'
			}
		);
		$notice.append($ci[i]);
	}

	const DURATION = 1000;
	const WAIT = 5000;
	var ciOpen = function(i, dur){
		if( i >= $ci.length ) return;
		console.log(noticeWidth);
		$ci[i].css(
			{
				'display': 'inline',
				'overflow': 'hidden',
			}
		);
		$ci[i].animate(
			{ 'width': noticeWidth - shrinkWidth*infoCount },
			{
				'duration': dur,
				'easing': 'linear',
				'complete': function(){
					ciWait(i);
				}
			}
		);
	};
	var ciWait = function(i){
		setTimeout(
			function()
			{
				ciClose(i);
				ciOpen(i+1, DURATION);
			}, WAIT
		);
	};
	var ciClose = function(i){
		$ci[i].animate(
			{ 'width': shrinkWidth },
			{
				'duration': DURATION,
				'easing': 'linear',
			}
		);
	};

	ciOpen(0, 0);
})();