tdiary 5.5.1 → 5.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (194) hide show
  1. checksums.yaml +4 -4
  2. data/ChangeLog +2 -0
  3. data/Gemfile +2 -1
  4. data/Gemfile.lock +39 -40
  5. data/doc/HOWTO-make-theme.md +3 -3
  6. data/doc/UPGRADE.md +1 -1
  7. data/js/draft.js +152 -52
  8. data/js/image.js +127 -28
  9. data/lib/tdiary/admin.rb +11 -13
  10. data/lib/tdiary/application.rb +2 -7
  11. data/lib/tdiary/author_only_base.rb +78 -9
  12. data/lib/tdiary/base.rb +2 -2
  13. data/lib/tdiary/cgi_adapter.rb +7 -5
  14. data/lib/tdiary/cgi_compat.rb +27 -97
  15. data/lib/tdiary/configuration.rb +4 -0
  16. data/lib/tdiary/core_ext.rb +146 -1
  17. data/lib/tdiary/dispatcher/index_main.rb +5 -23
  18. data/lib/tdiary/dispatcher/update_main.rb +2 -17
  19. data/lib/tdiary/dispatcher.rb +29 -15
  20. data/lib/tdiary/filter/default.rb +2 -2
  21. data/lib/tdiary/filter/spam.rb +2 -2
  22. data/lib/tdiary/filter.rb +1 -1
  23. data/lib/tdiary/plugin/00default.rb +18 -3
  24. data/lib/tdiary/plugin/en/00default.rb +15 -0
  25. data/lib/tdiary/plugin/ja/00default.rb +15 -0
  26. data/lib/tdiary/plugin.rb +1 -1
  27. data/lib/tdiary/rack/error_handler.rb +36 -0
  28. data/lib/tdiary/rack.rb +1 -0
  29. data/lib/tdiary/request.rb +3 -2
  30. data/lib/tdiary/server.rb +25 -3
  31. data/lib/tdiary/version.rb +1 -1
  32. data/lib/tdiary/view.rb +33 -28
  33. data/lib/tdiary/view_helper.rb +10 -2
  34. data/lib/tdiary.rb +6 -1
  35. data/misc/plugin/amazon.rb +37 -11
  36. data/misc/plugin/amazon_rakuten.rb +75 -0
  37. data/misc/plugin/draft.rb +75 -0
  38. data/misc/plugin/en/image.rb +5 -0
  39. data/misc/plugin/en/makerss.rb +4 -0
  40. data/misc/plugin/image.rb +15 -4
  41. data/misc/plugin/ja/makerss.rb +3 -0
  42. data/misc/plugin/makerss.rb +6 -5
  43. data/tdiary.conf.sample +8 -0
  44. data/tdiary.conf.sample-en +8 -0
  45. data/theme/default/default.css +33 -8
  46. data/vendor/bundle/ruby/3.4.0/cache/net-imap-0.6.6.gem +0 -0
  47. data/vendor/bundle/ruby/3.4.0/cache/net-protocol-0.3.0.gem +0 -0
  48. data/vendor/bundle/ruby/3.4.0/cache/rack-3.2.7.gem +0 -0
  49. data/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/cgi-0.5.2/cgi/escape.so +0 -0
  50. data/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/cgi-0.5.2/gem_make.out +6 -6
  51. data/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/date-3.5.1/date_core.so +0 -0
  52. data/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/date-3.5.1/gem_make.out +6 -6
  53. data/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/date-3.5.1/mkmf.log +4 -4
  54. data/vendor/bundle/ruby/3.4.0/gems/cgi-0.5.2/ext/cgi/escape/Makefile +3 -3
  55. data/vendor/bundle/ruby/3.4.0/gems/cgi-0.5.2/lib/cgi/escape.so +0 -0
  56. data/vendor/bundle/ruby/3.4.0/gems/date-3.5.1/ext/date/Makefile +3 -3
  57. data/vendor/bundle/ruby/3.4.0/gems/date-3.5.1/lib/date_core.so +0 -0
  58. data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/Gemfile +3 -4
  59. data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/README.md +1 -1
  60. data/vendor/bundle/ruby/3.4.0/gems/net-imap-0.6.6/Rakefile +24 -0
  61. data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/command_data.rb +62 -92
  62. data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/config/attr_accessors.rb +8 -9
  63. data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/config/attr_inheritance.rb +64 -1
  64. data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/config/attr_version_defaults.rb +1 -4
  65. data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/config.rb +209 -35
  66. data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/connection_state.rb +1 -1
  67. data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/data_encoding.rb +127 -27
  68. data/vendor/bundle/ruby/3.4.0/gems/net-imap-0.6.6/lib/net/imap/errors.rb +372 -0
  69. data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/esearch_result.rb +6 -0
  70. data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/response_data.rb +90 -11
  71. data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/response_parser/parser_utils.rb +14 -23
  72. data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/response_parser.rb +41 -26
  73. data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/response_reader.rb +16 -21
  74. data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/sasl/scram_authenticator.rb +3 -3
  75. data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/search_result.rb +11 -1
  76. data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/sequence_set.rb +620 -312
  77. data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/uidplus_data.rb +2 -63
  78. data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap.rb +279 -162
  79. data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/net-imap.gemspec +1 -1
  80. data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/rakelib/rdoc.rake +1 -18
  81. data/vendor/bundle/ruby/3.4.0/gems/{net-protocol-0.2.2/LICENSE.txt → net-protocol-0.3.0/BSDL} +3 -3
  82. data/vendor/bundle/ruby/3.4.0/gems/net-protocol-0.3.0/COPYING +56 -0
  83. data/vendor/bundle/ruby/3.4.0/gems/{net-protocol-0.2.2 → net-protocol-0.3.0}/lib/net/protocol.rb +58 -4
  84. data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/CHANGELOG.md +54 -1
  85. data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/utils.rb +3 -3
  86. data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/version.rb +1 -1
  87. data/vendor/bundle/ruby/3.4.0/specifications/{net-imap-0.5.15.gemspec → net-imap-0.6.6.gemspec} +4 -4
  88. data/vendor/bundle/ruby/3.4.0/specifications/{net-protocol-0.2.2.gemspec → net-protocol-0.3.0.gemspec} +5 -5
  89. data/vendor/bundle/ruby/3.4.0/specifications/{rack-3.2.6.gemspec → rack-3.2.7.gemspec} +3 -3
  90. data/views/tdiary.rconf +2 -0
  91. metadata +128 -133
  92. data/misc/plugin/amp.rb +0 -118
  93. data/vendor/bundle/ruby/3.4.0/cache/net-imap-0.5.15.gem +0 -0
  94. data/vendor/bundle/ruby/3.4.0/cache/net-protocol-0.2.2.gem +0 -0
  95. data/vendor/bundle/ruby/3.4.0/cache/rack-3.2.6.gem +0 -0
  96. data/vendor/bundle/ruby/3.4.0/gems/net-imap-0.5.15/Rakefile +0 -13
  97. data/vendor/bundle/ruby/3.4.0/gems/net-imap-0.5.15/lib/net/imap/data_lite.rb +0 -226
  98. data/vendor/bundle/ruby/3.4.0/gems/net-imap-0.5.15/lib/net/imap/errors.rb +0 -118
  99. data/vendor/bundle/ruby/3.4.0/gems/net-protocol-0.2.2/Gemfile +0 -7
  100. data/vendor/bundle/ruby/3.4.0/gems/net-protocol-0.2.2/Rakefile +0 -10
  101. data/vendor/bundle/ruby/3.4.0/gems/net-protocol-0.2.2/bin/console +0 -14
  102. data/vendor/bundle/ruby/3.4.0/gems/net-protocol-0.2.2/bin/setup +0 -8
  103. data/vendor/bundle/ruby/3.4.0/gems/net-protocol-0.2.2/net-protocol.gemspec +0 -33
  104. data/views/amp.rhtml +0 -34
  105. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/BSDL +0 -0
  106. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/COPYING +0 -0
  107. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/LICENSE.txt +0 -0
  108. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/docs/styles.css +0 -0
  109. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/authenticators.rb +0 -0
  110. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/config/attr_type_coercion.rb +0 -0
  111. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/deprecated_client_options.rb +0 -0
  112. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/fetch_data.rb +0 -0
  113. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/flags.rb +0 -0
  114. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/sasl/anonymous_authenticator.rb +0 -0
  115. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/sasl/authentication_exchange.rb +0 -0
  116. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/sasl/authenticators.rb +0 -0
  117. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/sasl/client_adapter.rb +0 -0
  118. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/sasl/cram_md5_authenticator.rb +0 -0
  119. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/sasl/digest_md5_authenticator.rb +0 -0
  120. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/sasl/external_authenticator.rb +0 -0
  121. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/sasl/gs2_header.rb +0 -0
  122. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/sasl/login_authenticator.rb +0 -0
  123. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/sasl/oauthbearer_authenticator.rb +0 -0
  124. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/sasl/plain_authenticator.rb +0 -0
  125. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/sasl/protocol_adapters.rb +0 -0
  126. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/sasl/scram_algorithm.rb +0 -0
  127. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/sasl/stringprep.rb +0 -0
  128. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/sasl/xoauth2_authenticator.rb +0 -0
  129. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/sasl.rb +0 -0
  130. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/sasl_adapter.rb +0 -0
  131. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/stringprep/nameprep.rb +0 -0
  132. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/stringprep/saslprep.rb +0 -0
  133. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/stringprep/saslprep_tables.rb +0 -0
  134. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/stringprep/tables.rb +0 -0
  135. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/stringprep/trace.rb +0 -0
  136. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/stringprep.rb +0 -0
  137. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/vanished_data.rb +0 -0
  138. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/rakelib/benchmarks.rake +0 -0
  139. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/rakelib/rfcs.rake +0 -0
  140. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/rakelib/saslprep.rake +0 -0
  141. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/rakelib/string_prep_tables_generator.rb +0 -0
  142. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/sample/net-imap.rb +0 -0
  143. /data/vendor/bundle/ruby/3.4.0/gems/{net-protocol-0.2.2 → net-protocol-0.3.0}/README.md +0 -0
  144. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/CONTRIBUTING.md +0 -0
  145. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/MIT-LICENSE +0 -0
  146. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/README.md +0 -0
  147. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/SPEC.rdoc +0 -0
  148. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/auth/abstract/handler.rb +0 -0
  149. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/auth/abstract/request.rb +0 -0
  150. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/auth/basic.rb +0 -0
  151. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/bad_request.rb +0 -0
  152. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/body_proxy.rb +0 -0
  153. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/builder.rb +0 -0
  154. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/cascade.rb +0 -0
  155. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/common_logger.rb +0 -0
  156. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/conditional_get.rb +0 -0
  157. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/config.rb +0 -0
  158. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/constants.rb +0 -0
  159. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/content_length.rb +0 -0
  160. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/content_type.rb +0 -0
  161. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/deflater.rb +0 -0
  162. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/directory.rb +0 -0
  163. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/etag.rb +0 -0
  164. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/events.rb +0 -0
  165. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/files.rb +0 -0
  166. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/head.rb +0 -0
  167. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/headers.rb +0 -0
  168. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/lint.rb +0 -0
  169. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/lock.rb +0 -0
  170. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/media_type.rb +0 -0
  171. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/method_override.rb +0 -0
  172. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/mime.rb +0 -0
  173. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/mock.rb +0 -0
  174. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/mock_request.rb +0 -0
  175. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/mock_response.rb +0 -0
  176. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/multipart/generator.rb +0 -0
  177. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/multipart/parser.rb +0 -0
  178. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/multipart/uploaded_file.rb +0 -0
  179. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/multipart.rb +0 -0
  180. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/null_logger.rb +0 -0
  181. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/query_parser.rb +0 -0
  182. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/recursive.rb +0 -0
  183. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/reloader.rb +0 -0
  184. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/request.rb +0 -0
  185. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/response.rb +0 -0
  186. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/rewindable_input.rb +0 -0
  187. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/runtime.rb +0 -0
  188. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/sendfile.rb +0 -0
  189. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/show_exceptions.rb +0 -0
  190. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/show_status.rb +0 -0
  191. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/static.rb +0 -0
  192. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/tempfile_reaper.rb +0 -0
  193. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/urlmap.rb +0 -0
  194. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack.rb +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f1b4744d343480c08b943bde469915fa83f6819440ca413f18ddefba0c862174
