focomy 0.1.117__py3-none-any.whl → 0.1.119__py3-none-any.whl

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.
core/admin/routes.py CHANGED
@@ -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
 
core/engine/routes.py CHANGED
@@ -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"
core/services/theme.py CHANGED
@@ -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>
@@ -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
@@ -7,7 +7,7 @@ core/rate_limit.py,sha256=CX5UjmsU03aFWKXSKjweoHvH2xn0v4NBHNN5ynJC8LE,180
7
7
  core/relations.yaml,sha256=7GUCrphKaouEXNkyd8Ht99e6TcUPERhc4m36RGcc41U,2128
8
8
  core/utils.py,sha256=Rqs1WStB0JjTb8-750jL-xJ_kaPH3ddupvqt46BXIBc,2754
9
9
  core/admin/__init__.py,sha256=IXrr-z-IDXmYodaZ-cVDou6wr_vsVhyWmXHdSNKkQsk,94
10
- core/admin/routes.py,sha256=U6NCzZNjOwdRzU-pzktVbPWYUTNExjNnaMfgzW0X_Hw,150612
10
+ core/admin/routes.py,sha256=6l24uI8gNiwBTa6YzOstMYik8DzBZaBcqsuCPzST4oU,150908
11
11
  core/admin/url.py,sha256=FlusKnSz3bZgPSBmRu-dI3W-bQo7lKBDZ3zN8cFHwQc,2243
12
12
  core/api/__init__.py,sha256=H1StbYGDVRS6g-Jk3UUf17ibAz1K8IUa27NfPMkaNrA,19
13
13
  core/api/auth.py,sha256=Zb37IHcUSjf8_hXiVzhoZPQw6WAiOOS_AoMqE96yat8,11565
@@ -44,7 +44,7 @@ core/content_types/user.yaml,sha256=y3SwqzIc9_6C7R1GULk7AwYJPxcTT38ZmZe4_wekfyU,
44
44
  core/content_types/widget.yaml,sha256=Jotbts5QQtHaF2bJWQL3rkEoCkp_aq_A3gN-58eJwv8,1454
45
45
  core/content_types/workflow_history.yaml,sha256=3wi58LNLYbk7t6Z2QDRi9whQSedJCXKVKuyBhixNUK0,518
46
46
  core/engine/__init__.py,sha256=ycR0Kdn6buwdCH6QFG8bV69wFciFSKEg9Ro26cHpa2U,83
47
- core/engine/routes.py,sha256=W09MJIEddsQbsmeyGd2P9nBZUDwDlTpOY4O-DvUd0_4,43849
47
+ core/engine/routes.py,sha256=r81cRjXcSpCMqr4CZDrfmGQnupPE7_yVAMLJL9psRiA,43922
48
48
  core/migrations/env.py,sha256=1dLI8qcGojLDR_--MdgwP5q-V0p2Z-32klSPjokXx4M,1389
49
49
  core/migrations/script.py.mako,sha256=LyYLSC7HzBBGwHZ8s2SguBPMXsWCph0FJp49kPsGhU8,590
50
50
  core/migrations/versions/2038bdf6693b_add_import_jobs_table.py,sha256=v8lPC5WmwpUfHUG_YgQn6jepPtfKWFn0JIj9XvD9224,2325
@@ -124,7 +124,7 @@ core/services/seo.py,sha256=qFKKnAzZ2CspWzlHHxvfKx4JBVgNhPWxCSn-adX-2z4,15658
124
124
  core/services/settings.py,sha256=oZJx1HgFNeSicagtURXHbqq0_O3yPwvcwosuqDmZ13c,8822
125
125
  core/services/spam_filter.py,sha256=2O8YWDlZoCr7MhGzsEsx6AKm2SgBP3-kxsXaETVd-0A,11314
126
126
  core/services/storage.py,sha256=gaaVf594Ck-zkZMtdt--YcIMvWgPBs7ZGPY0FRIVIzQ,8807
127
- core/services/theme.py,sha256=uMfbkik7NjtsXjyKef9txYGMMUqBEFdlAEPjuP5dJ1o,52910
127
+ core/services/theme.py,sha256=4_X8WuemsaONHqy1h4agCI5gZAu7tcIA9sWVr6_ZRbE,52982
128
128
  core/services/theme_inheritance.py,sha256=v4AT_VmVLQ0o3O0bO1S9qGZpnGX5d41JPrID1lmAxZI,9418
129
129
  core/services/thumbnail.py,sha256=ey1Gxl5sXr-u9GoiLe6cr9Mu6ez2kjkDrWWcQWD-Rnw,6726
130
130
  core/services/update.py,sha256=8me-Gy2Esi5HeTX1PdFI0U4vVMqKkeBHzc_SpaGuJ5g,9281
@@ -150,7 +150,7 @@ core/services/wordpress_import/rollback.py,sha256=NomM71QsBI3nt1Y_Hpod2nw-E9kpXQ
150
150
  core/services/wordpress_import/verification.py,sha256=efaTdah8oc63MsqJv-OWuse81ukxuLxl1xSwMYybJNY,19701
151
151
  core/services/wordpress_import/wxr_parser.py,sha256=GrfiMoSj75hp3beHx9aLe-lxXtoWmq5eP_Jzx8UajKE,15982
152
152
  core/templates/admin/backup.html,sha256=Di93BRvmyxdvF-eOAMKTYFB7qubH1Fms7ppYbJ3YHiA,3165
