focomy 0.1.120__tar.gz → 0.1.121__tar.gz

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 (212) hide show
  1. {focomy-0.1.120 → focomy-0.1.121}/PKG-INFO +1 -1
  2. {focomy-0.1.120 → focomy-0.1.121}/pyproject.toml +1 -1
  3. {focomy-0.1.120 → focomy-0.1.121}/themes/default/templates/base.html +159 -0
  4. {focomy-0.1.120 → focomy-0.1.121}/.gitignore +0 -0
  5. {focomy-0.1.120 → focomy-0.1.121}/LICENSE +0 -0
  6. {focomy-0.1.120 → focomy-0.1.121}/README.md +0 -0
  7. {focomy-0.1.120 → focomy-0.1.121}/core/__init__.py +0 -0
  8. {focomy-0.1.120 → focomy-0.1.121}/core/admin/__init__.py +0 -0
  9. {focomy-0.1.120 → focomy-0.1.121}/core/admin/routes.py +0 -0
  10. {focomy-0.1.120 → focomy-0.1.121}/core/admin/url.py +0 -0
  11. {focomy-0.1.120 → focomy-0.1.121}/core/api/__init__.py +0 -0
  12. {focomy-0.1.120 → focomy-0.1.121}/core/api/auth.py +0 -0
  13. {focomy-0.1.120 → focomy-0.1.121}/core/api/comments.py +0 -0
  14. {focomy-0.1.120 → focomy-0.1.121}/core/api/entities.py +0 -0
  15. {focomy-0.1.120 → focomy-0.1.121}/core/api/forms.py +0 -0
  16. {focomy-0.1.120 → focomy-0.1.121}/core/api/media.py +0 -0
  17. {focomy-0.1.120 → focomy-0.1.121}/core/api/relations.py +0 -0
  18. {focomy-0.1.120 → focomy-0.1.121}/core/api/revisions.py +0 -0
  19. {focomy-0.1.120 → focomy-0.1.121}/core/api/schema.py +0 -0
  20. {focomy-0.1.120 → focomy-0.1.121}/core/api/search.py +0 -0
  21. {focomy-0.1.120 → focomy-0.1.121}/core/api/seo.py +0 -0
  22. {focomy-0.1.120 → focomy-0.1.121}/core/cli.py +0 -0
  23. {focomy-0.1.120 → focomy-0.1.121}/core/config.py +0 -0
  24. {focomy-0.1.120 → focomy-0.1.121}/core/content_types/__init__.py +0 -0
  25. {focomy-0.1.120 → focomy-0.1.121}/core/content_types/audit_log.yaml +0 -0
  26. {focomy-0.1.120 → focomy-0.1.121}/core/content_types/category.yaml +0 -0
  27. {focomy-0.1.120 → focomy-0.1.121}/core/content_types/channel.yaml +0 -0
  28. {focomy-0.1.120 → focomy-0.1.121}/core/content_types/comment.yaml +0 -0
  29. {focomy-0.1.120 → focomy-0.1.121}/core/content_types/edit_lock.yaml +0 -0
  30. {focomy-0.1.120 → focomy-0.1.121}/core/content_types/form.yaml +0 -0
  31. {focomy-0.1.120 → focomy-0.1.121}/core/content_types/form_submission.yaml +0 -0
  32. {focomy-0.1.120 → focomy-0.1.121}/core/content_types/menu_item.yaml +0 -0
  33. {focomy-0.1.120 → focomy-0.1.121}/core/content_types/news.yaml +0 -0
  34. {focomy-0.1.120 → focomy-0.1.121}/core/content_types/page.yaml +0 -0
  35. {focomy-0.1.120 → focomy-0.1.121}/core/content_types/plugin.yaml +0 -0
  36. {focomy-0.1.120 → focomy-0.1.121}/core/content_types/plugin_developer.yaml +0 -0
  37. {focomy-0.1.120 → focomy-0.1.121}/core/content_types/plugin_review.yaml +0 -0
  38. {focomy-0.1.120 → focomy-0.1.121}/core/content_types/post.yaml +0 -0
  39. {focomy-0.1.120 → focomy-0.1.121}/core/content_types/redirect.yaml +0 -0
  40. {focomy-0.1.120 → focomy-0.1.121}/core/content_types/scheduled_action.yaml +0 -0
  41. {focomy-0.1.120 → focomy-0.1.121}/core/content_types/series.yaml +0 -0
  42. {focomy-0.1.120 → focomy-0.1.121}/core/content_types/site_setting.yaml +0 -0
  43. {focomy-0.1.120 → focomy-0.1.121}/core/content_types/tag.yaml +0 -0
  44. {focomy-0.1.120 → focomy-0.1.121}/core/content_types/user.yaml +0 -0
  45. {focomy-0.1.120 → focomy-0.1.121}/core/content_types/widget.yaml +0 -0
  46. {focomy-0.1.120 → focomy-0.1.121}/core/content_types/workflow_history.yaml +0 -0
  47. {focomy-0.1.120 → focomy-0.1.121}/core/database.py +0 -0
  48. {focomy-0.1.120 → focomy-0.1.121}/core/engine/__init__.py +0 -0
  49. {focomy-0.1.120 → focomy-0.1.121}/core/engine/routes.py +0 -0
  50. {focomy-0.1.120 → focomy-0.1.121}/core/main.py +0 -0
  51. {focomy-0.1.120 → focomy-0.1.121}/core/migrations/env.py +0 -0
  52. {focomy-0.1.120 → focomy-0.1.121}/core/migrations/script.py.mako +0 -0
  53. {focomy-0.1.120 → focomy-0.1.121}/core/migrations/versions/2038bdf6693b_add_import_jobs_table.py +0 -0
  54. {focomy-0.1.120 → focomy-0.1.121}/core/migrations/versions/3a1b2c3d4e5f_add_file_hash_to_media.py +0 -0
  55. {focomy-0.1.120 → focomy-0.1.121}/core/models/__init__.py +0 -0
  56. {focomy-0.1.120 → focomy-0.1.121}/core/models/auth.py +0 -0
  57. {focomy-0.1.120 → focomy-0.1.121}/core/models/entity.py +0 -0
  58. {focomy-0.1.120 → focomy-0.1.121}/core/models/import_job.py +0 -0
  59. {focomy-0.1.120 → focomy-0.1.121}/core/models/media.py +0 -0
  60. {focomy-0.1.120 → focomy-0.1.121}/core/models/relation.py +0 -0
  61. {focomy-0.1.120 → focomy-0.1.121}/core/models/revision.py +0 -0
  62. {focomy-0.1.120 → focomy-0.1.121}/core/plugins/__init__.py +0 -0
  63. {focomy-0.1.120 → focomy-0.1.121}/core/plugins/base.py +0 -0
  64. {focomy-0.1.120 → focomy-0.1.121}/core/plugins/hooks.py +0 -0
  65. {focomy-0.1.120 → focomy-0.1.121}/core/plugins/loader.py +0 -0
  66. {focomy-0.1.120 → focomy-0.1.121}/core/plugins/manager.py +0 -0
  67. {focomy-0.1.120 → focomy-0.1.121}/core/rate_limit.py +0 -0
  68. {focomy-0.1.120 → focomy-0.1.121}/core/relations.yaml +0 -0
  69. {focomy-0.1.120 → focomy-0.1.121}/core/scaffold/.env.template +0 -0
  70. {focomy-0.1.120 → focomy-0.1.121}/core/scaffold/.gitignore.template +0 -0
  71. {focomy-0.1.120 → focomy-0.1.121}/core/scaffold/__init__.py +0 -0
  72. {focomy-0.1.120 → focomy-0.1.121}/core/scaffold/config.yaml.template +0 -0
  73. {focomy-0.1.120 → focomy-0.1.121}/core/scaffold/themes/default/templates/archive.html +0 -0
  74. {focomy-0.1.120 → focomy-0.1.121}/core/scaffold/themes/default/templates/base.html +0 -0
  75. {focomy-0.1.120 → focomy-0.1.121}/core/scaffold/themes/default/templates/category.html +0 -0
  76. {focomy-0.1.120 → focomy-0.1.121}/core/scaffold/themes/default/templates/home.html +0 -0
  77. {focomy-0.1.120 → focomy-0.1.121}/core/scaffold/themes/default/templates/post.html +0 -0
  78. {focomy-0.1.120 → focomy-0.1.121}/core/scaffold/themes/default/templates/search.html +0 -0
  79. {focomy-0.1.120 → focomy-0.1.121}/core/scaffold/themes/default/theme.yaml +0 -0
  80. {focomy-0.1.120 → focomy-0.1.121}/core/schemas/__init__.py +0 -0
  81. {focomy-0.1.120 → focomy-0.1.121}/core/schemas/import_schema.py +0 -0
  82. {focomy-0.1.120 → focomy-0.1.121}/core/seo/__init__.py +0 -0
  83. {focomy-0.1.120 → focomy-0.1.121}/core/services/__init__.py +0 -0
  84. {focomy-0.1.120 → focomy-0.1.121}/core/services/api_auth.py +0 -0
  85. {focomy-0.1.120 → focomy-0.1.121}/core/services/assets.py +0 -0
  86. {focomy-0.1.120 → focomy-0.1.121}/core/services/audit.py +0 -0
  87. {focomy-0.1.120 → focomy-0.1.121}/core/services/auth.py +0 -0
  88. {focomy-0.1.120 → focomy-0.1.121}/core/services/block_converter.py +0 -0
  89. {focomy-0.1.120 → focomy-0.1.121}/core/services/bulk.py +0 -0
  90. {focomy-0.1.120 → focomy-0.1.121}/core/services/cache.py +0 -0
  91. {focomy-0.1.120 → focomy-0.1.121}/core/services/channel.py +0 -0
  92. {focomy-0.1.120 → focomy-0.1.121}/core/services/cleanup.py +0 -0
  93. {focomy-0.1.120 → focomy-0.1.121}/core/services/comment.py +0 -0
  94. {focomy-0.1.120 → focomy-0.1.121}/core/services/config_priority.py +0 -0
  95. {focomy-0.1.120 → focomy-0.1.121}/core/services/deployment.py +0 -0
  96. {focomy-0.1.120 → focomy-0.1.121}/core/services/edit_lock.py +0 -0
  97. {focomy-0.1.120 → focomy-0.1.121}/core/services/entity.py +0 -0
  98. {focomy-0.1.120 → focomy-0.1.121}/core/services/export.py +0 -0
  99. {focomy-0.1.120 → focomy-0.1.121}/core/services/field.py +0 -0
  100. {focomy-0.1.120 → focomy-0.1.121}/core/services/formula.py +0 -0
  101. {focomy-0.1.120 → focomy-0.1.121}/core/services/i18n.py +0 -0
  102. {focomy-0.1.120 → focomy-0.1.121}/core/services/index.py +0 -0
  103. {focomy-0.1.120 → focomy-0.1.121}/core/services/invite.py +0 -0
  104. {focomy-0.1.120 → focomy-0.1.121}/core/services/link_validator.py +0 -0
  105. {focomy-0.1.120 → focomy-0.1.121}/core/services/logging.py +0 -0
  106. {focomy-0.1.120 → focomy-0.1.121}/core/services/mail.py +0 -0
  107. {focomy-0.1.120 → focomy-0.1.121}/core/services/marketplace.py +0 -0
  108. {focomy-0.1.120 → focomy-0.1.121}/core/services/marketplace_verify.py +0 -0
  109. {focomy-0.1.120 → focomy-0.1.121}/core/services/media.py +0 -0
  110. {focomy-0.1.120 → focomy-0.1.121}/core/services/media_cleanup.py +0 -0
  111. {focomy-0.1.120 → focomy-0.1.121}/core/services/menu.py +0 -0
  112. {focomy-0.1.120 → focomy-0.1.121}/core/services/migration_helpers.py +0 -0
  113. {focomy-0.1.120 → focomy-0.1.121}/core/services/oauth.py +0 -0
  114. {focomy-0.1.120 → focomy-0.1.121}/core/services/pagination.py +0 -0
  115. {focomy-0.1.120 → focomy-0.1.121}/core/services/plugin_resolver.py +0 -0
  116. {focomy-0.1.120 → focomy-0.1.121}/core/services/plugin_sandbox.py +0 -0
  117. {focomy-0.1.120 → focomy-0.1.121}/core/services/preview.py +0 -0
  118. {focomy-0.1.120 → focomy-0.1.121}/core/services/query_optimizer.py +0 -0
  119. {focomy-0.1.120 → focomy-0.1.121}/core/services/rbac.py +0 -0
  120. {focomy-0.1.120 → focomy-0.1.121}/core/services/redirect.py +0 -0
  121. {focomy-0.1.120 → focomy-0.1.121}/core/services/relation.py +0 -0
  122. {focomy-0.1.120 → focomy-0.1.121}/core/services/revision.py +0 -0
  123. {focomy-0.1.120 → focomy-0.1.121}/core/services/routing.py +0 -0
  124. {focomy-0.1.120 → focomy-0.1.121}/core/services/sanitizer.py +0 -0
  125. {focomy-0.1.120 → focomy-0.1.121}/core/services/schedule.py +0 -0
  126. {focomy-0.1.120 → focomy-0.1.121}/core/services/search.py +0 -0
  127. {focomy-0.1.120 → focomy-0.1.121}/core/services/sentry.py +0 -0
  128. {focomy-0.1.120 → focomy-0.1.121}/core/services/seo.py +0 -0
  129. {focomy-0.1.120 → focomy-0.1.121}/core/services/settings.py +0 -0
  130. {focomy-0.1.120 → focomy-0.1.121}/core/services/spam_filter.py +0 -0
  131. {focomy-0.1.120 → focomy-0.1.121}/core/services/storage.py +0 -0
  132. {focomy-0.1.120 → focomy-0.1.121}/core/services/theme.py +0 -0
  133. {focomy-0.1.120 → focomy-0.1.121}/core/services/theme_inheritance.py +0 -0
  134. {focomy-0.1.120 → focomy-0.1.121}/core/services/thumbnail.py +0 -0
  135. {focomy-0.1.120 → focomy-0.1.121}/core/services/update.py +0 -0
  136. {focomy-0.1.120 → focomy-0.1.121}/core/services/widget.py +0 -0
  137. {focomy-0.1.120 → focomy-0.1.121}/core/services/wordpress_import/__init__.py +0 -0
  138. {focomy-0.1.120 → focomy-0.1.121}/core/services/wordpress_import/acf.py +0 -0
  139. {focomy-0.1.120 → focomy-0.1.121}/core/services/wordpress_import/analyzer.py +0 -0
  140. {focomy-0.1.120 → focomy-0.1.121}/core/services/wordpress_import/constants.py +0 -0
  141. {focomy-0.1.120 → focomy-0.1.121}/core/services/wordpress_import/content_sanitizer.py +0 -0
  142. {focomy-0.1.120 → focomy-0.1.121}/core/services/wordpress_import/diff_detector.py +0 -0
  143. {focomy-0.1.120 → focomy-0.1.121}/core/services/wordpress_import/dry_run.py +0 -0
  144. {focomy-0.1.120 → focomy-0.1.121}/core/services/wordpress_import/error_collector.py +0 -0
  145. {focomy-0.1.120 → focomy-0.1.121}/core/services/wordpress_import/id_resolver.py +0 -0
  146. {focomy-0.1.120 → focomy-0.1.121}/core/services/wordpress_import/import_service.py +0 -0
  147. {focomy-0.1.120 → focomy-0.1.121}/core/services/wordpress_import/importer.py +0 -0
  148. {focomy-0.1.120 → focomy-0.1.121}/core/services/wordpress_import/link_fixer.py +0 -0
  149. {focomy-0.1.120 → focomy-0.1.121}/core/services/wordpress_import/media.py +0 -0
  150. {focomy-0.1.120 → focomy-0.1.121}/core/services/wordpress_import/preview.py +0 -0
  151. {focomy-0.1.120 → focomy-0.1.121}/core/services/wordpress_import/redirects.py +0 -0
  152. {focomy-0.1.120 → focomy-0.1.121}/core/services/wordpress_import/rest_client.py +0 -0
  153. {focomy-0.1.120 → focomy-0.1.121}/core/services/wordpress_import/rollback.py +0 -0
  154. {focomy-0.1.120 → focomy-0.1.121}/core/services/wordpress_import/verification.py +0 -0
  155. {focomy-0.1.120 → focomy-0.1.121}/core/services/wordpress_import/wxr_parser.py +0 -0
  156. {focomy-0.1.120 → focomy-0.1.121}/core/services/workflow.py +0 -0
  157. {focomy-0.1.120 → focomy-0.1.121}/core/templates/admin/backup.html +0 -0
  158. {focomy-0.1.120 → focomy-0.1.121}/core/templates/admin/base.html +0 -0
  159. {focomy-0.1.120 → focomy-0.1.121}/core/templates/admin/comments.html +0 -0
  160. {focomy-0.1.120 → focomy-0.1.121}/core/templates/admin/components/editor.html +0 -0
  161. {focomy-0.1.120 → focomy-0.1.121}/core/templates/admin/customize.html +0 -0
  162. {focomy-0.1.120 → focomy-0.1.121}/core/templates/admin/dashboard.html +0 -0
  163. {focomy-0.1.120 → focomy-0.1.121}/core/templates/admin/entity_form.html +0 -0
  164. {focomy-0.1.120 → focomy-0.1.121}/core/templates/admin/entity_list.html +0 -0
  165. {focomy-0.1.120 → focomy-0.1.121}/core/templates/admin/forgot_password.html +0 -0
  166. {focomy-0.1.120 → focomy-0.1.121}/core/templates/admin/import.html +0 -0
  167. {focomy-0.1.120 → focomy-0.1.121}/core/templates/admin/link_validator.html +0 -0
  168. {focomy-0.1.120 → focomy-0.1.121}/core/templates/admin/login.html +0 -0
  169. {focomy-0.1.120 → focomy-0.1.121}/core/templates/admin/media.html +0 -0
  170. {focomy-0.1.120 → focomy-0.1.121}/core/templates/admin/menus.html +0 -0
  171. {focomy-0.1.120 → focomy-0.1.121}/core/templates/admin/plugins.html +0 -0
  172. {focomy-0.1.120 → focomy-0.1.121}/core/templates/admin/redirects.html +0 -0
  173. {focomy-0.1.120 → focomy-0.1.121}/core/templates/admin/reset_password.html +0 -0
  174. {focomy-0.1.120 → focomy-0.1.121}/core/templates/admin/settings.html +0 -0
  175. {focomy-0.1.120 → focomy-0.1.121}/core/templates/admin/sitemap.html +0 -0
  176. {focomy-0.1.120 → focomy-0.1.121}/core/templates/admin/system.html +0 -0
  177. {focomy-0.1.120 → focomy-0.1.121}/core/templates/admin/themes.html +0 -0
  178. {focomy-0.1.120 → focomy-0.1.121}/core/templates/admin/widgets.html +0 -0
  179. {focomy-0.1.120 → focomy-0.1.121}/core/themes/__init__.py +0 -0
  180. {focomy-0.1.120 → focomy-0.1.121}/core/themes/customizer.py +0 -0
  181. {focomy-0.1.120 → focomy-0.1.121}/core/themes/manager.py +0 -0
  182. {focomy-0.1.120 → focomy-0.1.121}/core/themes/marketplace.py +0 -0
  183. {focomy-0.1.120 → focomy-0.1.121}/core/utils.py +0 -0
  184. {focomy-0.1.120 → focomy-0.1.121}/static/favicon.svg +0 -0
  185. {focomy-0.1.120 → focomy-0.1.121}/themes/blog/templates/base.html +0 -0
  186. {focomy-0.1.120 → focomy-0.1.121}/themes/blog/templates/home.html +0 -0
  187. {focomy-0.1.120 → focomy-0.1.121}/themes/blog/templates/post.html +0 -0
  188. {focomy-0.1.120 → focomy-0.1.121}/themes/blog/theme.yaml +0 -0
  189. {focomy-0.1.120 → focomy-0.1.121}/themes/corporate/customizations.json +0 -0
  190. {focomy-0.1.120 → focomy-0.1.121}/themes/corporate/templates/base.html +0 -0
  191. {focomy-0.1.120 → focomy-0.1.121}/themes/corporate/templates/home.html +0 -0
  192. {focomy-0.1.120 → focomy-0.1.121}/themes/corporate/templates/page.html +0 -0
  193. {focomy-0.1.120 → focomy-0.1.121}/themes/corporate/theme.yaml +0 -0
  194. {focomy-0.1.120 → focomy-0.1.121}/themes/default/customizations.json +0 -0
  195. {focomy-0.1.120 → focomy-0.1.121}/themes/default/templates/404.html +0 -0
  196. {focomy-0.1.120 → focomy-0.1.121}/themes/default/templates/500.html +0 -0
  197. {focomy-0.1.120 → focomy-0.1.121}/themes/default/templates/archive.html +0 -0
  198. {focomy-0.1.120 → focomy-0.1.121}/themes/default/templates/category.html +0 -0
  199. {focomy-0.1.120 → focomy-0.1.121}/themes/default/templates/channel.html +0 -0
  200. {focomy-0.1.120 → focomy-0.1.121}/themes/default/templates/form.html +0 -0
  201. {focomy-0.1.120 → focomy-0.1.121}/themes/default/templates/form_success.html +0 -0
  202. {focomy-0.1.120 → focomy-0.1.121}/themes/default/templates/home.html +0 -0
  203. {focomy-0.1.120 → focomy-0.1.121}/themes/default/templates/page.html +0 -0
  204. {focomy-0.1.120 → focomy-0.1.121}/themes/default/templates/post.html +0 -0
  205. {focomy-0.1.120 → focomy-0.1.121}/themes/default/templates/search.html +0 -0
  206. {focomy-0.1.120 → focomy-0.1.121}/themes/default/templates/series.html +0 -0
  207. {focomy-0.1.120 → focomy-0.1.121}/themes/default/theme.yaml +0 -0
  208. {focomy-0.1.120 → focomy-0.1.121}/themes/minimal/templates/base.html +0 -0
  209. {focomy-0.1.120 → focomy-0.1.121}/themes/minimal/templates/home.html +0 -0
  210. {focomy-0.1.120 → focomy-0.1.121}/themes/minimal/templates/page.html +0 -0
  211. {focomy-0.1.120 → focomy-0.1.121}/themes/minimal/templates/post.html +0 -0
  212. {focomy-0.1.120 → focomy-0.1.121}/themes/minimal/theme.yaml +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: focomy