4
- data.tar.gz: b8edbc8bde908cfc678f8e8f7772380d10cc813ee74e3a7079c07b69da667282
3
+ metadata.gz: 0152dd908530b141b305017532d2fdbee7d61cacb8eeb955e7da169504b68604
4
+ data.tar.gz: 0ad54ddca02502bae29ba3d69cf7b972c6ecd5c4cec62800f21600f98d016a62
5
5
  SHA512:
6
- metadata.gz: 0e64e1bfbf4571788070a450d5887938ec424abdf7eed170b6c26adcad0c2faf04f8f411c8415fc8fdf1a3af946533e8ecf0737cf8b199ab2c5570eb2a105f6b
7
- data.tar.gz: 24391decec11f8925375a9c564c25511ddaebaee602e8117b362f8307ca7fc5f54f54ad5f23060941c351f6cd4b190b59c38f7b60bf269bf541f25d9fedf5ed5
6
+ metadata.gz: 8d1655ec19c3d0079bd353cbd83593d5ecacbe15d75087daf08d9ecc5b747e4fc5ec61297dbd3a5722dcadc89c6a85745f2a6e7497cf0ac390daf3cd9b4ca6dd
7
+ data.tar.gz: 8192a8f3fe135f261f3cb942addf64bf6aabc8b9300fe6102e71053105c87f6ff73457e7e98ca9d60a677289011399327552a6d433951e30fa8fc53256854519
data/ChangeLog CHANGED
@@ -1,3 +1,5 @@
1
+ This ChangeLog is no longer updated. Changes in 5.5.0 and later are recorded in the release notes at https://github.com/tdiary/tdiary-core/releases.
2
+
1
3
  2025-06-13 Hiroshi SHIBATA <hsbt@ruby-lang.org>
