narou 2.8.3.1 → 2.9.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of narou might be problematic. Click here for more details.

Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/ChangeLog.md +77 -0
  3. data/Gemfile +2 -1
  4. data/README.md +69 -86
  5. data/lib/command/convert.rb +10 -11
  6. data/lib/command/init.rb +2 -2
  7. data/lib/command/list.rb +12 -3
  8. data/lib/command/setting.rb +20 -5
  9. data/lib/command/update.rb +0 -3
  10. data/lib/command/version.rb +2 -3
  11. data/lib/command/web.rb +58 -7
  12. data/lib/converterbase.rb +7 -24
  13. data/lib/database.rb +7 -6
  14. data/lib/device.rb +15 -1
  15. data/lib/device/ibunko.rb +1 -2
  16. data/lib/device/library/mac.rb +7 -0
  17. data/lib/downloader.rb +44 -21
  18. data/lib/extension.rb +25 -0
  19. data/lib/helper.rb +4 -3
  20. data/lib/html.rb +18 -2
  21. data/lib/narou.rb +20 -0
  22. data/lib/novelconverter.rb +11 -35
  23. data/lib/novelinfo.rb +19 -8
  24. data/lib/novelsetting.rb +0 -6
  25. data/lib/version.rb +1 -1
  26. data/lib/web/appserver.rb +134 -15
  27. data/lib/web/public/favicon.ico +0 -0
  28. data/lib/web/public/resources/common.ui.js +2 -2
  29. data/lib/web/public/resources/narou.library.js +657 -91
  30. data/lib/web/public/resources/narou.queue.js +1 -1
  31. data/lib/web/public/resources/narou.ui.js +253 -102
  32. data/lib/web/public/resources/sprintf.js +245 -0
  33. data/lib/web/pushserver.rb +14 -3
  34. data/lib/web/views/_about.haml +188 -0
  35. data/lib/web/views/{diff_list.haml → _diff_list.haml} +0 -0
  36. data/lib/web/views/{edit_replace_txt.haml → _edit_replace_txt.haml} +4 -4
  37. data/lib/web/views/_rebooting.haml +18 -0
  38. data/lib/web/views/bookmarklet/download.js.erb +2 -2
  39. data/lib/web/views/bookmarklet/insert_button.js.erb +1 -1
  40. data/lib/web/views/edit_menu.haml +223 -0
  41. data/lib/web/views/help.haml +29 -12
  42. data/lib/web/views/index.haml +99 -88
  43. data/lib/web/views/layout.haml +5 -3
  44. data/lib/web/views/notepad.haml +39 -0
  45. data/lib/web/views/novels/setting.haml +15 -5
  46. data/lib/web/views/settings.haml +2 -2
  47. data/lib/web/views/style.scss +72 -21
  48. data/lib/web/views/widget/download.haml +3 -2
  49. data/lib/web/views/widget/drag_and_drop.haml +3 -2
  50. data/lib/web/views/widget/notepad.haml +44 -0
  51. data/narou.gemspec +75 -6
  52. data/narou.rb +8 -14
  53. data/preset/ncode.syosetu.com/n5115cq/converter.rb +30 -0
  54. data/preset/ncode.syosetu.com/n7594ct/converter.rb +37 -0
  55. data/preset/ncode.syosetu.com/n8725k/converter.rb +1 -1
  56. data/preset/vertical_font.css +0 -10
  57. data/spec/generator/convert_spec_gen.rb +2 -0
  58. data/template/novel.txt.erb +3 -0
  59. data/webnovel/https.syosetu.org.yaml +1 -1
  60. data/webnovel/kakuyomu.jp.yaml +82 -0
  61. data/webnovel/ncode.syosetu.com.yaml +1 -0
  62. data/webnovel/syosetu.org.yaml +1 -1
  63. metadata +89 -12
  64. data/lib/web/views/about.haml +0 -85
  65. data/preset/DMincho.ttf +0 -0
@@ -33,15 +33,17 @@
33
33
  - message, type = session[:alert]
34
34
  - session[:alert] = nil
35
35
  .container
36
- #fadeout-alert.alert(class="alert-#{type}")
36
+ .fadeout-alert.alert(class="alert-#{type}")
37
37
  &= message
38
38
  != yield
