").appendTo(H),_=t(H.css("bottom")),N=_===_,Q=N?null:t(H.css("top")),z=t(H.css("borderLeftWidth"))+t(H.css("borderRightWidth")),F=t(H.css("marginLeft"))+t(H.css("marginRight")),G=e("
").appendTo(M),J=e("
").appendTo(G),V=t(G.css("right")),Z=V===V,$=Z?null:t(G.css("left")),et=t(G.css("borderTopWidth"))+t(G.css("borderBottomWidth")),tt=t(G.css("marginTop"))+t(G.css("marginBottom")),ot="ontouchstart"in window||window.DocumentTouch&&document instanceof window.DocumentTouch,nt=null!==window.navigator.msMaxTouchPoints;return S(),M})}});
\ No newline at end of file
diff --git a/lib/web/settingmessages.rb b/lib/web/settingmessages.rb
index beb66515..c4282248 100644
--- a/lib/web/settingmessages.rb
+++ b/lib/web/settingmessages.rb
@@ -21,9 +21,7 @@ module Narou
"no-color" => "コンソールのカラー表示を無効にする\n※要サーバ再起動",
"economy" => "容量節約に関する設定",
"send.without-freeze" => "一括送信時に凍結された小説は対象外にする。(個別送信時は凍結済みでも送信可能)",
- "server-digest-auth.enable" => "%%ORIG%%\n※digest-auth関連の設定を変更した場合サーバの再起動が必要",
- "server-digest-auth.hashed-password" => "サーバのDigest認証のパスワードを、Realmを\"narou.rb\"としてハッシュにしたもの。\n" \
- "https://tgws.plus/app/digest/ などで生成できる",
+ "server-basic-auth.enable" => "%%ORIG%%\n※basic-auth関連の設定を変更した場合サーバの再起動が必要",
"concurrency" => "%%ORIG%% ※要サーバ再起動",
"logging" => "%%ORIG%%\n※要サーバ再起動",
"logging.format-filename" => "%%ORIG%%\n※要サーバ再起動",
diff --git a/lib/web/views/layout.haml b/lib/web/views/layout.haml
index 845d82e2..edaccda5 100644
--- a/lib/web/views/layout.haml
+++ b/lib/web/views/layout.haml
@@ -13,19 +13,16 @@
%link{:href => "/theme/#{@bootstrap_theme}/bootstrap.min.css", :rel => "stylesheet"}/
%link{:href => "/theme/#{@bootstrap_theme}/style.css", :rel => "stylesheet"}/
- else
- %link{:href => "//maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css", :rel => "stylesheet"}/
- %link{:href => "/resources/default-style.css?_=#{Narou::VERSION}", :rel => "stylesheet"}/
- %link{:href => "//cdn.datatables.net/plug-ins/725b2a2115b/integration/bootstrap/3/dataTables.bootstrap.css", :rel => "stylesheet"}/
- %link{:href => "//cdn.datatables.net/colreorder/1.1.2/css/dataTables.colReorder.css", :rel => "stylesheet"}/
+ %link{:href => "//cdn.jsdelivr.net/npm/bootstrap@3.4.1/dist/css/bootstrap.min.css", :rel => "stylesheet"}/
+ %link{:href => "/resources/css/default-style.css?_=#{Narou::VERSION}", :rel => "stylesheet"}/
+ %link{:href => "//cdn.datatables.net/2.3.4/css/dataTables.bootstrap.css", :rel => "stylesheet"}/
+ %link{:href => "//cdn.datatables.net/colreorder/2.1.2/css/colReorder.bootstrap.css", :rel => "stylesheet"}/
+ %link{:href => "//cdn.datatables.net/buttons/3.2.5/css/buttons.bootstrap.css", :rel => "stylesheet"}
%link{:href => "//cdn.datatables.net/colvis/1.1.1/css/dataTables.colVis.css", :rel => "stylesheet"}/
- %link{:href => "//cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.6.5/css/bootstrap-select.min.css", :rel => "stylesheet"}/
- %link{:href => "/resources/perfect-scrollbar.min.css", :rel => "stylesheet"}/
- %link{:href => "/resources/toggle-switch.css", :rel => "stylesheet"}/
+ %link{:href => "//cdn.jsdelivr.net/npm/bootstrap-select@1.13.18/dist/css/bootstrap-select.min.css", :rel => "stylesheet"}/
+ %link{:href => "//cdn.jsdelivr.net/npm/perfect-scrollbar@1.5.6/css/perfect-scrollbar.min.css", :rel => "stylesheet"}/
+ %link{:href => "/resources/css/toggle-switch.css", :rel => "stylesheet"}/
%link{:href => "/style.css?_=#{Narou::VERSION}", :rel => "stylesheet"}/
- / HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries
- /[if lt IE 9]
-
-
:javascript
var local_initialize_functions = [];
var slideNavbar;
@@ -40,24 +37,28 @@
&= message
!= yield
= partial :move_to_top
- %script{:src => "//code.jquery.com/jquery-1.11.1.min.js"}
- %script{:src => "//maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"}
- %script{:src => "//cdn.datatables.net/1.10.10/js/jquery.dataTables.min.js"}
- %script{:src => "//cdn.datatables.net/plug-ins/725b2a2115b/integration/bootstrap/3/dataTables.bootstrap.js"}
- %script{:src => "//cdn.datatables.net/colreorder/1.3.0/js/dataTables.colReorder.min.js"}
- %script{:src => "//cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.6.5/js/bootstrap-select.min.js"}
- %script{:src => "//cdnjs.cloudflare.com/ajax/libs/lodash.js/4.6.1/lodash.min.js"}
- %script{:src => "/resources/sprintf.js"}
- %script{:src => "/resources/dataTables.colVis.js"}
- %script{:src => "/resources/bootbox.min.js"}
- %script{:src => "/resources/shortcut.js"}
- %script{:src => "/resources/perfect-scrollbar.min.js"}
- %script{:src => "/resources/jquery.outerclick.js"}
- %script{:src => "/resources/jquery.slidenavbar.js"}
- %script{:src => "/resources/jquery.moveto.js"}
- %script{:src => "/resources/narou.library.js?_=#{Narou::VERSION}"}
- %script{:src => "/resources/narou.queue.js?_=#{Narou::VERSION}"}
- %script{:src => "/resources/common.ui.js?_=#{Narou::VERSION}"}
+ %script{:src => "//cdn.jsdelivr.net/npm/jquery@3.7.1/dist/jquery.min.js"}
+ %script{:src => "//cdn.jsdelivr.net/npm/jquery-migrate@3.5.2/dist/jquery-migrate.js"}
+ %script{:src => "//cdn.jsdelivr.net/npm/bootstrap@3.4.1/dist/js/bootstrap.min.js"}
+ %script{:src => "//cdn.datatables.net/2.3.4/js/dataTables.min.js"}
+ %script{:src => "//cdn.datatables.net/2.3.4/js/dataTables.bootstrap.js"}
+ %script{:src => "//cdn.datatables.net/colreorder/2.1.2/js/dataTables.colReorder.min.js"}
+ %script{:src => "//cdn.datatables.net/colreorder/2.1.2/js/colReorder.bootstrap.js"}
+ %script{:src => "//cdn.datatables.net/buttons/3.2.5/js/dataTables.buttons.min.js"}
+ %script{:src => "//cdn.datatables.net/buttons/3.2.5/js/buttons.bootstrap.js"}
+ %script{:src => "//cdn.datatables.net/buttons/3.2.5/js/buttons.colVis.min.js"}
+ %script{:src => "//cdn.jsdelivr.net/npm/bootstrap-select@1.13.18/js/bootstrap-select.min.js"}
+ %script{:src => "//cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js"}
+ %script{:src => "//cdn.jsdelivr.net/npm/perfect-scrollbar@0.8.1/dist/js/perfect-scrollbar.jquery.min.js"}
+ %script{:src => "/resources/js/bootbox.js"}
+ %script{:src => "/resources/js/sprintf.js"}
+ %script{:src => "/resources/js/shortcut.js"}
+ %script{:src => "/resources/js/jquery.outerclick.js"}
+ %script{:src => "/resources/js/jquery.slidenavbar.js"}
+ %script{:src => "/resources/js/jquery.moveto.js"}
+ %script{:src => "/resources/js/narou.library.js?_=#{Narou::VERSION}"}
+ %script{:src => "/resources/js/narou.queue.js?_=#{Narou::VERSION}"}
+ %script{:src => "/resources/js/common.ui.js?_=#{Narou::VERSION}"}
:javascript
$(document).ready(function($) {
slideNavbar = $(".navbar-collapse").slideNavbar();
@@ -66,5 +67,5 @@
});
});
- if env["PATH_INFO"] == "/"
- %script{:src => "/resources/narou.ui.js?_=#{Narou::VERSION}"}
+ %script{:src => "/resources/js/narou.ui.js?_=#{Narou::VERSION}"}
diff --git a/lib/web/views/style.scss b/lib/web/views/style.scss
index 70034a02..b9185875 100644
--- a/lib/web/views/style.scss
+++ b/lib/web/views/style.scss
@@ -101,6 +101,7 @@ table#novel-list {
color: $default-color;
//border-color: darken($odd-color, 20%);
border-color: $novel-list-border-color;
+ background-color: $even-color;
@mixin dataTableSortingHeader($arrow_img_url) {
background: url($arrow_img_url) no-repeat center right !important;
@@ -110,12 +111,16 @@ table#novel-list {
thead {
background-color: $thead-background-color;
color: #ddd0cc;
+ th {
+ background-color: $thead-background-color;
+ }
}
td {
padding: 4px !important;
vertical-align: middle;
//border-color: darken($odd-color, 20%);
border-color: $novel-list-border-color;
+ background-color: inherit;
}
tr {
td.text-center {
@@ -134,9 +139,28 @@ table#novel-list {
background-color: #f8f3e5;
}
}
+
+ /* DataTables 2.x対応: nth-childベースのストライプ */
+ tbody > tr:nth-child(odd) {
+ background-color: $odd-color;
+ td.sorting_1 {
+ background-color: #f0ecde;
+ }
+ }
+ tbody > tr:nth-child(even) {
+ background-color: $even-color;
+ td.sorting_1 {
+ background-color: #f8f3e5;
+ }
+ }
$selected-color: mix($odd-color, rgba(255,212,0,0.5));
//$selected-color: #90cebc;
$selected-hover-color: #ded;
+
+ /* DataTables 2.x のCSS変数を上書き */
+ --dt-row-selected: #{$selected-color};
+ --dt-row-selected-text: #{$default-color};
+
tr.selected {
td {
background-color: $selected-color !important;
@@ -203,10 +227,10 @@ table#novel-list {
}
thead {
.sorting_asc {
- @include dataTableSortingHeader("/resources/sort_asc.png");
+ @include dataTableSortingHeader("/resources/images/sort_asc.png");
}
.sorting_desc {
- @include dataTableSortingHeader("/resources/sort_desc.png");
+ @include dataTableSortingHeader("/resources/images/sort_desc.png");
}
}
/*
@@ -330,6 +354,8 @@ table#novel-list {
// DataTables 共通設定
table.dataTable {
+ background-color: white;
+
th {
text-align: center;
}
@@ -341,6 +367,10 @@ table.dataTable {
background: inherit;
}
}
+
+ tbody {
+ background-color: white;
+ }
}
/*
diff --git a/narou.gemspec b/narou.gemspec
index 0c3a5b6c..7d7a1ac8 100644
--- a/narou.gemspec
+++ b/narou.gemspec
@@ -41,41 +41,44 @@ Gem::Specification.new do |gem|
EOS
gem.post_install_message = install_message.gsub("\t", " ")
- gem.required_ruby_version = ">=2.3.0"
+ gem.required_ruby_version = ">=3.4.0"
gem.files = `git ls-files`.split("\n").reject { |fn| fn =~ %r!^spec/|^"spec! } << Narou.create_git_commit_version
gem.executables = gem.files.grep(%r!^bin/!).map { |f| File.basename(f) }
gem.add_runtime_dependency 'termcolorlight', '~> 1.0', '>= 1.1.1'
- gem.add_runtime_dependency 'rubyzip', '~> 2.3', '>= 2.3.2'
- gem.add_runtime_dependency 'mail', '~> 2.6.0', '>= 2.6.6'
- gem.add_runtime_dependency 'pony', '~> 1', '>= 1.11'
- gem.add_runtime_dependency 'diff-lcs', '~> 1.2', '>= 1.2.5'
- gem.add_runtime_dependency 'sinatra', '~> 2.0', '>= 2.0.8.1'
- gem.add_runtime_dependency 'sinatra-contrib', '~> 2.0', '>= 2.0.8.1'
- gem.add_runtime_dependency 'tilt', '~> 2.0', '>= 2.0.10'
+ gem.add_runtime_dependency 'rubyzip', '~> 3.2', '>= 3.2.0'
+ gem.add_runtime_dependency 'mail', '~> 2.9', '>= 2.9.0'
+ gem.add_runtime_dependency 'pony', '~> 1', '>= 1.13'
+ gem.add_runtime_dependency 'diff-lcs', '~> 1.6', '>= 1.6.2'
+ gem.add_runtime_dependency 'sinatra', '~> 4.2', '>= 4.2.0'
+ gem.add_runtime_dependency 'sinatra-contrib', '~> 4.2', '>= 4.2.0'
+ gem.add_runtime_dependency 'rackup', '~> 2.1'
+ gem.add_runtime_dependency 'puma', '~> 6.4'
+ gem.add_runtime_dependency 'tilt', '~> 2.6', '>= 2.6.1'
gem.add_runtime_dependency 'sassc', '~> 2.4'
- gem.add_runtime_dependency 'ffi', '~> 1.4', '>= 1.4.2'
- gem.add_runtime_dependency 'haml', '>= 5.1.2', '< 6'
- gem.add_runtime_dependency 'memoist', '~> 0.11.0'
+ gem.add_runtime_dependency 'ffi', '~> 1.17', '>= 1.17.2'
+ gem.add_runtime_dependency 'haml', '>= 5.2.2', '< 6'
+ gem.add_runtime_dependency 'memoist', '~> 0.16.2'
gem.add_runtime_dependency 'systemu', '~> 2.6', '>= 2.6.5'
- gem.add_runtime_dependency 'erubi', '~> 1.13'
+ gem.add_runtime_dependency 'erubi', '~> 1.13.1'
gem.add_runtime_dependency 'open_uri_redirections', '~> 0.2', '>= 0.2.1'
- gem.add_runtime_dependency 'activesupport', '>= 6.1', '< 8.0'
- gem.add_runtime_dependency 'unicode-display_width', '~> 1.4'
- gem.add_runtime_dependency 'webrick', '~> 1.7'
- gem.add_runtime_dependency 'psych', '~> 4.0'
+ gem.add_runtime_dependency 'activesupport', '~> 8.0', '>= 8.1.0'
+ gem.add_runtime_dependency 'unicode-display_width', '~> 3.2'
+ gem.add_runtime_dependency 'psych', '~> 5.2'
gem.add_runtime_dependency 'nkf', '~> 0.2.0'
gem.add_runtime_dependency 'csv', '~> 3.3'
- gem.add_runtime_dependency 'rexml', '~> 3.2'
+ gem.add_runtime_dependency 'rexml', '~> 3.4'
+ gem.add_runtime_dependency 'sanitize', '~> 7.0.0'
+ gem.add_runtime_dependency 'bootsnap', '~> 1.18', '>= 1.18.6'
- gem.add_development_dependency 'rspec', '~> 3.10'
+ gem.add_development_dependency 'rspec', '~> 3.13'
gem.add_development_dependency 'rspec-retry', '~> 0.6'
- gem.add_development_dependency 'rspec_junit_formatter', '~> 0.4'
+ gem.add_development_dependency 'rspec_junit_formatter', '~> 0.6'
gem.add_development_dependency 'timecop', '~> 0.9'
- gem.add_development_dependency 'pry', '~> 0.12'
- gem.add_development_dependency 'pry-byebug', '~> 3.8'
- gem.add_development_dependency 'awesome_print', '~> 1.8'
- gem.add_development_dependency 'simplecov', '~> 0.20'
+ gem.add_development_dependency 'pry', '~> 0.15'
+ gem.add_development_dependency 'pry-byebug', '~> 3.11'
+ gem.add_development_dependency 'awesome_print', '~> 1.9'
+ gem.add_development_dependency 'simplecov', '~> 0.22'
end
diff --git a/narou.rb b/narou.rb
index 87da4c13..db5b7342 100644
--- a/narou.rb
+++ b/narou.rb
@@ -1,4 +1,4 @@
-#! /usr/bin/env ruby
+#! /usr/bin/env ruby --yjit
# frozen_string_literal: true
#
@@ -7,6 +7,17 @@
# Copyright 2013 whiteleaf. All rights reserved.
#
+require 'bootsnap'
+Bootsnap.setup(
+ cache_dir: 'tmp/cache', # Path to your cache
+ ignore_directories: [], # Directory names to skip.
+ development_mode: false, # Current working environment, e.g. RACK_ENV, RAILS_ENV, etc
+ load_path_cache: true, # Optimize the LOAD_PATH with a cache
+ compile_cache_iseq: true, # Compile Ruby code into ISeq cache, breaks coverage reporting.
+ compile_cache_yaml: true, # Compile YAML into a cache
+ readonly: true, # Use the caches but don't update them on miss or stale entries.
+)
+
require_relative "lib/extension"
require_relative "lib/extensions/monkey_patches"
require_relative "lib/backtracer"