3
- Version: 0.1.120
3
+ Version: 0.1.121
4
4
  Summary: The Most Beautiful CMS - A metadata-driven, zero-duplicate-code content management system
5
5
  Project-URL: Homepage, https://github.com/focomy/focomy
6
6
  Project-URL: Documentation, https://focomy.dev/docs
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "focomy"
7
- version = "0.1.120"
7
+ version = "0.1.121"
8
8
  description = "The Most Beautiful CMS - A metadata-driven, zero-duplicate-code content management system"
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -334,6 +334,57 @@
334
334
  flex: 1;
335
335
  font-family: monospace;
336
336
  }
337
+ .image-field {
338
+ display: flex;
339
+ flex-direction: column;
340
+ gap: 0.5rem;
341
+ }
342
+ .image-field input[type="url"] {
343
+ width: 100%;
344
+ padding: 0.5rem;
345
+ background: #0f172a;
346
+ border: 1px solid #374151;
347
+ border-radius: 4px;
348
+ color: white;
349
+ font-size: 0.75rem;
350
+ }
351
+ .image-preview {
352
+ width: 100%;
353
+ height: 60px;
354
+ border: 1px dashed #374151;
355
+ border-radius: 4px;
356
+ display: flex;
357
+ align-items: center;
358
+ justify-content: center;
359
+ background: #0f172a;
360
+ overflow: hidden;
361
+ }
362
+ .image-preview img {
363
+ max-width: 100%;
364
+ max-height: 100%;
365
+ object-fit: contain;
366
+ }
367
+ .image-preview .no-image {
368
+ color: #64748b;
369
+ font-size: 0.75rem;
370
+ }
371
+ .image-field-actions {
372
+ display: flex;
373
+ gap: 0.5rem;
374
+ }
375
+ .image-field-actions button {
376
+ padding: 0.25rem 0.5rem;
377
+ font-size: 0.6875rem;
378
+ background: transparent;
379
+ border: 1px solid #374151;
380
+ color: #94a3b8;
381
+ border-radius: 4px;
382
+ cursor: pointer;
383
+ }
384
+ .image-field-actions button:hover {
385
+ background: #374151;
386
+ color: white;
387
+ }
337
388
  #customize-panel-footer {
