// ==UserScript== // @name Narrow_DynamicHeader // @namespace phodra // @description 小説家になろうのヘッダーを便利にする // @version 1.2 // @include http://ncode.syosetu.com/* // @include http://novelcom.syosetu.com/* // @include http://novel18.syosetu.com/* // @include http://novelcom18.syosetu.com/* // @downloadURL https://update.greasyfork.icu/scripts/7502/Narrow_DynamicHeader.user.js // @updateURL https://update.greasyfork.icu/scripts/7502/Narrow_DynamicHeader.meta.js // ==/UserScript== (function (){ // ユーザーID // 自分のIDを調べて書き換えてください。 // 通常版のユーザーIDは、ホーム画面の右上に以下のように表示されています。 //  (ユーザー名)[ID:000000]でログイン中 // 18禁サイト用のユーザーIDは、Xホーム右側の // 「評価をつけた作品一覧」のURLから得ることが出来ます。 const MY_USER_ID = 0; const MY_XUSER_ID = 0; // ※そのまま移動させると元の場所が埋め立てられるので、 // ※クローンを作成したのちにオリジナルは visibility = hidden で隠す。 // ヘッダー(オリジナル) var $header_org = $("#novel_header"); // ヘッダー(クローン) var $header = $header_org.clone(true); $header.css( 'position', 'relative'); // オリジナルを隠す $header_org.css( 'visibility', 'hidden'); // header Height var headerH = $header.outerHeight(); // ヘッダーの親になるボックス var $box = $("
"); $box.css( 'position', 'fixed'); $box.append($header); // マウス検知エリア var $detect = $("
"); $detect.css( { 'position': 'fixed', 'height': headerH, 'top': 0 } ); // ヘッダーボックスに乗せる、外す $detect.hover( function() { _boxon = true; if( scTop>0 ) HeaderShow(true); else _show = 2; }, function() { _boxon = false; if( scTop>0 ) HeaderHide( !_lockB && !_lockM ); else _show = 0; } ); $detect.append($box); $("body").append($detect); // 章タイトルとサブタイトルのラベル if( $(".margin_r20").size() ){ // コンテンツinfoのクローン var $info_org = $(".contents1"); var $info = $info_org.clone(true); $info_org.css( 'visibility', 'hidden'); $info.css( { 'left': 0, 'right': 0, 'margin': 'auto', 'opacity': '0.8' } ); var $label = $("
"); var $cp_title = $info.children(".chapter_title"); $cp_title.hide(); if( $cp_title.size() ) { var $cp_title2 = $(""); $cp_title2.append($(".chapter_title").text()); $label.append($cp_title2); $label.append(" - "); } // サブタイトル用のエレメント var $label_sub = $(""); $label_sub.append($(".novel_subtitle").text()); $label.append($label_sub); $info.append($label); $box.append($info); } var boxheight = $box.height(); // 移動ボタン群 const NDH_BTN = 'ndh_button'; var move_a = ""; var move_div = "
"; // 前ページ var bn_p = $("a:contains('<<')"); if( bn_p.size() ) { var $preEp = $(move_a); $preEp.text("<"); $preEp.attr( { 'alt': 'Prev Episode', 'href': bn_p.attr('href') } ); $preEp.css('left', '15px'); $header.append($preEp); } // 次ページ var bn_n = $("a:contains('>>')"); if( bn_n.size() ) { var $nxtEp = $(move_a); $nxtEp.text(">"); $nxtEp.attr( { 'alt': 'Next Episode', 'href': bn_n.attr('href') } ); $nxtEp.css( 'left', '55px'); $header.append($nxtEp); } $("#pageBottom").remove(); $("#pageTop").remove(); // 最上部へ移動 var $ptop = $(move_div); $ptop.attr( 'alt', 'Scroll Top'); $ptop.css( 'right', '55px'); $ptop.text("↑"); $ptop.click( function(e) { $("html,body").animate( { 'scroll-top': 0 }, 500 ); } ); $header.append($ptop); // 最下部へ移動 var $pbtm = $(move_div); $pbtm.text("↓"); $pbtm.attr( 'alt', 'Scroll Bottom'); $pbtm.css( 'right', '15px'); $pbtm.click( function(e) { $("html,body").animate( { 'scroll-top': $(document).height() -$(window).height() }, 500 ); } ); $header.append($pbtm); // AutoPagerizeのページ移動 // ※インストールしていなくても作製して非表示にしておき、 //  AutoPagerizeの初期化イベントで表示させる。 //  AP初期化イベント中ではなくこの時点で作成するのは、 //  高さの計算を簡略化するため。 // 前のページ var $ap_prev = $(move_div) $ap_prev.text("△"); $ap_prev.attr( 'alt', 'Scroll Prev Page'); $ap_prev.css( { 'display': 'none', 'right': '140px', } ); $ap_prev.click( function(e) { $("html,body").animate( { 'scroll-top': scTop==ap.seam[ap.page]? ap.seam[ap.page-1]: ap.seam[ap.page] }, 500 ); } ); $header.append($ap_prev); // 次のページ var $ap_next = $(move_div); $ap_next.text("▽"); $ap_next.attr( 'alt', 'Scroll Next Page'); $ap_next.css( { 'display': 'none', 'right': '100px', } ); $ap_next.click( function(e) { $("html,body").animate( { 'scroll-top': ap.page+1"); mb_style.append(NDH_BTN_Style); $("head").append(mb_style); // 追加したボタンのスタイルをまとめて設定 $( "." +NDH_BTN ).css( { 'cursor': 'pointer', 'position': 'absolute', 'top': 0, 'bottom': 0, 'margin': '4px', 'padding': '0px 10px', 'line-height': function() { return $(this).height()+'px'; } } ); // フラグ var _boxon = false; var _lockB = 0, _lockM = 0; var _show = 0; // 表示設定 var $navi_box = $("#novelnavi_right"); if( $navi_box.size() ) { $header_org.find("#novelnavi_right").remove(); $header.find("#novelnavi_right").hide(); var $navi = $("