Dotclear

source: themes/ductile/_config.php @ 3902:861a3d1a15f3

Revision 3902:861a3d1a15f3, 24.0 KB checked in by franck <carnet.franck.paul@…>, 7 years ago (diff)

Use numeric fields (with min/max) for sortering items (categories, …), fix ordering of simple menu items when drag'n'drop is disabled

Line 
1<?php
2/**
3 * @brief Ductile, a theme for Dotclear 2
4 *
5 * @package Dotclear
6 * @subpackage Themes
7 *
8 * @copyright Olivier Meunier & Association Dotclear
9 * @copyright GPL-2.0-only
10 */
11
12if (!defined('DC_CONTEXT_ADMIN')) {return;}
13
14l10n::set(dirname(__FILE__) . '/locales/' . $_lang . '/admin');
15
16if (preg_match('#^http(s)?://#', $core->blog->settings->system->themes_url)) {
17    $img_url = http::concatURL($core->blog->settings->system->themes_url, '/' . $core->blog->settings->system->theme . '/img/');
18} else {
19    $img_url = http::concatURL($core->blog->url, $core->blog->settings->system->themes_url . '/' . $core->blog->settings->system->theme . '/img/');
20}
21$img_path = dirname(__FILE__) . '/img/';
22
23$tpl_path = dirname(__FILE__) . '/tpl/';
24
25$standalone_config = (boolean) $core->themes->moduleInfo($core->blog->settings->system->theme, 'standalone_config');
26
27// Load contextual help
28if (file_exists(dirname(__FILE__) . '/locales/' . $_lang . '/resources.php')) {
29    require dirname(__FILE__) . '/locales/' . $_lang . '/resources.php';
30}
31
32$list_types = [
33    __('Title') => 'title',
34    __('Short') => 'short',
35    __('Full')  => 'full'
36];
37// Get all _entry-*.html in tpl folder of theme
38$list_types_templates = files::scandir($tpl_path);
39if (is_array($list_types_templates)) {
40    foreach ($list_types_templates as $v) {
41        if (preg_match('/^_entry\-(.*)\.html$/', $v, $m)) {
42            if (isset($m[1])) {
43                if (!in_array($m[1], $list_types)) {
44                    // template not already in full list
45                    $list_types[__($m[1])] = $m[1];
46                }
47            }
48        }
49    }
50}
51
52$contexts = [
53    'default'      => __('Home (first page)'),
54    'default-page' => __('Home (other pages)'),
55    'category'     => __('Entries for a category'),
56    'tag'          => __('Entries for a tag'),
57    'search'       => __('Search result entries'),
58    'archive'      => __('Month archive entries')
59];
60
61$fonts = [
62    __('Default')           => '',
63    __('Ductile primary')   => 'Ductile body',
64    __('Ductile secondary') => 'Ductile alternate',
65    __('Times New Roman')   => 'Times New Roman',
66    __('Georgia')           => 'Georgia',
67    __('Garamond')          => 'Garamond',
68    __('Helvetica/Arial')   => 'Helvetica/Arial',
69    __('Verdana')           => 'Verdana',
70    __('Trebuchet MS')      => 'Trebuchet MS',
71    __('Impact')            => 'Impact',
72    __('Monospace')         => 'Monospace'
73];
74
75$webfont_apis = [
76    __('none')                => '',
77    __('javascript (Adobe)')  => 'js',
78    __('stylesheet (Google)') => 'css'
79];
80
81$font_families = [
82    // Theme standard
83    'Ductile body'      => '"Century Schoolbook", "Century Schoolbook L", Georgia, serif',
84    'Ductile alternate' => '"Franklin gothic medium", "arial narrow", "DejaVu Sans Condensed", "helvetica neue", helvetica, sans-serif',
85
86    // Serif families
87    'Times New Roman'   => 'Cambria, "Hoefler Text", Utopia, "Liberation Serif", "Nimbus Roman No9 L Regular", Times, "Times New Roman", serif',
88    'Georgia'           => 'Constantia, "Lucida Bright", Lucidabright, "Lucida Serif", Lucida, "DejaVu Serif", "Bitstream Vera Serif", "Liberation Serif", Georgia, serif',
89    'Garamond'          => '"Palatino Linotype", Palatino, Palladio, "URW Palladio L", "Book Antiqua", Baskerville, "Bookman Old Style", "Bitstream Charter", "Nimbus Roman No9 L", Garamond, "Apple Garamond", "ITC Garamond Narrow", "New Century Schoolbook", "Century Schoolbook", "Century Schoolbook L", Georgia, serif',
90
91    // Sans-serif families
92    'Helvetica/Arial'   => 'Frutiger, "Frutiger Linotype", Univers, Calibri, "Gill Sans", "Gill Sans MT", "Myriad Pro", Myriad, "DejaVu Sans Condensed", "Liberation Sans", "Nimbus Sans L", Tahoma, Geneva, "Helvetica Neue", Helvetica, Arial, sans-serif',
93    'Verdana'           => 'Corbel, "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", "DejaVu Sans", "Bitstream Vera Sans", "Liberation Sans", Verdana, "Verdana Ref", sans-serif',
94    'Trebuchet MS'      => '"Segoe UI", Candara, "Bitstream Vera Sans", "DejaVu Sans", "Bitstream Vera Sans", "Trebuchet MS", Verdana, "Verdana Ref", sans-serif',
95
96    // Cursive families
97    'Impact'            => 'Impact, Haettenschweiler, "Franklin Gothic Bold", Charcoal, "Helvetica Inserat", "Bitstream Vera Sans Bold", "Arial Black", sans-serif',
98
99    // Monospace families
100    'Monospace'         => 'Consolas, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", Monaco, "Courier New", Courier, monospace'
101];
102
103function fontDef($c)
104{
105    global $font_families;
106
107    return isset($font_families[$c]) ? '<span style="position:absolute;top:0;left:32em;">' . $font_families[$c] . '</span>' : '';
108}
109
110$ductile_base = [
111    // HTML
112    'subtitle_hidden'          => null,
113    'logo_src'                 => null,
114    'preview_not_mandatory'    => null,
115    // CSS
116    'body_font'                => null,
117    'body_webfont_family'      => null,
118    'body_webfont_url'         => null,
119    'body_webfont_api'         => null,
120    'alternate_font'           => null,
121    'alternate_webfont_family' => null,
122    'alternate_webfont_url'    => null,
123    'alternate_webfont_api'    => null,
124    'blog_title_w'             => null,
125    'blog_title_s'             => null,
126    'blog_title_c'             => null,
127    'post_title_w'             => null,
128    'post_title_s'             => null,
129    'post_title_c'             => null,
130    'post_link_w'              => null,
131    'post_link_v_c'            => null,
132    'post_link_f_c'            => null,
133    'blog_title_w_m'           => null,
134    'blog_title_s_m'           => null,
135    'blog_title_c_m'           => null,
136    'post_title_w_m'           => null,
137    'post_title_s_m'           => null,
138    'post_title_c_m'           => null,
139    'post_simple_title_c'      => null
140];
141
142$ductile_lists_base = [
143    'default'      => 'short',
144    'default-page' => 'short',
145    'category'     => 'short',
146    'tag'          => 'short',
147    'search'       => 'short',
148    'archive'      => 'short'
149];
150
151$ductile_counts_base = [
152    'default'      => null,
153    'default-page' => null,
154    'category'     => null,
155    'tag'          => null,
156    'search'       => null
157];
158
159$ductile_user = $core->blog->settings->themes->get($core->blog->settings->system->theme . '_style');
160$ductile_user = @unserialize($ductile_user);
161if (!is_array($ductile_user)) {
162    $ductile_user = [];
163}
164$ductile_user = array_merge($ductile_base, $ductile_user);
165
166$ductile_lists = $core->blog->settings->themes->get($core->blog->settings->system->theme . '_entries_lists');
167$ductile_lists = @unserialize($ductile_lists);
168if (!is_array($ductile_lists)) {
169    $ductile_lists = $ductile_lists_base;
170}
171$ductile_lists = array_merge($ductile_lists_base, $ductile_lists);
172
173$ductile_counts = $core->blog->settings->themes->get($core->blog->settings->system->theme . '_entries_counts');
174$ductile_counts = @unserialize($ductile_counts);
175if (!is_array($ductile_counts)) {
176    $ductile_counts = $ductile_counts_base;
177}
178$ductile_counts = array_merge($ductile_counts_base, $ductile_counts);
179
180$ductile_stickers = $core->blog->settings->themes->get($core->blog->settings->system->theme . '_stickers');
181$ductile_stickers = @unserialize($ductile_stickers);
182
183// If no stickers defined, add feed Atom one
184if (!is_array($ductile_stickers)) {
185    $ductile_stickers = [[
186        'label' => __('Subscribe'),
187        'url'   => $core->blog->url .
188        $core->url->getURLFor('feed', 'atom'),
189        'image' => 'sticker-feed.png'
190    ]];
191}
192
193$ductile_stickers_full = [];
194// Get all sticker images already used
195if (is_array($ductile_stickers)) {
196    foreach ($ductile_stickers as $v) {
197        $ductile_stickers_full[] = $v['image'];
198    }
199}
200// Get all sticker-*.png in img folder of theme
201$ductile_stickers_images = files::scandir($img_path);
202if (is_array($ductile_stickers_images)) {
203    foreach ($ductile_stickers_images as $v) {
204        if (preg_match('/^sticker\-(.*)\.png$/', $v)) {
205            if (!in_array($v, $ductile_stickers_full)) {
206                // image not already used
207                $ductile_stickers[] = [
208                    'label' => null,
209                    'url'   => null,
210                    'image' => $v];
211            }
212        }
213    }
214}
215
216$conf_tab = isset($_POST['conf_tab']) ? $_POST['conf_tab'] : 'html';
217
218if (!empty($_POST)) {
219    try
220    {
221        # HTML
222        if ($conf_tab == 'html') {
223            $ductile_user['subtitle_hidden']       = (integer) !empty($_POST['subtitle_hidden']);
224            $ductile_user['logo_src']              = $_POST['logo_src'];
225            $ductile_user['preview_not_mandatory'] = (integer) !empty($_POST['preview_not_mandatory']);
226
227            $ductile_stickers = [];
228            for ($i = 0; $i < count($_POST['sticker_image']); $i++) {
229                $ductile_stickers[] = [
230                    'label' => $_POST['sticker_label'][$i],
231                    'url'   => $_POST['sticker_url'][$i],
232                    'image' => $_POST['sticker_image'][$i]
233                ];
234            }
235
236            $order = [];
237            if (empty($_POST['ds_order']) && !empty($_POST['order'])) {
238                $order = $_POST['order'];
239                asort($order);
240                $order = array_keys($order);
241            }
242            if (!empty($order)) {
243                $new_ductile_stickers = [];
244                foreach ($order as $i => $k) {
245                    $new_ductile_stickers[] = [
246                        'label' => $ductile_stickers[$k]['label'],
247                        'url'   => $ductile_stickers[$k]['url'],
248                        'image' => $ductile_stickers[$k]['image']
249                    ];
250                }
251                $ductile_stickers = $new_ductile_stickers;
252            }
253
254            for ($i = 0; $i < count($_POST['list_type']); $i++) {
255                $ductile_lists[$_POST['list_ctx'][$i]] = $_POST['list_type'][$i];
256            }
257
258            for ($i = 0; $i < count($_POST['count_nb']); $i++) {
259                $ductile_counts[$_POST['count_ctx'][$i]] = $_POST['count_nb'][$i];
260            }
261
262        }
263
264        # CSS
265        if ($conf_tab == 'css') {
266            $ductile_user['body_font']           = $_POST['body_font'];
267            $ductile_user['body_webfont_family'] = $_POST['body_webfont_family'];
268            $ductile_user['body_webfont_url']    = $_POST['body_webfont_url'];
269            $ductile_user['body_webfont_api']    = $_POST['body_webfont_api'];
270
271            $ductile_user['alternate_font']           = $_POST['alternate_font'];
272            $ductile_user['alternate_webfont_family'] = $_POST['alternate_webfont_family'];
273            $ductile_user['alternate_webfont_url']    = $_POST['alternate_webfont_url'];
274            $ductile_user['alternate_webfont_api']    = $_POST['alternate_webfont_api'];
275
276            $ductile_user['blog_title_w'] = (integer) !empty($_POST['blog_title_w']);
277            $ductile_user['blog_title_s'] = dcThemeConfig::adjustFontSize($_POST['blog_title_s']);
278            $ductile_user['blog_title_c'] = dcThemeConfig::adjustColor($_POST['blog_title_c']);
279
280            $ductile_user['post_title_w'] = (integer) !empty($_POST['post_title_w']);
281            $ductile_user['post_title_s'] = dcThemeConfig::adjustFontSize($_POST['post_title_s']);
282            $ductile_user['post_title_c'] = dcThemeConfig::adjustColor($_POST['post_title_c']);
283
284            $ductile_user['post_link_w']   = (integer) !empty($_POST['post_link_w']);
285            $ductile_user['post_link_v_c'] = dcThemeConfig::adjustColor($_POST['post_link_v_c']);
286            $ductile_user['post_link_f_c'] = dcThemeConfig::adjustColor($_POST['post_link_f_c']);
287
288            $ductile_user['post_simple_title_c'] = dcThemeConfig::adjustColor($_POST['post_simple_title_c']);
289
290            $ductile_user['blog_title_w_m'] = (integer) !empty($_POST['blog_title_w_m']);
291            $ductile_user['blog_title_s_m'] = dcThemeConfig::adjustFontSize($_POST['blog_title_s_m']);
292            $ductile_user['blog_title_c_m'] = dcThemeConfig::adjustColor($_POST['blog_title_c_m']);
293
294            $ductile_user['post_title_w_m'] = (integer) !empty($_POST['post_title_w_m']);
295            $ductile_user['post_title_s_m'] = dcThemeConfig::adjustFontSize($_POST['post_title_s_m']);
296            $ductile_user['post_title_c_m'] = dcThemeConfig::adjustColor($_POST['post_title_c_m']);
297        }
298
299        $core->blog->settings->addNamespace('themes');
300        $core->blog->settings->themes->put($core->blog->settings->system->theme . '_style', serialize($ductile_user));
301        $core->blog->settings->themes->put($core->blog->settings->system->theme . '_stickers', serialize($ductile_stickers));
302        $core->blog->settings->themes->put($core->blog->settings->system->theme . '_entries_lists', serialize($ductile_lists));
303        $core->blog->settings->themes->put($core->blog->settings->system->theme . '_entries_counts', serialize($ductile_counts));
304
305        // Blog refresh
306        $core->blog->triggerBlog();
307
308        // Template cache reset
309        $core->emptyTemplatesCache();
310
311        dcPage::message(__('Theme configuration upgraded.'), true, true);
312    } catch (Exception $e) {
313        $core->error->add($e->getMessage());
314    }
315}
316
317// Legacy mode
318if (!$standalone_config) {
319    echo '</form>';
320}
321
322# HTML Tab
323
324echo '<div class="multi-part" id="themes-list' . ($conf_tab == 'html' ? '' : '-html') . '" title="' . __('Content') . '">' .
325'<h3>' . __('Content') . '</h3>';
326
327echo '<form id="theme_config" action="' . $core->adminurl->get('admin.blog.theme', ['conf' => '1']) .
328    '" method="post" enctype="multipart/form-data">';
329
330echo '<h4>' . __('Header') . '</h4>' .
331'<p class="field"><label for="subtitle_hidden">' . __('Hide blog description:') . '</label> ' .
332form::checkbox('subtitle_hidden', 1, $ductile_user['subtitle_hidden']) . '</p>';
333echo '<p class="field"><label for="logo_src">' . __('Logo URL:') . '</label> ' .
334form::field('logo_src', 40, 255, $ductile_user['logo_src']) . '</p>';
335if ($core->plugins->moduleExists('simpleMenu')) {
336    echo '<p>' . sprintf(__('To configure the top menu go to the <a href="%s">Simple Menu administration page</a>.'),
337        $core->adminurl->get('admin.plugin.simpleMenu')) . '</p>';
338}
339
340echo '<h4 class="border-top pretty-title">' . __('Stickers') . '</h4>';
341
342echo
343'<div class="table-outer">' .
344'<table class="dragable">' . '<caption>' . __('Stickers (footer)') . '</caption>' .
345'<thead>' .
346'<tr>' .
347'<th scope="col">' . '</th>' .
348'<th scope="col">' . __('Image') . '</th>' .
349'<th scope="col">' . __('Label') . '</th>' .
350'<th scope="col">' . __('URL') . '</th>' .
351    '</tr>' .
352    '</thead>' .
353    '<tbody id="stickerslist">';
354$count = 0;
355foreach ($ductile_stickers as $i => $v) {
356    $count++;
357    echo
358    '<tr class="line" id="l_' . $i . '">' .
359    '<td class="handle minimal">' . form::number(['order[' . $i . ']'], [
360        'min'     => 0,
361        'max'     => count($ductile_stickers),
362        'default' => $count,
363        'class'   => 'position'
364    ]) .
365    form::hidden(['dynorder[]', 'dynorder-' . $i], $i) . '</td>' .
366    '<td>' . form::hidden(['sticker_image[]'], $v['image']) . '<img src="' . $img_url . $v['image'] . '" alt="' . $v['image'] . '" /> ' . '</td>' .
367    '<td scope="row">' . form::field(['sticker_label[]', 'dsl-' . $i], 20, 255, $v['label']) . '</td>' .
368    '<td>' . form::field(['sticker_url[]', 'dsu-' . $i], 40, 255, $v['url']) . '</td>' .
369        '</tr>';
370}
371echo
372    '</tbody>' .
373    '</table></div>';
374
375echo '<h4 class="border-top pretty-title">' . __('Entries list types and limits') . '</h4>';
376
377echo '<table id="entrieslist">' . '<caption class="hidden">' . __('Entries lists') . '</caption>' .
378'<thead>' .
379'<tr>' .
380'<th scope="col">' . __('Context') . '</th>' .
381'<th scope="col">' . __('Entries list type') . '</th>' .
382'<th scope="col">' . __('Number of entries') . '</th>' .
383    '</tr>' .
384    '</thead>' .
385    '<tbody>';
386foreach ($ductile_lists as $k => $v) {
387    echo
388    '<tr>' .
389    '<td scope="row">' . $contexts[$k] . '</td>' .
390    '<td>' . form::hidden(['list_ctx[]'], $k) . form::combo(['list_type[]'], $list_types, $v) . '</td>';
391    if (array_key_exists($k, $ductile_counts)) {
392        echo '<td>' . form::hidden(['count_ctx[]'], $k) . form::number(['count_nb[]'], [
393            'min'     => 0,
394            'max'     => 999,
395            'default' => $ductile_counts[$k]
396        ]) . '</td>';
397    } else {
398        echo '<td></td>';
399    }
400    echo
401        '</tr>';
402}
403echo
404    '</tbody>' .
405    '</table>';
406
407echo '<h4 class="border-top pretty-title">' . __('Miscellaneous options') . '</h4>';
408echo '<p><label for="preview_not_mandatory" class="classic">' . __('Comment preview is not mandatory:') . '</label> ' .
409form::checkbox('preview_not_mandatory', 1, $ductile_user['preview_not_mandatory']) . '</p>';
410
411echo '<p><input type="hidden" name="conf_tab" value="html" /></p>';
412echo '<p class="clear">' . form::hidden('ds_order', '') . '<input type="submit" value="' . __('Save') . '" />' . $core->formNonce() . '</p>';
413echo '</form>';
414
415echo '</div>'; // Close tab
416
417# CSS tab
418
419echo '<div class="multi-part" id="themes-list' . ($conf_tab == 'css' ? '' : '-css') . '" title="' . __('Presentation') . '">';
420
421echo '<form id="theme_config" action="' . $core->adminurl->get('admin.blog.theme', ['conf' => '1']) .
422    '" method="post" enctype="multipart/form-data">';
423
424echo '<h3>' . __('General settings') . '</h3>';
425
426echo '<h4 class="pretty-title">' . __('Fonts') . '</h4>';
427
428echo '<div class="two-cols">';
429echo '<div class="col">';
430echo
431'<h5>' . __('Main text') . '</h5>' .
432'<p class="field"><label for="body_font">' . __('Main font:') . '</label> ' .
433form::combo('body_font', $fonts, $ductile_user['body_font']) .
434(!empty($ductile_user['body_font']) ? ' ' . fontDef($ductile_user['body_font']) : '') .
435' <span class="form-note">' . __('Set to Default to use a webfont.') . '</span>' .
436'</p>' .
437'<p class="field"><label for="body_webfont_family">' . __('Webfont family:') . '</label> ' .
438form::field('body_webfont_family', 25, 255, $ductile_user['body_webfont_family']) . '</p>' .
439'<p class="field"><label for="body_webfont_url">' . __('Webfont URL:') . '</label> ' .
440form::url('body_webfont_url', 50, 255, $ductile_user['body_webfont_url']) . '</p>' .
441'<p class="field"><label for="body_webfont_url">' . __('Webfont API:') . '</label> ' .
442form::combo('body_webfont_api', $webfont_apis, $ductile_user['body_webfont_api']) . '</p>';
443echo '</div>';
444echo '<div class="col">';
445echo
446'<h5>' . __('Secondary text') . '</h5>' .
447'<p class="field"><label for="alternate_font">' . __('Secondary font:') . '</label> ' .
448form::combo('alternate_font', $fonts, $ductile_user['alternate_font']) .
449(!empty($ductile_user['alternate_font']) ? ' ' . fontDef($ductile_user['alternate_font']) : '') .
450' <span class="form-note">' . __('Set to Default to use a webfont.') . '</span>' .
451'</p>' .
452'<p class="field"><label for="alternate_webfont_family">' . __('Webfont family:') . '</label> ' .
453form::field('alternate_webfont_family', 25, 255, $ductile_user['alternate_webfont_family']) . '</p>' .
454'<p class="field"><label for="alternate_webfont_url">' . __('Webfont URL:') . '</label> ' .
455form::url('alternate_webfont_url', 50, 255, $ductile_user['alternate_webfont_url']) . '</p>' .
456'<p class="field"><label for="alternate_webfont_api">' . __('Webfont API:') . '</label> ' .
457form::combo('alternate_webfont_api', $webfont_apis, $ductile_user['alternate_webfont_api']) . '</p>';
458echo '</div>';
459echo '</div>';
460
461echo '<h4 class="clear border-top pretty-title">' . __('Titles') . '</h4>';
462echo '<div class="two-cols">';
463echo '<div class="col">';
464echo '<h5>' . __('Blog title') . '</h5>' .
465'<p class="field"><label for="blog_title_w">' . __('In bold:') . '</label> ' .
466form::checkbox('blog_title_w', 1, $ductile_user['blog_title_w']) . '</p>' .
467
468'<p class="field"><label for="blog_title_s">' . __('Font size (in em by default):') . '</label> ' .
469form::field('blog_title_s', 7, 7, $ductile_user['blog_title_s']) . '</p>' .
470
471'<p class="field picker"><label for="blog_title_c">' . __('Color:') . '</label> ' .
472form::color('blog_title_c', ['default' => $ductile_user['blog_title_c']]) .
473dcThemeConfig::contrastRatio($ductile_user['blog_title_c'], '#ffffff',
474    (!empty($ductile_user['blog_title_s']) ? $ductile_user['blog_title_s'] : '2em'),
475    $ductile_user['blog_title_w']) .
476    '</p>';
477
478echo '</div>';
479echo '<div class="col">';
480
481echo '<h5>' . __('Post title') . '</h5>' .
482'<p class="field"><label for="post_title_w">' . __('In bold:') . '</label> ' .
483form::checkbox('post_title_w', 1, $ductile_user['post_title_w']) . '</p>' .
484
485'<p class="field"><label for="post_title_s">' . __('Font size (in em by default):') . '</label> ' .
486form::field('post_title_s', 7, 7, $ductile_user['post_title_s']) . '</p>' .
487
488'<p class="field picker"><label for="post_title_c">' . __('Color:') . '</label> ' .
489form::color('post_title_c', ['default' => $ductile_user['post_title_c']]) .
490dcThemeConfig::contrastRatio($ductile_user['post_title_c'], '#ffffff',
491    (!empty($ductile_user['post_title_s']) ? $ductile_user['post_title_s'] : '2.5em'),
492    $ductile_user['post_title_w']) .
493    '</p>';
494
495echo '</div>';
496echo '</div>';
497
498echo '<h5>' . __('Titles without link') . '</h5>' .
499
500'<p class="field picker"><label for="post_simple_title_c">' . __('Color:') . '</label> ' .
501form::color('post_simple_title_c', ['default' => $ductile_user['post_simple_title_c']]) .
502dcThemeConfig::contrastRatio($ductile_user['post_simple_title_c'], '#ffffff',
503    '1.1em', // H5 minimum size
504    false) .
505    '</p>';
506
507echo '<h4 class="border-top pretty-title">' . __('Inside posts links') . '</h4>' .
508'<p class="field"><label for="post_link_w">' . __('In bold:') . '</label> ' .
509form::checkbox('post_link_w', 1, $ductile_user['post_link_w']) . '</p>' .
510
511'<p class="field picker"><label for="post_link_v_c">' . __('Normal and visited links color:') . '</label> ' .
512form::color('post_link_v_c', ['default' => $ductile_user['post_link_v_c']]) .
513dcThemeConfig::contrastRatio($ductile_user['post_link_v_c'], '#ffffff',
514    '1em',
515    $ductile_user['post_link_w']) .
516'</p>' .
517
518'<p class="field picker"><label for="post_link_f_c">' . __('Active, hover and focus links color:') . '</label> ' .
519form::color('post_link_f_c', ['default' => $ductile_user['post_link_f_c']]) .
520dcThemeConfig::contrastRatio($ductile_user['post_link_f_c'], '#ebebee',
521    '1em',
522    $ductile_user['post_link_w']) .
523    '</p>';
524
525echo '<h3 class="border-top">' . __('Mobile specific settings') . '</h3>';
526
527echo '<div class="two-cols">';
528echo '<div class="col">';
529
530echo '<h4 class="pretty-title">' . __('Blog title') . '</h4>' .
531'<p class="field"><label for="blog_title_w_m">' . __('In bold:') . '</label> ' .
532form::checkbox('blog_title_w_m', 1, $ductile_user['blog_title_w_m']) . '</p>' .
533
534'<p class="field"><label for="blog_title_s_m">' . __('Font size (in em by default):') . '</label> ' .
535form::field('blog_title_s_m', 7, 7, $ductile_user['blog_title_s_m']) . '</p>' .
536
537'<p class="field picker"><label for="blog_title_c_m">' . __('Color:') . '</label> ' .
538form::color('blog_title_c_m', ['default' => $ductile_user['blog_title_c_m']]) .
539dcThemeConfig::contrastRatio($ductile_user['blog_title_c_m'], '#d7d7dc',
540    (!empty($ductile_user['blog_title_s_m']) ? $ductile_user['blog_title_s_m'] : '1.8em'),
541    $ductile_user['blog_title_w_m']) .
542    '</p>';
543
544echo '</div>';
545echo '<div class="col">';
546
547echo '<h4 class="pretty-title">' . __('Post title') . '</h4>' .
548'<p class="field"><label for="post_title_w_m">' . __('In bold:') . '</label> ' .
549form::checkbox('post_title_w_m', 1, $ductile_user['post_title_w_m']) . '</p>' .
550
551'<p class="field"><label for="post_title_s_m">' . __('Font size (in em by default):') . '</label> ' .
552form::field('post_title_s_m', 7, 7, $ductile_user['post_title_s_m']) . '</p>' .
553
554'<p class="field picker"><label for="post_title_c_m">' . __('Color:') . '</label> ' .
555form::color('post_title_c_m', ['default' => $ductile_user['post_title_c_m']]) .
556dcThemeConfig::contrastRatio($ductile_user['post_title_c_m'], '#ffffff',
557    (!empty($ductile_user['post_title_s_m']) ? $ductile_user['post_title_s_m'] : '1.5em'),
558    $ductile_user['post_title_w_m']) .
559    '</p>';
560
561echo '</div>';
562echo '</div>';
563
564echo '<p><input type="hidden" name="conf_tab" value="css" /></p>';
565echo '<p class="clear border-top"><input type="submit" value="' . __('Save') . '" />' . $core->formNonce() . '</p>';
566echo '</form>';
567
568echo '</div>'; // Close tab
569
570dcPage::helpBlock('ductile');
571
572// Legacy mode
573if (!$standalone_config) {
574    echo '<form style="display:none">';
575}
Note: See TracBrowser for help on using the repository browser.

Sites map