338
389
  padding: 1rem;
339
390
  display: flex;
@@ -390,6 +441,60 @@
390
441
  <button type="button" id="customize-panel-close">&times;</button>
391
442
  </div>
392
443
  <div id="customize-panel-content">
444
+ <div class="customize-section">
445
+ <h3>サイトID</h3>
446
+ <div class="customize-field">
447
+ <label>サイトロゴ</label>
448
+ <div class="image-field">
449
+ <input type="url" id="site_logo" placeholder="https://example.com/logo.png">
450
+ <div class="image-preview" id="site_logo_preview">
451
+ <span class="no-image">画像未設定</span>
452
+ </div>
453
+ <div class="image-field-actions">
454
+ <button type="button" onclick="clearImageField('site_logo')">クリア</button>
455
+ </div>
456
+ </div>
457
+ </div>
458
+ <div class="customize-field">
459
+ <label>サイトアイコン</label>
460
+ <div class="image-field">
461
+ <input type="url" id="site_icon" placeholder="https://example.com/icon.png">
462
+ <div class="image-preview" id="site_icon_preview">
463
+ <span class="no-image">画像未設定</span>
464
+ </div>
465
+ <div class="image-field-actions">
466
+ <button type="button" onclick="clearImageField('site_icon')">クリア</button>
467
+ </div>
468
+ </div>
469
+ </div>
470
+ </div>
471
+ <div class="customize-section">
472
+ <h3>ヘッダー・背景</h3>
473
+ <div class="customize-field">
474
+ <label>ヘッダー画像</label>
475
+ <div class="image-field">
476
+ <input type="url" id="header_image" placeholder="https://example.com/header.jpg">
477
+ <div class="image-preview" id="header_image_preview">
478
+ <span class="no-image">画像未設定</span>
479
+ </div>
480
+ <div class="image-field-actions">
481
+ <button type="button" onclick="clearImageField('header_image')">クリア</button>
482
+ </div>
483
+ </div>
484
+ </div>
485
+ <div class="customize-field">
486
+ <label>背景画像</label>
487
+ <div class="image-field">
488
+ <input type="url" id="background_image" placeholder="https://example.com/bg.jpg">
489
+ <div class="image-preview" id="background_image_preview">
490
+ <span class="no-image">画像未設定</span>
491
+ </div>
492
+ <div class="image-field-actions">
493
+ <button type="button" onclick="clearImageField('background_image')">クリア</button>
494
+ </div>
495
+ </div>
496
+ </div>
497
+ </div>
393
498
  <div class="customize-section">