39
39
  %script{:src => "//code.jquery.com/jquery-1.11.1.min.js"}
40
40
  %script{:src => "//maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"}
41
- %script{:src => "//cdn.datatables.net/1.10.2/js/jquery.dataTables.min.js"}
41
+ %script{:src => "//cdn.datatables.net/1.10.10/js/jquery.dataTables.min.js"}
42
42
  %script{:src => "//cdn.datatables.net/plug-ins/725b2a2115b/integration/bootstrap/3/dataTables.bootstrap.js"}
43
- %script{:src => "//cdn.datatables.net/colreorder/1.1.2/js/dataTables.colReorder.min.js"}
43
+ %script{:src => "//cdn.datatables.net/colreorder/1.3.0/js/dataTables.colReorder.min.js"}
44
44
  %script{:src => "//cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.6.5/js/bootstrap-select.min.js"}
45
+ %script{:src => "//cdnjs.cloudflare.com/ajax/libs/lodash.js/4.6.1/lodash.min.js"}
46
+ %script{:src => "/resources/sprintf.js"}
45
47
  %script{:src => "/resources/dataTables.colVis.js"}
46
48
  %script{:src => "/resources/bootbox.min.js"}
47
49
  %script{:src => "/resources/shortcut.js"}
@@ -0,0 +1,39 @@
1
+ :javascript
2
+ local_initialize_functions.push(function($) {
3
+ $("[data-toggle=tooltip]").tooltip({
4
+ animation: false,
5
+ container: "body",
6
+ });
7
+
8
+ Narou.Notepad.replace("notepad");
9
+ });
10
+
11
+ .navbar.navbar-default.navbar-fixed-top(role="navigation")
12
+ .container
13
+ .navbar-header
14
+ %button.navbar-toggle(type="button")
15
+ %span.sr-only Toggle navigation
16
+ %span.icon-bar
17
+ %span.icon-bar
18
+ %span.icon-bar
19
+ %a.navbar-brand(href="#" data-move-to="top") Narou.rb WEB UI
20
+ #bs-navbar-collapse-1.collapse.navbar-collapse
21
+ %ul.nav.navbar-nav
22
+ %li
23
+ %a(href="/settings") 環境設定
24
+ %li
25
+ %a(href="/help") ヘルプ
26
+ %li
27
+ %a(href="/") 戻る
28
+ %p#queue-text.navbar-text.navbar-right(data-toggle="tooltip" title="キューに積まれた処理の数" data-placement="bottom")
29
+ %span.glyphicon.glyphicon-inbox
30
+ %span#queue 0
31
+
32
+ .container.theme-showcase(role="main")
33
+ %h1 メモ帳
34
+ %ul.text-muted
35
+ %li 編集したら自動でサーバに保存されます
36
+ %li 別のブラウザで開いていても内容をリアルタイムに同期します
37
+ .row
38
+ .col-sm-9
39
+ #notepad
@@ -1,11 +1,11 @@
1
1
  -# このページ内専用のjavascriptでjQueryオブジェクトを参照したい場合この関数に記述
2
2
  :javascript