153
- core/templates/admin/base.html,sha256=yWQNumbtcLIE0iffIoDB2xTF-9W5bt2mdsMYqA5QOa0,23926
153
+ core/templates/admin/base.html,sha256=jsOz2mG2HzDhTriZ3Pi6Z3MjsxGnoGvMqDzlSJz737Q,24127
154
154
  core/templates/admin/comments.html,sha256=AEzCMYu1-EdFC1yUa9oIObtRS-U9RlMTe_5P3O5alb8,10012
155
155
  core/templates/admin/customize.html,sha256=UohKyxBDmKhtbOiipyRkFJlrD_5u0JIc8b7--U5EuUk,18631
156
156
  core/templates/admin/dashboard.html,sha256=WzURfANu1k9AIjdP82fwJE1o3sRhNVr77iUCRfUoBm8,3439
@@ -179,6 +179,7 @@ themes/blog/theme.yaml,sha256=ic_WJaBg9fKMOTFf8-E-wP3GODjdizoj9-CepSzCBFE,2207
179
179
  themes/blog/templates/base.html,sha256=kD93PGSKCMEOEVieuPwHGmGlIsUGDm84O1n9E1lOUOA,11705
180
180
  themes/blog/templates/home.html,sha256=TqCgSP9Uz_ALyc59jbdZnMtJrerey7zd9_yl0jUjnVI,1911
181
181
  themes/blog/templates/post.html,sha256=-h4DwJuMTAAJmoNkg0NJDqe6StzuEfJtfRDDZ5L9MmI,6229
182
+ themes/corporate/customizations.json,sha256=UgAoQniAcTcUm5rPu0uoSdBZ2xvN5SpuoMt9Rh8hU9E,820
182
183
  themes/corporate/theme.yaml,sha256=jPVAkwmKr6KniZ0uBw6PJNkZLdbOF7mq6j_drf3IGPI,2503
183
184
  themes/corporate/templates/base.html,sha256=qN1bwJjc3Q7j7rCs_Y-Tg76KVPllENCWYC91o6t6hUQ,13976
184
185
  themes/corporate/templates/home.html,sha256=PrbLkEup19Eg-lYS9QpcSJyOTycmv0mhaoKRJqy_eFY,3216
@@ -188,7 +189,7 @@ themes/default/theme.yaml,sha256=tgcUP1YFptyXVNL2a8DBiPrP7zTjWNH62Cy9D_w6Chk,187
188
189
  themes/default/templates/404.html,sha256=6pYUz7zg5hx3nikgxiZWSkwYnv2nENCSV3KjdIF0_lE,1105
189
190
  themes/default/templates/500.html,sha256=CtU3gEsHsxAh-vbcnx5McH8V8ruKtdP8usj8hPuu8zY,1174
190
191
  themes/default/templates/archive.html,sha256=ZHBxPYewvc2TbrsB745LYO2uM5SJbTFQQR6savWUzYg,2385
191
- themes/default/templates/base.html,sha256=06hSyyeAHqfG2thvMMMUQnxgRTdRD4DCGKieThSzEGM,11901
192
+ themes/default/templates/base.html,sha256=7M0D8J5SX-Y4V8_GYVO22Rk7BOx7Ob_OFfcjpNYBuBo,12635
192
193
  themes/default/templates/category.html,sha256=k-yN0vFoOpgxgg6DlGin5X4IzVDBG9xRZ0FOD7OJtU8,3061
193
194
  themes/default/templates/channel.html,sha256=1i1zkAWmvpcqyoEfaeQNDc2zrMao2xSXCkjRuwzxOUU,3213
194
195
  themes/default/templates/form.html,sha256=KFrFS6qxHELPrpRB0B_BNU-uqM3k11oMYwd6oY3qoPQ,8685
@@ -203,8 +204,8 @@ themes/minimal/templates/base.html,sha256=LFkx-XLDMGH7oFHHa0e6KPB0DJITOBvr6GtPkD
203
204
  themes/minimal/templates/home.html,sha256=ygYQgYj1OGCiKwmfsxwkPselVKT8vDH3jLLbfphpqKI,1577
204
205
  themes/minimal/templates/page.html,sha256=7Xcoq-ryaxlp913H2S1ishrAro2wsqqGmvsm1osXxd4,389
205
206
  themes/minimal/templates/post.html,sha256=FkTRHci8HNIIi3DU6Mb3oL0aDisGyDcsT_IUDwHmrvo,1387
206
- focomy-0.1.117.dist-info/METADATA,sha256=3zOi-f0VwCbVG8wwNQKX0t3_YY2v797WC2unUXNuJQ0,7042
207
- focomy-0.1.117.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
208
- focomy-0.1.117.dist-info/entry_points.txt,sha256=_rF-wxGI1axY7gox3DBsTLHq-JrFKkMCjA65a6b_oqE,41
209
- focomy-0.1.117.dist-info/licenses/LICENSE,sha256=z9Z7gN7NNV7zYCaY-Knh3bv8RBCu89VueYtAlN_-lro,1063
210
- focomy-0.1.117.dist-info/RECORD,,
207
+ focomy-0.1.119.dist-info/METADATA,sha256=oY4MenoazpK5kOyrGpp65GOSipjHfzdKbaPYMfeYzHo,7042
208
+ focomy-0.1.119.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
209
+ focomy-0.1.119.dist-info/entry_points.txt,sha256=_rF-wxGI1axY7gox3DBsTLHq-JrFKkMCjA65a6b_oqE,41
210
+ focomy-0.1.119.dist-info/licenses/LICENSE,sha256=z9Z7gN7NNV7zYCaY-Knh3bv8RBCu89VueYtAlN_-lro,1063
211
+ focomy-0.1.119.dist-info/RECORD,,
@@ -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 %}