394
499
  <h3>カラー</h3>
395
500
  <div class="customize-field">
@@ -492,6 +597,12 @@
492
597
  }
493
598
  } else if (setting.id === 'custom_css') {
494
599
  document.getElementById('custom_css').value = setting.value || '';
600
+ } else if (['site_logo', 'site_icon', 'header_image', 'background_image'].includes(setting.id)) {
601
+ const input = document.getElementById(setting.id);
602
+ if (input) {
603
+ input.value = setting.value || '';
604
+ updateImagePreview(setting.id, setting.value || '');
605
+ }
495
606
  }
496
607
  });
497
608
 
@@ -506,6 +617,10 @@
506
617
  // Get current form values
507
618
  function getFormValues() {
508
619
  return {
620
+ site_logo: document.getElementById('site_logo').value,
621
+ site_icon: document.getElementById('site_icon').value,
622
+ header_image: document.getElementById('header_image').value,
623
+ background_image: document.getElementById('background_image').value,
509
624
  color_primary: document.getElementById('color_primary').value,
510
625
  color_background: document.getElementById('color_background').value,
511
626
  color_text: document.getElementById('color_text').value,
@@ -587,6 +702,17 @@
587
702
  resetBtn.addEventListener('click', function() {
588
703
  if (!confirm('変更をリセットしますか?')) return;
589
704
 
705
+ // Image fields
706
+ document.getElementById('site_logo').value = originalValues.site_logo || '';
707
+ updateImagePreview('site_logo', originalValues.site_logo || '');
708
+ document.getElementById('site_icon').value = originalValues.site_icon || '';
709
+ updateImagePreview('site_icon', originalValues.site_icon || '');
710
+ document.getElementById('header_image').value = originalValues.header_image || '';
711
+ updateImagePreview('header_image', originalValues.header_image || '');
712
+ document.getElementById('background_image').value = originalValues.background_image || '';
713
+ updateImagePreview('background_image', originalValues.background_image || '');
714
+
715
+ // Color fields
590
716
  document.getElementById('color_primary').value = originalValues.color_primary || '#2563eb';
591
717
  document.getElementById('color_primary_text').value = originalValues.color_primary || '#2563eb';
592
718
  document.getElementById('color_background').value = originalValues.color_background || '#ffffff';
@@ -619,6 +745,39 @@
619
745
  timer = setTimeout(() => fn.apply(this, args), delay);
620
746
  };
621
747
  }
748
+
749
+ // Update image preview
750
+ function updateImagePreview(fieldId, url) {
751
+ const previewEl = document.getElementById(fieldId + '_preview');
752
+ if (!previewEl) return;
753
+
754
+ if (url && url.trim()) {
755
+ previewEl.innerHTML = '<img src="' + url + '" alt="プレビュー" onerror="this.parentElement.innerHTML=\'<span class=no-image>読み込み失敗</span>\'">';
756
+ } else {
757
+ previewEl.innerHTML = '<span class="no-image">画像未設定</span>';
758
+ }
759
+ }
760
+
761
+ // Clear image field (global for onclick)
762
+ window.clearImageField = function(fieldId) {
763
+ const input = document.getElementById(fieldId);
764
+ if (input) {
765
+ input.value = '';
766
+ updateImagePreview(fieldId, '');
767
+ updatePreview();
768
+ }
769
+ };
770
+
771
+ // Image URL input listeners
772
+ ['site_logo', 'site_icon', 'header_image', 'background_image'].forEach(function(fieldId) {
773
+ const input = document.getElementById(fieldId);
774
+ if (input) {
775
+ input.addEventListener('input', debounce(function() {
776
+ updateImagePreview(fieldId, input.value);
777
+ updatePreview();
778
+ }, 300));
779
+ }
780
+ });
622
781
  })();
623
782
  </script>
624
783
  {% endif %}
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes