focomy 0.1.117__tar.gz → 0.1.119__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.117 → focomy-0.1.119}/PKG-INFO +1 -1
  2. {focomy-0.1.117 → focomy-0.1.119}/core/admin/routes.py +7 -0
  3. {focomy-0.1.117 → focomy-0.1.119}/core/engine/routes.py +1 -0
  4. {focomy-0.1.117 → focomy-0.1.119}/core/services/theme.py +1 -0
  5. {focomy-0.1.117 → focomy-0.1.119}/core/templates/admin/base.html +3 -0
  6. {focomy-0.1.117 → focomy-0.1.119}/pyproject.toml +1 -1
  7. focomy-0.1.119/themes/corporate/customizations.json +29 -0
  8. {focomy-0.1.117 → focomy-0.1.119}/themes/default/templates/base.html +19 -1
  9. {focomy-0.1.117 → focomy-0.1.119}/.gitignore +0 -0
  10. {focomy-0.1.117 → focomy-0.1.119}/LICENSE +0 -0
  11. {focomy-0.1.117 → focomy-0.1.119}/README.md +0 -0
  12. {focomy-0.1.117 → focomy-0.1.119}/core/__init__.py +0 -0
  13. {focomy-0.1.117 → focomy-0.1.119}/core/admin/__init__.py +0 -0
  14. {focomy-0.1.117 → focomy-0.1.119}/core/admin/url.py +0 -0
  15. {focomy-0.1.117 → focomy-0.1.119}/core/api/__init__.py +0 -0
  16. {focomy-0.1.117 → focomy-0.1.119}/core/api/auth.py +0 -0
  17. {focomy-0.1.117 → focomy-0.1.119}/core/api/comments.py +0 -0
  18. {focomy-0.1.117 → focomy-0.1.119}/core/api/entities.py +0 -0
  19. {focomy-0.1.117 → focomy-0.1.119}/core/api/forms.py +0 -0
  20. {focomy-0.1.117 → focomy-0.1.119}/core/api/media.py +0 -0
  21. {focomy-0.1.117 → focomy-0.1.119}/core/api/relations.py +0 -0
  22. {focomy-0.1.117 → focomy-0.1.119}/core/api/revisions.py +0 -0
  23. {focomy-0.1.117 → focomy-0.1.119}/core/api/schema.py +0 -0
  24. {focomy-0.1.117 → focomy-0.1.119}/core/api/search.py +0 -0
  25. {focomy-0.1.117 → focomy-0.1.119}/core/api/seo.py +0 -0
  26. {focomy-0.1.117 → focomy-0.1.119}/core/cli.py +0 -0
  27. {focomy-0.1.117 → focomy-0.1.119}/core/config.py +0 -0
  28. {focomy-0.1.117 → focomy-0.1.119}/core/content_types/__init__.py +0 -0
  29. {focomy-0.1.117 → focomy-0.1.119}/core/content_types/audit_log.yaml +0 -0
  30. {focomy-0.1.117 → focomy-0.1.119}/core/content_types/category.yaml +0 -0
  31. {focomy-0.1.117 → focomy-0.1.119}/core/content_types/channel.yaml +0 -0
  32. {focomy-0.1.117 → focomy-0.1.119}/core/content_types/comment.yaml +0 -0
  33. {focomy-0.1.117 → focomy-0.1.119}/core/content_types/edit_lock.yaml +0 -0
  34. {focomy-0.1.117 → focomy-0.1.119}/core/content_types/form.yaml +0 -0
  35. {focomy-0.1.117 → focomy-0.1.119}/core/content_types/form_submission.yaml +0 -0
  36. {focomy-0.1.117 → focomy-0.1.119}/core/content_types/menu_item.yaml +0 -0
  37. {focomy-0.1.117 → focomy-0.1.119}/core/content_types/news.yaml +0 -0
  38. {focomy-0.1.117 → focomy-0.1.119}/core/content_types/page.yaml +0 -0
  39. {focomy-0.1.117 → focomy-0.1.119}/core/content_types/plugin.yaml +0 -0
  40. {focomy-0.1.117 → focomy-0.1.119}/core/content_types/plugin_developer.yaml +0 -0
  41. {focomy-0.1.117 → focomy-0.1.119}/core/content_types/plugin_review.yaml +0 -0
  42. {focomy-0.1.117 → focomy-0.1.119}/core/content_types/post.yaml +0 -0
  43. {focomy-0.1.117 → focomy-0.1.119}/core/content_types/redirect.yaml +0 -0
  44. {focomy-0.1.117 → focomy-0.1.119}/core/content_types/scheduled_action.yaml +0 -0
  45. {focomy-0.1.117 → focomy-0.1.119}/core/content_types/series.yaml +0 -0
  46. {focomy-0.1.117 → focomy-0.1.119}/core/content_types/site_setting.yaml +0 -0
  47. {focomy-0.1.117 → focomy-0.1.119}/core/content_types/tag.yaml +0 -0
  48. {focomy-0.1.117 → focomy-0.1.119}/core/content_types/user.yaml +0 -0
  49. {focomy-0.1.117 → focomy-0.1.119}/core/content_types/widget.yaml +0 -0
  50. {focomy-0.1.117 → focomy-0.1.119}/core/content_types/workflow_history.yaml +0 -0
  51. {focomy-0.1.117 → focomy-0.1.119}/core/database.py +0 -0
  52. {focomy-0.1.117 → focomy-0.1.119}/core/engine/__init__.py +0 -0
  53. {focomy-0.1.117 → focomy-0.1.119}/core/main.py +0 -0
  54. {focomy-0.1.117 → focomy-0.1.119}/core/migrations/env.py +0 -0
  55. {focomy-0.1.117 → focomy-0.1.119}/core/migrations/script.py.mako +0 -0
  56. {focomy-0.1.117 → focomy-0.1.119}/core/migrations/versions/2038bdf6693b_add_import_jobs_table.py +0 -0
  57. {focomy-0.1.117 → focomy-0.1.119}/core/migrations/versions/3a1b2c3d4e5f_add_file_hash_to_media.py +0 -0
  58. {focomy-0.1.117 → focomy-0.1.119}/core/models/__init__.py +0 -0
  59. {focomy-0.1.117 → focomy-0.1.119}/core/models/auth.py +0 -0
  60. {focomy-0.1.117 → focomy-0.1.119}/core/models/entity.py +0 -0
  61. {focomy-0.1.117 → focomy-0.1.119}/core/models/import_job.py +0 -0
  62. {focomy-0.1.117 → focomy-0.1.119}/core/models/media.py +0 -0
  63. {focomy-0.1.117 → focomy-0.1.119}/core/models/relation.py +0 -0
  64. {focomy-0.1.117 → focomy-0.1.119}/core/models/revision.py +0 -0
  65. {focomy-0.1.117 → focomy-0.1.119}/core/plugins/__init__.py +0 -0
  66. {focomy-0.1.117 → focomy-0.1.119}/core/plugins/base.py +0 -0
  67. {focomy-0.1.117 → focomy-0.1.119}/core/plugins/hooks.py +0 -0
  68. {focomy-0.1.117 → focomy-0.1.119}/core/plugins/loader.py +0 -0
  69. {focomy-0.1.117 → focomy-0.1.119}/core/plugins/manager.py +0 -0
  70. {focomy-0.1.117 → focomy-0.1.119}/core/rate_limit.py +0 -0
  71. {focomy-0.1.117 → focomy-0.1.119}/core/relations.yaml +0 -0
  72. {focomy-0.1.117 → focomy-0.1.119}/core/scaffold/.env.template +0 -0
  73. {focomy-0.1.117 → focomy-0.1.119}/core/scaffold/.gitignore.template +0 -0
  74. {focomy-0.1.117 → focomy-0.1.119}/core/scaffold/__init__.py +0 -0
  75. {focomy-0.1.117 → focomy-0.1.119}/core/scaffold/config.yaml.template +0 -0
  76. {focomy-0.1.117 → focomy-0.1.119}/core/scaffold/themes/default/templates/archive.html +0 -0
  77. {focomy-0.1.117 → focomy-0.1.119}/core/scaffold/themes/default/templates/base.html +0 -0
  78. {focomy-0.1.117 → focomy-0.1.119}/core/scaffold/themes/default/templates/category.html +0 -0
  79. {focomy-0.1.117 → focomy-0.1.119}/core/scaffold/themes/default/templates/home.html +0 -0
  80. {focomy-0.1.117 → focomy-0.1.119}/core/scaffold/themes/default/templates/post.html +0 -0
  81. {focomy-0.1.117 → focomy-0.1.119}/core/scaffold/themes/default/templates/search.html +0 -0
  82. {focomy-0.1.117 → focomy-0.1.119}/core/scaffold/themes/default/theme.yaml +0 -0
  83. {focomy-0.1.117 → focomy-0.1.119}/core/schemas/__init__.py +0 -0
  84. {focomy-0.1.117 → focomy-0.1.119}/core/schemas/import_schema.py +0 -0
  85. {focomy-0.1.117 → focomy-0.1.119}/core/seo/__init__.py +0 -0
  86. {focomy-0.1.117 → focomy-0.1.119}/core/services/__init__.py +0 -0
  87. {focomy-0.1.117 → focomy-0.1.119}/core/services/api_auth.py +0 -0
  88. {focomy-0.1.117 → focomy-0.1.119}/core/services/assets.py +0 -0
  89. {focomy-0.1.117 → focomy-0.1.119}/core/services/audit.py +0 -0
  90. {focomy-0.1.117 → focomy-0.1.119}/core/services/auth.py +0 -0
  91. {focomy-0.1.117 → focomy-0.1.119}/core/services/block_converter.py +0 -0
  92. {focomy-0.1.117 → focomy-0.1.119}/core/services/bulk.py +0 -0
  93. {focomy-0.1.117 → focomy-0.1.119}/core/services/cache.py +0 -0
  94. {focomy-0.1.117 → focomy-0.1.119}/core/services/channel.py +0 -0
  95. {focomy-0.1.117 → focomy-0.1.119}/core/services/cleanup.py +0 -0
  96. {focomy-0.1.117 → focomy-0.1.119}/core/services/comment.py +0 -0
  97. {focomy-0.1.117 → focomy-0.1.119}/core/services/config_priority.py +0 -0
  98. {focomy-0.1.117 → focomy-0.1.119}/core/services/deployment.py +0 -0
  99. {focomy-0.1.117 → focomy-0.1.119}/core/services/edit_lock.py +0 -0
  100. {focomy-0.1.117 → focomy-0.1.119}/core/services/entity.py +0 -0
  101. {focomy-0.1.117 → focomy-0.1.119}/core/services/export.py +0 -0
  102. {focomy-0.1.117 → focomy-0.1.119}/core/services/field.py +0 -0
  103. {focomy-0.1.117 → focomy-0.1.119}/core/services/formula.py +0 -0
  104. {focomy-0.1.117 → focomy-0.1.119}/core/services/i18n.py +0 -0
  105. {focomy-0.1.117 → focomy-0.1.119}/core/services/index.py +0 -0
  106. {focomy-0.1.117 → focomy-0.1.119}/core/services/invite.py +0 -0
  107. {focomy-0.1.117 → focomy-0.1.119}/core/services/link_validator.py +0 -0
  108. {focomy-0.1.117 → focomy-0.1.119}/core/services/logging.py +0 -0
  109. {focomy-0.1.117 → focomy-0.1.119}/core/services/mail.py +0 -0
  110. {focomy-0.1.117 → focomy-0.1.119}/core/services/marketplace.py +0 -0
  111. {focomy-0.1.117 → focomy-0.1.119}/core/services/marketplace_verify.py +0 -0
  112. {focomy-0.1.117 → focomy-0.1.119}/core/services/media.py +0 -0
  113. {focomy-0.1.117 → focomy-0.1.119}/core/services/media_cleanup.py +0 -0
  114. {focomy-0.1.117 → focomy-0.1.119}/core/services/menu.py +0 -0
  115. {focomy-0.1.117 → focomy-0.1.119}/core/services/migration_helpers.py +0 -0
  116. {focomy-0.1.117 → focomy-0.1.119}/core/services/oauth.py +0 -0
  117. {focomy-0.1.117 → focomy-0.1.119}/core/services/pagination.py +0 -0
  118. {focomy-0.1.117 → focomy-0.1.119}/core/services/plugin_resolver.py +0 -0
  119. {focomy-0.1.117 → focomy-0.1.119}/core/services/plugin_sandbox.py +0 -0
  120. {focomy-0.1.117 → focomy-0.1.119}/core/services/preview.py +0 -0
  121. {focomy-0.1.117 → focomy-0.1.119}/core/services/query_optimizer.py +0 -0
  122. {focomy-0.1.117 → focomy-0.1.119}/core/services/rbac.py +0 -0
  123. {focomy-0.1.117 → focomy-0.1.119}/core/services/redirect.py +0 -0
  124. {focomy-0.1.117 → focomy-0.1.119}/core/services/relation.py +0 -0
  125. {focomy-0.1.117 → focomy-0.1.119}/core/services/revision.py +0 -0
  126. {focomy-0.1.117 → focomy-0.1.119}/core/services/routing.py +0 -0
  127. {focomy-0.1.117 → focomy-0.1.119}/core/services/sanitizer.py +0 -0
  128. {focomy-0.1.117 → focomy-0.1.119}/core/services/schedule.py +0 -0
  129. {focomy-0.1.117 → focomy-0.1.119}/core/services/search.py +0 -0
  130. {focomy-0.1.117 → focomy-0.1.119}/core/services/sentry.py +0 -0
  131. {focomy-0.1.117 → focomy-0.1.119}/core/services/seo.py +0 -0
  132. {focomy-0.1.117 → focomy-0.1.119}/core/services/settings.py +0 -0
  133. {focomy-0.1.117 → focomy-0.1.119}/core/services/spam_filter.py +0 -0
  134. {focomy-0.1.117 → focomy-0.1.119}/core/services/storage.py +0 -0
  135. {focomy-0.1.117 → focomy-0.1.119}/core/services/theme_inheritance.py +0 -0
  136. {focomy-0.1.117 → focomy-0.1.119}/core/services/thumbnail.py +0 -0
  137. {focomy-0.1.117 → focomy-0.1.119}/core/services/update.py +0 -0
  138. {focomy-0.1.117 → focomy-0.1.119}/core/services/widget.py +0 -0
  139. {focomy-0.1.117 → focomy-0.1.119}/core/services/wordpress_import/__init__.py +0 -0
  140. {focomy-0.1.117 → focomy-0.1.119}/core/services/wordpress_import/acf.py +0 -0
  141. {focomy-0.1.117 → focomy-0.1.119}/core/services/wordpress_import/analyzer.py +0 -0
  142. {focomy-0.1.117 → focomy-0.1.119}/core/services/wordpress_import/constants.py +0 -0
  143. {focomy-0.1.117 → focomy-0.1.119}/core/services/wordpress_import/content_sanitizer.py +0 -0
  144. {focomy-0.1.117 → focomy-0.1.119}/core/services/wordpress_import/diff_detector.py +0 -0
  145. {focomy-0.1.117 → focomy-0.1.119}/core/services/wordpress_import/dry_run.py +0 -0
  146. {focomy-0.1.117 → focomy-0.1.119}/core/services/wordpress_import/error_collector.py +0 -0
  147. {focomy-0.1.117 → focomy-0.1.119}/core/services/wordpress_import/id_resolver.py +0 -0
  148. {focomy-0.1.117 → focomy-0.1.119}/core/services/wordpress_import/import_service.py +0 -0
  149. {focomy-0.1.117 → focomy-0.1.119}/core/services/wordpress_import/importer.py +0 -0
  150. {focomy-0.1.117 → focomy-0.1.119}/core/services/wordpress_import/link_fixer.py +0 -0
  151. {focomy-0.1.117 → focomy-0.1.119}/core/services/wordpress_import/media.py +0 -0
  152. {focomy-0.1.117 → focomy-0.1.119}/core/services/wordpress_import/preview.py +0 -0
  153. {focomy-0.1.117 → focomy-0.1.119}/core/services/wordpress_import/redirects.py +0 -0
  154. {focomy-0.1.117 → focomy-0.1.119}/core/services/wordpress_import/rest_client.py +0 -0
  155. {focomy-0.1.117 → focomy-0.1.119}/core/services/wordpress_import/rollback.py +0 -0
  156. {focomy-0.1.117 → focomy-0.1.119}/core/services/wordpress_import/verification.py +0 -0
  157. {focomy-0.1.117 → focomy-0.1.119}/core/services/wordpress_import/wxr_parser.py +0 -0
  158. {focomy-0.1.117 → focomy-0.1.119}/core/services/workflow.py +0 -0
  159. {focomy-0.1.117 → focomy-0.1.119}/core/templates/admin/backup.html +0 -0
  160. {focomy-0.1.117 → focomy-0.1.119}/core/templates/admin/comments.html +0 -0
  161. {focomy-0.1.117 → focomy-0.1.119}/core/templates/admin/components/editor.html +0 -0
  162. {focomy-0.1.117 → focomy-0.1.119}/core/templates/admin/customize.html +0 -0
  163. {focomy-0.1.117 → focomy-0.1.119}/core/templates/admin/dashboard.html +0 -0
  164. {focomy-0.1.117 → focomy-0.1.119}/core/templates/admin/entity_form.html +0 -0
  165. {focomy-0.1.117 → focomy-0.1.119}/core/templates/admin/entity_list.html +0 -0
  166. {focomy-0.1.117 → focomy-0.1.119}/core/templates/admin/forgot_password.html +0 -0
  167. {focomy-0.1.117 → focomy-0.1.119}/core/templates/admin/import.html +0 -0
  168. {focomy-0.1.117 → focomy-0.1.119}/core/templates/admin/link_validator.html +0 -0
  169. {focomy-0.1.117 → focomy-0.1.119}/core/templates/admin/login.html +0 -0
  170. {focomy-0.1.117 → focomy-0.1.119}/core/templates/admin/media.html +0 -0
  171. {focomy-0.1.117 → focomy-0.1.119}/core/templates/admin/menus.html +0 -0
  172. {focomy-0.1.117 → focomy-0.1.119}/core/templates/admin/plugins.html +0 -0
  173. {focomy-0.1.117 → focomy-0.1.119}/core/templates/admin/redirects.html +0 -0
  174. {focomy-0.1.117 → focomy-0.1.119}/core/templates/admin/reset_password.html +0 -0
  175. {focomy-0.1.117 → focomy-0.1.119}/core/templates/admin/settings.html +0 -0
  176. {focomy-0.1.117 → focomy-0.1.119}/core/templates/admin/sitemap.html +0 -0
  177. {focomy-0.1.117 → focomy-0.1.119}/core/templates/admin/system.html +0 -0
  178. {focomy-0.1.117 → focomy-0.1.119}/core/templates/admin/themes.html +0 -0
  179. {focomy-0.1.117 → focomy-0.1.119}/core/templates/admin/widgets.html +0 -0
  180. {focomy-0.1.117 → focomy-0.1.119}/core/themes/__init__.py +0 -0
  181. {focomy-0.1.117 → focomy-0.1.119}/core/themes/customizer.py +0 -0
  182. {focomy-0.1.117 → focomy-0.1.119}/core/themes/manager.py +0 -0
  183. {focomy-0.1.117 → focomy-0.1.119}/core/themes/marketplace.py +0 -0
  184. {focomy-0.1.117 → focomy-0.1.119}/core/utils.py +0 -0
  185. {focomy-0.1.117 → focomy-0.1.119}/static/favicon.svg +0 -0
  186. {focomy-0.1.117 → focomy-0.1.119}/themes/blog/templates/base.html +0 -0
  187. {focomy-0.1.117 → focomy-0.1.119}/themes/blog/templates/home.html +0 -0
  188. {focomy-0.1.117 → focomy-0.1.119}/themes/blog/templates/post.html +0 -0
  189. {focomy-0.1.117 → focomy-0.1.119}/themes/blog/theme.yaml +0 -0
  190. {focomy-0.1.117 → focomy-0.1.119}/themes/corporate/templates/base.html +0 -0
  191. {focomy-0.1.117 → focomy-0.1.119}/themes/corporate/templates/home.html +0 -0
  192. {focomy-0.1.117 → focomy-0.1.119}/themes/corporate/templates/page.html +0 -0
  193. {focomy-0.1.117 → focomy-0.1.119}/themes/corporate/theme.yaml +0 -0
  194. {focomy-0.1.117 → focomy-0.1.119}/themes/default/customizations.json +0 -0
  195. {focomy-0.1.117 → focomy-0.1.119}/themes/default/templates/404.html +0 -0
  196. {focomy-0.1.117 → focomy-0.1.119}/themes/default/templates/500.html +0 -0
  197. {focomy-0.1.117 → focomy-0.1.119}/themes/default/templates/archive.html +0 -0
  198. {focomy-0.1.117 → focomy-0.1.119}/themes/default/templates/category.html +0 -0
  199. {focomy-0.1.117 → focomy-0.1.119}/themes/default/templates/channel.html +0 -0
  200. {focomy-0.1.117 → focomy-0.1.119}/themes/default/templates/form.html +0 -0
  201. {focomy-0.1.117 → focomy-0.1.119}/themes/default/templates/form_success.html +0 -0
  202. {focomy-0.1.117 → focomy-0.1.119}/themes/default/templates/home.html +0 -0
  203. {focomy-0.1.117 → focomy-0.1.119}/themes/default/templates/page.html +0 -0
  204. {focomy-0.1.117 → focomy-0.1.119}/themes/default/templates/post.html +0 -0
  205. {focomy-0.1.117 → focomy-0.1.119}/themes/default/templates/search.html +0 -0
  206. {focomy-0.1.117 → focomy-0.1.119}/themes/default/templates/series.html +0 -0
  207. {focomy-0.1.117 → focomy-0.1.119}/themes/default/theme.yaml +0 -0
  208. {focomy-0.1.117 → focomy-0.1.119}/themes/minimal/templates/base.html +0 -0
  209. {focomy-0.1.117 → focomy-0.1.119}/themes/minimal/templates/home.html +0 -0
  210. {focomy-0.1.117 → focomy-0.1.119}/themes/minimal/templates/page.html +0 -0
  211. {focomy-0.1.117 → focomy-0.1.119}/themes/minimal/templates/post.html +0 -0
  212. {focomy-0.1.117 → focomy-0.1.119}/themes/minimal/theme.yaml +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: focomy