2
4
  * support Ruby 3.4.
3
5
  * drop to support Ruby 3.0.
data/Gemfile CHANGED
@@ -12,6 +12,7 @@ gem 'mail'
12
12
  gem 'rake'
13
13
  gem 'cgi'
14
14
  gem 'pstore'
15
+ gem 'logger'
15
16
 
16
17
  group :development do
17
18
  gem 'pit', require: false
@@ -24,7 +25,7 @@ group :development do
24
25
  gem 'rspec'
25
26
  gem 'capybara', require: 'capybara/rspec'
26
27
  gem 'date', '>= 3.1.1' # for compatibility of capybara
27
- gem 'selenium-webdriver', '< 4.45' # 4.45+ requires Ruby >= 3.3
28
+ gem 'cuprite'
28
29
  gem 'launchy'
29
30
  gem 'sequel'
30
31
  gem 'sqlite3'
data/Gemfile.lock CHANGED
@@ -1,8 +1,8 @@
1
1
  GIT
2
2
  remote: https://github.com/tdiary/tdiary-contrib.git
3
- revision: b4fa12059634cfb6cea6e1a7d1b1d6341bd4024b
3
+ revision: 1c265fc47175dbe7573b166fc865b5893036c771
4
4
  specs:
5
- tdiary-contrib (5.4.0)
5
+ tdiary-contrib (5.6.0)
6
6
  coderay