3
3
  local_initialize_functions.push(function($) {
4
- var notification = new Narou.Notification();
5
- var stream_console = new Narou.Console(notification, {
4
+ var stream_console = new Narou.Console({
6
5
  restore: false, buttons: false
7
6
  });
8
7
  var action = new Narou.Action(null);
8
+ var storage = new Narou.Storage;
9
9
 
10
10
  // 小説変換ボタン
11
11
  $("#console-dialog").on("shown.bs.modal", function() {
@@ -34,6 +34,16 @@
34
34
  container: "body",
35
35
  width: "100%"
36
36
  });
37
+
38
+ // 変換設定ページを新規タブで開く様に設定している場合、
39
+ // 「戻る」リンクを「閉じる」に書き換える
40
+ if (storage.get("open_new_tab_setting_pages")) {
41
+ $("#back-to")
42
+ .html('<a href="#">閉じる</a>')
43
+ .on("click", function() {
44
+ window.close();
45
+ });
46
+ }
37
47
  });
38
48
 
39
49
  %form(action="/novels/#{@id}/setting" method="POST")
@@ -50,7 +60,7 @@
50
60
  %ul.nav.navbar-nav
51
61
  %li.active
52
62
  %a(href="/novels/#{@id}/setting") 小説設定
53
- %li
63
+ %li#back-to
54
64
  %a(href="/") 戻る
55
65
  .navbar-form.navbar-left
56
66
  %input.btn.btn-info(type="submit" value="設定を保存" style="margin-left: 50px")
@@ -138,13 +148,13 @@
138
148
  %p.panel-settings-link
139
149
  goto <a href="#setting-panel" data-move-to="#setting-panel">変換設定</a>
140
150
 
141
- - @replace_panel_var = { title: "<b>#{h @novel_title}</b> の置換設定",
151
+ - replace_panel_var = { title: "<b>#{h @novel_title}</b> の置換設定",
142
152
  panel_class: "panel-info",
143
153
  body_class: "",
144
154
  body: ["・この小説の文章を置換する設定を行うことが出来ます(replace.txt を書き換えます)",
145
155
  "・変更を反映させるには再度変換を実行する必要があります",
146
156
  "・保存するとこの小説の replace.txt に書かれているコメントは削除されます"] }
147
- = haml :edit_replace_txt
157
+ = haml :_edit_replace_txt, locals: { replace_panel_var: replace_panel_var }
148
158
 
149
159
  %input(type="submit" value="設定を保存" class="btn btn-info" style="float:none")
150
160
 
@@ -151,11 +151,11 @@
151
151
  .clearfix
152
152
 
153
153
  .tab-pane(role="tabpanel" id="replace")
154
- - @replace_panel_var = { title: "全小説対象の置換設定",
154
+ - replace_panel_var = { title: "全小説対象の置換設定",
155
155
  panel_class: "panel-info",
156
156
  body_class: "list-group-item-default",
157
157
  body: ["・全ての小説に対する置換設定を行うことが出来ます",
158
158
  "・変更を反映させるには再度変換を実行する必要があります"] }
159
- = haml :edit_replace_txt
159
+ = haml :_edit_replace_txt, locals: { replace_panel_var: replace_panel_var }
160
160
 
161
161
  %input(type="submit" value="設定を保存" class="btn btn-info" style="float:none")
@@ -58,7 +58,7 @@ body {
58
58
  display: none;
59
59
  }
60
60
 
61
- #fadeout-alert {
61
+ .fadeout-alert {
62
62
  position: fixed;
63
63
  z-index: 1000;
64
64
  width: 350px;
@@ -369,7 +369,7 @@ table.dataTable {
369
369
  * フォーム関係
370
370
  */
371
371
  #myFilter {
372
- width: 200px;
372
+ width: 250px;
373
373
  border-radius: 18px;
374
374
  padding-left: 29px;
375
375
  padding-right: 23px;
@@ -381,7 +381,10 @@ table.dataTable {
381
381
  width: 100px;
382
382
  }
383
383
  @media (min-width:992px){
384
- width: 250px;
384
+ width: 300px;
385
+ }
386
+ @media (min-width:1200px){
387
+ width: 350px;
385
388
  }
386
389
  }
387
390
  @mixin placeholder { color: #bbb !important }
@@ -574,7 +577,7 @@ input::-ms-clear {
574
577
  /*
575
578
  * コントロールパネル
576
579
  */
577
- #control-panel {
580
+ .control-panel-inner {
578
581
  @media (min-width:768px) {
579
582
  width: 100%;
580
583
  }
@@ -587,6 +590,11 @@ input::-ms-clear {
587
590
  button {
588
591
  margin-bottom: 5px;
589
592
  }
593
+
594
+ &.in-footer {
595
+ margin-top: 7px;
596
+ margin-bottom: 6px !important;
597
+ }
590
598
  }
591
599
 
592
600
  /*
@@ -606,6 +614,7 @@ $console-color: white;
606
614
  margin-bottom: 20px !important;
607
615
  }
608
616
  .console {
617
+ text-align: left;
609
618
  position: relative;
610
619
  overflow: hidden;
611
620
  padding: 5px 15px 5px 15px;
@@ -789,7 +798,7 @@ $console-color: white;
789
798
  /*
790
799
  * 個別メニュー
791
800
  */
792
- #context-menu {
801
+ .context-menu {
793
802
  z-index: 102;
794
803
  }
795
804
 
@@ -922,11 +931,6 @@ $console-color: white;
922
931
  }
923
932
  }
924
933
 
925
- /* タグ検索用ボックス */
926
- #tag-search {
927
- display: none;
928
- }
929
-
930
934
  /* 差分表示用ダイアログ */
931
935
  .diff-list-container {
932
936
  .title {
@@ -1040,17 +1044,23 @@ $console-color: white;
1040
1044
  }
1041
1045
 
1042
1046
  /* くるくるまわるアイコン */
1043
- #version-checking-icon {
1044
- display: inline-block;
1045
- position: absolute;
1046
- width: 18px;
1047
- height: 18px;
1048
- border-radius: 50%;
1049
- border: 4px solid #17cddd;
1050
- border-right-color: transparent;
1051
- -webkit-animation: spin 1s linear infinite;
1052
- -moz-animation: spin 1s linear infinite;
1053
- animation: spin 1s linear infinite;
1047
+ .rotate-progress {
1048
+ .icon {
1049
+ display: inline-block;
1050
+ position: absolute;
1051
+ width: 18px;
1052
+ height: 18px;
1053
+ border-radius: 50%;
1054
+ border: 4px solid #17cddd;
1055
+ border-right-color: transparent;
1056
+ -webkit-animation: spin 1s linear infinite;
1057
+ -moz-animation: spin 1s linear infinite;
1058
+ animation: spin 1s linear infinite;
1059
+ }
1060
+
1061
+ .text {
1062
+ padding-left: 23px;
1063
+ }
1054
1064
  }
1055
1065
  @-webkit-keyframes spin {
1056
1066
  0% { -webkit-transform: rotate(0deg); opacity: 0.4; }
@@ -1067,3 +1077,44 @@ $console-color: white;
1067
1077
  50% { transform: rotate(180deg); opacity: 1; }
1068
1078
  100% { transform: rotate(360deg); opacity: 0.4; }
1069
1079
  }
1080
+
1081
+ .link-to-changelog-in-about {
1082
+ position: absolute;
1083
+ top: 5px;
1084
+ right: 15px;
1085
+ }
1086
+
1087
+ .log-box {
1088
+ position: relative;
1089
+ text-align: left;
1090
+ width: 100%;
1091
+ width: 100%;
1092
+ max-width: 100%;
1093
+ min-width: 100%;
1094
+ height: 100px;
1095
+ overflow-x: hidden;
1096
+ overflow-y: scroll;
1097
+ border-radius: 4px;
1098
+ border: 1px solid lightgray;
1099
+ font-size: 85%;
1100
+ padding: 5px;
1101
+
1102
+ &.large {
1103
+ height: 270px;
1104
+ }
1105
+ }
1106
+
1107
+ #footer-navbar {
1108
+ min-height: 30px;
1109
+ }
1110
+
1111
+ .notepad-container {
1112
+ position: relative;
1113
+
1114
+ span {
1115
+ position: absolute;
1116
+ right: 20px;
1117
+ top: 10px;
1118
+ color: darkseagreen;
1119
+ }
1120
+ }
@@ -38,13 +38,14 @@
38
38
 
39
39
  %script{:src => "//code.jquery.com/jquery-1.11.1.min.js"}
40
40
  %script{:src => "//maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"}
41
+ %script{:src => "//cdnjs.cloudflare.com/ajax/libs/lodash.js/4.6.1/lodash.min.js"}
42
+ %script{:src => "/resources/sprintf.js"}
41
43
  %script{:src => "/resources/perfect-scrollbar.min.js"}
42
44
  %script{:src => "/resources/narou.library.js?_=#{Version}"}
43
45
  %script{:src => "/resources/narou.queue.js?_=#{Version}"}
44
46
  :javascript
45
47
  $(document).ready(function($) {
46
- var notification = new Narou.Notification();
47
- var stream_console = new Narou.Console(notification, {
48
+ var stream_console = new Narou.Console({
48
49
  restore: false, buttons: false
49
50
  });
50
51
  });
@@ -60,6 +60,8 @@
60
60
  %script{:src => "//code.jquery.com/jquery-1.11.1.min.js"}
61
61
  %script{:src => "//maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"}
62
62
  %script{:src => "/resources/perfect-scrollbar.min.js"}
63
+ %script{:src => "//cdnjs.cloudflare.com/ajax/libs/lodash.js/4.6.1/lodash.min.js"}
64
+ %script{:src => "/resources/sprintf.js"}
63
65
  %script{:src => "/resources/narou.library.js?_=#{Version}"}
64
66
  %script{:src => "/resources/narou.queue.js?_=#{Version}"}
65
67
  :javascript
@@ -67,8 +69,7 @@
67
69
  $("#link-drop-here").hide();
68
70
 
69
71
  var action = new Narou.Action(null);
70
- var notification = new Narou.Notification;
71
- var stream_console = new Narou.Console(notification, {
72
+ var stream_console = new Narou.Console({
72
73
  restore: false, buttons: false
73
74
  });
74
75
  var dnd = new Narou.DragDrop;
@@ -0,0 +1,44 @@
1
+ !!! 5
2
+ %html{:lang => "ja"}
3
+ %head
4
+ %meta{:charset => "utf-8"}/
5
+ %meta{:content => "IE=edge", "http-equiv" => "X-UA-Compatible"}/
6
+ %meta{:content => "width=device-width, initial-scale=1", :name => "viewport"}/
7
+ %meta{:content => "whiteleaf", :name => "author"}/
8
+ %meta{:content => "none", :name => "robots"}/
9
+ %title Narou.rb メモ帳
10
+ %link{:href => "//maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css", :rel => "stylesheet"}/
11
+ %link{:href => "/resources/perfect-scrollbar.min.css", :rel => "stylesheet"}/
12
+ %link{:href => "/style.css?_=#{Version}", :rel => "stylesheet"}/
13
+ %link{:href => "/resources/default-style.css?_=#{Version}", :rel => "stylesheet"}/
14
+ / HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries
15
+ /[if lt IE 9]
16
+ <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
17
+ <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
18
+ %body
19
+ :scss
20
+ html, body {
21
+ height: 100%;
22
+ margin: 0;
23
+ padding: 0;
24
+ }
25
+
26
+ #notepad.fullscreen {
27
+ &, div, textarea {
28
+ box-sizing: border-box;
29
+ height: 100%;
30
+ }
31
+ }
32
+
33
+ #notepad.fullscreen
34
+
35
+ %script{:src => "//code.jquery.com/jquery-1.11.1.min.js"}
36
+ %script{:src => "//maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"}
37
+ %script{:src => "//cdnjs.cloudflare.com/ajax/libs/lodash.js/4.6.1/lodash.min.js"}
38
+ %script{:src => "/resources/sprintf.js"}
39
+ %script{:src => "/resources/narou.library.js?_=#{Version}"}
40
+ :javascript
41
+ $(document).ready(function($) {
42
+ Narou.Notepad.replace("notepad");
43
+ });
44
+
@@ -30,15 +30,84 @@ Gem::Specification.new do |gem|
30
30
  を違和感なく縦書で読むことが出来るようになります。
31
31
  }.split("\n").join
32
32
  install_message = <<-EOS
33
- #{"*" * 79}
33
+ #{"*" * 60}
34
34
 
35
- 2.8.3 : 2016/03/01
35
+ 2.9.0 : 2016/03/28
36
36
  ------------------
37
- #### HotFix
38
- - ノクターン・ムーンライト・ミッドナイトノベルズの認証方法変更に対応しました
39
- + 404エラーがでて凍結されてしまった場合、凍結を解除したあと再度更新して下さい
37
+ #### WEB UI
38
+ - メニュー(歯車アイコン)に「サーバを再起動」を追加しました。WEB UIから直接WEB
39
+ UIサーバを再起動できるようになります
40
+ - 「Narou.rbについて」ダイアログで最新バージョンを確認できた場合に、その場で
41
+ システムの更新及び再起動が出来るようになりました。
42
+ (sudo が必要な環境の場合はコマンドで更新して下さい)
43
+ - 小説リスト部分で右クリックすることで個別メニューを呼び出せるようになりました
44
+ - 各小説をそれぞれ個別に更新出来るボタンを追加しました
45
+ - 「表示」メニューを拡張しました
46
+ + 「変換設定ページは新規タブで開く」を追加しました
47
+ + 「ボタンを画面下部に固定」を追加しました
48
+ + 「個別メニューを編集」を追加しました
49
+ - 「ツール」に「メモ帳」を追加しました
50
+ + メモはサーバに保存され、各PC間で共有出来ます。個別メニューの編集内容の
51
+ 受渡しや小説URLの一時的プールなどに使うことを想定しています
52
+ - タグ検索をフィルターに統合しました
53
+ + フィルター欄に `tag:タグ名` と入力することでタグ検索が可能になります。
54
+ (既存のキーワード検索との併用も可能です)
55
+ + `tag:タグ名1 tag:タグ名2` と複数入力することで、複数のタグでの絞り込みが
56
+ 可能です
57
+ + `-tag:タグ名` と `-` を付けることで、除外タグ検索になります
58
+ + メニューのタグか小説リストのタグ名をクリックすることで、フィルター欄に自動
59
+ で入力されます。また、Altキーを押しながらクリックすることで、除外タグが入力
60
+ されます
61
+ - タグの並び順をソートするようにしました
62
+ - 一部のボタンのアイコンを変更しました
63
+ - ツールチップを表示してしばらくしたら自動で閉じるようにしました
64
+ - 表示件数に200、500を追加しました
65
+ - 電子書籍端末を接続時に、取り外すための Eject ボタンを表示するようにしました
66
+ (現時点でMacのみサポート)
40
67
 
41
- #{"*" * 79}
68
+ #### 追加機能
69
+ - [カクヨム](https://kakuyomu.jp/)に対応しました
70
+ + 各話の更新状況を(目次ページから)取得する方法が現時点で無いので、新着のみ
71
+ 取得出来ます(各話を最新の状態にしたい場合は、強制ダウンロードをする必要が
72
+ あります)
73
+ - `narou setting 変数名` コマンドで現在の設定値を確認出来るようになりました。
74
+ (例 `narou s device`)
75
+ - `list` コマンドに `--gl` オプションが追加されました
76
+ + 表示・ソート対象の日付を更新日から最新話掲載日に切り替えます
77
+ + general-lastup の略です
78
+ - 変換プリセットを追加しました
79
+ - n5115cq 最果てのパラディン
80
+ - n7594ct 10年ごしの引きニートを辞めて外出したら自宅ごと異世界に転移してた
81
+
82
+ #### 仕様変更
83
+ - 変換処理で body や introduction 等を処理して最後に subtitle を変換していた
84
+ のを先に subtitle を処理するように変更しました
85
+ - converter.rb でサブタイトルで本文の処理内容を調整したい場合に今までの処理順
86
+ では不可能だったため
87
+ - title_date_format の $s が古い作品だと5桁になってしまうのを4桁に収まるように
88
+ 調整しました(小説家になろうの最も古い作品が4桁に収まるようにしました)
89
+ - `あ゛` のような記述を濁点フォントに置き換える処理を廃止し、AozoraEpub3 による
90
+ 一文字フォント置き換え機能に任せるようにしました
91
+ + `narou init` が必要です
92
+ + この変更に伴い、setting.ini の enable_dakuten_font は廃止されました
93
+ + Kindle 端末において、挿絵が表紙画像になってしまう問題がこの仕様変更で改善
94
+ されます
95
+
96
+ #### 修正
97
+ - httpsなサイトでダウンロード用のブックマークレットが動かない問題に対応しました
98
+ (ヘルプからブックマークレットの再取得が必要です)
99
+ - Windows において、WEB UI の「Narou.rbについて」ダイアログで最新バージョンの
100
+ 確認に失敗する場合がある問題に対応しました
101
+ - WEB UI の小説リストの項目を入れ替えた後に各種ボタンが反応しなくなるのを修正
102
+ - 凍結済み小説を強制更新した際に凍結が解除されてしまう場合があったのを修正
103
+ - thin などがすでにインストール済みの場合に narou web コマンドで WEB UI サーバ
104
+ を起動できない場合があるので、必ず WEBrick で起動するようにしました
105
+ - ノクターン・ムーンライト・ミッドナイトノベルズの認証方法変更後、Nコードのみで
106
+ ダウンロードが出来なくなっていたのを修正
107
+ - Linux でダウンロード時にエラーが出る場合があったのを修正
108
+ - その他パフォーマンス等の調整
109
+
110
+ #{"*" * 60}
42
111
  EOS
43
112
  gem.post_install_message = install_message.gsub("\t", " ")
44
113