narou 2.5.2 → 2.6.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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/ChangeLog.md +54 -0
- data/LICENSE.txt +26 -0
- data/README.md +70 -84
- data/lib/command/alias.rb +7 -0
- data/lib/command/convert.rb +40 -61
- data/lib/command/download.rb +9 -1
- data/lib/command/mail.rb +24 -13
- data/lib/command/send.rb +18 -2
- data/lib/command/setting.rb +152 -34
- data/lib/command/tag.rb +5 -0
- data/lib/command/update.rb +137 -4
- data/lib/converterbase.rb +12 -6
- data/lib/database.rb +1 -1
- data/lib/device/ibooks.rb +6 -5
- data/lib/downloader.rb +85 -83
- data/lib/helper.rb +3 -2
- data/lib/html.rb +3 -0
- data/lib/logger.rb +20 -12
- data/lib/narou.rb +16 -0
- data/lib/novelconverter.rb +209 -75
- data/lib/novelinfo.rb +1 -1
- data/lib/novelsetting.rb +53 -29
- data/lib/template.rb +4 -3
- data/lib/version.rb +1 -1
- data/lib/web/appserver.rb +46 -32
- data/lib/web/public/resources/common.ui.js +2 -4
- data/lib/web/public/resources/default-style.css +37 -0
- data/lib/web/public/resources/narou.library.js +48 -57
- data/lib/web/public/resources/narou.ui.js +71 -39
- data/lib/web/public/theme/Cerulean/bootstrap.min.css +11 -0
- data/lib/web/public/theme/Cerulean/style.css +49 -0
- data/lib/web/public/theme/Darkly/bootstrap.min.css +11 -0
- data/lib/web/public/theme/Darkly/style.css +53 -0
- data/lib/web/public/theme/Readable/bootstrap.min.css +11 -0
- data/lib/web/public/theme/Readable/style.css +53 -0
- data/lib/web/public/theme/Slate/bootstrap.min.css +11 -0
- data/lib/web/public/theme/Slate/style.css +40 -0
- data/lib/web/public/theme/Superhero/bootstrap.min.css +11 -0
- data/lib/web/public/theme/Superhero/style.css +40 -0
- data/lib/web/public/theme/United/bootstrap.min.css +11 -0
- data/lib/web/public/theme/United/style.css +47 -0
- data/lib/web/public/theme/fonts/glyphicons-halflings-regular.eot +0 -0
- data/lib/web/public/theme/fonts/glyphicons-halflings-regular.svg +288 -0
- data/lib/web/public/theme/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/lib/web/public/theme/fonts/glyphicons-halflings-regular.woff +0 -0
- data/lib/web/public/theme/fonts/glyphicons-halflings-regular.woff2 +0 -0
- data/lib/web/settingmessages.rb +5 -0
- data/lib/web/views/index.haml +15 -19
- data/lib/web/views/layout.haml +6 -1
- data/lib/web/views/novels/setting.haml +76 -75
- data/lib/web/views/settings.haml +111 -107
- data/lib/web/views/style.scss +6 -21
- data/narou.gemspec +49 -6
- data/narou.rb +3 -1
- data/preset/ncode.syosetu.com/n7975cr/setting.ini +7 -0
- data/spec/README.txt +4 -0
- data/spec/data/convert_test/ruby/correct_test_ruby.txt +4 -4
- data/template/hotentry.txt.erb +28 -0
- data/template/ibunko_novel.txt.erb +4 -2
- data/template/novel.txt.erb +6 -3
- data/template/setting.ini.erb +18 -2
- metadata +73 -8
Binary file
|
Binary file
|
Binary file
|
data/lib/web/settingmessages.rb
CHANGED
@@ -13,6 +13,11 @@ module Narou
|
|
13
13
|
"update.sort-by" => "アップデートを指定した項目順で行う",
|
14
14
|
"default.title_date_align" => "enable_add_date_to_title で付与する日付の位置",
|
15
15
|
"force.title_date_align" => "enable_add_date_to_title で付与する日付の位置",
|
16
|
+
"difftool.arg" => "difftoolで使う引数(指定しなければ単純に新旧ファイルを引数に呼び出す)\n" \
|
17
|
+
"特殊な変数\n" \
|
18
|
+
"<b>%NEW</b> : 最新データの差分用ファイルパス\n" \
|
19
|
+
"<b>%OLD</b> : 古い方の差分用ファイルパス",
|
20
|
+
"no-color" => "コンソールのカラー表示を無効にする\n※要WEB UIサーバ再起動"
|
16
21
|
}
|
17
22
|
end
|
18
23
|
|
data/lib/web/views/index.haml
CHANGED
@@ -19,12 +19,12 @@
|
|
19
19
|
%li#action-view-setting
|
20
20
|
%a(href="#") 表示する項目を設定
|
21
21
|
%li.divider
|
22
|
-
%li#action-view-
|
22
|
+
%li#action-view-nonfrozen
|
23
23
|
%a(href="#")
|
24
24
|
%span
|
25
25
|
%span.active-ok.glyphicon.glyphicon-ok
|
26
26
|
凍結中以外を表示
|
27
|
-
%li#action-view-frozen
|
27
|
+
%li#action-view-frozen
|
28
28
|
%a(href="#")
|
29
29
|
%span
|
30
30
|
%span.active-ok.glyphicon.glyphicon-ok
|
@@ -63,7 +63,7 @@
|
|
63
63
|
%span.active-ok.glyphicon.glyphicon-ok
|
64
64
|
範囲選択モード
|
65
65
|
%span.shortcut R
|
66
|
-
%li
|
66
|
+
%li.dropdown
|
67
67
|
%a.dropdown-toggle(data-toggle="dropdown" href="#")
|
68
68
|
タグ
|
69
69
|
%span.caret
|
@@ -157,6 +157,8 @@
|
|
157
157
|
%a#button-update-view(href="#") 表示されている小説を更新
|
158
158
|
%li
|
159
159
|
%a#button-update-general-lastup(href="#") 最新話掲載日を更新
|
160
|
+
%li
|
161
|
+
%a#button-update-force(href="#") 凍結済みでも更新
|
160
162
|
.btn-group
|
161
163
|
%button#button-send.btn.btn-warning(type="button") Send
|
162
164
|
.btn-group
|
@@ -170,16 +172,10 @@
|
|
170
172
|
%li
|
171
173
|
%a#button-freeze-off(href="#") 選択した小説の凍結を解除
|
172
174
|
.btn-group
|
173
|
-
%button.btn.btn-danger.
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
%ul.dropdown-menu(role="menu")
|
178
|
-
%li
|
179
|
-
%a#button-remove(href="#") 選択した小説を削除
|
180
|
-
%li
|
181
|
-
%a#button-remove-with-file(href="#") 選択した小説をファイルも含めて削除
|
182
|
-
%button#button-convert.btn.btn-default.enable-selected(type="button" data-toggle="tooltip" |
|
175
|
+
%button#button-remove.btn.btn-danger.enable-selected(type="button" data-toggle="tooltip" |
|
176
|
+
title="選択した小説を削除") Remove |
|
177
|
+
.btn-group
|
178
|
+
%button#button-convert.btn.btn-default.enable-selected(type="button" data-toggle="tooltip" |
|
183
179
|
title="選択した小説を変換") Convert |
|
184
180
|
.btn-group
|
185
181
|
%button.btn.btn-default.dropdown-toggle.enable-selected(type="button" data-toggle="dropdown")
|
@@ -188,13 +184,15 @@
|
|
188
184
|
%span.sr-only Toggle Dropdown
|
189
185
|
%ul.dropdown-menu(role="menu")
|
190
186
|
%li
|
191
|
-
%a#button-diff(href="#") 選択した小説の最新の差分を表示
|
187
|
+
%a#button-diff(href="#") 選択した小説の最新の差分を表示
|
188
|
+
%li
|
189
|
+
%a#button-inspect(href="#") 選択した小説の調査状況ログを表示
|
192
190
|
%li
|
193
|
-
%a#button-
|
191
|
+
%a#button-folder(href="#") 選択した小説の保存フォルダを開く
|
194
192
|
%li
|
195
|
-
%a#button-
|
193
|
+
%a#button-backup(href="#") 選択した小説のバックアップを作成
|
196
194
|
%li
|
197
|
-
%a#button-
|
195
|
+
%a#button-setting-burn(href="#") 選択した小説の設定の未設定項目に共通設定を焼付ける
|
198
196
|
|
199
197
|
%input#tag-search(type="text")
|
200
198
|
|
@@ -230,8 +228,6 @@
|
|
230
228
|
%a(href="#") 送信
|
231
229
|
%li#context-menu-remove
|
232
230
|
%a(href="#") 削除
|
233
|
-
%li#context-menu-remove-with-file
|
234
|
-
%a(href="#") 完全に削除
|
235
231
|
%li#context-menu-convert
|
236
232
|
%a(href="#") 変換
|
237
233
|
%li#context-menu-inspect
|
data/lib/web/views/layout.haml
CHANGED
@@ -8,7 +8,12 @@
|
|
8
8
|
%meta{:content => "none", :name => "robots"}/
|
9
9
|
%title Narou.rb WEB UI #{@title ? "- #{@title}" : ""}
|
10
10
|
%link{:href => "/favicon.ico", :rel => "shortcut icon"}/
|
11
|
-
|
11
|
+
- if @bootstrap_theme
|
12
|
+
%link{:href => "/theme/#{@bootstrap_theme}/bootstrap.min.css", :rel => "stylesheet"}/
|
13
|
+
%link{:href => "/theme/#{@bootstrap_theme}/style.css", :rel => "stylesheet"}/
|
14
|
+
- else
|
15
|
+
%link{:href => "//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css", :rel => "stylesheet"}/
|
16
|
+
%link{:href => "/resources/default-style.css", :rel => "stylesheet"}/
|
12
17
|
%link{:href => "//cdn.datatables.net/plug-ins/725b2a2115b/integration/bootstrap/3/dataTables.bootstrap.css", :rel => "stylesheet"}/
|
13
18
|
%link{:href => "//cdn.datatables.net/colreorder/1.1.2/css/dataTables.colReorder.css", :rel => "stylesheet"}/
|
14
19
|
%link{:href => "//cdn.datatables.net/colvis/1.1.1/css/dataTables.colVis.css", :rel => "stylesheet"}/
|
@@ -67,85 +67,86 @@
|
|
67
67
|
%p.panel-settings-link
|
68
68
|
goto <a href="#replace-panel" data-move-to="#replace-panel">置換設定</a>
|
69
69
|
|
70
|
-
|
71
|
-
.panel-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
-
|
79
|
-
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
-
|
86
|
-
|
87
|
-
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
%
|
107
|
-
%
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
%
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
未設定時:
|
125
|
-
- if @default_settings.include?(name)
|
126
|
-
= h value_to_msg(@default_settings[name])
|
127
|
-
- else
|
128
|
-
= h value_to_msg(original[:value])
|
129
|
-
- unless force_value.nil?
|
70
|
+
.container-settings
|
71
|
+
#setting-panel.panel.panel-info.panel-settings
|
72
|
+
.panel-heading <b>#{h @novel_title}</b> の変換設定
|
73
|
+
.panel-body
|
74
|
+
・この小説専用の変換時の設定を変更出来ます(setting.ini を書き換えます)<br>
|
75
|
+
・変更を反映させるには再度変換を実行する必要があります<br>
|
76
|
+
・未設定の項目は、変換時に共通設定(default.* 系設定及びNarou.rbオリジナル設定)が適用されます<br>
|
77
|
+
・環境設定で force.* 系設定が有効になっている場合、ここでの該当項目は無視されます<br>
|
78
|
+
.list-group
|
79
|
+
- @original_settings.each do |original|
|
80
|
+
- name = original[:name]
|
81
|
+
- value = @novel_setting[name]
|
82
|
+
- help = original[:help].strip.gsub("\n", "<br>")
|
83
|
+
- list_group_item_style = {}
|
84
|
+
- force_value = @force_settings[name]
|
85
|
+
- if @error_list[name]
|
86
|
+
- list_group_item_style = {class: "has-error", style: "background-color:#f2dede"}
|
87
|
+
- elsif force_value.nil?.!
|
88
|
+
- list_group_item_style = {style: "background-color: #fcf8e3"}
|
89
|
+
.list-group-item.form-group{list_group_item_style}
|
90
|
+
%h4.list-group-item-heading #{name}
|
91
|
+
.list-group-item-text
|
92
|
+
- case original[:type]
|
93
|
+
- when :boolean
|
94
|
+
.switch-toggle.well.switch-3
|
95
|
+
<input id="#{name}-nil" type="radio" name="#{name}" value="nil" #{value.nil? ? "checked" : ""}>
|
96
|
+
%label(for="#{name}-nil")
|
97
|
+
未設定
|
98
|
+
<input id="#{name}-false" type="radio" name="#{name}" value="off" #{value == false ? "checked" : ""}>
|
99
|
+
%label(for="#{name}-false")
|
100
|
+
いいえ
|
101
|
+
<input id="#{name}-true" type="radio" name="#{name}" value="on" #{value ? "checked" : ""}>
|
102
|
+
%label(for="#{name}-true")
|
103
|
+
はい
|
104
|
+
%a.btn.btn-primary
|
105
|
+
- when :select
|
106
|
+
%div.input-style
|
107
|
+
%select{name: name, class: "selectpicker show-tick"}
|
108
|
+
%option(value="") 未設定
|
109
|
+
- original[:select_keys].each_with_index do |key, index|
|
110
|
+
%option{selected: value == key, value: key}
|
111
|
+
= original[:select_summaries][index]
|
112
|
+
- when :multiple
|
113
|
+
%div.input-style
|
114
|
+
%select{name: "#{name}[]", class: "selectpicker", multiple: true, title: "未設定"}
|
115
|
+
- selected_items = value.to_s.split(",")
|
116
|
+
- original[:select_keys].each_with_index do |key, index|
|
117
|
+
%option{selected: selected_items.include?(key), value: key}
|
118
|
+
= original[:select_summaries][index]
|
119
|
+
- else
|
120
|
+
%input{type:"text", name:name, value:value, class:"form-control",
|
121
|
+
placeholder:Helper.variable_type_to_description(original[:type]).strip }
|
122
|
+
%p #{help}
|
123
|
+
.help-extra-messages
|
130
124
|
%p
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
125
|
+
未設定時:
|
126
|
+
- if @default_settings.include?(name)
|
127
|
+
= h value_to_msg(@default_settings[name])
|
128
|
+
- else
|
129
|
+
= h value_to_msg(original[:value])
|
130
|
+
- unless force_value.nil?
|
131
|
+
%p
|
132
|
+
%b force.#{name} が有効になっています(設定値:#{h value_to_msg(force_value)})
|
133
|
+
- if @error_list[name]
|
134
|
+
%p.alert-danger
|
135
|
+
&= @error_list[name]
|
136
|
+
.clear
|
136
137
|
|
137
|
-
|
138
|
-
|
138
|
+
%p.panel-settings-link
|
139
|
+
goto <a href="#setting-panel" data-move-to="#setting-panel">変換設定</a>
|
139
140
|
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
141
|
+
- @replace_panel_var = { title: "<b>#{h @novel_title}</b> の置換設定",
|
142
|
+
panel_class: "panel-info",
|
143
|
+
body_class: "",
|
144
|
+
body: ["・この小説の文章を置換する設定を行うことが出来ます(replace.txt を書き換えます)",
|
145
|
+
"・変更を反映させるには再度変換を実行する必要があります",
|
146
|
+
"・保存するとこの小説の replace.txt に書かれているコメントは削除されます"] }
|
147
|
+
= haml :edit_replace_txt
|
147
148
|
|
148
|
-
|
149
|
+
%input(type="submit" value="設定を保存" class="btn btn-info" style="float:none")
|
149
150
|
|
150
151
|
#console-dialog.modal.fade(tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true")
|
151
152
|
.modal-dialog
|
data/lib/web/views/settings.haml
CHANGED
@@ -10,10 +10,22 @@
|
|
10
10
|
container: "body",
|
11
11
|
width: "100%"
|
12
12
|
});
|
13
|
+
|
14
|
+
var storage = new Narou.Storage;
|
15
|
+
// 直前に開いていたタブを復元
|
16
|
+
var related_active_tab = storage.get("related_active_tab");
|
17
|
+
if (related_active_tab) {
|
18
|
+
$('a[href="#' + related_active_tab + '"]').tab("show");
|
19
|
+
}
|
20
|
+
// 開いたタブを記憶しておく
|
21
|
+
$('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
|
22
|
+
var active_tab = (e.target + "").split("#")[1];
|
23
|
+
storage.set("related_active_tab", active_tab);
|
24
|
+
storage.save();
|
25
|
+
})
|
13
26
|
});
|
14
27
|
|
15
28
|
%form(action="/settings" method="POST")
|
16
|
-
%input(type="hidden" name="view_invisible" value="#{@view_invisible ? 1 : 0}")
|
17
29
|
.navbar.navbar-default.navbar-fixed-top(role="navigation")
|
18
30
|
.container
|
19
31
|
.navbar-header
|
@@ -38,115 +50,107 @@
|
|
38
50
|
%span#queue 0
|
39
51
|
|
40
52
|
.container.container-main.theme-showcase(role="main")
|
41
|
-
-
|
42
|
-
- inventory = Inventory.load("
|
43
|
-
-
|
44
|
-
|
45
|
-
|
46
|
-
- variables = variables.select { |_, v| v[:invisible] }.merge(variables.reject { |_, v| v[:invisible] })
|
53
|
+
.container-settings
|
54
|
+
- inventory = Inventory.load("local_setting", :local).merge(Inventory.load("global_setting", :global))
|
55
|
+
- local_and_global_variables = @setting_variables[:local].merge(@setting_variables[:global])
|
56
|
+
- tab_info = Command::Setting.get_setting_tab_info
|
57
|
+
- error_tabs = @error_list.map { |name, _| local_and_global_variables[name][:tab] }.uniq
|
47
58
|
|
48
|
-
%p
|
49
|
-
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
59
|
+
%p
|
60
|
+
%ul.nav.nav-pills(role="tablist")
|
61
|
+
- Command::Setting.get_setting_tab_names.each.with_index do |(key, name), index|
|
62
|
+
%li(role="presentation"){class: index == 0 ? "active" : nil}
|
63
|
+
%a{ href: "##{key}", :"aria-controls" => "#{key}", role: "tab", :"data-toggle" => "tab" }
|
64
|
+
= name
|
65
|
+
- if error_tabs.include?(key)
|
66
|
+
%span.text-danger.glyphicon.glyphicon-exclamation-sign
|
67
|
+
%li(role="presentation")
|
68
|
+
%a(href="#replace" aria-controls="replace" role="tab" data-toggle="tab")
|
69
|
+
置換設定
|
57
70
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
- if
|
63
|
-
-
|
64
|
-
・default.* 系の設定は個別の変換設定で未設定の項目の挙動を指定することが出来ます<br>
|
65
|
-
・force.* 系の設定は個別設定、default.* 等の設定を無視して反映されるようになります<br>
|
66
|
-
・default_args.* 系の設定は、各種コマンドのオプションを省略した場合に使用されるオプションを指定出来ます<br>
|
67
|
-
- else
|
68
|
-
・Global な設定はユーザープロファイルに保存され、すべての narou コマンドで使われます<br>
|
69
|
-
- if @view_invisible
|
70
|
-
・隠しオプションを非表示にするには<a href="?##{scope}"><u>ここをクリック</u></a><br>
|
71
|
+
-# :tab が設定されていないものを hidden として設定しておく
|
72
|
+
- local_and_global_variables.each do |name, value|
|
73
|
+
- unless value[:tab]
|
74
|
+
- item = inventory[name]
|
75
|
+
- if value[:type] == :boolean
|
76
|
+
- hidden_value = convert_boolean_to_on_off(item)
|
71
77
|
- else
|
72
|
-
|
73
|
-
|
74
|
-
- variables.each do |name, value|
|
75
|
-
- item = inventory[name]
|
76
|
-
- unless @view_invisible
|
77
|
-
- if value[:invisible]
|
78
|
-
- if value[:type] == :boolean
|
79
|
-
- hidden_value = convert_boolean_to_on_off(item)
|
80
|
-
- else
|
81
|
-
- hidden_value = item
|
82
|
-
%input{type:"hidden", name:name, value:hidden_value}
|
83
|
-
- next
|
84
|
-
- message = Narou::SETTING_VARIABLES_WEBUI_MESSAGES[name] || value[:help]
|
85
|
-
- message = message.strip.gsub("\n", "<br>")
|
86
|
-
- error_style = {class: "has-error", style: "background-color:#f2dede"}
|
87
|
-
.list-group-item.form-group{@error_list[name] ? error_style : {}}
|
88
|
-
%h4.list-group-item-heading #{name}
|
89
|
-
.list-group-item-text
|
90
|
-
- case value[:type]
|
91
|
-
- when :boolean
|
92
|
-
- if name =~ /^(force|default)\./
|
93
|
-
.switch-toggle.well.switch-3
|
94
|
-
<input id="#{name}-nil" type="radio" name="#{name}" value="nil" #{item.nil? ? "checked" : ""}>
|
95
|
-
%label(for="#{name}-nil")
|
96
|
-
未設定
|
97
|
-
<input id="#{name}-false" type="radio" name="#{name}" value="off" #{item == false ? "checked" : ""}>
|
98
|
-
%label(for="#{name}-false")
|
99
|
-
しない
|
100
|
-
<input id="#{name}-true" type="radio" name="#{name}" value="on" #{item ? "checked" : ""}>
|
101
|
-
%label(for="#{name}-true")
|
102
|
-
する
|
103
|
-
%a.btn.btn-primary
|
104
|
-
- else
|
105
|
-
%label.switch-light.well
|
106
|
-
<input type="checkbox" name="#{name}" #{item ? "checked" : ""}>
|
107
|
-
- if name == "over18"
|
108
|
-
%span
|
109
|
-
%span いいえ
|
110
|
-
%span はい
|
111
|
-
- else
|
112
|
-
%span
|
113
|
-
%span しない
|
114
|
-
%span する
|
115
|
-
%a.btn.btn-primary
|
116
|
-
- when :select
|
117
|
-
%div.input-style
|
118
|
-
%select{name: name, class: "selectpicker show-tick"}
|
119
|
-
%option(value="") 未設定
|
120
|
-
- value[:select_keys].each_with_index do |key, index|
|
121
|
-
%option{selected: item == key, value: key}
|
122
|
-
= value[:select_summaries][index]
|
123
|
-
- when :multiple
|
124
|
-
%div.input-style
|
125
|
-
%select{name: "#{name}[]", class: "selectpicker", multiple: true, title: "未設定"}
|
126
|
-
- selected_items = item.to_s.split(",")
|
127
|
-
- value[:select_keys].each_with_index do |key, index|
|
128
|
-
%option{selected: selected_items.include?(key), value: key}
|
129
|
-
= value[:select_summaries][index]
|
130
|
-
- else
|
131
|
-
%input{type:"text", name:name, value:item, class:"form-control",
|
132
|
-
placeholder:Helper.variable_type_to_description(value[:type]).strip }
|
133
|
-
%p
|
134
|
-
= message != "" ? message : " "
|
135
|
-
- if @error_list[name]
|
136
|
-
%p.alert-danger
|
137
|
-
= @error_list[name]
|
138
|
-
.clear
|
78
|
+
- hidden_value = item
|
79
|
+
%input{type:"hidden", name:name, value:hidden_value}
|
139
80
|
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
81
|
+
.tab-content
|
82
|
+
- Command::Setting.get_setting_tab_names.each.with_index do |(key, _), index|
|
83
|
+
.tab-pane{ role: "tabpanel", id: "#{key}", class: index == 0 ? "active" : nil }
|
84
|
+
.panel.panel-info.panel-settings
|
85
|
+
- if tab_info.has_key?(key)
|
86
|
+
.panel-heading
|
87
|
+
= tab_info[key]
|
88
|
+
.list-group
|
89
|
+
- local_and_global_variables.each do |name, value|
|
90
|
+
- next if value[:tab] != key
|
91
|
+
- item = inventory[name]
|
92
|
+
- need_clear = false
|
93
|
+
- message = Narou::SETTING_VARIABLES_WEBUI_MESSAGES[name] || value[:help]
|
94
|
+
- message = message.strip.gsub("\n", "<br>")
|
95
|
+
- error_style = {class: "has-error", style: "background-color:#f2dede"}
|
96
|
+
.list-group-item.form-group{@error_list[name] ? error_style : {}}
|
97
|
+
%h4.list-group-item-heading #{name}
|
98
|
+
.list-group-item-text
|
99
|
+
- case value[:type]
|
100
|
+
- when :boolean
|
101
|
+
- if name =~ /^(force|default)\./
|
102
|
+
.switch-toggle.well.switch-3
|
103
|
+
<input id="#{name}-nil" type="radio" name="#{name}" value="nil" #{item.nil? ? "checked" : ""}>
|
104
|
+
%label(for="#{name}-nil")
|
105
|
+
未設定
|
106
|
+
<input id="#{name}-false" type="radio" name="#{name}" value="off" #{item == false ? "checked" : ""}>
|
107
|
+
%label(for="#{name}-false")
|
108
|
+
いいえ
|
109
|
+
<input id="#{name}-true" type="radio" name="#{name}" value="on" #{item ? "checked" : ""}>
|
110
|
+
%label(for="#{name}-true")
|
111
|
+
はい
|
112
|
+
%a.btn.btn-primary
|
113
|
+
- else
|
114
|
+
%label.switch-light.well
|
115
|
+
<input type="checkbox" name="#{name}" #{item ? "checked" : ""}>
|
116
|
+
%span
|
117
|
+
%span いいえ
|
118
|
+
%span はい
|
119
|
+
%a.btn.btn-primary
|
120
|
+
- when :select
|
121
|
+
%div.input-style
|
122
|
+
%select{name: name, class: "selectpicker show-tick"}
|
123
|
+
%option(value="") 未設定
|
124
|
+
- value[:select_keys].each_with_index do |key, index|
|
125
|
+
%option{selected: item == key, value: key}
|
126
|
+
= value[:select_summaries][index]
|
127
|
+
- need_clear = true
|
128
|
+
- when :multiple
|
129
|
+
%div.input-style
|
130
|
+
%select{name: "#{name}[]", class: "selectpicker", multiple: true, title: "未設定"}
|
131
|
+
- selected_items = item.to_s.split(",")
|
132
|
+
- value[:select_keys].each_with_index do |key, index|
|
133
|
+
%option{selected: selected_items.include?(key), value: key}
|
134
|
+
= value[:select_summaries][index]
|
135
|
+
- need_clear = true
|
136
|
+
- else
|
137
|
+
%input{type:"text", name:name, value:item, class:"form-control",
|
138
|
+
placeholder:Helper.variable_type_to_description(value[:type]).strip }
|
139
|
+
- need_clear = true
|
140
|
+
%p
|
141
|
+
= message != "" ? message : " "
|
142
|
+
- if @error_list[name]
|
143
|
+
%p.alert-danger
|
144
|
+
= @error_list[name]
|
145
|
+
- if need_clear
|
146
|
+
.clearfix
|
144
147
|
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
148
|
+
.tab-pane(role="tabpanel" id="replace")
|
149
|
+
- @replace_panel_var = { title: "全小説対象の置換設定",
|
150
|
+
panel_class: "panel-info",
|
151
|
+
body_class: "list-group-item-default",
|
152
|
+
body: ["・全ての小説に対する置換設定を行うことが出来ます",
|
153
|
+
"・変更を反映させるには再度変換を実行する必要があります"] }
|
154
|
+
= haml :edit_replace_txt
|
151
155
|
|
152
|
-
|
156
|
+
%input(type="submit" value="設定を保存" class="btn btn-info" style="float:none")
|