PluginProbe
Darkify – Dark Mode & Night Mode for Website & Admin (Dark Theme Included) / 2.1.3
Darkify – Dark Mode & Night Mode for Website & Admin (Dark Theme Included) v2.1.3
2.1.3 2.1.2 2.1.1 2.1.0 2.0.4 2.0.3 2.0.2 2.0.1 2.0.0 1.5.5 1.5.4 1.5.3 1.5.2 1.5.1 1.5.0 trunk 1.0.1 1.1.0 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.3.0 All 57 releases
← All changes | src/Admin/Views/Control.php +220 -0 2.0.02.1.3 View file →
@@ -27,8 +27,14 @@
27 27 {
28 28 Darkify::createSection(
29 29 $prefix,
30 30 array(
31 + // Explicit, locale-independent id. Without it the REST layer falls
32 + // back to sanitize_title() of the *translated* title, so the route
33 + // became #/sterowanie on a Polish site and every link 404'd inside
34 + // the SPA. Value matches the old English slug so existing
35 + // `#tab=` / `#/controls` bookmarks keep resolving.
36 + 'id' => 'controls',
31 37 'title' => esc_html__('Controls', 'darkify'),
32 38 'icon' => 'icofont-ui-settings',
33 39 'fields' => array(
34 40 array(
@@ -35,8 +41,9 @@
35 41 'type' => 'section_tab',
36 42 'tabs' => array(
37 43
38 44 array(
45 + 'id' => 'frontend',
39 46 'title' => esc_html__('Frontend', 'darkify'),
40 47 'icon' => 'icofont-computer',
41 48 'fields' => array(
42 49 // Intro line with a docs link, rendered plain above the section cards.
@@ -172,9 +179,31 @@
172 179 '</div>' .
173 180 '' .
174 181 '',
175 182 'fields' => array(
183 + /*
184 + * Which clock drives the schedule. Darkify Lite ships
185 + * only "fixed" (the start/end window below); the
186 + * sunrise/sunset schedule is a Pro feature, so its
187 + * option row carries `pro_only` — the REST layer turns
188 + * that into the `pro_options` stamp the React admin
189 + * renders as a locked, badged preview, and
190 + * strip_pro_keys() refuses to persist the value even
191 + * if a crafted request sends it.
192 + */
176 193 array(
194 + 'id' => 'time_based_dark_mode',
195 + 'type' => 'button_set',
196 + 'default' => 'fixed',
197 + 'options' => array(
198 + 'fixed' => esc_html__('Fixed times', 'darkify'),
199 + 'suncycle' => array(
200 + 'text' => esc_html__('Sunrise & sunset', 'darkify'),
201 + 'pro_only' => true,
202 + ),
203 + ),
204 + ),
205 + array(
177 206 'id' => 'time_based_dark_start',
178 207 'type' => 'datetime',
179 208 'after' => esc_html__('From', 'darkify'),
180 209 'placeholder' => esc_html__('From', 'darkify'),
@@ -203,8 +232,9 @@
203 232 ),
204 233 ),
205 234 ),
206 235 array(
236 + 'id' => 'admin',
207 237 'title' => esc_html__('Admin', 'darkify'),
208 238 'icon' => 'icofont-dashboard-web',
209 239 'fields' => array(
210 240 // Intro line with a docs link, rendered plain above the section cards.
@@ -239,9 +269,115 @@
239 269 // Commit instantly even though other fields depend on it.
240 270 'auto_save' => true,
241 271 ),
242 272
273 + /*
274 + * Admin palettes are separate from the frontend's `color_pallets`
275 + * and from each other. wp-admin is rendered by Dark Reader, which
276 + * derives a colour per source colour; a preset overrides only the
277 + * page background and text colour and lets it derive the rest.
278 + *
279 + * "Auto" is the default and the recommended value: pinning those two
280 + * flattens distinctions the derivation would otherwise keep, which
281 + * matters most on admin screens built by other plugins.
282 + *
283 + * Only the five presets darkify_apply_palette() actually defines are
284 + * listed. The block editor's toolbar dropdown offers more than that
285 + * and silently falls back for the rest — do not copy that list here.
286 + *
287 + * The swatch colours match the toolbar dropdown (.darkify-dropdown in
288 + * src/assets/css/client_main.css) so the same preset is recognisable
289 + * in both places. "Auto" shows a gradient: it has no single colour.
290 + *
291 + * These are the site-wide default. The editor's toolbar dropdown
292 + * still writes a per-user choice to localStorage, which wins for
293 + * that user — the same relationship the toolbar has always had.
294 + */
243 295 array(
296 + 'id' => 'admin_panel_palette',
297 + 'type' => 'select',
298 + 'title' => esc_html__('Admin Panel Palette', 'darkify'),
299 + 'title_help' =>
300 + '<div class="darkify-info-label">' .
301 + __('Color preset for the WordPress admin. Auto lets Darkify derive each color from the original.', 'darkify') .
302 + '</div>',
303 + 'default' => 'auto',
304 + 'options' => array(
305 + 'auto' => array(
306 + 'text' => esc_html__('Auto (recommended)', 'darkify'),
307 + 'swatch' => 'linear-gradient(135deg, #0f0f0f 0%, #3a3a3a 50%, #8f8f8f 100%)',
308 + ),
309 + 'set1' => array(
310 + 'text' => esc_html__('Carbon Mist', 'darkify'),
311 + 'swatch' => '#171717',
312 + ),
313 + 'set3' => array(
314 + 'text' => esc_html__('Midnight Reverie', 'darkify'),
315 + 'swatch' => '#4e478d',
316 + ),
317 + 'set9' => array(
318 + 'text' => esc_html__('Verdant Depths', 'darkify'),
319 + 'swatch' => '#073d2f',
320 + ),
321 + 'set6' => array(
322 + 'text' => esc_html__('Celestial Tide', 'darkify'),
323 + 'swatch' => '#144e78',
324 + ),
325 + 'set10' => array(
326 + 'text' => esc_html__('Emberwood', 'darkify'),
327 + 'swatch' => '#372911',
328 + ),
329 +
330 + /*
331 + * Pro presets, listed after every one that works here so the
332 + * usable list is not diluted at the top.
333 + *
334 + * These are not new upsell surface. The block editor's toolbar
335 + * dropdown has always offered all eleven names while
336 + * darkify_apply_palette() defines only five, so picking one of
337 + * these silently rendered Carbon Mist — they looked broken
338 + * rather than gated. Marking them is what makes that honest.
339 + *
340 + * `pro_only` is the whole mechanism: locked_option_keys() turns
341 + * it into the `pro_options` stamp the React admin renders as a
342 + * disabled, badged row, and strip_pro_keys() refuses to persist
343 + * the value even if a crafted request sends it.
344 + */
345 + 'set2' => array(
346 + 'text' => esc_html__('Glacier Drift', 'darkify'),
347 + 'swatch' => '#123d52',
348 + 'pro_only' => true,
349 + ),
350 + 'set4' => array(
351 + 'text' => esc_html__('Indigo Veil', 'darkify'),
352 + 'swatch' => '#46598c',
353 + 'pro_only' => true,
354 + ),
355 + 'set5' => array(
356 + 'text' => esc_html__('Duskmire', 'darkify'),
357 + 'swatch' => '#403953',
358 + 'pro_only' => true,
359 + ),
360 + 'set7' => array(
361 + 'text' => esc_html__('Tidal Frost', 'darkify'),
362 + 'swatch' => '#286f8d',
363 + 'pro_only' => true,
364 + ),
365 + 'set8' => array(
366 + 'text' => esc_html__('Blue Bastion', 'darkify'),
367 + 'swatch' => '#244892',
368 + 'pro_only' => true,
369 + ),
370 + 'set11' => array(
371 + 'text' => esc_html__('Crimson Veil', 'darkify'),
372 + 'swatch' => '#440649',
373 + 'pro_only' => true,
374 + ),
375 + ),
376 + 'dependency' => array('enable_admin_panel_dark_mode', '==', 'true'),
377 + ),
378 +
379 + array(
244 380 'id' => 'block_editor_dark_mode',
245 381 'type' => 'switcher',
246 382 'title' => esc_html__('Block Editor Dark Mode', 'darkify'),
247 383 'title_help' =>
@@ -254,8 +390,92 @@
254 390 'text_off' => esc_html__('Disabled', 'darkify'),
255 391 'default' => false,
256 392 'text_width' => 100,
257 393 ),
394 + array(
395 + 'id' => 'block_editor_palette',
396 + 'type' => 'select',
397 + 'title' => esc_html__('Block Editor Palette', 'darkify'),
398 + 'title_help' =>
399 + '<div class="darkify-info-label">' .
400 + __('Color preset for the block editor, independent of the rest of the admin.', 'darkify') .
401 + '</div>',
402 + 'default' => 'auto',
403 + 'options' => array(
404 + 'auto' => array(
405 + 'text' => esc_html__('Auto (recommended)', 'darkify'),
406 + 'swatch' => 'linear-gradient(135deg, #0f0f0f 0%, #3a3a3a 50%, #8f8f8f 100%)',
407 + ),
408 + 'set1' => array(
409 + 'text' => esc_html__('Carbon Mist', 'darkify'),
410 + 'swatch' => '#171717',
411 + ),
412 + 'set3' => array(
413 + 'text' => esc_html__('Midnight Reverie', 'darkify'),
414 + 'swatch' => '#4e478d',
415 + ),
416 + 'set9' => array(
417 + 'text' => esc_html__('Verdant Depths', 'darkify'),
418 + 'swatch' => '#073d2f',
419 + ),
420 + 'set6' => array(
421 + 'text' => esc_html__('Celestial Tide', 'darkify'),
422 + 'swatch' => '#144e78',
423 + ),
424 + 'set10' => array(
425 + 'text' => esc_html__('Emberwood', 'darkify'),
426 + 'swatch' => '#372911',
427 + ),
428 +
429 + /*
430 + * Pro presets, listed after every one that works here so the
431 + * usable list is not diluted at the top.
432 + *
433 + * These are not new upsell surface. The block editor's toolbar
434 + * dropdown has always offered all eleven names while
435 + * darkify_apply_palette() defines only five, so picking one of
436 + * these silently rendered Carbon Mist — they looked broken
437 + * rather than gated. Marking them is what makes that honest.
438 + *
439 + * `pro_only` is the whole mechanism: locked_option_keys() turns
440 + * it into the `pro_options` stamp the React admin renders as a
441 + * disabled, badged row, and strip_pro_keys() refuses to persist
442 + * the value even if a crafted request sends it.
443 + */
444 + 'set2' => array(
445 + 'text' => esc_html__('Glacier Drift', 'darkify'),
446 + 'swatch' => '#123d52',
447 + 'pro_only' => true,
448 + ),
449 + 'set4' => array(
450 + 'text' => esc_html__('Indigo Veil', 'darkify'),
451 + 'swatch' => '#46598c',
452 + 'pro_only' => true,
453 + ),
454 + 'set5' => array(
455 + 'text' => esc_html__('Duskmire', 'darkify'),
456 + 'swatch' => '#403953',
457 + 'pro_only' => true,
458 + ),
459 + 'set7' => array(
460 + 'text' => esc_html__('Tidal Frost', 'darkify'),
461 + 'swatch' => '#286f8d',
462 + 'pro_only' => true,
463 + ),
464 + 'set8' => array(
465 + 'text' => esc_html__('Blue Bastion', 'darkify'),
466 + 'swatch' => '#244892',
467 + 'pro_only' => true,
468 + ),
469 + 'set11' => array(
470 + 'text' => esc_html__('Crimson Veil', 'darkify'),
471 + 'swatch' => '#440649',
472 + 'pro_only' => true,
473 + ),
474 + ),
475 + 'dependency' => array('block_editor_dark_mode', '==', 'true'),
476 + ),
477 +
258 478 array(
259 479 'id' => 'classic_editor_dark_mode',
260 480 'type' => 'switcher',
261 481 'title' => esc_html__('Classic Editor Dark Mode', 'darkify'),