7
7
  holiday_japan
8
8
  pushbullet_ruby
@@ -69,17 +69,24 @@ GEM
69
69
  commonmarker (2.9.0-x86_64-linux-musl)
70
70
  concurrent-ruby (1.3.8)
71
71
  connection_pool (3.0.2)
72
- dalli (5.0.5)
72
+ cuprite (0.18)
73
+ capybara (~> 3.0)
74
+ ferrum (~> 0.18.0)
75
+ dalli (5.1.1)
73
76
  logger
74
77
  date (3.5.1)
75
78
  diff-lcs (1.6.2)
76
- docile (1.4.1)
77
79
  drb (2.2.3)
78
80
  emot (0.0.4)
79
81
  thor
80
82
  faraday (0.17.6)
81
83
  multipart-post (>= 1.2, < 3)
82
84
  fastimage (2.4.1)
85
+ ferrum (0.18.0)
86
+ addressable (~> 2.5)
87
+ base64 (~> 0.2)
88
+ concurrent-ruby (~> 1.1)
89
+ websocket-driver (~> 0.7)
83
90
  hashie (5.1.0)
84
91
  logger
85
92
  hikidoc (0.1.1)
@@ -100,12 +107,12 @@ GEM
100
107
  net-imap
101
108
  net-pop
102
109
  net-smtp
103
- matrix (0.4.2)
110
+ matrix (0.4.3)
104
111
  memcachier (0.0.2)
105
112
  mime-types (3.7.0)
106
113
  logger
107
114
  mime-types-data (~> 3.2025, >= 3.2025.0507)
108
- mime-types-data (3.2025.0603)
115
+ mime-types-data (3.2026.0701)
109
116
  mini_mime (1.1.5)
110
117
  mini_portile2 (2.8.9)
111
118
  minitest (6.0.6)
@@ -122,12 +129,12 @@ GEM
122
129
  bigdecimal (>= 3.1, < 5)
123
130
  multipart-post (2.4.1)
124
131
  mutex_m (0.3.0)
125
- net-imap (0.5.15)
132
+ net-imap (0.6.6)
126
133
  date
127
134
  net-protocol
128
135
  net-pop (0.1.2)
129
136
  net-protocol
130
- net-protocol (0.2.2)
137
+ net-protocol (0.3.0)
131
138
  timeout
132
139
  net-smtp (0.5.1)
133
140
  net-protocol
@@ -184,7 +191,7 @@ GEM
184
191
  faraday (>= 0.13.0, < 1.0)
185
192
  mime-types
186
193
  racc (1.8.1)
187
- rack (3.2.6)
194
+ rack (3.2.7)
188
195
  rack-protection (4.2.1)
189
196
  base64 (>= 0.1.0)
190
197
  logger (>= 1.6.0)
@@ -206,7 +213,7 @@ GEM
206
213
  rdtool (0.6.39)
207
214
  nkf (>= 0.1, < 1.0)
208
215
  redcarpet (3.6.1)
209
- regexp_parser (2.10.0)
216
+ regexp_parser (2.12.0)
210
217
  rexml (3.4.4)
211
218
  rspec (3.13.2)
212
219
  rspec-core (~> 3.13.0)
@@ -222,44 +229,32 @@ GEM
222
229
  rspec-support (~> 3.13.0)
223
230
  rspec-support (3.13.6)
224
231
  ruby2_keywords (0.0.5)