3
- Version: 0.1.117
3
+ Version: 0.1.119
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
@@ -198,6 +198,12 @@ async def get_context(
198
198
  except Exception:
199
199
  pass # Post content type may not exist
200
200
 
201
+ # Get active theme for customize link
202
+ from ..services.settings import SettingsService
203
+ settings_svc = SettingsService(db)
204
+ theme_settings = await settings_svc.get_by_category("theme")
205
+ active_theme = theme_settings.get("active", "default")
206
+
201
207
  return {
202
208
  "request": request,
203
209
  "content_types": content_types,
@@ -208,6 +214,7 @@ async def get_context(
208
214
  "user_role": user_role,
209
215
  "channels": channels,
210
216
  "orphan_post_count": orphan_post_count,
217
+ "active_theme": active_theme,
211
218
  }
212
219
 
213
220
 
@@ -160,6 +160,7 @@ async def render_theme(
160
160
  if admin_info:
161
161
  context["is_admin"] = True
162
162
  context["admin_user"] = admin_info["user_data"]
163
+ context["active_theme"] = active_theme # For customize link
163
164
  # Build edit URL if entity provided
164
165
  if entity and content_type:
165
166
  context["edit_url"] = f"/admin/{content_type}/{entity.id}/edit"
@@ -1194,6 +1194,7 @@ body {
1194
1194
 
1195
1195
  # Add theme CSS to context
1196
1196
  context["theme_css"] = self.get_css_variables(theme_name)
1197
+ context["customizations"] = self.get_customizations(theme_name)
1197
1198
  context["current_year"] = datetime.now().year
1198
1199
  context.setdefault("site_name", "Focomy")
1199
1200
 
@@ -551,6 +551,9 @@
551
551
  </a>
552
552
 
553
553
  <div class="nav-section">外観</div>
554
+ <a href="/admin/themes/{{ active_theme }}/customize" class="nav-item {% if current_page == 'customize' %}active{% endif %}">
555
+ カスタマイズ
556
+ </a>
554
557
  <a href="/admin/themes" class="nav-item {% if current_page == 'themes' %}active{% endif %}">
555
558
  テーマ
556
559
  </a>
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "focomy"
7
- version = "0.1.117"
7
+ version = "0.1.119"
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"
@@ -0,0 +1,29 @@
1
+ {
2
+ "site_logo": "",
3
+ "site_icon": "",
4
+ "header_image": "",
5
+ "background_image": "",
6
+ "color_primary": "#0066cc",
7
+ "color_primary-hover": "#0052a3",
8
+ "color_secondary": "#ff6b35",
9
+ "color_secondary-hover": "#e55a2b",
10
+ "color_background": "#ffffff",
11
+ "color_surface": "#f8f9fa",
12
+ "color_text": "#212529",
13
+ "color_text-muted": "#6c757d",
14
+ "color_border": "#dee2e6",
15
+ "color_success": "#28a745",
16
+ "color_error": "#dc3545",
17
+ "color_warning": "#ffc107",
18
+ "font_sans": "'Noto Sans JP', -apple-system, BlinkMacSystemFont, sans-serif",
19
+ "font_serif": "'Noto Serif JP', Georgia, serif",
20
+ "font_mono": "ui-monospace, monospace",
21
+ "space_xs": "0.25rem",
22
+ "space_sm": "0.5rem",
23
+ "space_md": "1rem",
24
+ "space_lg": "1.5rem",
25
+ "space_xl": "2rem",
26
+ "space_2xl": "3rem",
27
+ "space_3xl": "4rem",
28
+ "custom_css": ""
29
+ }
@@ -37,9 +37,14 @@
37
37
  {% endif %}
38
38
 
39
39
  <!-- Favicon -->
40
+ {% if customizations and customizations.site_icon %}
41
+ <link rel="icon" href="{{ customizations.site_icon }}" type="image/png">
42
+ <link rel="apple-touch-icon" href="{{ customizations.site_icon }}">
43
+ {% else %}
40
44
  <link rel="icon" href="/static/favicon.ico" sizes="32x32">
41
45
  <link rel="icon" href="/static/favicon.svg" type="image/svg+xml">
42
46
  <link rel="apple-touch-icon" href="/static/apple-touch-icon.png">
47
+ {% endif %}
43
48
  <link rel="manifest" href="/manifest.json">
44
49
 
45
50
  <!-- Preload critical resources -->
@@ -56,6 +61,12 @@
56
61
  <link rel="stylesheet" href="/css/theme.css">
57
62
 
58
63
  <style>
64
+ /* Site logo image */
65
+ .site-logo-img {
66
+ max-height: 50px;
67
+ width: auto;
68
+ vertical-align: middle;
69
+ }
59
70
 
60
71
  /* Dropdown menu styles */
61
72
  .nav-item { position: relative; display: inline-block; }
@@ -135,6 +146,7 @@
135
146
  {% endif %}
136
147
  </div>
137
148
  </div>
149
+ <a href="/admin/themes/{{ active_theme }}/customize">カスタマイズ</a>
138
150
  {% if edit_url %}
139
151
  <a href="{{ edit_url }}">編集</a>
140
152
  {% endif %}
@@ -218,7 +230,13 @@
218
230
  <header class="site-header">
219
231
  {% block header %}
220
232
  <div class="container">
221
- <a href="/" class="site-logo">{{ site_name }}</a>
233
+ <a href="/" class="site-logo">
234
+ {% if customizations and customizations.site_logo %}
235
+ <img src="{{ customizations.site_logo }}" alt="{{ site_name }}" class="site-logo-img">
236
+ {% else %}
237
+ {{ site_name }}
238
+ {% endif %}
239
+ </a>
222
240
  <nav class="site-nav">
223
241
  {% block nav %}
224
242
  {% if menus and menus.header %}
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