225
- rubyzip (2.4.1)
226
232
  securerandom (0.4.1)
227
- selenium-webdriver (4.33.0)
228
- base64 (~> 0.2)
229
- logger (~> 1.4)
230
- rexml (~> 3.2, >= 3.2.5)
231
- rubyzip (>= 1.2.2, < 3.0)
232
- websocket (~> 1.0)
233
- sequel (5.106.0)
233
+ sequel (5.108.0)
234
234
  bigdecimal
235
- simplecov (0.22.0)
236
- docile (~> 1.1)
237
- simplecov-html (~> 0.11)
238
- simplecov_json_formatter (~> 0.1)
239
- simplecov-html (0.13.1)
240
- simplecov_json_formatter (0.1.4)
235
+ simplecov (1.3.1)
241
236
  snaky_hash (2.0.7)
242
237
  hashie (>= 0.1.0, < 6)
243
238
  version_gem (~> 1.1, >= 1.1.14)
244
- sqlite3 (2.8.1)
239
+ sqlite3 (2.9.6)
245
240
  mini_portile2 (~> 2.8.0)
246
- sqlite3 (2.8.1-aarch64-linux-gnu)
247
- sqlite3 (2.8.1-aarch64-linux-musl)
248
- sqlite3 (2.8.1-arm-linux-gnu)
249
- sqlite3 (2.8.1-arm-linux-musl)
250
- sqlite3 (2.8.1-arm64-darwin)
251
- sqlite3 (2.8.1-x86-linux-gnu)
252
- sqlite3 (2.8.1-x86-linux-musl)
253
- sqlite3 (2.8.1-x86_64-darwin)
254
- sqlite3 (2.8.1-x86_64-linux-gnu)
255
- sqlite3 (2.8.1-x86_64-linux-musl)
256
- tdiary (5.4.0)
257
- bundler (>= 2.6, < 3.0)
241
+ sqlite3 (2.9.6-aarch64-linux-gnu)
242
+ sqlite3 (2.9.6-aarch64-linux-musl)
243
+ sqlite3 (2.9.6-arm-linux-gnu)
244
+ sqlite3 (2.9.6-arm-linux-musl)
245
+ sqlite3 (2.9.6-arm64-darwin)
246
+ sqlite3 (2.9.6-x86-linux-gnu)
247
+ sqlite3 (2.9.6-x86-linux-musl)
248
+ sqlite3 (2.9.6-x86_64-darwin)
249
+ sqlite3 (2.9.6-x86_64-linux-gnu)
250
+ sqlite3 (2.9.6-x86_64-linux-musl)
251
+ tdiary (5.6.0)
252
+ cgi
258
253
  emot
259
254
  fastimage
260
255
  hikidoc
261
256
  mail
262
- nkf
257
+ pstore
263
258
  rack
264
259
  rake
265
260
  rexml
@@ -285,7 +280,10 @@ GEM
285
280
  unf_ext (0.0.9.1)
286
281
  version_gem (1.1.14)
287
282
  webrick (1.9.2)
288
- websocket (1.2.11)
283
+ websocket-driver (0.8.2)
284
+ base64
285
+ websocket-extensions (>= 0.1.0)
286
+ websocket-extensions (0.1.5)
289
287
  xpath (3.2.0)
290
288
  nokogiri (~> 1.8)
291
289
 
@@ -311,12 +309,14 @@ DEPENDENCIES
311
309
  capybara
312
310
  cgi
313
311
  connection_pool
312
+ cuprite
314
313
  dalli
315
314
  date (>= 3.1.1)
316
315
  emot
317
316
  fastimage
318
317
  hikidoc
319
318
  launchy
319
+ logger
320
320
  mail
321
321
  memcachier
322
322
  mime-types
@@ -334,7 +334,6 @@ DEPENDENCIES
334
334
  redcarpet
335
335
  rexml
336
336
  rspec
337
- selenium-webdriver (< 4.45)
338
337
  sequel
339
338
  simplecov
340
339
  sqlite3
@@ -36,7 +36,7 @@ tDiaryテーマには、以下のような基本的な約束事があります
36
36
  テーマ・ギャラリー用の説明
37
37
  -------------
38
38
 
39
- tDiary.Netには、[テーマ・ギャラリー](http://www.tdiary.org/20021001.html)というページがあります。テーマ集に登録されたテーマはここでスクリーンショットともども一覧することができます。ここに表示されている作者名やコメントは、テーマ付属のREADME(1.4の時の名残でcssファイルも利用されている)に一定のフォーマットで書かれているものを自動的に抜き出しているものです。
39
+ テーマ集に登録されたテーマは、[テーマ・ギャラリー](https://github.com/tdiary/tdiary-theme)で一覧できます。テーマ集のテーマには、作者名やコメントを一定のフォーマットで書いたREADMEが付いています。
40
40
 
41
41
  最初からこのフォーマットで書いておくと、テーマ集に入った時に見栄えがします。以下にそのフォーマットについて解説します。
42
42
 
@@ -50,7 +50,7 @@ Comment: 四つ葉のクローバーの葉をあしらった、シンプルで
50
50
 
51
51
  この説明は、READMEの最初の行から記述します。「キー」と「値」を「: 」で挟んだ形式で、1項目1行で書きます。日本語を書くときは、文字コードをUTF-8にして下さい。英語の説明があれば、README.enというファイルにしてください。
52
52
 
53
- 各項目の意味は以下のとおりです。なお、現在ギャラリーで利用されている項目はTitle、Author、License、Commentだけです。
53
+ 各項目の意味は以下のとおりです。
54
54
 
55
55
  - Title: テーマのタイトルです。ファイル名だけでは味気ないと思ったら、この項目を書いてください。なくてもかまいません。
56
56
  - Author: 作者名
@@ -63,5 +63,5 @@ Comment: 四つ葉のクローバーの葉をあしらった、シンプルで
63
63
  テーマ・テストベンチ
64
64
  ----------
65
65
 
66
- テーマの見え方を確認するための、[テストベンチ](http://www.tdiary.org/theme.sample.html)というページがあります。ギャラリーのスクリーンショットと異なり、こちらでは様々なエレメントの見え方や、代表的なプラグインの表示を確認することができます。テーマ作成時に利用してください。
66
+ テーマの見え方を確認するための、[テストベンチ](https://tdiary.org/tdiary-theme/themebench.html)というページがあります。こちらでは様々なエレメントの見え方や、代表的なプラグインの表示を確認することができます。テーマ作成時に利用してください。
67
67
 
data/doc/UPGRADE.md CHANGED
@@ -4,7 +4,7 @@
4
4
  このドキュメントについて
5
5
  --
6
6
 
7
- tDiaryは、バージョン番号が「X.Y.Z」の形式のものがリリースバージョン、その後ろに「.YYYYMMDD」形式で日付が入っているものが開発バージョンとなっています。このドキュメントでは、リリースバージョン間の変更点について解説します。開発バージョンを使っている場合は、ChangeLogファイルを参照してください。
7
+ tDiaryは、バージョン番号が「X.Y.Z」の形式のものがリリースバージョン、その後ろに「.YYYYMMDD」形式で日付が入っているものが開発バージョンとなっています。このドキュメントでは、リリースバージョン間の変更点について解説します。開発バージョンを使っている場合は、[GitHub Releases](https://github.com/tdiary/tdiary-core/releases)を参照してください。
8
8
 
9
9
  4.0と5.0の違い
10
10
  -----
data/js/draft.js CHANGED
@@ -1,6 +1,7 @@
1
1
  /*
2
2
  * draft.js: save draft data to Web Storage automatically
3
- *
3
+ * and keep a copy of them on the server
4
+ *
4
5
  * Copyright (c) MATSUOKA Kohei <http://www.machu.jp/>
5
6
  * Distributed under the GPL2 or any later version.
6
7
  */
@@ -8,70 +9,122 @@ $(function() {
8
9
 
9
10
  if (!localStorage) { return; }
10
11
 
11
- var Draft = function(storage, text) {
12
+ var Draft = function(storage, text, server) {
12
13
  // 保存先のストレージ
13
14
  this.storage = storage;
14
15
  // 下書きの保存件数
15
- this.maxCount = 10;
16
+ this.maxCount = server.max;
16
17
  // 下書き一覧
17
18
  this.items = [];
18
-
19
- this.initialize(text);
19
+ // このページで編集している下書きの ID
20
+ this.current = null;
21
+ // 最後に保存したテキストエリアの内容
22
+ this.text = text;
23
+ // サーバーにある下書きの ID と更新日時
24
+ this.synced = {};
25
+
26
+ this.initialize(text, server);
20
27
  };
21
28
 
22
29
  Draft.prototype = {
23
- // ローカルストレージから下書きを読み込む
24
- initialize: function(text) {
25
- this.items = this.storage.drafts ? JSON.parse(this.storage.drafts) : new Array();
26
- // 下書きに空の日記・テキストエリアと同じ日記が存在すれば削除する
27
- this.items = $.grep(this.items, function(item, index) {
28
- // 改行と空白文字を無視して比較(プレビュー時に末尾へ改行が付加されるため)
29
- if (item.value == "" || DraftUtils.trim(item.value) == DraftUtils.trim(text)) {
30
- return false;
30
+ // ローカルストレージの下書きにサーバーの下書きを統合する
31
+ initialize: function(text, server) {
32
+ var items = this.storage.drafts ? JSON.parse(this.storage.drafts) : new Array();
33
+ var synced = this.synced;
34
+ $.each(items, function(index, item) {
35
+ if (!item.id) { item.id = DraftUtils.newId(); }
36
+ });
37
+ $.each(server.drafts, function(index, remote) {
38
+ synced[remote.id] = remote.date;
39
+ var local = DraftUtils.find(items, remote.id);
40
+ if (!local) {
41
+ items.push(remote);
42
+ } else if (local.date < remote.date) {
43
+ local.date = remote.date;
44
+ local.value = remote.value;
31
45
  }
32
- return true;
33
46
  });
34
- this.save(text, true);
47
+ // 空の下書きと、日記として投稿済みの下書きを削除する
48
+ this.items = $.grep(items, function(item) {
49
+ return typeof item.value == "string" && DraftUtils.trim(item.value) != "" &&
50
+ $.inArray(item.id, server.deleted) < 0;
51
+ });
52
+ this.truncate();
53
+ // テキストエリアと同じ下書きがあれば、それを続けて編集する
54
+ // 改行と空白文字を無視して比較(プレビュー時に末尾へ改行が付加されるため)
55
+ var trimmed = DraftUtils.trim(text);
56
+ var same = $.grep(this.items, function(item) {
57
+ return DraftUtils.trim(item.value) == trimmed;
58
+ });
59
+ if (trimmed != "" && same.length > 0) {
60
+ this.current = same.pop().id;
61
+ }
62
+ this.store();
35
63
  // console.log("Draft.initialized");
36
64
  },
37
65
 
38
- // ローカルストレージに下書きを保存する
39
- // append が true の場合は、下書き一覧の末尾に追加する
40
- // append が false の場合は、最後の下書きに上書きする
41
- save: function(text, append) {
42
- if (!append) {
43
- this.items.pop();
44
- }
45
- this.items.push({
46
- date: new Date().getTime(),
47
- value: text
48
- });
49
- // 最大でmaxCount件数の履歴を保持
50
- if (this.items.length > this.maxCount) {
51
- this.items.shift();
66
+ // 編集している下書きを更新する
67
+ // テキストエリアの内容が変わっていなければ何もしない
68
+ save: function(text) {
69
+ if (text == this.text) { return; }
70
+ this.text = text;
71
+ if (DraftUtils.trim(text) == "") { return; }
72
+ var item = DraftUtils.find(this.items, this.current);
73
+ if (item) {
74
+ this.items.splice($.inArray(item, this.items), 1);
75
+ } else {
76
+ item = { id: DraftUtils.newId() };
77
+ this.current = item.id;
52
78
  }
53
- this.storage.drafts = JSON.stringify(this.items);
79
+ item.date = new Date().getTime();
80
+ item.value = text;
81
+ this.items.push(item);
82
+ this.truncate();
83
+ this.store();
54
84
  },
55
85
 
56
- // 下書き一覧から index 番目の下書きを取得する
57
- // 取得した下書きは一覧の末尾に移動する
58
- load: function(index) {
59
- var item = this.items.splice(index, 1)[0];
60
- this.items.push(item);
86
+ // 指定した下書きを読み込み、それを続けて編集する
87
+ load: function(id) {
88
+ var item = DraftUtils.find(this.items, id);
89
+ if (!item) { return null; }
90
+ this.current = item.id;
91
+ this.text = item.value;
61
92
  return item.value;
62
93
  },
63
94
 
64
- // 下書きのタイトル一覧の配列を返す(表示用)
95
+ // サーバーにまだ無い版の下書き一覧を返す
96
+ pending: function() {
97
+ var synced = this.synced;
98
+ return $.grep(this.items, function(item) {
99
+ return !(synced[item.id] >= item.date);
100
+ });
101
+ },
102
+
103
+ // サーバーへ保存した下書きを記録する
104
+ markSynced: function(items) {
105
+ var synced = this.synced;
106
+ $.each(items, function(index, item) {
107
+ synced[item.id] = item.date;
108
+ });
109
+ },
110
+
111
+ // 最大でmaxCount件数の履歴を保持
112
+ truncate: function() {
113
+ this.items.sort(function(a, b) { return a.date - b.date; });
114
+ this.items = this.items.slice(-this.maxCount);
115
+ },
116
+
117
+ store: function() {
118
+ this.storage.drafts = JSON.stringify(this.items);
119
+ },
120
+
121
+ // 下書きの ID とタイトルの一覧を返す(表示用)
65
122
  // タイトルは textarea の先頭1行目 + 更新日時
66
123
  titles: function() {
67
124
  return $.map(this.items, function(item) {
68
- var date = new Date(item.date);
69
- date = DraftUtils.dateToString(date);
70
- var title = "No-Name";
71
- if (item.value && typeof item.value == "string") {
72
- title = item.value.match(/.*/)[0];
73
- }
74
- return title + " (" + date + ")";
125
+ var date = DraftUtils.dateToString(new Date(item.date));
126
+ var title = item.value.match(/.*/)[0] || "No-Name";
127
+ return { id: item.id, title: title + " (" + date + ")" };
75
128
  });
76
129
  }
77
130
 
@@ -99,6 +152,13 @@ var DraftUtils = {
99
152
  // 文字列から改行と空白文字を取り除く
100
153
  trim: function(str) {
101
154
  return str.replace(/\s+/g, "");
155
+ },
156
+ // 下書きの ID を作る(サーバーが受け付けるのは英小文字と数字のみ)
157
+ newId: function() {
158
+ return new Date().getTime().toString(36) + Math.random().toString(36).slice(2, 10);
159
+ },
160
+ find: function(items, id) {
161
+ return $.grep(items, function(item) { return item.id == id; })[0];
102
162
  }
103
163
  };
104
164
 
@@ -108,12 +168,17 @@ var DraftUtils = {
108
168
 
109
169
  // 保存対象のテキストエリア
110
170
  var textarea = $("[name=body]");
171
+ // 日記の更新フォーム
172
+ var form = textarea.closest("form");
111
173
  // 下書き一覧を表示するセレクトボックス
112
174
  var select = $("[name=drafts]");
113
175
  // 自動保存の間隔(ミリ秒)
114
176
  var autoSaveInterval = 5 * 1000;
177
+ // サーバーへ保存する間隔(ミリ秒)
178
+ var syncInterval = $tDiary.plugin.draft.interval * 1000;
115
179
 
116
- var draft = new Draft(localStorage, textarea.val());
180
+ var draft = new Draft(localStorage, textarea.val(), $tDiary.plugin.draft.server);
181
+ var syncing = false;
117
182
 
118
183
  // 下書き保存
119
184
  saveDraft = function() {
@@ -122,26 +187,61 @@ saveDraft = function() {
122
187
  };
123
188
  // 下書き読み込み
124
189
  loadDraft = function() {
125
- textarea.val(draft.load(select.val()));
190
+ var value = draft.load(select.val());
191
+ if (value != null) {
192
+ textarea.val(value);
193
+ }
126
194
  showSelectForm(false);
127
195
  };
196
+ // サーバーに無い下書きをサーバーへ保存
197
+ syncDraft = function(keepalive) {
198
+ var items = $.map(draft.pending(), function(item) {
199
+ return { id: item.id, date: item.date, value: item.value };
200
+ });
201
+ if (syncing || items.length == 0) { return; }
202
+ var params = new URLSearchParams();
203
+ params.append("plugin", "draft");
204
+ params.append("plugin_draft_sync", JSON.stringify(items));
205
+ form.find("[name=csrf_protection_key]").each(function() {
206
+ params.append("csrf_protection_key", $(this).val());
207
+ });
208
+ syncing = true;
209
+ fetch(form.attr("action"), { method: "POST", body: params, keepalive: keepalive })
210
+ .then(function(response) {
211
+ if (response.ok) { draft.markSynced(items); }
212
+ }, function() {})
213
+ .then(function() { syncing = false; });
214
+ };
128
215
  // 下書き選択用のセレクトボックスを描画
129
- showSelectForm = function(keepIndex) {
130
- var index = select.val();
216
+ showSelectForm = function(keepSelection) {
217
+ var selected = select.val();
131
218
  select.empty();
132
- $.each(draft.titles(), function(i, title) {
133
- select.append($("<option/>").attr("value", i).text(title));
134
- select.val(i);
219
+ $.each(draft.titles(), function(i, item) {
220
+ select.append($("<option/>").attr("value", item.id).text(item.title));
135
221
  });
136
- if (keepIndex) {
137
- select.val(index);
222
+ if (!(keepSelection && selected)) {
223
+ selected = draft.current || select.children().last().val();
138
224
  }
225
+ select.val(selected);
139
226
  };
140
227
 
141
228
  // DOMイベント設定
142
229
  $("#draft_load").click(loadDraft);
143
230
  setInterval(saveDraft, autoSaveInterval);
231
+ setInterval(function() { syncDraft(false); }, syncInterval);
144
232
  textarea.change(saveDraft);
233
+ // タブを閉じる・切り替える前に保存する
234
+ $(document).on("visibilitychange", function() {
235
+ if (document.visibilityState == "hidden") {
236
+ saveDraft();
237
+ syncDraft(true);
238
+ }
239
+ });
240
+ // 日記として投稿する下書きをサーバーに知らせる
241
+ form.submit(function() {
242
+ saveDraft();
243
+ $("[name=plugin_draft_id]").val(draft.current || "");
244
+ });
145
245
 
146
246
  showSelectForm(false);
147
247
  // console.log("ready");