From bfecece60dd0fcf0c139747425513d0d4b9bb570 Mon Sep 17 00:00:00 2001 From: Antoine Le Gonidec Date: Wed, 24 Jul 2024 10:55:50 +0200 Subject: [PATCH] Import the theme from the Khaganat forum --- Admin.template.php | 1672 +++++++ Agreement.template.php | 88 + BoardIndex.template.php | 606 +++ Calendar.template.php | 1237 +++++ Display.template.php | 1011 ++++ Errors.template.php | 380 ++ GenericControls.template.php | 273 ++ GenericList.template.php | 187 + GenericMenu.template.php | 308 ++ Help.template.php | 176 + Likes.template.php | 102 + Login.template.php | 503 ++ ManageAttachments.template.php | 277 ++ ManageBans.template.php | 338 ++ ManageBoards.template.php | 768 +++ ManageCalendar.template.php | 86 + ManageLanguages.template.php | 367 ++ ManageMail.template.php | 80 + ManageMaintenance.template.php | 622 +++ ManageMembergroups.template.php | 752 +++ ManageMembers.template.php | 293 ++ ManageNews.template.php | 446 ++ ManagePaid.template.php | 589 +++ ManagePermissions.template.php | 939 ++++ ManageScheduledTasks.template.php | 117 + ManageSearch.template.php | 438 ++ ManageSmileys.template.php | 488 ++ Memberlist.template.php | 202 + MessageIndex.template.php | 592 +++ ModerationCenter.template.php | 689 +++ MoveTopic.template.php | 398 ++ Notify.template.php | 98 + Packages.template.php | 1868 ++++++++ PersonalMessage.template.php | 2013 ++++++++ Poll.template.php | 163 + Post.template.php | 1231 +++++ Printpage.template.php | 238 + Profile.template.php | 3508 ++++++++++++++ Recent.template.php | 443 ++ Register.template.php | 791 ++++ Reminder.template.php | 205 + ReportToMod.template.php | 97 + ReportedContent.template.php | 573 +++ Reports.template.php | 237 + Search.template.php | 474 ++ Settings.template.php | 240 + SplitTopics.template.php | 221 + Stats.template.php | 264 ++ Themes.template.php | 1183 +++++ Who.template.php | 258 + Xml.template.php | 474 ++ css/admin.css | 650 +++ css/calendar.css | 351 ++ css/calendar.rtl.css | 23 + css/index.css | 4905 ++++++++++++++++++++ css/jquery.sceditor.theme.css | 625 +++ css/responsive.css | 996 ++++ css/rtl.css | 687 +++ images/banniere.jpg | Bin 0 -> 159127 bytes images/bbc/bbc_bg.png | Bin 0 -> 425 bytes images/bbc/bbc_hoverbg.png | Bin 0 -> 583 bytes images/bbc/index.php | 9 + images/bbc/spoiler.gif | Bin 0 -> 99 bytes images/blank.png | Bin 0 -> 81 bytes images/boardicons.png | Bin 0 -> 6493 bytes images/boardicons.svg | 238 + images/buddy_useroff.png | Bin 0 -> 296 bytes images/buddy_useron.png | Bin 0 -> 570 bytes images/cake.png | Bin 0 -> 1729 bytes images/construction.png | Bin 0 -> 2794 bytes images/curve.png | Bin 0 -> 235532 bytes images/curve2.png | Bin 0 -> 222582 bytes images/forum_logo.png | Bin 0 -> 18668 bytes images/generic_attach.png | Bin 0 -> 12883 bytes images/helptopics.png | Bin 0 -> 757 bytes images/helptopics_hd.png | Bin 0 -> 1457 bytes images/icons/admin.png | Bin 0 -> 3674 bytes images/icons/admin.svg | 63 + images/icons/admin_sprite.png | Bin 0 -> 51834 bytes images/icons/alerts.png | Bin 0 -> 1923 bytes images/icons/alerts.svg | 64 + images/icons/bell.svg | 1 + images/icons/clip.png | Bin 0 -> 304 bytes images/icons/config_hd.png | Bin 0 -> 963 bytes images/icons/delete.png | Bin 0 -> 332 bytes images/icons/editor_sprite.png | Bin 0 -> 13134 bytes images/icons/generic.svg | 1 + images/icons/help.png | Bin 0 -> 2059 bytes images/icons/home.png | Bin 0 -> 1169 bytes images/icons/home.svg | 65 + images/icons/index.php | 9 + images/icons/login.png | Bin 0 -> 2491 bytes images/icons/login.svg | 63 + images/icons/logout.svg | 63 + images/icons/main_icons_sprite.png | Bin 0 -> 46821 bytes images/icons/main_icons_sprite_hd.png | Bin 0 -> 110431 bytes images/icons/members.png | Bin 0 -> 3465 bytes images/icons/members.svg | 64 + images/icons/menu.svg | 10 + images/icons/moderate.png | Bin 0 -> 1742 bytes images/icons/moderate.svg | 64 + images/icons/modify_inline.png | Bin 0 -> 632 bytes images/icons/pm.png | Bin 0 -> 2178 bytes images/icons/pm.svg | 64 + images/icons/profile.png | Bin 0 -> 2023 bytes images/icons/profile.svg | 68 + images/icons/profile_hd.png | Bin 0 -> 951 bytes images/icons/profile_sm.png | Bin 0 -> 452 bytes images/icons/recent.png | Bin 0 -> 2756 bytes images/icons/recent.svg | 64 + images/icons/search.png | Bin 0 -> 2620 bytes images/icons/search.svg | 74 + images/icons/stats_info.png | Bin 0 -> 706 bytes images/icons/toggle.png | Bin 0 -> 460 bytes images/icons/top.png | Bin 0 -> 1387 bytes images/icons/unread.png | Bin 0 -> 2933 bytes images/icons/unread.svg | 64 + images/icons/unread_replies.png | Bin 0 -> 2047 bytes images/icons/unread_replies.svg | 109 + images/icq.png | Bin 0 -> 727 bytes images/index.php | 9 + images/ip.png | Bin 0 -> 401 bytes images/loading_sm.gif | Bin 0 -> 1434 bytes images/membericons/blank.png | Bin 0 -> 81 bytes images/membericons/icon.png | Bin 0 -> 335 bytes images/membericons/iconadmin.png | Bin 0 -> 331 bytes images/membericons/icongmod.png | Bin 0 -> 322 bytes images/membericons/iconmod.png | Bin 0 -> 334 bytes images/membericons/index.php | 9 + images/new_redirect.png | Bin 0 -> 895 bytes images/post/angry.png | Bin 0 -> 815 bytes images/post/cheesy.png | Bin 0 -> 809 bytes images/post/clip.png | Bin 0 -> 545 bytes images/post/exclamation.png | Bin 0 -> 577 bytes images/post/grin.png | Bin 0 -> 802 bytes images/post/index.php | 9 + images/post/lamp.png | Bin 0 -> 797 bytes images/post/moved.png | Bin 0 -> 655 bytes images/post/poll.png | Bin 0 -> 700 bytes images/post/question.png | Bin 0 -> 613 bytes images/post/recycled.png | Bin 0 -> 809 bytes images/post/sad.png | Bin 0 -> 810 bytes images/post/smiley.png | Bin 0 -> 830 bytes images/post/thumbdown.png | Bin 0 -> 751 bytes images/post/thumbup.png | Bin 0 -> 706 bytes images/post/wink.png | Bin 0 -> 828 bytes images/post/xx.png | Bin 0 -> 621 bytes images/selected.png | Bin 0 -> 422 bytes images/selected_open.png | Bin 0 -> 400 bytes images/skype.png | Bin 0 -> 668 bytes images/smflogo.svg | 2 + images/stats_pie.png | Bin 0 -> 2927 bytes images/stats_pie_rtl.png | Bin 0 -> 2875 bytes images/thumbnail.png | Bin 0 -> 3215 bytes images/topic/index.php | 9 + images/topic/normal_post.png | Bin 0 -> 402 bytes images/topic/normal_post_locked.png | Bin 0 -> 617 bytes images/topic/normal_post_locked_sticky.png | Bin 0 -> 753 bytes images/topic/normal_post_sticky.png | Bin 0 -> 577 bytes index.php | 9 + index.template.php | 887 ++++ khnav_footer.php | 1 + khnav_header.php | 1 + languages/Editor.french.php | 65 + languages/Post.english.php | 223 + languages/Post.french.php | 223 + languages/Search.english.php | 169 + languages/Search.french.php | 169 + languages/Settings.english.php | 10 + languages/index.english.php | 968 ++++ languages/index.french.php | 971 ++++ languages/index.php | 9 + scripts/jquery.sceditor.smf.js | 1010 ++++ scripts/jquery.sceditor.smf.js~ | 1012 ++++ scripts/theme.js | 60 + scripts/theme.js~ | 60 + theme_info.xml | 21 + 177 files changed, 44903 insertions(+) create mode 100644 Admin.template.php create mode 100644 Agreement.template.php create mode 100644 BoardIndex.template.php create mode 100644 Calendar.template.php create mode 100644 Display.template.php create mode 100644 Errors.template.php create mode 100644 GenericControls.template.php create mode 100644 GenericList.template.php create mode 100644 GenericMenu.template.php create mode 100644 Help.template.php create mode 100644 Likes.template.php create mode 100644 Login.template.php create mode 100644 ManageAttachments.template.php create mode 100644 ManageBans.template.php create mode 100644 ManageBoards.template.php create mode 100644 ManageCalendar.template.php create mode 100644 ManageLanguages.template.php create mode 100644 ManageMail.template.php create mode 100644 ManageMaintenance.template.php create mode 100644 ManageMembergroups.template.php create mode 100644 ManageMembers.template.php create mode 100644 ManageNews.template.php create mode 100644 ManagePaid.template.php create mode 100644 ManagePermissions.template.php create mode 100644 ManageScheduledTasks.template.php create mode 100644 ManageSearch.template.php create mode 100644 ManageSmileys.template.php create mode 100644 Memberlist.template.php create mode 100644 MessageIndex.template.php create mode 100644 ModerationCenter.template.php create mode 100644 MoveTopic.template.php create mode 100644 Notify.template.php create mode 100644 Packages.template.php create mode 100644 PersonalMessage.template.php create mode 100644 Poll.template.php create mode 100644 Post.template.php create mode 100644 Printpage.template.php create mode 100644 Profile.template.php create mode 100644 Recent.template.php create mode 100644 Register.template.php create mode 100644 Reminder.template.php create mode 100644 ReportToMod.template.php create mode 100644 ReportedContent.template.php create mode 100644 Reports.template.php create mode 100644 Search.template.php create mode 100644 Settings.template.php create mode 100644 SplitTopics.template.php create mode 100644 Stats.template.php create mode 100644 Themes.template.php create mode 100644 Who.template.php create mode 100644 Xml.template.php create mode 100644 css/admin.css create mode 100644 css/calendar.css create mode 100644 css/calendar.rtl.css create mode 100644 css/index.css create mode 100644 css/jquery.sceditor.theme.css create mode 100644 css/responsive.css create mode 100644 css/rtl.css create mode 100644 images/banniere.jpg create mode 100644 images/bbc/bbc_bg.png create mode 100644 images/bbc/bbc_hoverbg.png create mode 100644 images/bbc/index.php create mode 100644 images/bbc/spoiler.gif create mode 100644 images/blank.png create mode 100644 images/boardicons.png create mode 100644 images/boardicons.svg create mode 100644 images/buddy_useroff.png create mode 100644 images/buddy_useron.png create mode 100644 images/cake.png create mode 100644 images/construction.png create mode 100644 images/curve.png create mode 100644 images/curve2.png create mode 100644 images/forum_logo.png create mode 100644 images/generic_attach.png create mode 100644 images/helptopics.png create mode 100644 images/helptopics_hd.png create mode 100644 images/icons/admin.png create mode 100644 images/icons/admin.svg create mode 100644 images/icons/admin_sprite.png create mode 100644 images/icons/alerts.png create mode 100644 images/icons/alerts.svg create mode 100644 images/icons/bell.svg create mode 100644 images/icons/clip.png create mode 100644 images/icons/config_hd.png create mode 100644 images/icons/delete.png create mode 100644 images/icons/editor_sprite.png create mode 100644 images/icons/generic.svg create mode 100644 images/icons/help.png create mode 100644 images/icons/home.png create mode 100644 images/icons/home.svg create mode 100644 images/icons/index.php create mode 100644 images/icons/login.png create mode 100644 images/icons/login.svg create mode 100644 images/icons/logout.svg create mode 100644 images/icons/main_icons_sprite.png create mode 100644 images/icons/main_icons_sprite_hd.png create mode 100644 images/icons/members.png create mode 100644 images/icons/members.svg create mode 100644 images/icons/menu.svg create mode 100644 images/icons/moderate.png create mode 100644 images/icons/moderate.svg create mode 100644 images/icons/modify_inline.png create mode 100644 images/icons/pm.png create mode 100644 images/icons/pm.svg create mode 100644 images/icons/profile.png create mode 100644 images/icons/profile.svg create mode 100644 images/icons/profile_hd.png create mode 100644 images/icons/profile_sm.png create mode 100644 images/icons/recent.png create mode 100644 images/icons/recent.svg create mode 100644 images/icons/search.png create mode 100644 images/icons/search.svg create mode 100644 images/icons/stats_info.png create mode 100644 images/icons/toggle.png create mode 100644 images/icons/top.png create mode 100644 images/icons/unread.png create mode 100644 images/icons/unread.svg create mode 100644 images/icons/unread_replies.png create mode 100644 images/icons/unread_replies.svg create mode 100644 images/icq.png create mode 100644 images/index.php create mode 100644 images/ip.png create mode 100644 images/loading_sm.gif create mode 100644 images/membericons/blank.png create mode 100644 images/membericons/icon.png create mode 100644 images/membericons/iconadmin.png create mode 100644 images/membericons/icongmod.png create mode 100644 images/membericons/iconmod.png create mode 100644 images/membericons/index.php create mode 100644 images/new_redirect.png create mode 100644 images/post/angry.png create mode 100644 images/post/cheesy.png create mode 100644 images/post/clip.png create mode 100644 images/post/exclamation.png create mode 100644 images/post/grin.png create mode 100644 images/post/index.php create mode 100644 images/post/lamp.png create mode 100644 images/post/moved.png create mode 100644 images/post/poll.png create mode 100644 images/post/question.png create mode 100644 images/post/recycled.png create mode 100644 images/post/sad.png create mode 100644 images/post/smiley.png create mode 100644 images/post/thumbdown.png create mode 100644 images/post/thumbup.png create mode 100644 images/post/wink.png create mode 100644 images/post/xx.png create mode 100644 images/selected.png create mode 100644 images/selected_open.png create mode 100644 images/skype.png create mode 100644 images/smflogo.svg create mode 100644 images/stats_pie.png create mode 100644 images/stats_pie_rtl.png create mode 100644 images/thumbnail.png create mode 100644 images/topic/index.php create mode 100644 images/topic/normal_post.png create mode 100644 images/topic/normal_post_locked.png create mode 100644 images/topic/normal_post_locked_sticky.png create mode 100644 images/topic/normal_post_sticky.png create mode 100644 index.php create mode 100644 index.template.php create mode 120000 khnav_footer.php create mode 120000 khnav_header.php create mode 100644 languages/Editor.french.php create mode 100644 languages/Post.english.php create mode 100644 languages/Post.french.php create mode 100644 languages/Search.english.php create mode 100644 languages/Search.french.php create mode 100644 languages/Settings.english.php create mode 100644 languages/index.english.php create mode 100644 languages/index.french.php create mode 100644 languages/index.php create mode 100644 scripts/jquery.sceditor.smf.js create mode 100644 scripts/jquery.sceditor.smf.js~ create mode 100644 scripts/theme.js create mode 100644 scripts/theme.js~ create mode 100644 theme_info.xml diff --git a/Admin.template.php b/Admin.template.php new file mode 100644 index 0000000..5b69864 --- /dev/null +++ b/Admin.template.php @@ -0,0 +1,1672 @@ +'; + + echo ' +
'; + + // Display the "live news" from simplemachines.org. + echo ' +
+
+

+ ', $txt['live'], ' +

+
+
+
', $txt['smf_news_cant_connect'], '
+
+
'; + + // Show the user version information from their server. + echo ' +
+ +
+
+ ', $txt['support_versions'], ':
+ ', $txt['support_versions_forum'], ': + ', $context['forum_version'], '
+ ', $txt['support_versions_current'], ': + ??
+ ', $context['can_admin'] ? '' . $txt['version_check_more'] . '' : '', '
'; + + // Display all the members who can administrate the forum. + echo ' +
+ ', $txt['administrators'], ': + ', implode(', ', $context['administrators']); + + // If we have lots of admins... don't show them all. + if (!empty($context['more_admins_link'])) + echo ' + (', $context['more_admins_link'], ')'; + + echo ' +
+
+
+
'; + + foreach ($context[$context['admin_menu_name']]['sections'] as $area_id => $area) + { + echo ' +
+ ', $area['title'], ''; + + foreach ($area['areas'] as $item_id => $item) + { + // No point showing the 'home' page here, we're already on it! + if ($area_id == 'forum' && $item_id == 'index') + continue; + + $url = isset($item['url']) ? $item['url'] : $scripturl . '?action=admin;area=' . $item_id . (!empty($context[$context['admin_menu_name']]['extra_parameters']) ? $context[$context['admin_menu_name']]['extra_parameters'] : ''); + + if (!empty($item['icon_file'])) + echo ' + ', $item['label'], ''; + else + echo ' + ', $item['label'], ''; + } + + echo ' +
'; + } + + // The below functions include all the scripts needed from the simplemachines.org site. The language and format are passed for internationalization. + if (empty($modSettings['disable_smf_js'])) + echo ' + + '; + + // This sets the announcements and current versions themselves ;). + echo ' + '; +} + +/** + * Show some support information and credits to those who helped make this. + */ +function template_credits() +{ + global $context, $settings, $scripturl, $txt; + + // Show the user version information from their server. + echo ' +
+
+

+ ', $txt['support_title'], ' +

+
+
+ + ', $txt['support_versions'], ':
+ ', $txt['support_versions_forum'], ': + ', $context['forum_version'], '', $context['can_admin'] ? ' ' . $txt['version_check_more'] . '' : '', '
+ ', $txt['support_versions_current'], ': + ??
'; + + // Display all the variables we have server information for. + foreach ($context['current_versions'] as $version) + { + echo ' + ', $version['title'], ': + ', $version['version'], ''; + + // more details for this item, show them a link + if ($context['can_admin'] && isset($version['more'])) + echo + ' ', $txt['version_check_more'], ''; + echo ' +
'; + } + + echo ' +
'; + + // Point the admin to common support resources. + echo ' +
+

+ ', $txt['support_resources'], ' +

+
+
+

', $txt['support_resources_p1'], '

+

', $txt['support_resources_p2'], '

+
'; + + // The most important part - the credits :P. + echo ' +
+

+ ', $txt['admin_credits'], ' +

+
+
'; + + foreach ($context['credits'] as $section) + { + if (isset($section['pretext'])) + echo ' +

', $section['pretext'], '

+
'; + + echo ' +
'; + + foreach ($section['groups'] as $group) + { + if (isset($group['title'])) + echo ' +
+ ', $group['title'], ': +
'; + + echo ' +
', implode(', ', $group['members']), '
'; + } + + echo ' +
'; + + if (isset($section['posttext'])) + echo ' +
+

', $section['posttext'], '

'; + } + + echo ' +
+
'; + + // This makes all the support information available to the support script... + echo ' + + + '; + + // This sets the latest support stuff. + echo ' + '; +} + +/** + * Displays information about file versions installed, and compares them to current version. + */ +function template_view_versions() +{ + global $context, $scripturl, $txt; + + echo ' +
+

+ ', $txt['admin_version_check'], ' +

+
+
', $txt['version_check_desc'], '
+
+ + + + + + + + + '; + + // The current version of the core SMF package. + echo ' + + + + + '; + + // Now list all the source file versions, starting with the overall version (if all match!). + echo ' + + + + + + +
+ ', $txt['admin_smffile'], ' + + ', $txt['dvc_your'], ' + + ', $txt['dvc_current'], ' +
+ ', $txt['admin_smfpackage'], ' + + ', $context['forum_version'], ' + + ?? +
+ ', $txt['dvc_sources'], ' + + ?? + + ?? +
+ + + '; + + // Loop through every source file displaying its version - using javascript. + foreach ($context['file_versions'] as $filename => $version) + echo ' + + + + + '; + + // Default template files. + echo ' + +
+ ', $filename, ' + + ', $version, ' + + ?? +
+ + + + + + + + + +
+ ', $txt['dvc_default'], ' + + ?? + + ?? +
+ + + '; + + foreach ($context['default_template_versions'] as $filename => $version) + echo ' + + + + + '; + + // Now the language files... + echo ' + +
+ ', $filename, ' + + ', $version, ' + + ?? +
+ + + + + + + + + +
+ ', $txt['dvc_languages'], ' + + ?? + + ?? +
+ + + '; + + foreach ($context['default_language_versions'] as $language => $files) + { + foreach ($files as $filename => $version) + echo ' + + + + + '; + } + + echo ' + +
+ ', $filename, '.', $language, '.php + + ', $version, ' + + ?? +
'; + + // Display the version information for the currently selected theme - if it is not the default one. + if (!empty($context['template_versions'])) + { + echo ' + + + + + + + + +
+ ', $txt['dvc_templates'], ' + + ?? + + ?? +
+ + + '; + + foreach ($context['template_versions'] as $filename => $version) + echo ' + + + + + '; + + echo ' + +
+ ', $filename, ' + + ', $version, ' + + ?? +
'; + } + + // Display the tasks files version. + if (!empty($context['tasks_versions'])) + { + echo ' + + + + + + + + +
+ ', $txt['dvc_tasks'], ' + + ?? + + ?? +
+ + + '; + + foreach ($context['tasks_versions'] as $filename => $version) + echo ' + + + + + '; + + echo ' + +
+ ', $filename, ' + + ', $version, ' + + ?? +
'; + } + + echo ' +
'; + + /* Below is the hefty javascript for this. Upon opening the page it checks the current file versions with ones + held at simplemachines.org and works out if they are up to date. If they aren't it colors that files number + red. It also contains the function, swapOption, that toggles showing the detailed information for each of the + file categories. (sources, languages, and templates.) */ + echo ' + + '; + +} + +/** + * Form for stopping people using naughty words, etc. + */ +function template_edit_censored() +{ + global $context, $scripturl, $txt, $modSettings; + + if (!empty($context['saved_successful'])) + echo ' +
', $txt['settings_saved'], '
'; + + // First section is for adding/removing words from the censored list. + echo ' +
+
+

+ ', $txt['admin_censored_words'], ' +

+
+
+

', $txt['admin_censored_where'], '

'; + + // Show text boxes for censoring [bad ] => [good ]. + foreach ($context['censored_words'] as $vulgar => $proper) + echo ' +
+ => +
'; + + // Now provide a way to censor more words. + echo ' +
+ => +
+
+ + +
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
'; + + // This table lets you test out your filters by typing in rude words and seeing what comes out. + echo ' +
+

+ ', $txt['censor_test'], ' +

+
+
+

+ + +

+
+ + + +
'; +} + +/** + * This is the page shown when we've temporarily paused things such as during maintenance tasks, sending newsletters, etc. + */ +function template_not_done() +{ + global $context, $txt, $scripturl; + + echo ' +
+

+ ', $txt['not_done_title'], ' +

+
+
+ ', $txt['not_done_reason']; + + if (!empty($context['continue_percent'])) + echo ' +
+ ', $context['continue_percent'], '% +
+
'; + + if (!empty($context['substep_enabled'])) + echo ' +
+ ', $context['substep_title'], ' (', $context['substep_continue_percent'], '%) +
+
'; + + echo ' +
'; + + // Do we have a token? + if (isset($context['not_done_token']) && isset($context[$context['not_done_token'] . '_token'], $context[$context['not_done_token'] . '_token_var'])) + echo ' + '; + + echo ' + + ', $context['continue_post_data'], ' +
+
+ '; +} + +/** + * Template for showing settings (Of any kind really!) + */ +function template_show_settings() +{ + global $context, $txt, $scripturl; + + if (!empty($context['saved_successful'])) + echo ' +
', $txt['settings_saved'], '
'; + elseif (!empty($context['saved_failed'])) + echo ' +
', sprintf($txt['settings_not_saved'], $context['saved_failed']), '
'; + + if (!empty($context['settings_pre_javascript'])) + echo ' + '; + + if (!empty($context['settings_insert_above'])) + echo $context['settings_insert_above']; + + echo ' +
'; + + // Is there a custom title? + if (isset($context['settings_title'])) + echo ' +
+

', $context['settings_title'], '

+
'; + + // Have we got a message to display? + if (!empty($context['settings_message'])) + { + $tag = !empty($context['settings_message']['tag']) ? $context['settings_message']['tag'] : 'span'; + + echo ' +
'; + + if (is_array($context['settings_message'])) + echo ' + <', $tag, !empty($context['settings_message']['class']) ? ' class="' . $context['settings_message']['class'] . '"' : '', '> + ', $context['settings_message']['label'], ' + '; + else + echo $context['settings_message']; + + echo ' +
'; + } + + // Filter out any redundant separators before we start the loop + $context['config_vars'] = array_filter( + $context['config_vars'], + function ($v) use ($context) + { + static $config_vars, $prev; + + $at_start = is_null($config_vars); + $config_vars = $at_start ? $context['config_vars'] : $config_vars; + + $next = next($config_vars); + $at_end = key($config_vars) === null; + + if (!$at_start && !$at_end) + { + $div_types = array('title', 'desc'); + $at_start = isset($prev['type']) && in_array($prev['type'], $div_types); + $at_end = isset($next['type']) && in_array($next['type'], $div_types); + } + + $prev = $v; + return ($v === '' && ($at_start || $at_end || $v === $next)) ? false : true; + } + ); + + // Now actually loop through all the variables. + $is_open = false; + foreach ($context['config_vars'] as $config_var) + { + // Is it a title or a description? + if (is_array($config_var) && ($config_var['type'] == 'title' || $config_var['type'] == 'desc')) + { + // Not a list yet? + if ($is_open) + { + $is_open = false; + echo ' + + '; + } + + // A title? + if ($config_var['type'] == 'title') + { + echo ' +
+

+ ', ($config_var['help'] ? '' : ''), ' + ', $config_var['label'], ' +

+
'; + } + // A description? + else + { + echo ' +
+ ', $config_var['label'], ' +
'; + } + + continue; + } + + // Not a list yet? + if (!$is_open) + { + $is_open = true; + echo ' +
+
'; + } + + // Hang about? Are you pulling my leg - a callback?! + if (is_array($config_var) && $config_var['type'] == 'callback') + { + if (function_exists('template_callback_' . $config_var['name'])) + call_user_func('template_callback_' . $config_var['name']); + + continue; + } + + if (is_array($config_var)) + { + // First off, is this a span like a message? + if (in_array($config_var['type'], array('message', 'warning'))) + { + echo ' + + ', $config_var['label'], ' + '; + } + // Otherwise it's an input box of some kind. + else + { + echo ' + '; + + // Some quick helpers... + $javascript = $config_var['javascript']; + $disabled = !empty($config_var['disabled']) ? ' disabled' : ''; + $subtext = !empty($config_var['subtext']) ? '
' . $config_var['subtext'] . '' : ''; + + // Various HTML5 input types that are basically enhanced textboxes + $text_types = array('color', 'date', 'datetime', 'datetime-local', 'email', 'month', 'time'); + + // Show the [?] button. + if ($config_var['help']) + echo ' + '; + + echo ' + ', $config_var['label'], '', $subtext, ($config_var['type'] == 'password' ? '
' . $txt['admin_confirm_password'] . '' : ''), ' + + ', + $config_var['preinput']; + + // Show a check box. + if ($config_var['type'] == 'check') + echo ' + '; + // Escape (via htmlspecialchars.) the text box. + elseif ($config_var['type'] == 'password') + echo ' +
+ '; + // Show a selection box. + elseif ($config_var['type'] == 'select') + { + echo ' + '; + } + + // List of boards? This requires getBoardList() having been run and the results in $context['board_list']. + elseif ($config_var['type'] == 'boards') + { + $first = true; + echo ' + [ ', $txt['select_boards_from_list'], ' ] +
+ + ', $txt['select_boards_from_list'], ' + '; + + foreach ($context['board_list'] as $id_cat => $cat) + { + if (!$first) + echo ' +
'; + echo ' + ', $cat['name'], ' +
    '; + + foreach ($cat['boards'] as $id_board => $brd) + echo ' +
  • '; + + echo ' +
'; + $first = false; + } + echo ' +
+ + ', $txt['check_all'], ' +
'; + } + // Text area? + elseif ($config_var['type'] == 'large_text') + echo ' + '; + // Permission group? + elseif ($config_var['type'] == 'permissions') + theme_inline_permissions($config_var['name']); + + // BBC selection? + elseif ($config_var['type'] == 'bbc') + { + echo ' +
+ ', $context['bbc_sections'][$config_var['name']]['title'], ' +
    '; + + foreach ($context['bbc_sections'][$config_var['name']]['columns'] as $bbcColumn) + { + foreach ($bbcColumn as $bbcTag) + echo ' +
  • + ', $bbcTag['show_help'] ? ' (?)' : '', ' +
  • '; + } + echo '
+ +
'; + } + // A simple message? + elseif ($config_var['type'] == 'var_message') + echo ' + + ', $config_var['var_message'], ' +
'; + // Assume it must be a text box + else + { + // Figure out the exact type - use "number" for "float" and "int". + $type = in_array($config_var['type'], $text_types) ? $config_var['type'] : ($config_var['type'] == 'int' || $config_var['type'] == 'float' ? 'number' : 'text'); + + // Extra options for float/int values - how much to decrease/increase by, the min value and the max value + // The step - only set if incrementing by something other than 1 for int or 0.1 for float + $step = isset($config_var['step']) ? ' step="' . $config_var['step'] . '"' : ($config_var['type'] == 'float' ? ' step="0.1"' : ''); + + // Minimum allowed value for this setting. SMF forces a default of 0 if not specified in the settings + $min = isset($config_var['min']) ? ' min="' . $config_var['min'] . '"' : ''; + + // Maximum allowed value for this setting. + $max = isset($config_var['max']) ? ' max="' . $config_var['max'] . '"' : ''; + + echo ' + '; + } + + echo isset($config_var['postinput']) ? ' + ' . $config_var['postinput'] : '', ' + '; + } + } + else + { + // Just show a separator. + if ($config_var == '') + echo ' + +
+
'; + else + echo ' +
+ ' . $config_var . ' +
+
'; + } + } + + if ($is_open) + echo ' +
'; + + if (empty($context['settings_save_dont_show'])) + echo ' + '; + + if ($is_open) + echo ' + '; + + // At least one token has to be used! + if (isset($context['admin-ssc_token'])) + echo ' + '; + + if (isset($context['admin-dbsc_token'])) + echo ' + '; + + if (isset($context['admin-mp_token'])) + echo ' + '; + + echo ' + +
'; + + if (!empty($context['settings_post_javascript'])) + echo ' + '; + + if (!empty($context['settings_insert_below'])) + echo $context['settings_insert_below']; + + // We may have added a board listing. If we did, we need to make it work. + addInlineJavascript(' + $("legend.board_selector").closest("fieldset").hide(); + $("a.board_selector").click(function(e) { + e.preventDefault(); + $(this).hide().next("fieldset").show(); + }); + $("fieldset legend.board_selector a").click(function(e) { + e.preventDefault(); + $(this).closest("fieldset").hide().prev("a").show(); + }); + ', true); +} + +/** + * Template for showing custom profile fields. + */ +function template_show_custom_profile() +{ + global $context, $txt; + + if (!empty($context['saved_successful'])) + echo ' +
', $txt['settings_saved'], '
'; + + // Standard fields. + template_show_list('standard_profile_fields'); + + echo ' + +
'; + + // Custom fields. + template_show_list('custom_profile_fields'); +} + +/** + * Template for editing a custom profile field + */ +function template_edit_profile_field() +{ + global $context, $txt, $scripturl; + + // All the javascript for this page - quite a bit in script.js! + echo ' + '; + + // any errors messages to show? + if (isset($_GET['msg'])) + { + loadLanguage('Errors'); + + if (isset($txt['custom_option_' . $_GET['msg']])) + echo ' +
', + $txt['custom_option_' . $_GET['msg']], ' +
'; + } + + echo ' +
+
+

', $context['page_title'], '

+
+
+
+ ', $txt['custom_edit_general'], ' + +
+
+ +
+ ', $txt['custom_edit_name_desc'], ' +
+
+ +
+
+ + + +
+ ', $txt['custom_edit_name_desc'], ' +
+
+ +
+
+
+ ', $txt['custom_edit_profile_desc'], ' +
+
+ +
+
+ + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+ ', $txt['custom_edit_enclose_desc'], ' +
+
+ +
+
+
+
+ ', $txt['custom_edit_input'], ' +
+
+ +
+
+ +
+
+
+ ', $txt['custom_edit_max_length_desc'], ' +
+
+ +
+
+ +
+
+ ', $txt['custom_edit_dimension_row'], ': + ', $txt['custom_edit_dimension_col'], ': +
+
+ +
+
+ +
+
+ +
+ ', $txt['custom_edit_options_desc'], ' +
+ ', $txt['custom_edit_name_desc'], ' +
+
'; + + foreach ($context['field']['options'] as $k => $option) + echo ' + ', $k == 0 ? '' : '
', ''; + + echo ' + + [', $txt['custom_edit_options_more'], '] +
+
+ +
+
+ +
+
+
+
+ ', $txt['custom_edit_advanced'], ' +
+
+ +
+ ', $txt['custom_edit_mask_desc'], ' +
+
+ +
+ + + +
+
+
+ ', $txt['custom_edit_privacy_desc'], ' +
+
+ +
+
+
+ ', $txt['custom_edit_can_search_desc'], ' +
+
+ +
+
+
+ ', $txt['custom_edit_active_desc'], ' +
+
+ +
+
+
+ '; + + if ($context['fid']) + echo ' + '; + + echo ' +
+ + +
'; + + // Get the javascript bits right! + echo ' + '; +} + +/** + * Results page for an admin search. + */ +function template_admin_search_results() +{ + global $context, $txt; + + echo ' +
+ ', template_admin_quick_search(), ' +

+ + ', sprintf($txt['admin_search_results_desc'], $context['search_term']), ' + +

+
+
'; + + if (empty($context['search_results'])) + { + echo ' +

+ ', $txt['admin_search_results_none'], ' +

'; + } + else + { + echo ' +
    '; + + foreach ($context['search_results'] as $result) + { + // Is it a result from the online manual? + if ($context['search_type'] == 'online') + { + echo ' +
  1. +

    + ', $result['title'], ' +

    +

    + ', $result['snippet'], ' +

    +
  2. '; + } + // Otherwise it's... not! + else + { + echo ' +
  3. + ', $result['name'], ' [', isset($txt['admin_search_section_' . $result['type']]) ? $txt['admin_search_section_' . $result['type']] : $result['type'], ']'; + + if ($result['help']) + echo ' +

    ', $result['help'], '

    '; + + echo ' +
  4. '; + } + } + echo ' +
'; + } + + echo ' +
'; +} + +/** + * This little beauty shows questions and answer from the captcha type feature. + */ +function template_callback_question_answer_list() +{ + global $txt, $context; + + foreach ($context['languages'] as $lang_id => $lang) + { + $lang_id = strtr($lang_id, array('-utf8' => '')); + $lang['name'] = strtr($lang['name'], array('-utf8' => '')); + + echo ' + +
+ ', $lang['name'], ' +
+
+ ', $txt['setup_verification_question'], ' +
+
+ ', $txt['setup_verification_answer'], ' +
'; + + if (!empty($context['qa_by_lang'][$lang_id])) + foreach ($context['qa_by_lang'][$lang_id] as $q_id) + { + $question = $context['question_answers'][$q_id]; + + echo ' +
+ +
+
'; + + foreach ($question['answers'] as $answer) + echo ' + '; + + echo ' + +
'; + } + + echo ' +
[ ', $txt['setup_verification_add_more'], ' ]
+
+
'; + } +} + +/** + * Repairing boards. + */ +function template_repair_boards() +{ + global $context, $txt, $scripturl; + + echo ' +
+

', + $context['error_search'] ? $txt['errors_list'] : $txt['errors_fixing'], ' +

+
+
'; + + // Are we actually fixing them, or is this just a prompt? + if ($context['error_search']) + { + if (!empty($context['to_fix'])) + { + echo ' + ', $txt['errors_found'], ': + +

+ ', $txt['errors_fix'], ' +

+

+ ', $txt['yes'], ' - ', $txt['no'], ' +

'; + } + else + echo ' +

', $txt['maintain_no_errors'], '

+

+ ', $txt['maintain_return'], ' +

'; + } + else + { + if (!empty($context['redirect_to_recount'])) + { + echo ' +

+ ', $txt['errors_do_recount'], ' +

+
+ + + +
'; + } + else + { + echo ' +

', $txt['errors_fixed'], '

+

+ ', $txt['maintain_return'], ' +

'; + } + } + + echo ' +
'; + + if (!empty($context['redirect_to_recount'])) + { + echo ' + '; + } +} + +/** + * Retrieves info from the php_info function, scrubs and preps it for display + */ +function template_php_info() +{ + global $context, $txt; + + echo ' +
+
+

+ ', $txt['phpinfo_settings'], ' +

+
'; + + // for each php info area + foreach ($context['pinfo'] as $area => $php_area) + { + echo ' + + + + + + + + + '; + + $localmaster = true; + + // and for each setting in this category + foreach ($php_area as $key => $setting) + { + // start of a local / master setting (3 col) + if (is_array($setting)) + { + if ($localmaster) + { + // heading row for the settings section of this category's settings + echo ' + + + + + '; + + $localmaster = false; + } + + echo ' + + '; + + foreach ($setting as $key_lm => $value) + echo ' + '; + + echo ' + '; + } + // just a single setting (2 col) + else + { + echo ' + + + + '; + } + } + echo ' + +
', $area, '
', $txt['phpinfo_itemsettings'], '', $txt['phpinfo_localsettings'], '', $txt['phpinfo_defaultsettings'], '
', $key, '', $value, '
', $key, '', str_replace(',', ', ', $setting), '
+
'; + } + + echo ' +
'; +} + +/** + * Content shown above the clean cache button + */ +function template_clean_cache_button_above() +{ +} + +/** + * Content shown below the clean cache button? + */ +function template_clean_cache_button_below() +{ + global $txt, $scripturl, $context; + + echo ' +
+

', $txt['maintain_cache'], '

+
+
+
+

', $txt['maintain_cache_info'], '

+ + + +
+
'; +} + +/** + * This shows the admin search form + */ +function template_admin_quick_search() +{ + global $context, $txt, $scripturl; + + if ($context['user']['is_admin']) + echo ' + '; +} + +?> \ No newline at end of file diff --git a/Agreement.template.php b/Agreement.template.php new file mode 100644 index 0000000..b9d4782 --- /dev/null +++ b/Agreement.template.php @@ -0,0 +1,88 @@ +'; + + if (!empty($context['agreement'])) + { + echo ' +
+

', $txt['agreement' . (!empty($context['can_accept_agreement']) ? '_updated' : '')], '

+
'; + + if (!empty($context['can_accept_agreement'])) + { + echo ' +
+ ', $txt['agreement_updated_desc'], ' +
'; + } + elseif (!empty($context['agreement_accepted_date'])) + { + echo ' +
+ ', sprintf($txt['agreement_accepted'], timeformat($context['agreement_accepted_date'], false)), ' +
'; + } + + echo ' +
+ ', $context['agreement'], ' +
'; + } + + if (!empty($context['privacy_policy'])) + { + echo ' +
+

', $txt['privacy_policy' . (!empty($context['can_accept_privacy_policy']) ? '_updated' : '')], '

+
'; + + if (!empty($context['can_accept_privacy_policy'])) + { + echo ' +
+ ', $txt['privacy_policy_updated_desc'], ' +
'; + } + elseif (!empty($context['privacy_policy_accepted_date'])) + { + echo ' +
+ ', sprintf($txt['privacy_policy_accepted'], timeformat($context['privacy_policy_accepted_date'], false)), ' +
'; + } + + echo ' +
+ ', $context['privacy_policy'], ' +
'; + } + + if (!empty($context['accept_doc'])) + echo ' +
+ + +
+ '; +} + +?> \ No newline at end of file diff --git a/BoardIndex.template.php b/BoardIndex.template.php new file mode 100644 index 0000000..78f33df --- /dev/null +++ b/BoardIndex.template.php @@ -0,0 +1,606 @@ +'; + + foreach ($context['news_lines'] as $news) + echo ' +
  • ', $news, '
  • '; + + echo ' + + '; + } +} + +/** + * This actually displays the board index + */ +function template_main() +{ + global $context, $txt, $scripturl; + + echo ' +
    '; + + /* Each category in categories is made up of: + id, href, link, name, is_collapsed (is it collapsed?), can_collapse (is it okay if it is?), + new (is it new?), collapse_href (href to collapse/expand), collapse_image (up/down image), + and boards. (see below.) */ + foreach ($context['categories'] as $category) + { + // If theres no parent boards we can see, avoid showing an empty category (unless its collapsed) + if (empty($category['boards']) && !$category['is_collapsed']) + continue; + + echo ' +
    +
    +
    +
    + '; + // If this category even can collapse, show a link to collapse it. Only if we are logged. + if ($category['can_collapse']) + echo ' + '; + + echo '

    '; + + + + echo ' + ', $category['link'], ' +

    ', !empty($category['description']) ? ' +
    ' . $category['description'] . '
    ' : '', ' +
    +
    +
    ', $txt['board_topics'], '
    ', $txt['posts'], '
    +
    ', $txt['last_post'], '
    +
    + +
    +
    '; + } + + echo ' +
    '; + + // Show the mark all as read button? + if ($context['user']['is_logged'] && !empty($context['categories'])) + echo ' +
    + ', template_button_strip($context['mark_read_button'], 'right'), ' +
    '; +} + +/** + * Outputs the board icon for a standard board. + * + * @param array $board Current board information. + */ +function template_bi_board_icon($board) +{ + global $context, $scripturl; + // L'icone devant le forum de niveau 1. Passé de "a" à "div" pour simplifier la navigation au clavier + echo ' +
    '; +} + +/** + * Outputs the board icon for a redirect. + * + * @param array $board Current board information. + */ +function template_bi_redirect_icon($board) +{ + global $context, $scripturl; + + echo ' + '; +} + +/** + * Outputs the board info for a standard board or redirect. + * + * @param array $board Current board information. + */ +function template_bi_board_info($board) +{ + global $context, $scripturl, $txt; + + echo ' +

    + ', $board['name'], ' +

    '; + + // Has it outstanding posts for approval? + if ($board['can_approve_posts'] && ($board['unapproved_posts'] || $board['unapproved_topics'])) + echo ' + !'; + + echo ' +
    ', $board['description'], '
    '; + + // Show the "Moderators: ". Each has name, href, link, and id. (but we're gonna use link_moderators.) + if (!empty($board['link_moderators'])) + echo ' +

    ', count($board['link_moderators']) == 1 ? $txt['moderator'] : $txt['moderators'], ': ', implode(', ', $board['link_moderators']), '

    '; +} + +/** + * Outputs the board stats for a standard board. + * + * @param array $board Current board information. + */ +function template_bi_board_stats($board) +{ + global $txt; + + echo ' +
    + ', comma_format($board['topics']), ' +
    +
    + ', comma_format($board['posts']), ' +
    + '; +} + +/** + * Outputs the board stats for a redirect. + * + * @param array $board Current board information. + */ +function template_bi_redirect_stats($board) +{ + global $txt; + + echo ' +

    + ', $txt['redirects'], ': ', comma_format($board['posts']), ' +

    '; +} + +/** + * Outputs the board lastposts for a standard board or a redirect. + * When on a mobile device, this may be hidden if no last post exists. + * + * @param array $board Current board information. + */ +function template_bi_board_lastpost($board) +{ + if (!empty($board['last_post']['id'])) + echo + '

    ', $board['last_post']['last_post_message'], '

    '; +} + +/** + * Outputs the board children for a standard board. + * + * @param array $board Current board information. + */ +function template_bi_board_children($board) +{ + global $txt, $scripturl, $context; + + // Show the "Child Boards: ". (there's a link_children but we're going to bold the new ones...) + if (!empty($board['children'])) + { + // Sort the links into an array with new boards bold so it can be imploded. + $children = array(); + /* Each child in each board's children has: + id, name, description, new (is it new?), topics (#), posts (#), href, link, and last_post. */ + foreach ($board['children'] as $child) + { //ici le lien vers les sous-forum et la façon dont ils s'affichent. Juste les liens ! + if (!$child['is_redirect']) + $child['link'] = '' . ($child['new'] ? ' + + ' . $txt['new'] . ' + ' : '') . ' + + + ' . $child['name'] . ' + + + '; + else + $child['link'] = '' . $child['name'] . ''; + + // Has it posts awaiting approval? + if ($child['can_approve_posts'] && ($child['unapproved_posts'] || $child['unapproved_topics'])) + $child['link'] .= ' !'; + + // Ici la mise en forme des catégories des enfants. Probablement pas au bon endroit...Todo afficher le bon lien ! + //Lien en trop, redondant avec le titre ensuite + // + // + $children[] = $child['new'] ? ' + +
    +
    + +
    + +
    +
    +

    ' . $child['link'] . '

    +
    ' . $child['description'] . ' +
    +
    +
    +
    ' . comma_format($child['topics']) . '
    +
    ' . comma_format($child['posts']) . '
    +
    +
    +
    ' : ' + + +
    +
    + +
    +
    +
    +

    ' . $child['link'] . '

    +
    ' . $child['description'] . ' +
    +
    +
    +
    ' . comma_format($child['topics']) . '
    +
    ' . comma_format($child['posts']) . '
    +
    +
    +
    +
    + '; + } + + echo ' +
    +

    + ', implode(' ', $children), ' +

    +
    '; + // c'est là qu'est le truc pour "Sous-sections". Balise autour du "implode" fonctionne mais... pas assez pointu. + // TODO : ajouter aussi nb de messages, dernier message, etc. Mais une fois que c'est ok sur le forum parent car on va recopier... + } +} + +/** + * The lower part of the outer layer of the board index + */ +function template_boardindex_outer_below() +{ + template_info_center(); +} + +/** + * Displays the info center + */ +function template_info_center() +{ + global $context, $options, $txt; + + if (empty($context['info_center'])) + return; + + // Here's where the "Info Center" starts... + echo ' +
    +
    + + + +
    '; + + // Info center collapse object. + echo ' + '; +} + +/** + * The recent posts section of the info center + */ +function template_ic_block_recent() +{ + global $context, $scripturl, $settings, $txt; + + // This is the "Recent Posts" bar. + echo ' +
    +

    + ', $txt['recent_posts'], ' +

    +
    +
    '; + + // Only show one post. + if ($settings['number_recent_posts'] == 1) + { + // latest_post has link, href, time, subject, short_subject (shortened with...), and topic. (its id.) + echo ' +

    + ', $txt['recent_view'], ' ', sprintf($txt['is_recent_updated'], '"' . $context['latest_post']['link'] . '"'), ' (', $context['latest_post']['time'], ')
    +

    '; + } + // Show lots of posts. + elseif (!empty($context['latest_posts'])) + { + echo ' + + + + + + + '; + + /* Each post in latest_posts has: + board (with an id, name, and link.), topic (the topic's id.), poster (with id, name, and link.), + subject, short_subject (shortened with...), time, link, and href. */ + foreach ($context['latest_posts'] as $post) + echo ' + + + + + + '; + echo ' +
    ', $txt['message'], '', $txt['author'], '', $txt['board'], '', $txt['date'], '
    ', $post['link'], '', $post['poster']['link'], '', $post['board']['link'], '', $post['time'], '
    '; + } + echo ' +
    '; +} + +/** + * The calendar section of the info center + */ +function template_ic_block_calendar() +{ + global $context, $scripturl, $txt; + + // Show information about events, birthdays, and holidays on the calendar. + echo ' +
    +

    + ', $context['calendar_only_today'] ? $txt['calendar_today'] : $txt['calendar_upcoming'], ' +

    +
    '; + + // Holidays like "Christmas", "Chanukah", and "We Love [Unknown] Day" :P + if (!empty($context['calendar_holidays'])) + echo ' +

    + ', $txt['calendar_prompt'], ' ', implode(', ', $context['calendar_holidays']), ' +

    '; + + // People's birthdays. Like mine. And yours, I guess. Kidding. + if (!empty($context['calendar_birthdays'])) + { + echo ' +

    + ', $context['calendar_only_today'] ? $txt['birthdays'] : $txt['birthdays_upcoming'], ''; + + // Each member in calendar_birthdays has: id, name (person), age (if they have one set?), is_last. (last in list?), and is_today (birthday is today?) + foreach ($context['calendar_birthdays'] as $member) + echo ' + ', $member['is_today'] ? '' : '', $member['name'], $member['is_today'] ? '' : '', isset($member['age']) ? ' (' . $member['age'] . ')' : '', '', $member['is_last'] ? '' : ', '; + + echo ' +

    '; + } + + // Events like community get-togethers. + if (!empty($context['calendar_events'])) + { + echo ' +

    + ', $context['calendar_only_today'] ? $txt['events'] : $txt['events_upcoming'], ' '; + + // Each event in calendar_events should have: + // title, href, is_last, can_edit (are they allowed?), modify_href, and is_today. + foreach ($context['calendar_events'] as $event) + echo ' + ', $event['can_edit'] ? ' ' : '', $event['href'] == '' ? '' : '', $event['is_today'] ? '' . $event['title'] . '' : $event['title'], $event['href'] == '' ? '' : '', $event['is_last'] ? '
    ' : ', '; + echo ' +

    '; + } +} + +/** + * The stats section of the info center + */ +function template_ic_block_stats() +{ + global $scripturl, $txt, $context, $settings; + + // Show statistical style information... + echo ' +
    +

    + ', $txt['forum_stats'], ' +

    +
    +

    + ', $context['common_stats']['boardindex_total_posts'], '', !empty($settings['show_latest_member']) ? ' - ' . $txt['latest_member'] . ': ' . $context['common_stats']['latest_member']['link'] . '' : '', '
    + ', (!empty($context['latest_post']) ? $txt['latest_post'] . ': "' . $context['latest_post']['link'] . '" (' . $context['latest_post']['time'] . ')
    ' : ''), ' + ', $txt['recent_view'], ' +

    '; +} + +/** + * The who's online section of the info center + */ +function template_ic_block_online() +{ + global $context, $scripturl, $txt, $modSettings, $settings; + // "Users online" - in order of activity. + echo ' +
    +

    + ', $context['show_who'] ? '' : '', ' ', $txt['online_users'], '', $context['show_who'] ? '' : '', ' +

    +
    +

    + ', $context['show_who'] ? '' : '', '', $txt['online'], ': ', comma_format($context['num_guests']), ' ', $context['num_guests'] == 1 ? $txt['guest'] : $txt['guests'], ', ', comma_format($context['num_users_online']), ' ', $context['num_users_online'] == 1 ? $txt['user'] : $txt['users']; + + // Handle hidden users and buddies. + $bracketList = array(); + + if ($context['show_buddies']) + $bracketList[] = comma_format($context['num_buddies']) . ' ' . ($context['num_buddies'] == 1 ? $txt['buddy'] : $txt['buddies']); + + if (!empty($context['num_spiders'])) + $bracketList[] = comma_format($context['num_spiders']) . ' ' . ($context['num_spiders'] == 1 ? $txt['spider'] : $txt['spiders']); + + if (!empty($context['num_users_hidden'])) + $bracketList[] = comma_format($context['num_users_hidden']) . ' ' . ($context['num_spiders'] == 1 ? $txt['hidden'] : $txt['hidden_s']); + + if (!empty($bracketList)) + echo ' (' . implode(', ', $bracketList) . ')'; + + echo $context['show_who'] ? '' : '', ' + +  - ', $txt['most_online_today'], ': ', comma_format($modSettings['mostOnlineToday']), ' -  + ', $txt['most_online_ever'], ': ', comma_format($modSettings['mostOnline']), ' (', timeformat($modSettings['mostDate']), ')
    '; + + // Assuming there ARE users online... each user in users_online has an id, username, name, group, href, and link. + /*if (!empty($context['users_online'])) + { + echo ' + ', sprintf($txt['users_active'], $modSettings['lastActive']), ': ', implode(', ', $context['list_users_online']); + + // Showing membergroups? + if (!empty($settings['show_group_key']) && !empty($context['membergroups'])) + echo ' + ' . implode(', ', $context['membergroups']) . ''; + }*/ + + echo ' +

    '; +} + +?> diff --git a/Calendar.template.php b/Calendar.template.php new file mode 100644 index 0000000..7485a34 --- /dev/null +++ b/Calendar.template.php @@ -0,0 +1,1237 @@ +'; + + // Show the mini-blocks if they're enabled. + if (empty($context['blocks_disabled'])) + echo ' +
    + ', template_show_month_grid('prev', true), ' + ', template_show_month_grid('current', true), ' + ', template_show_month_grid('next', true), ' +
    '; + + // What view are we showing? + if ($context['calendar_view'] == 'viewlist') + echo ' +
    + ', template_show_upcoming_list('main'), ' +
    '; + elseif ($context['calendar_view'] == 'viewweek') + echo ' +
    + ', template_show_week_grid('main'), ' +
    '; + else + echo ' +
    + ', template_show_month_grid('main'), ' +
    '; + + // Close our wrapper. + echo ' + '; +} + +/** + * Display a list of upcoming events, birthdays, and holidays. + * + * @param string $grid_name The grid name + * @return void|bool Returns false if the grid doesn't exist. + */ +function template_show_upcoming_list($grid_name) +{ + global $context, $scripturl, $txt; + + // Bail out if we have nothing to work with + if (!isset($context['calendar_grid_' . $grid_name])) + return false; + + // Protect programmer sanity + $calendar_data = &$context['calendar_grid_' . $grid_name]; + + // Do we want a title? + if (empty($calendar_data['disable_title'])) + echo ' +
    +

    + ', $txt['calendar_upcoming'], ' +

    +
    '; + + // Give the user some controls to work with + template_calendar_top($calendar_data); + + // Output something just so people know it's not broken + if (empty($calendar_data['events']) && empty($calendar_data['birthdays']) && empty($calendar_data['holidays'])) + echo ' +
    ', $txt['calendar_empty'], '
    '; + + // First, list any events + if (!empty($calendar_data['events'])) + { + echo ' +
    +
    +

    ', str_replace(':', '', $txt['events']), '

    +
    + +
    '; + } + + // Next, list any birthdays + if (!empty($calendar_data['birthdays'])) + { + echo ' +
    +
    +

    ', str_replace(':', '', $txt['birthdays']), '

    +
    +
    '; + + foreach ($calendar_data['birthdays'] as $date) + { + echo ' +

    + ', $date['date_local'], ': '; + + unset($date['date_local']); + + $birthdays = array(); + + foreach ($date as $member) + $birthdays[] = '' . $member['name'] . (isset($member['age']) ? ' (' . $member['age'] . ')' : '') . ''; + + echo implode(', ', $birthdays); + + echo ' +

    '; + } + + echo ' +
    +
    '; + } + + // Finally, list any holidays + if (!empty($calendar_data['holidays'])) + { + echo ' +
    +
    +

    ', str_replace(':', '', $txt['calendar_prompt']), '

    +
    +
    +

    '; + + $holidays = array(); + + foreach ($calendar_data['holidays'] as $date) + { + $date_local = $date['date_local']; + unset($date['date_local']); + + foreach ($date as $holiday) + $holidays[] = $holiday . ' (' . $date_local . ')'; + } + + echo implode(', ', $holidays); + + echo ' +

    +
    +
    '; + } +} + +/** + * Display a monthly calendar grid. + * + * @param string $grid_name The grid name + * @param bool $is_mini Is this a mini grid? + * @return void|bool Returns false if the grid doesn't exist. + */ +function template_show_month_grid($grid_name, $is_mini = false) +{ + global $context, $txt, $scripturl, $modSettings; + + // If the grid doesn't exist, no point in proceeding. + if (!isset($context['calendar_grid_' . $grid_name])) + return false; + + // A handy little pointer variable. + $calendar_data = &$context['calendar_grid_' . $grid_name]; + + // Some conditions for whether or not we should show the week links *here*. + if (isset($calendar_data['show_week_links']) && ($calendar_data['show_week_links'] == 3 || (($calendar_data['show_week_links'] == 1 && $is_mini === true) || $calendar_data['show_week_links'] == 2 && $is_mini === false))) + $show_week_links = true; + else + $show_week_links = false; + + // Assuming that we've not disabled it, show the title block! + if (empty($calendar_data['disable_title'])) + { + echo ' +
    +

    '; + + // Previous Link: If we're showing prev / next and it's not a mini-calendar. + if (empty($calendar_data['previous_calendar']['disabled']) && $calendar_data['show_next_prev'] && $is_mini === false) + echo ' + + « + '; + + // Next Link: if we're showing prev / next and it's not a mini-calendar. + if (empty($calendar_data['next_calendar']['disabled']) && $calendar_data['show_next_prev'] && $is_mini === false) + echo ' + + » + '; + + // Arguably the most exciting part, the title! + echo ' + ', $txt['months_titles'][$calendar_data['current_month']], ' ', $calendar_data['current_year'], ' +

    +
    '; + } + + // Show the controls on main grids + if ($is_mini === false) + template_calendar_top($calendar_data); + + // Finally, the main calendar table. + echo ' + '; + + // Show each day of the week. + if (empty($calendar_data['disable_day_titles'])) + { + echo ' + '; + + // If we're showing week links, there's an extra column ahead of the week links, so let's think ahead and be prepared! + if ($show_week_links === true) + echo ' + '; + + // Now, loop through each actual day of the week. + foreach ($calendar_data['week_days'] as $day) + echo ' + '; + + echo ' + '; + } + + // Our looping begins on a per-week basis. + foreach ($calendar_data['weeks'] as $week) + { + // Some useful looping variables. + $current_month_started = false; + $count = 1; + $final_count = 1; + + echo ' + '; + + // This is where we add the actual week link, if enabled on this location. + if ($show_week_links === true) + echo ' + '; + + // Now loop through each day in the week we're on. + foreach ($week['days'] as $day) + { + // What classes should each day inherit? Day is default. + $classes = array('days'); + if (!empty($day['day'])) + { + $classes[] = !empty($day['is_today']) ? 'calendar_today' : 'windowbg'; + + // Additional classes are given for events, holidays, and birthdays. + foreach (array('events', 'holidays', 'birthdays') as $event_type) + if (!empty($day[$event_type])) + $classes[] = $event_type; + } + else + { + $classes[] = 'disabled'; + } + + // Now, implode the classes for each day. + echo ' + '; + + ++$count; + } + + echo ' + '; + } + + // The end of our main table. + echo ' +
    ', !empty($calendar_data['short_day_titles']) || $is_mini === true ? $txt['days_short'][$day] : $txt['days'][$day], '
    + » + '; + + // If it's within this current month, go ahead and begin. + if (!empty($day['day'])) + { + // If it's the first day of this month and not a mini-calendar, we'll add the month title - whether short or full. + $title_prefix = !empty($day['is_first_of_month']) && $context['current_month'] == $calendar_data['current_month'] && $is_mini === false ? (!empty($calendar_data['short_month_titles']) ? $txt['months_short'][$calendar_data['current_month']] . ' ' : $txt['months_titles'][$calendar_data['current_month']] . ' ') : ''; + + // The actual day number - be it a link, or just plain old text! + if (!empty($modSettings['cal_daysaslink']) && $context['can_post']) + echo ' + ', $title_prefix, $day['day'], ''; + elseif ($is_mini) + echo ' + ', $title_prefix, $day['day'], ''; + else + echo ' + ', $title_prefix, $day['day'], ''; + + // A lot of stuff, we're not showing on mini-calendars to conserve space. + if ($is_mini === false) + { + // Holidays are always fun, let's show them! + if (!empty($day['holidays'])) + echo ' +
    + ', $txt['calendar_prompt'], ' ', implode(', ', $day['holidays']), ' +
    '; + + // Happy Birthday Dear Member! + if (!empty($day['birthdays'])) + { + echo ' +
    + ', $txt['birthdays'], ' '; + + /* Each of the birthdays has: + id, name (person), age (if they have one set?), and is_last. (last in list?) */ + $use_js_hide = empty($context['show_all_birthdays']) && count($day['birthdays']) > 15; + $birthday_count = 0; + foreach ($day['birthdays'] as $member) + { + echo '', $member['name'], '', isset($member['age']) ? ' (' . $member['age'] . ')' : '', '', $member['is_last'] || ($count == 10 && $use_js_hide) ? '' : ', '; + + // 9...10! Let's stop there. + if ($birthday_count == 10 && $use_js_hide) + // !!TODO - Inline CSS and JavaScript should be moved. + echo '...
    (', sprintf($txt['calendar_click_all'], count($day['birthdays'])), ')
    '; + + echo ' +
    '; + } + + // Any special posted events? + if (!empty($day['events'])) + { + // Sort events by start time (all day events will be listed first) + uasort( + $day['events'], + function($a, $b) + { + if ($a['start_timestamp'] == $b['start_timestamp']) + return 0; + + return ($a['start_timestamp'] < $b['start_timestamp']) ? -1 : 1; + } + ); + + echo ' +
    + ', $txt['events'], '
    '; + + /* The events are made up of: + title, href, is_last, can_edit (are they allowed to?), and modify_href. */ + foreach ($day['events'] as $event) + { + $event_icons_needed = ($event['can_edit'] || $event['can_export']) ? true : false; + + echo ' +
    + ', $event['link'], '
    + '; + + if (!empty($event['start_time_local']) && $event['starts_today'] == true) + echo trim(str_replace(':00 ', ' ', $event['start_time_local'])); + elseif (!empty($event['end_time_local']) && $event['ends_today'] == true) + echo strtolower($txt['ends']), ' ', trim(str_replace(':00 ', ' ', $event['end_time_local'])); + elseif (!empty($event['allday'])) + echo $txt['calendar_allday']; + + echo ' + '; + + if (!empty($event['location'])) + echo ' +
    + ' . $event['location'] . ''; + + if ($event['can_edit'] || $event['can_export']) + { + echo ' + '; + + // If they can edit the event, show an icon they can click on.... + if ($event['can_edit']) + echo ' + + + '; + + // Exporting! + if ($event['can_export']) + echo ' + + + '; + + echo ' +
    '; + } + + echo ' +
    '; + } + + echo ' +
    '; + } + } + $current_month_started = $count; + } + // Otherwise, assuming it's not a mini-calendar, we can show previous / next month days! + elseif ($is_mini === false) + { + if (empty($current_month_started) && !empty($context['calendar_grid_prev'])) + echo '', $context['calendar_grid_prev']['last_of_month'] - $calendar_data['shift']-- +1, ''; + elseif (!empty($current_month_started) && !empty($context['calendar_grid_next'])) + echo '', $current_month_started + 1 == $count ? (!empty($calendar_data['short_month_titles']) ? $txt['months_short'][$context['calendar_grid_next']['current_month']] . ' ' : $txt['months_titles'][$context['calendar_grid_next']['current_month']] . ' ') : '', $final_count++, ''; + } + + // Close this day and increase var count. + echo ' +
    '; +} + +/** + * Shows a weekly grid + * + * @param string $grid_name The name of the grid + * @return void|bool Returns false if the grid doesn't exist + */ +function template_show_week_grid($grid_name) +{ + global $context, $txt, $scripturl, $modSettings; + + // We might have no reason to proceed, if the variable isn't there. + if (!isset($context['calendar_grid_' . $grid_name])) + return false; + + // Handy pointer. + $calendar_data = &$context['calendar_grid_' . $grid_name]; + + // At the very least, we have one month. Possibly two, though. + $iteration = 1; + foreach ($calendar_data['months'] as $month_data) + { + // For our first iteration, we'll add a nice header! + if ($iteration == 1) + { + echo ' +
    +

    '; + + // Previous Week Link... + if (empty($calendar_data['previous_calendar']['disabled']) && !empty($calendar_data['show_next_prev'])) + echo ' + + « + '; + + // Next Week Link... + if (empty($calendar_data['next_calendar']['disabled']) && !empty($calendar_data['show_next_prev'])) + echo ' + + » + '; + + // "Week beginning " + if (!empty($calendar_data['week_title'])) + echo $calendar_data['week_title']; + + echo ' +

    +
    '; + + // Show the controls + template_calendar_top($calendar_data); + } + + // Our actual month... + echo ' +
    + + ', $txt['months_titles'][$month_data['current_month']], ' + +
    '; + + // The main table grid for $this week. + echo ' + + + '; + if (!empty($calendar_data['show_events'])) + echo ' + '; + + if (!empty($calendar_data['show_holidays'])) + echo ' + '; + if (!empty($calendar_data['show_birthdays'])) + echo ' + '; + echo ' + '; + + // Each day of the week. + foreach ($month_data['days'] as $day) + { + // How should we be highlighted or otherwise not...? + $classes = array('days'); + $classes[] = !empty($day['is_today']) ? 'calendar_today' : 'windowbg'; + + echo ' + + '; + + if (!empty($calendar_data['show_events'])) + { + echo ' + '; + } + + if (!empty($calendar_data['show_holidays'])) + { + echo ' + '; + } + + if (!empty($calendar_data['show_birthdays'])) + { + echo ' + '; + } + echo ' + '; + } + + // Increase iteration for loop counting. + ++$iteration; + + echo ' +
    ', $txt['calendar_day'], '', $txt['events'], '', $txt['calendar_prompt'], '', $txt['birthdays'], '
    '; + + // Should the day number be a link? + if (!empty($modSettings['cal_daysaslink']) && $context['can_post']) + echo ' + ', $txt['days'][$day['day_of_week']], ' - ', $day['day'], ''; + else + echo $txt['days'][$day['day_of_week']], ' - ', $day['day']; + + echo ' + '; + + // Show any events... + if (!empty($day['events'])) + { + // Sort events by start time (all day events will be listed first) + uasort( + $day['events'], + function($a, $b) + { + if ($a['start_timestamp'] == $b['start_timestamp']) + return 0; + + return ($a['start_timestamp'] < $b['start_timestamp']) ? -1 : 1; + } + ); + + foreach ($day['events'] as $event) + { + echo ' +
    '; + + $event_icons_needed = ($event['can_edit'] || $event['can_export']) ? true : false; + + echo $event['link'], '
    + '; + + if (!empty($event['start_time_local'])) + echo trim($event['start_time_local']), !empty($event['end_time_local']) ? ' – ' . trim($event['end_time_local']) : ''; + else + echo $txt['calendar_allday']; + + echo ' + '; + + if (!empty($event['location'])) + echo '
    + ' . $event['location'] . ''; + + if (!empty($event_icons_needed)) + { + echo ' '; + + // If they can edit the event, show a star they can click on.... + if (!empty($event['can_edit'])) + echo ' + + + '; + + // Can we export? Sweet. + if (!empty($event['can_export'])) + echo ' + + + '; + + echo ' +
    '; + } + + echo ' +
    '; + } + + if (!empty($context['can_post'])) + { + echo ' + +
    '; + } + } + else + { + if (!empty($context['can_post'])) + echo ' + '; + } + echo ' +
    '; + + // Show any holidays! + if (!empty($day['holidays'])) + echo implode('
    ', $day['holidays']); + + echo ' +
    '; + + // Show any birthdays... + if (!empty($day['birthdays'])) + { + foreach ($day['birthdays'] as $member) + echo ' + ', $member['name'], ' + ', isset($member['age']) ? ' (' . $member['age'] . ')' : '', ' + ', $member['is_last'] ? '' : '
    '; + } + echo ' +
    '; + } +} + +/** + * Calendar controls under the title + * + * Creates the view selector (list, month, week), the date selector (either a + * select menu or a date range chooser, depending on the circumstances), and the + * "Post Event" button. + * + * @param array $calendar_data The data for the calendar grid that this is for + */ +function template_calendar_top($calendar_data) +{ + global $context, $scripturl, $txt; + + echo ' +
    + + ', template_button_strip($context['calendar_buttons'], 'right'); + + echo ' +
    + '; + + if (!empty($calendar_data['end_date'])) + echo ' + ', strtolower($txt['to']), ' + '; + + echo ' + +
    +
    '; +} + +/** + * Template for posting a calendar event. + */ +function template_event_post() +{ + global $context, $txt, $scripturl, $modSettings; + + echo ' +
    '; + + if (!empty($context['event']['new'])) + echo ' + '; + + // Start the main table. + echo ' +
    +
    +

    + ', $context['page_title'], ' +

    +
    '; + + if (!empty($context['post_error']['messages'])) + echo ' +
    +
    +
    + ', $context['error_type'] == 'serious' ? '' . $txt['error_while_submitting'] . '' : '', ' +
    +
    + ', implode('
    ', $context['post_error']['messages']), ' +
    +
    +
    '; + + echo ' +
    +
    + ', $txt['calendar_event_title'], ' + +
    +
    + +
    +
    '; + + // If this is a new event let the user specify which board they want the linked post to be put into. + if ($context['event']['new'] && !empty($context['event']['categories'])) + { + echo ' +
    +
    + ', $txt['calendar_post_in'], ' + + +
    +
    '; + } + + // Note to theme writers: The JavaScript expects the input fields for the start and end dates & times to be contained in a wrapper element with the id "event_time_input" + echo ' +
    +
    + ', $txt['calendar_event_options'], ' +
    +
    + ', $txt['start'], ' + + +
    +
    + ', $txt['end'], ' + + +
    +
    +
    +
    + + +
    +
    + ', $txt['calendar_timezone'], ' + +
    +
    +
    + ', $txt['location'], ' + +
    +
    '; + + echo ' + '; + + // Delete button? + if (empty($context['event']['new'])) + echo ' + '; + + echo ' + + + +
    +
    +
    '; +} + +/** + * Displays a clock + */ +function template_bcd() +{ + global $context, $scripturl; + $alt = false; + + echo ' + + + + + '; + + foreach ($context['clockicons'] as $t => $v) + { + echo ' + '; + + $alt = !$alt; + } + echo ' + + + + +
    BCD Clock
    '; + + foreach ($v as $i) + echo ' +
    '; + + echo ' +
    + Are you hardcore? +
    + + '; +} + +/** + * Displays the hours, minutes and seconds for our clock + */ +function template_hms() +{ + global $context, $scripturl; + $alt = false; + + echo ' + + + + '; + + foreach ($context['clockicons'] as $t => $v) + { + echo ' + + + '; + + $alt = !$alt; + } + echo ' + + + +
    Binary Clock
    '; + + foreach ($v as $i) + echo ' + '; + + echo ' +
    + Too tough for you? +
    '; + + echo ' + '; +} + +/** + * Displays a binary clock + */ +function template_omfg() +{ + global $context; + $alt = false; + + echo ' + + + + '; + + foreach ($context['clockicons'] as $t => $v) + { + echo ' + + + '; + + $alt = !$alt; + } + + echo ' +
    OMFG Binary Clock
    '; + + foreach ($v as $i) + echo ' + '; + + echo ' +
    + '; +} + +/** + * Displays the time + */ +function template_thetime() +{ + global $context; + $alt = false; + + echo ' + + + + '; + + foreach ($context['clockicons'] as $v) + { + echo ' + + + '; + + $alt = !$alt; + } + + echo ' +
    The time you requested
    '; + + foreach ($v as $i) + echo ' + '; + + echo ' +
    '; +} + +?> \ No newline at end of file diff --git a/Display.template.php b/Display.template.php new file mode 100644 index 0000000..dc51fe4 --- /dev/null +++ b/Display.template.php @@ -0,0 +1,1011 @@ + + ', $txt['report_sent'], ' + '; + + // Let them know why their message became unapproved. + if ($context['becomesUnapproved']) + echo ' +
    + ', $txt['post_becomes_unapproved'], ' +
    '; + + // Show new topic info here? + echo '
    +
    +

    + ', $context['subject'], '', ($context['is_locked']) ? ' ' : '', ($context['is_sticky']) ? ' ' : '', ' +

    +
    '; + + // Show the page index... "Pages: [1]". + echo ' +
    + + ', template_button_strip($context['normal_buttons'], 'right'), ' + ', $context['menu_separator'], ' + '; + + // Next - Prev + echo ' + ', $context['previous_next'], ' +
    '; + + if (!empty($settings['display_who_viewing'])) + { + echo ' +

    '; + + // Show just numbers...? + if ($settings['display_who_viewing'] == 1) + echo count($context['view_members']), ' ', count($context['view_members']) == 1 ? $txt['who_member'] : $txt['members']; + // Or show the actual people viewing the topic? + else + echo empty($context['view_members_list']) ? '0 ' . $txt['members'] : implode(', ', $context['view_members_list']) . ((empty($context['view_num_hidden']) || $context['can_moderate_forum']) ? '' : ' (+ ' . $context['view_num_hidden'] . ' ' . $txt['hidden'] . ')'); + + // Now show how many guests are here too. + echo $txt['who_and'], $context['view_num_guests'], ' ', $context['view_num_guests'] == 1 ? $txt['guest'] : $txt['guests'], $txt['who_viewing_topic'], ' +

    '; + } + + // Show the anchor for the top and for the first message. If the first message is new, say so. + echo ' + + ', $context['first_new_message'] ? '' : ''; + + // Is this topic also a poll? + if ($context['is_poll']) + { + echo ' +
    +
    +

    + ', $context['poll']['is_locked'] ? '' : '', ' ', $context['poll']['question'], ' +

    +
    +
    +
    '; + + // Are they not allowed to vote but allowed to view the options? + if ($context['poll']['show_results'] || !$context['allow_vote']) + { + echo ' +
    '; + + // Show each option with its corresponding percentage bar. + foreach ($context['poll']['options'] as $option) + { + echo ' +
    ', $option['option'], '
    +
    '; + + if ($context['allow_results_view']) + echo ' + ', $option['bar_ndt'], ' + ', $option['votes'], ' (', $option['percent'], '%)'; + + echo ' +
    '; + } + + echo ' +
    '; + + if ($context['allow_results_view']) + echo ' +

    ', $txt['poll_total_voters'], ': ', $context['poll']['total_votes'], '

    '; + } + // They are allowed to vote! Go to it! + else + { + echo ' +
    '; + + // Show a warning if they are allowed more than one option. + if ($context['poll']['allowed_warning']) + echo ' +

    ', $context['poll']['allowed_warning'], '

    '; + + echo ' +
      '; + + // Show each option with its button - a radio likely. + foreach ($context['poll']['options'] as $option) + echo ' +
    • ', $option['vote_button'], '
    • '; + + echo ' +
    +
    + + +
    +
    '; + } + + // Is the clock ticking? + if (!empty($context['poll']['expire_time'])) + echo ' +

    ', ($context['poll']['is_expired'] ? $txt['poll_expired_on'] : $txt['poll_expires_on']), ': ', $context['poll']['expire_time'], '

    '; + + echo ' +
    +
    +
    +
    '; + + template_button_strip($context['poll_buttons']); + + echo ' +
    + '; + } + + // Does this topic have some events linked to it? + if (!empty($context['linked_calendar_events'])) + { + echo ' +
    +

    ', $txt['calendar_linked_events'], '

    +
    +
    + +
    '; + } + // Mobile action - moderation buttons (top) + if (!empty($context['normal_buttons'])) + echo ' +
    + ', $txt['mobile_action'], ' + ', !empty($context['mod_buttons']) ? '' . $txt['mobile_moderation'] . '' : '', ' +
    '; + + echo ' + '; + + // Show the topic information - icon, subject, etc. + echo ' +
    +
    '; + + $context['ignoredMsgs'] = array(); + $context['removableMessageIDs'] = array(); + + // Get all the messages... + while ($message = $context['get_message']()) + template_single_post($message); + + echo ' +
    +
    '; + + // Show the page index... "Pages: [1]". But after all posts. + echo ' +
    + + ', template_button_strip($context['normal_buttons'], 'right'), ' + ', $context['menu_separator'], ' + '; + // Next - Prev + //echo '', $context['previous_next'], '' + ; + + // Mobile action - moderation buttons (bottom) + if (!empty($context['normal_buttons'])) + echo ' +
    + ', $txt['mobile_action'], ' + ', !empty($context['mod_buttons']) ? '' . $txt['mobile_moderation'] . '' : '', ' +
    '; + + echo ' +
    '; + + // Show the lower breadcrumbs. + theme_linktree(); + + // Moderation buttons + echo ' +
    + ', template_button_strip($context['mod_buttons'], 'bottom', array('id' => 'moderationbuttons_strip')), ' +
    '; + + // Show the jumpto box, or actually...let Javascript do it. + echo ' +
    '; + + // User action pop on mobile screen (or actually small screen), this uses responsive css does not check mobile device. + echo ' + '; + + // Show the moderation button & pop (if there is anything to show) + if (!empty($context['mod_buttons'])) + echo ' + '; + + echo ' + '; +} + +/** + * Template for displaying a single post. + * + * @param array $message An array of information about the message to display. Should have 'id' and 'member'. Can also have 'first_new', 'is_ignored' and 'css_class'. + */ +function template_single_post($message) +{ + global $context, $settings, $options, $txt, $scripturl, $modSettings; + + $ignoring = false; + + if ($message['can_remove']) + $context['removableMessageIDs'][] = $message['id']; + + // Are we ignoring this message? + if (!empty($message['is_ignored'])) + { + $ignoring = true; + $context['ignoredMsgs'][] = $message['id']; + } + + // Show the message anchor and a "new" anchor if this message is new. + echo ' +
    + ', $message['id'] != $context['first_message'] ? ' + ' . ($message['first_new'] ? '' : '') : '', ' +
    '; + + // Show information about the poster of this message. + echo ' +
    '; + + // Are there any custom fields above the member name? + if (!empty($message['custom_fields']['above_member'])) + { + echo ' +
    +
      '; + + foreach ($message['custom_fields']['above_member'] as $custom) + echo ' +
    • ', $custom['value'], '
    • '; + + echo ' +
    +
    '; + } + + echo ' +

    '; + + + // Custom fields BEFORE the username? + if (!empty($message['custom_fields']['before_member'])) + foreach ($message['custom_fields']['before_member'] as $custom) + echo ' + ', $custom['value'], ''; + + // Show a link to the member's profile. + echo ' + ', $message['member']['link']; + + // Custom fields AFTER the username? + if (!empty($message['custom_fields']['after_member'])) + foreach ($message['custom_fields']['after_member'] as $custom) + echo ' + ', $custom['value'], ''; + + // Begin display of user info + echo ' +

    + +
    +
    +
    '; + + // Some people don't want subject... The div is still required or quick edit breaks. + echo ' +
    + ', $message['link'], ' +
    '; +// Link with date and link to the message above post + echo ' + + +
    '; + + // Ignoring this user? Hide the post. + if ($ignoring) + echo ' +
    + ', $txt['ignoring_user'], ' + +
    '; + + // Show the post itself, finally! + echo ' +
    '; + + if (!$message['approved'] && $message['member']['id'] != 0 && $message['member']['id'] == $context['user']['id']) + echo ' +
    + ', $txt['post_awaiting_approval'], ' +
    '; + echo ' + +
    '; + + // Assuming there are attachments... + if (!empty($message['attachment'])) + { + $last_approved_state = 1; + // Don't output the div unless we actually have something to show... + $div_output = false; + + foreach ($message['attachment'] as $attachment) + { + // Do we want this attachment to not be showed here? + if ($attachment['is_approved'] && !empty($modSettings['dont_show_attach_under_post']) && !empty($context['show_attach_under_post'][$attachment['id']])) + continue; + elseif (!$div_output) + { + $div_output = true; + + echo ' + '; + } + + echo ' +
    '; + + // What about likes? + if (!empty($modSettings['enable_likes'])) + { + echo ' +
      '; + + if (!empty($message['likes']['can_like'])) + { + echo ' + '; + } + + if (!empty($message['likes']['count'])) + { + $context['some_likes'] = true; + $count = $message['likes']['count']; + $base = 'likes_'; + + if ($message['likes']['you']) + { + $base = 'you_' . $base; + $count--; + } + + $base .= (isset($txt[$base . $count])) ? $count : 'n'; + + echo ' + '; + } + + echo ' +
    '; + } + + + echo ' +
    +
    '; + // Show "<< Last Edit: Time by Person >>" if this post was edited. But we need the div even if it wasn't modified! + // Because we insert into it through AJAX and we don't want to stop themers moving it around if they so wish so they can put it where they want it. + echo ' + '; + + if (!empty($modSettings['show_modify']) && !empty($message['modified']['name'])) + echo + $message['modified']['last_edit_text']; + + echo ''; + // Are there any custom profile fields for above the signature? + if (!empty($message['custom_fields']['above_signature'])) + { + echo ' +
    +
      '; + + foreach ($message['custom_fields']['above_signature'] as $custom) + echo ' +
    • ', $custom['value'], '
    • '; + + echo ' +
    +
    '; + } + + // Show the member's signature? + if (!empty($message['member']['signature']) && empty($options['show_no_signatures']) && $context['signature_enabled']) + echo ' + '; + + // Are there any custom profile fields for below the signature? + if (!empty($message['custom_fields']['below_signature'])) + { + echo ' +
    +
      '; + + foreach ($message['custom_fields']['below_signature'] as $custom) + echo ' +
    • ', $custom['value'], '
    • '; + + echo ' +
    +
    '; + } + + echo ' +
    +
    +
    +
    +
    '; +} + +/** + * The template for displaying the quick reply box. + */ +function template_quickreply() +{ + global $context, $modSettings, $scripturl, $options, $txt; + + echo ' + +
    +
    +

    + ', $txt['quick_reply'], ' +

    +
    +
    +
    '; + + // Is the topic locked? + if ($context['is_locked']) + echo ' +

    ', $txt['quick_reply_warning'], '

    '; + + // Show a warning if the topic is old + if (!empty($context['oldTopicError'])) + echo ' +

    ', sprintf($txt['error_old_topic'], $modSettings['oldTopicDays']), '

    '; + + // Does the post need approval? + if (!$context['can_reply_approved']) + echo ' +

    ', $txt['wait_for_approval'], '

    '; + + echo ' +
    + + + + + + + + + + '; + + // Guests just need more. + if ($context['user']['is_guest']) + { + echo ' +
    +
    + ', $txt['name'], ': +
    +
    + +
    '; + + if (empty($modSettings['guest_post_no_email'])) + { + echo ' +
    + ', $txt['email'], ': +
    +
    + +
    '; + } + + echo ' +
    '; + } + + echo ' + ', template_control_richedit($context['post_box_name'], 'smileyBox_message', 'bbcBox_message'), ' + '; + + // Is visual verification enabled? + if ($context['require_verification']) + echo ' +
    + ', $txt['verification'], ': + ', template_control_verification($context['visual_verification_id'], 'all'), ' +
    '; + + // Finally, the submit buttons. + echo ' + + ', template_control_richedit_buttons($context['post_box_name']), ' + '; + echo ' +
    +
    +
    +
    +
    '; + + // Draft autosave available and the user has it enabled? + if (!empty($context['drafts_autosave'])) + echo ' + '; + + if ($context['show_spellchecking']) + echo ' +
    + +
    '; + + echo ' + '; +} + +?> diff --git a/Errors.template.php b/Errors.template.php new file mode 100644 index 0000000..005e97a --- /dev/null +++ b/Errors.template.php @@ -0,0 +1,380 @@ + + ', $context['error_title'], ' +
    +
    + ', $context['error_message'], ' +
    '; + else + { + echo ' +
    +
    +

    + ', $context['error_title'], ' +

    +
    +
    +
    + ', $context['error_message'], ' +
    +
    +
    '; + + // Show a back button + echo ' +
    + ', $txt['back'], ' +
    '; + } +} + +/** + * This template handles the error log in the admin center. + */ +function template_error_log() +{ + global $scripturl, $context, $txt; + + echo ' +
    +
    +

    + ', $txt['errorlog'], ' +

    +
    +
    +
    '; + + // No errors, so just show a message and be done with it. + if (empty($context['errors'])) + { + echo ' + ', $txt['errorlog_no_entries'], ' +
    +
    +
    '; + return; + } + + if ($context['has_filter']) + echo ' +
    + ', $txt['applying_filter'], ': ', $context['filter']['entity'], ' ', $context['filter']['value']['html'], ' +
    '; + + echo ' +
    + + + ', ($context['has_filter'] ? '' . $txt['clear_filter'] . '' : ''), ' +
    + ', $txt['apply_filter_of_type'], ':'; + + $error_types = array(); + + foreach ($context['error_types'] as $type => $details) + $error_types[] = ($details['is_selected'] ? ' ' : '') . '' . ($details['error_type'] === 'critical' ? '' . $details['label'] . '' : $details['label']) . ''; + + echo ' + ', implode(' | ', $error_types), ' + + +
    + +
    + + +
    +
    '; + + // We have some errors, must be some mods installed :P + foreach ($context['errors'] as $error) + { + echo ' +
    +
    ', $error['id'], '
    +
    + + + +
    + ', $error['time'], ' +
    +
    +
    +
    +
    + + ', $error['member']['link'], ''; + + if (!empty($error['member']['ip'])) + echo ' +
    + + ', $error['member']['ip'], ''; + + if (!empty($error['member']['session'])) + echo ' +
    + ', $error['member']['session'], ''; + + echo ' +
    + + ', $error['url']['html'], ''; + + if (!empty($error['file'])) + echo ' +
    + ', $error['file']['file'], ' (', $txt['line'], ' ', $error['file']['line'], ')'; + + echo ' +
    + +
    +
    +
    + ', $txt['error_type'], ': ', $error['error_type']['type'] === 'critical' ? '' . $error['error_type']['name'] . '' : $error['error_type']['name'], '
    + + ', $error['message']['html'], ' +
    +
    '; + } + + echo ' +
    + +
    + + +
    +
    '; + + if ($context['sort_direction'] == 'down') + echo ' + '; + + echo ' + + + '; +} + +/** + * This template shows a snippet of code from a file and highlights which line caused the error. + */ +function template_show_file() +{ + global $context, $settings, $modSettings; + + echo ' + + + + ', $context['file_data']['file'], ' + ', template_css(), ' + + + '; + foreach ($context['file_data']['contents'] as $index => $line) + { + $line_num = $index + $context['file_data']['min']; + $is_target = $line_num == $context['file_data']['target']; + + echo ' + + + + '; + } + echo ' +
    ==>' : '">', $line_num, ':', $line, '
    + +'; +} + +/** + * This template handles showing attachment-related errors + */ +function template_attachment_errors() +{ + global $context, $scripturl, $txt; + + echo ' +
    +
    +

    + ', $context['error_title'], ' +

    +
    +
    +
    +
    ', + $context['error_message'], ' +
    '; + + if (!empty($context['back_link'])) + echo ' + ', $txt['back'], ''; + + echo ' + + ', $txt['continue'], ' +
    +
    +
    '; +} + +/** + * This template shows a backtrace of the given error + */ +function template_show_backtrace() +{ + global $context, $settings, $modSettings, $txt, $scripturl; + + echo ' + + + + ', $txt['backtrace_title'], ''; + + template_css(); + + echo ' + + '; + + if (!empty($context['error_info'])) + { + echo ' +
    +

    + ', $txt['error'], ' +

    +
    +
    + + '; + + if (!empty($context['error_info']['error_type'])) + echo ' + + + + + + '; + + if (!empty($context['error_info']['message'])) + echo ' + + + + + + '; + + if (!empty($context['error_info']['file'])) + echo ' + + + + + + '; + + if (!empty($context['error_info']['line'])) + echo ' + + + + + + '; + + if (!empty($context['error_info']['url'])) + echo ' + + + + + + '; + + echo ' + +
    ', $txt['error_type'], '
    ', ucfirst($context['error_info']['error_type']), '
    ', $txt['error_message'], '
    ', $context['error_info']['message'], '
    ', $txt['error_file'], '
    ', $context['error_info']['file'], '
    ', $txt['error_line'], '
    ', $context['error_info']['line'], '
    ', $txt['error_url'], '
    ', $context['error_info']['url'], '
    +
    '; + } + + if (!empty($context['error_info']['backtrace'])) + { + echo ' +
    +

    + ', $txt['backtrace_title'], ' +

    +
    +
    +
      '; + + foreach ($context['error_info']['backtrace'] as $key => $value) + { + //Check for existing + if (!property_exists($value, 'file') || empty($value->file)) + $value->file = $txt['unknown']; + + if (!property_exists($value, 'line') || empty($value->line)) + $value->line = -1; + + echo ' +
    • ', sprintf($txt['backtrace_info'], $key, $value->function, $value->file, $value->line, base64_encode($value->file), $scripturl), '
    • '; + } + + echo ' +
    +
    '; + } + + echo ' + +'; +} + +?> \ No newline at end of file diff --git a/GenericControls.template.php b/GenericControls.template.php new file mode 100644 index 0000000..759f276 --- /dev/null +++ b/GenericControls.template.php @@ -0,0 +1,273 @@ +', $editor_context['value'], ' +
    + + '; +} + +/** + * This template shows the form buttons at the bottom of the editor + * + * @param string $editor_id The editor ID + */ +function template_control_richedit_buttons($editor_id) +{ + global $context, $settings, $txt, $modSettings; + + $editor_context = &$context['controls']['richedit'][$editor_id]; + + echo ' + + ', $context['shortcuts_text'], ' + + '; + + $tempTab = $context['tabindex']; + + if (!empty($context['drafts_pm_save'])) + $tempTab++; + elseif (!empty($context['drafts_save'])) + $tempTab++; + elseif ($editor_context['preview_type']) + $tempTab++; + elseif ($context['show_spellchecking']) + $tempTab++; + + $tempTab++; + $context['tabindex'] = $tempTab; + + foreach ($context['richedit_buttons'] as $name => $button) { + if ($name == 'spell_check') { + $button['onclick'] = 'oEditorHandle_' . $editor_id . '.spellCheckStart();'; + } + + if ($name == 'preview') { + $button['value'] = isset($editor_context['labels']['preview_button']) ? $editor_context['labels']['preview_button'] : $button['value']; + $button['onclick'] = $editor_context['preview_type'] == 2 ? '' : 'return submitThisOnce(this);'; + $button['show'] = $editor_context['preview_type']; + } + + if ($button['show']) { + echo ' + '; + } + } + + echo ' + + '; + + // Load in the PM autosaver if it's enabled + if (!empty($context['drafts_pm_save']) && !empty($context['drafts_autosave'])) + echo ' + + + + + '; + + // Start an instance of the auto saver if its enabled + if (!empty($context['drafts_save']) && !empty($context['drafts_autosave'])) + echo ' + + + + + '; +} + +/** + * This template displays a verification form + * + * @param int|string $verify_id The verification control ID + * @param string $display_type What type to display. Can be 'single' to only show one verification option or 'all' to show all of them + * @param bool $reset Whether to reset the internal tracking counter + * @return bool False if there's nothing else to show, true if $display_type is 'single', nothing otherwise + */ +function template_control_verification($verify_id, $display_type = 'all', $reset = false) +{ + global $context, $txt; + + $verify_context = &$context['controls']['verification'][$verify_id]; + + // Keep track of where we are. + if (empty($verify_context['tracking']) || $reset) + $verify_context['tracking'] = 0; + + // How many items are there to display in total. + $total_items = count($verify_context['questions']) + ($verify_context['show_visual'] || $verify_context['can_recaptcha'] ? 1 : 0); + + // If we've gone too far, stop. + if ($verify_context['tracking'] > $total_items) + return false; + + // Loop through each item to show them. + for ($i = 0; $i < $total_items; $i++) + { + // If we're after a single item only show it if we're in the right place. + if ($display_type == 'single' && $verify_context['tracking'] != $i) + continue; + + if ($display_type != 'single') + echo ' +
    '; + + // Display empty field, but only if we have one, and it's the first time. + if ($verify_context['empty_field'] && empty($i)) + echo ' +
    + ', $txt['visual_verification_hidden'], ': + +
    '; + + // Do the actual stuff + if ($i == 0 && ($verify_context['show_visual'] || $verify_context['can_recaptcha'])) + { + if ($verify_context['show_visual']) + { + if ($context['use_graphic_library']) + echo ' + ', $txt['visual_verification_description'], ''; + else + echo ' + ', $txt['visual_verification_description'], ' + ', $txt['visual_verification_description'], ' + ', $txt['visual_verification_description'], ' + ', $txt['visual_verification_description'], ' + ', $txt['visual_verification_description'], ' + ', $txt['visual_verification_description'], ''; + + echo ' +
    + ', $txt['visual_verification_sound'], ' / ', $txt['visual_verification_request_new'], '', $display_type != 'quick_reply' ? '
    ' : '', '
    + ', $txt['visual_verification_description'], ':', $display_type != 'quick_reply' ? '
    ' : '', ' + +
    '; + } + + if ($verify_context['can_recaptcha']) + { + $lang = (isset($txt['lang_recaptcha']) ? $txt['lang_recaptcha'] : $txt['lang_dictionary']); + echo ' +
    +
    + '; + } + } + else + { + // Where in the question array is this question? + $qIndex = $verify_context['show_visual'] || $verify_context['can_recaptcha'] ? $i - 1 : $i; + + if (isset($verify_context['questions'][$qIndex])) + echo ' +
    + ', $verify_context['questions'][$qIndex]['q'], ':
    + +
    '; + } + + if ($display_type != 'single') + echo ' +
    '; + + // If we were displaying just one and we did it, break. + if ($display_type == 'single' && $verify_context['tracking'] == $i) + break; + } + + // Assume we found something, always. + $verify_context['tracking']++; + + // Tell something displaying piecemeal to keep going. + if ($display_type == 'single') + return true; +} + +?> \ No newline at end of file diff --git a/GenericList.template.php b/GenericList.template.php new file mode 100644 index 0000000..7cd3b5b --- /dev/null +++ b/GenericList.template.php @@ -0,0 +1,187 @@ +'; + + // Show the title of the table (if any). + if (!empty($cur_list['title'])) + echo ' +
    +

    + ', $cur_list['title'], ' +

    +
    '; + + if (isset($cur_list['additional_rows']['after_title'])) + { + echo ' +
    '; + + template_additional_rows('after_title', $cur_list); + + echo ' +
    '; + } + + if (isset($cur_list['additional_rows']['top_of_list'])) + template_additional_rows('top_of_list', $cur_list); + + if ((!empty($cur_list['items_per_page']) && !empty($cur_list['page_index'])) || isset($cur_list['additional_rows']['above_column_headers'])) + { + // Show the page index (if this list doesn't intend to show all items). + if (!empty($cur_list['items_per_page']) && !empty($cur_list['page_index'])) + echo ' +
    + +
    '; + + if (isset($cur_list['additional_rows']['above_column_headers'])) + template_additional_rows('above_column_headers', $cur_list); + } + + echo ' + '; + + // Show the column headers. + $header_count = count($cur_list['headers']); + if (!($header_count < 2 && empty($cur_list['headers'][0]['label']))) + { + echo ' + + '; + + // Loop through each column and add a table header. + foreach ($cur_list['headers'] as $col_header) + echo ' + '; + + echo ' + + '; + } + + echo ' + '; + + // Show a nice message informing there are no items in this list. + if (empty($cur_list['rows']) && !empty($cur_list['no_items_label'])) + echo ' + + + '; + + // Show the list rows. + elseif (!empty($cur_list['rows'])) + { + foreach ($cur_list['rows'] as $id => $row) + { + echo ' + '; + + if (!empty($row['data'])) + foreach ($row['data'] as $row_id => $row_data) + echo ' + '; + + echo ' + '; + } + } + + echo ' + +
    + ', empty($col_header['href']) ? '' : '', empty($col_header['label']) ? '' : $col_header['label'], empty($col_header['href']) ? '' : (empty($col_header['sort_image']) ? '' : ' '), ' +
    + ', $cur_list['no_items_label'], ' +
    + ', $row_data['value'], ' +
    '; + + if ((!empty($cur_list['items_per_page']) && !empty($cur_list['page_index'])) || isset($cur_list['additional_rows']['below_table_data'])) + { + echo ' +
    '; + + // Show the page index (if this list doesn't intend to show all items). + if (!empty($cur_list['items_per_page']) && !empty($cur_list['page_index'])) + echo ' +
    + +
    '; + + + if (isset($cur_list['additional_rows']['below_table_data'])) + template_additional_rows('below_table_data', $cur_list); + echo ' +
    '; + } + + if (isset($cur_list['additional_rows']['bottom_of_list'])) + template_additional_rows('bottom_of_list', $cur_list); + + if (isset($cur_list['form'])) + { + foreach ($cur_list['form']['hidden_fields'] as $name => $value) + echo ' + '; + + if (isset($cur_list['form']['token'])) + echo ' + '; + + echo ' + '; + } + + if (isset($cur_list['javascript'])) + echo ' + '; +} + +/** + * This template displays additional rows above or below the list. + * + * @param string $row_position The position ('top', 'bottom', etc.) + * @param array $cur_list An array with the data for the current list + */ +function template_additional_rows($row_position, $cur_list) +{ + foreach ($cur_list['additional_rows'][$row_position] as $row) + echo ' +
    + ', $row['value'], ' +
    '; +} + +?> \ No newline at end of file diff --git a/GenericMenu.template.php b/GenericMenu.template.php new file mode 100644 index 0000000..42afcf9 --- /dev/null +++ b/GenericMenu.template.php @@ -0,0 +1,308 @@ + +
    + + ', sprintf($txt['mobile_generic_menu'], $menu_label), ' +
    + + + '; + + // This is the main table - we need it so we can keep the content to the right of it. + echo ' +
    '; + + // It's possible that some pages have their own tabs they wanna force... +// if (!empty($context['tabs'])) + template_generic_menu_tabs($menu_context); +} + +/** + * Part of the admin layer - used with generic_menu_dropdown_above to close the admin content div. + */ +function template_generic_menu_dropdown_below() +{ + echo ' +
    '; +} + +/** + * The template for displaying a menu + * + * @param array $menu_context An array of menu information + */ +function template_generic_menu(&$menu_context) +{ + global $context; + + echo ' +
    + +
    '; +} + +/** + * The code for displaying the menu + * + * @param array $menu_context An array of menu context data + */ +function template_generic_menu_tabs(&$menu_context) +{ + global $context, $settings, $scripturl, $txt; + + // Handy shortcut. + $tab_context = &$menu_context['tab_data']; + + if (!empty($tab_context['title'])) + { + echo ' +
    '; + + // The function is in Admin.template.php, but since this template is used elsewhere too better check if the function is available + if (function_exists('template_admin_quick_search')) + template_admin_quick_search(); + + echo ' +

    '; + + // Exactly how many tabs do we have? + if (!empty($context['tabs'])) + { + foreach ($context['tabs'] as $id => $tab) + { + // Can this not be accessed? + if (!empty($tab['disabled'])) + { + $tab_context['tabs'][$id]['disabled'] = true; + continue; + } + + // Did this not even exist - or do we not have a label? + if (!isset($tab_context['tabs'][$id])) + $tab_context['tabs'][$id] = array('label' => $tab['label']); + elseif (!isset($tab_context['tabs'][$id]['label'])) + $tab_context['tabs'][$id]['label'] = $tab['label']; + + // Has a custom URL defined in the main admin structure? + if (isset($tab['url']) && !isset($tab_context['tabs'][$id]['url'])) + $tab_context['tabs'][$id]['url'] = $tab['url']; + + // Any additional parameters for the url? + if (isset($tab['add_params']) && !isset($tab_context['tabs'][$id]['add_params'])) + $tab_context['tabs'][$id]['add_params'] = $tab['add_params']; + + // Has it been deemed selected? + if (!empty($tab['is_selected'])) + $tab_context['tabs'][$id]['is_selected'] = true; + + // Does it have its own help? + if (!empty($tab['help'])) + $tab_context['tabs'][$id]['help'] = $tab['help']; + + // Is this the last one? + if (!empty($tab['is_last']) && !isset($tab_context['override_last'])) + $tab_context['tabs'][$id]['is_last'] = true; + } + + // Find the selected tab + foreach ($tab_context['tabs'] as $sa => $tab) + { + if (!empty($tab['is_selected']) || (isset($menu_context['current_subsection']) && $menu_context['current_subsection'] == $sa)) + { + $selected_tab = $tab; + $tab_context['tabs'][$sa]['is_selected'] = true; + } + } + } + + // Show an icon and/or a help item? + if (!empty($selected_tab['icon_class']) || !empty($tab_context['icon_class']) || !empty($selected_tab['icon']) || !empty($tab_context['icon']) || !empty($selected_tab['help']) || !empty($tab_context['help'])) + { + if (!empty($selected_tab['icon_class']) || !empty($tab_context['icon_class'])) + echo ' + '; + elseif (!empty($selected_tab['icon']) || !empty($tab_context['icon'])) + echo ' + '; + + if (!empty($selected_tab['help']) || !empty($tab_context['help'])) + echo ' + '; + + echo $tab_context['title']; + } + else + echo ' + ', $tab_context['title']; + + echo ' +

    +
    '; + } + + // Shall we use the tabs? Yes, it's the only known way! + if (!empty($selected_tab['description']) || !empty($tab_context['description'])) + echo ' +

    + ', !empty($selected_tab['description']) ? $selected_tab['description'] : $tab_context['description'], ' +

    '; + + // Print out all the items in this tab (if any). + if (!empty($context['tabs'])) + { + // The admin tabs. + echo ' + +
    + + ', sprintf($txt['mobile_generic_menu'], $tab_context['title']), ' +
    +
    +
    + +
    + '; + } +} + +?> diff --git a/Help.template.php b/Help.template.php new file mode 100644 index 0000000..d9157bb --- /dev/null +++ b/Help.template.php @@ -0,0 +1,176 @@ + + + + + + ', $context['page_title'], ' + ', template_css(), ' + + + +
    + ', $context['help_text'], '
    +
    + ', $txt['close_window'], ' +
    + +'; +} + +/** + * The template for the popup for finding members + */ +function template_find_members() +{ + global $context, $settings, $scripturl, $modSettings, $txt; + + echo ' + + + ', $txt['find_members'], ' + + + ', template_css(), ' + + + + +
    +
    +
    +

    ', $txt['find_members'], '

    +
    +
    + ', $txt['find_username'], ':
    +
    + ', $txt['find_wildcards'], '
    '; + + // Only offer to search for buddies if we have some! + if (!empty($context['show_buddies'])) + echo ' + + +
    '; + + echo ' +
    + + +
    +
    +
    +
    +
    +
    +

    ', $txt['find_results'], '

    +
    '; + + if (empty($context['results'])) + echo ' +

    ', $txt['find_no_results'], '

    '; + else + { + echo ' + +
    + +
    '; + } + + echo ' +
    + + + +
    '; + + if (empty($context['results'])) + echo ' + '; + + echo ' + +'; +} + +/** + * The main help page + */ +function template_manual() +{ + global $context, $scripturl, $txt; + + echo ' +
    +

    ', $txt['manual_smf_user_help'], '

    +
    +
    +
    +

    ', sprintf($txt['manual_welcome'], $context['forum_name_html_safe']), '

    +

    ', $txt['manual_introduction'], '

    + +

    ', sprintf($txt['manual_docs_and_credits'], $context['wiki_url'], $scripturl . '?action=credits'), '

    +
    +
    '; +} + +?> \ No newline at end of file diff --git a/Likes.template.php b/Likes.template.php new file mode 100644 index 0000000..82657da --- /dev/null +++ b/Likes.template.php @@ -0,0 +1,102 @@ + + + + + + ', $context['page_title'], ' + ', template_css(), ' + + + +
    +
      '; + + foreach ($context['likers'] as $liker => $like_details) + echo ' +
    • + ', $like_details['profile']['avatar']['image'], ' + + +
    • '; + + echo ' +
    +
    + ', $txt['close_window'], ' +
    + +'; +} + +/** + * Display a like button and info about how many people liked something + */ +function template_like() +{ + global $context, $scripturl, $txt; + + echo ' +
      '; + + if (!empty($context['data']['can_like'])) + echo ' +
    • + ', $context['data']['already_liked'] ? $txt['unlike'] : $txt['like'], ' +
    • '; + + if (!empty($context['data']['count'])) + { + $context['some_likes'] = true; + $count = $context['data']['count']; + $base = 'likes_'; + + if ($context['data']['already_liked']) + { + $base = 'you_' . $base; + $count--; + } + + $base .= (isset($txt[$base . $count])) ? $count : 'n'; + + echo ' + '; + } + + echo ' +
    '; +} + +/** + * A generic template that outputs any data passed to it... + */ +function template_generic() +{ + global $context; + + echo $context['data']; +} + +?> \ No newline at end of file diff --git a/Login.template.php b/Login.template.php new file mode 100644 index 0000000..4484b9a --- /dev/null +++ b/Login.template.php @@ -0,0 +1,503 @@ + +
    +
    +

    + ', $txt['login'], ' +

    +
    +
    + '; + + if (!empty($context['can_register'])) + echo ' +
    + ', sprintf($txt['register_prompt'], $scripturl), ' +
    '; + + // It is a long story as to why we have this when we're clearly not going to use it. + if (!empty($context['from_ajax'])) + echo ' +
    + '; + + echo ' +
    +
    + '; +} + +/** + * TFA authentication form + */ +function template_login_tfa() +{ + global $context, $scripturl, $txt; + + echo ' + '; +} + +/** + * Tell a guest to get lost or login! + */ +function template_kick_guest() +{ + global $context, $settings, $scripturl, $modSettings, $txt; + + // This isn't that much... just like normal login but with a message at the top. + echo ' +
    + +
    '; + + // Do the focus thing... + echo ' + '; +} + +/** + * This is for maintenance mode. + */ +function template_maintenance() +{ + global $context, $settings, $txt, $modSettings; + + // Display the administrator's message at the top. + echo ' +
    + +
    '; +} + +/** + * This is for the security stuff - makes administrators login every so often. + */ +function template_admin_login() +{ + global $context, $settings, $scripturl, $txt, $modSettings; + + // Since this should redirect to whatever they were doing, send all the get data. + echo ' +
    + + +
    '; + + // Focus on the password box. + echo ' + '; +} + +/** + * Activate your account manually? + */ +function template_retry_activate() +{ + global $context, $txt, $scripturl; + + // Just ask them for their code so they can try it again... + echo ' +
    +
    +

    ', $context['page_title'], '

    +
    +
    +
    '; + + // You didn't even have an ID? + if (empty($context['member_id'])) + echo ' +
    ', $txt['invalid_activation_username'], ':
    +
    '; + + echo ' +
    ', $txt['invalid_activation_retry'], ':
    +
    +
    +

    +
    +
    '; +} + +/** + * The form for resending the activation code. + */ +function template_resend() +{ + global $context, $txt, $scripturl; + + // Just ask them for their code so they can try it again... + echo ' +
    +
    +

    ', $context['page_title'], '

    +
    +
    +
    +
    ', $txt['invalid_activation_username'], ':
    +
    +
    +

    ', $txt['invalid_activation_new'], '

    +
    +
    ', $txt['invalid_activation_new_email'], ':
    +
    +
    ', $txt['invalid_activation_password'], ':
    +
    +
    '; + + if ($context['can_activate']) + echo ' +

    ', $txt['invalid_activation_known'], '

    +
    +
    ', $txt['invalid_activation_retry'], ':
    +
    +
    '; + + echo ' +

    +
    +
    '; +} + +/** + * Confirm a logout. + */ +function template_logout() +{ + global $context, $settings, $scripturl, $modSettings, $txt; + + // This isn't that much... just like normal login but with a message at the top. + echo ' +
    +
    +
    +

    ', $txt['logout_confirm'], '

    +
    +
    +

    + ', $txt['logout_notice'], ' +

    + +

    + + +

    +
    +
    +
    '; +} + +?> diff --git a/ManageAttachments.template.php b/ManageAttachments.template.php new file mode 100644 index 0000000..7fbe89d --- /dev/null +++ b/ManageAttachments.template.php @@ -0,0 +1,277 @@ + + var fUpdateStatus = function () + { + document.getElementById("avatar_max_width_external").disabled = document.getElementById("avatar_download_external").checked; + document.getElementById("avatar_max_height_external").disabled = document.getElementById("avatar_download_external").checked; + document.getElementById("avatar_action_too_large").disabled = document.getElementById("avatar_download_external").checked; + } + addLoadEvent(fUpdateStatus); + '; +} + +/** + * The attachment maintenance page + */ +function template_maintenance() +{ + global $context, $settings, $scripturl, $txt, $modSettings; + + echo ' +
    +
    +

    ', $txt['attachment_stats'], '

    +
    +
    +
    +
    ', $txt['attachment_total'], ':
    +
    ', $context['num_attachments'], '
    +
    ', $txt['attachment_manager_total_avatars'], ':
    +
    ', $context['num_avatars'], '
    +
    ', $txt['attachmentdir_size'], ':
    +
    ', $context['attachment_total_size'], ' ', $txt['kilobyte'], '
    +
    ', $txt['attach_current_dir'], ':
    +
    ', $modSettings['attachmentUploadDir'][$modSettings['currentAttachmentUploadDir']], '
    +
    ', $txt['attachmentdir_size_current'], ':
    +
    ', $context['attachment_current_size'], ' ', $txt['kilobyte'], '
    +
    ', $txt['attachment_space'], ':
    +
    ', isset($context['attachment_space']) ? $context['attachment_space'] . ' ' . $txt['kilobyte'] : $txt['attachmentdir_size_not_set'], '
    +
    ', $txt['attachmentdir_files_current'], ':
    +
    ', $context['attachment_current_files'], '
    +
    ', $txt['attachment_files'], ':
    +
    ', isset($context['attachment_files']) ? $context['attachment_files'] : $txt['attachmentdir_files_not_set'], '
    +
    +
    +
    +

    ', $txt['attachment_integrity_check'], '

    +
    +
    +
    +

    ', $txt['attachment_integrity_check_desc'], '

    + +
    +
    +
    +

    ', $txt['attachment_pruning'], '

    +
    +
    +
    +
    +
    ', $txt['attachment_remove_old'], '
    +
    ', $txt['days_word'], '
    +
    ', $txt['attachment_pruning_message'], '
    +
    + + + + +
    +
    +
    +
    +
    ', $txt['attachment_remove_size'], '
    +
    ', $txt['kilobyte'], '
    +
    ', $txt['attachment_pruning_message'], '
    +
    + + + + +
    +
    +
    +
    +
    ', $txt['attachment_manager_avatars_older'], '
    +
    ', $txt['days_word'], '
    + + + + +
    +
    +
    +
    '; + + if (!empty($context['results'])) + echo ' +
    ', $context['results'], '
    '; + + echo ' +
    +

    ', $txt['attachment_transfer'], '

    +
    +
    +
    +

    ', $txt['attachment_transfer_desc'], '

    +
    +
    ', $txt['attachment_transfer_from'], '
    +
    + +
    +
    ', $txt['attachment_transfer_auto'], '
    +
    + +
    +
    ', $txt['attachment_transfer_to'], '
    +
    + +
    '; + + if (!empty($modSettings['attachmentDirFileLimit'])) + echo ' +
    ', $txt['attachment_transfer_empty'], '
    +
    '; + + echo ' +
    + + +
    +
    +
    + +
    '; +} + +/** + * The file repair page + */ +function template_attachment_repair() +{ + global $context, $txt, $scripturl; + + // If we've completed just let them know! + if ($context['completed']) + echo ' +
    +
    +

    ', $txt['repair_attachments_complete'], '

    +
    +
    + ', $txt['repair_attachments_complete_desc'], ' +
    +
    '; + + // What about if no errors were even found? + elseif (!$context['errors_found']) + echo ' +
    +
    +

    ', $txt['repair_attachments_complete'], '

    +
    +
    + ', $txt['repair_attachments_no_errors'], ' +
    +
    '; + + // Otherwise, I'm sad to say, we have a problem! + else + { + echo ' +
    +
    +
    +

    ', $txt['repair_attachments'], '

    +
    +
    +

    ', $txt['repair_attachments_error_desc'], '

    '; + + // Loop through each error reporting the status + foreach ($context['repair_errors'] as $error => $number) + if (!empty($number)) + echo ' + +
    '; + + echo ' +
    + + +
    +
    +
    '; + } +} + +/** + * The page that handles managing attachment paths. + */ +function template_attachment_paths() +{ + global $modSettings; + + if (!empty($modSettings['attachment_basedirectories'])) + template_show_list('base_paths'); + + template_show_list('attach_paths'); +} + +?> \ No newline at end of file diff --git a/ManageBans.template.php b/ManageBans.template.php new file mode 100644 index 0000000..29a9e8f --- /dev/null +++ b/ManageBans.template.php @@ -0,0 +1,338 @@ + +
    '; + + // If there were errors creating the ban, show them. + if (!empty($context['error_messages'])) + { + echo ' +
    + ', $txt['ban_errors_detected'], ' +
      '; + + foreach ($context['error_messages'] as $error) + echo ' +
    • ', $error, '
    • '; + + echo ' +
    +
    '; + } + + echo ' +
    +

    + ', $context['ban']['is_new'] ? $txt['ban_add_new'] : $txt['ban_edit'] . ' \'' . $context['ban']['name'] . '\'', ' +

    +
    '; + + if ($context['ban']['is_new']) + echo ' +
    ', $txt['ban_add_notes'], '
    '; + + echo ' +
    +
    +
    + ', $txt['ban_name'], ': +
    +
    + +
    '; + + if (isset($context['ban']['reason'])) + echo ' +
    +
    + ', $txt['ban_reason_desc'], ' +
    +
    + +
    '; + + if (isset($context['ban']['notes'])) + echo ' +
    +
    + ', $txt['ban_notes_desc'], ' +
    +
    + +
    '; + + echo ' +
    +
    + + ', $txt['ban_expiration'], ' + +
    + : ', $txt['ban_days'], '
    + +
    +
    + + ', $txt['ban_restriction'], ' + +
    +
    + (?)
    +
    +
    +
    +
    '; + + if (!empty($context['ban_suggestions'])) + { + echo ' +
    + + ', $txt['ban_triggers'], ' + +
    +
    + + +
    +
    + +
    '; + + if (empty($modSettings['disableHostnameLookup'])) + echo ' +
    + + +
    +
    + +
    '; + + echo ' +
    + + +
    +
    + +
    +
    + + : +
    +
    + +
    +
    '; + + if (!empty($context['ban_suggestions']['other_ips'])) + { + foreach ($context['ban_suggestions']['other_ips'] as $key => $ban_ips) + { + if (!empty($ban_ips)) + { + echo ' +
    ', $txt[$key], ':
    +
    '; + + $count = 0; + foreach ($ban_ips as $ip) + echo ' +
    + +
    +
    + +
    '; + + echo ' +
    '; + } + } + } + + echo ' +
    '; + } + + echo ' + + + ', isset($context['ban']['from_user']) ? ' + ' : '', ' + + +
    +
    '; + + if (!$context['ban']['is_new'] && empty($context['ban_suggestions'])) + { + echo ' +
    '; + template_show_list('ban_items'); + } + + echo ' + + '; +} + +/** + * Add or edit a ban trigger + */ +function template_ban_edit_trigger() +{ + global $context, $txt, $modSettings; + + echo ' +
    +
    +
    +

    + ', $context['ban_trigger']['is_new'] ? $txt['ban_add_trigger'] : $txt['ban_edit_trigger_title'], ' +

    +
    +
    +
    '; + if ($context['ban_trigger']['is_new']) + echo ' + + ', $txt['ban_triggers'], ' + '; + echo ' +
    '; + if ($context['ban_trigger']['is_new'] || $context['ban_trigger']['ip']['selected']) + echo ' +
    + + +
    +
    + +
    '; + + if (empty($modSettings['disableHostnameLookup']) && ($context['ban_trigger']['is_new'] || $context['ban_trigger']['hostname']['selected'])) + echo ' +
    + + +
    +
    + +
    '; + if ($context['ban_trigger']['is_new'] || $context['ban_trigger']['email']['selected']) + echo ' +
    + + +
    +
    + +
    '; + if ($context['ban_trigger']['is_new'] || $context['ban_trigger']['banneduser']['selected']) + echo ' +
    + + : +
    +
    + +
    '; + echo ' +
    +
    + +
    + + + + +
    +
    + '; +} + +?> \ No newline at end of file diff --git a/ManageBoards.template.php b/ManageBoards.template.php new file mode 100644 index 0000000..0c20333 --- /dev/null +++ b/ManageBoards.template.php @@ -0,0 +1,768 @@ + +
    +

    ', $txt['boards_edit'], '

    +
    +
    '; + + if (!empty($context['move_board'])) + echo ' +
    + ', $context['move_title'], ' [', $txt['mboards_cancel_moving'], ']', ' +
    '; + + // No categories so show a label. + if (empty($context['categories'])) + echo ' +
    + ', $txt['mboards_no_cats'], ' +
    '; + + // Loop through every category, listing the boards in each as we go. + foreach ($context['categories'] as $category) + { + // Link to modify the category. + echo ' + '; + + // Boards table header. + echo ' +
    +
      '; + + if (!empty($category['move_link'])) + echo ' +
    • '; + + $recycle_board = ' ' . $txt['recycle_board'] . ''; + $redirect_board = '' . $txt['redirect_board_desc'] . ''; + + // List through every board in the category, printing its name and link to modify the board. + foreach ($category['boards'] as $board) + { + echo ' + + ', $board['name'], '', !empty($modSettings['recycle_board']) && !empty($modSettings['recycle_enable']) && $modSettings['recycle_board'] == $board['id'] ? $recycle_board : '', $board['is_redirect'] ? $redirect_board : '', ' + + ', $context['can_manage_permissions'] ? '' . $txt['mboards_permissions'] . '' : '', ' + ', $txt['mboards_move'], ' + ', $txt['mboards_modify'], ' +
      + '; + + if (!empty($board['move_links'])) + { + echo ' +
    • '; + + foreach ($board['move_links'] as $link) + echo ' + '; + + echo ' +
    • '; + } + } + + // Button to add a new board. + echo ' +
    + + +
    '; + } + + echo ' +
    + '; +} + +/** + * Template for editing/adding a category on the forum. + */ +function template_modify_category() +{ + global $context, $scripturl, $txt; + + // Print table header. + echo ' +
    +
    + +
    +

    + ', isset($context['category']['is_new']) ? $txt['mboards_new_cat_name'] : $txt['cat_edit'], ' +

    +
    +
    +
    '; + + // If this isn't the only category, let the user choose where this category should be positioned down the board index. + if (count($context['category_order']) > 1) + { + echo ' +
    ', $txt['order'], ':
    +
    + +
    '; + } + + // Allow the user to edit the category name and/or choose whether you can collapse the category. + echo ' +
    + ', $txt['full_name'], ':
    + ', $txt['name_on_display'], ' +
    +
    + +
    +
    + ', $txt['mboards_description'], '
    + ', str_replace('{allowed_tags}', implode(', ', $context['description_allowed_tags']), $txt['mboards_cat_description_desc']), ' +
    +
    + +
    +
    + ', $txt['collapse_enable'], '
    + ', $txt['collapse_desc'], ' +
    +
    + +
    '; + + // Show any category settings added by mods using the 'integrate_edit_category' hook. + if (!empty($context['custom_category_settings']) && is_array($context['custom_category_settings'])) + { + foreach ($context['custom_category_settings'] as $catset_id => $catset) + { + if (!empty($catset['dt']) && !empty($catset['dd'])) + echo ' +
    + ', $catset['dt'], ' +
    + + ', $catset['dd'], ' + '; + } + } + + // Table footer. + echo ' +
    '; + + if (isset($context['category']['is_new'])) + echo ' + '; + else + echo ' + + '; + echo ' + + '; + + // If this category is empty we don't bother with the next confirmation screen. + if ($context['category']['is_empty']) + echo ' + '; + + echo ' +
    +
    +
    '; +} + +/** + * A template to confirm if a user wishes to delete a category - and whether they want to save the boards. + */ +function template_confirm_category_delete() +{ + global $context, $scripturl, $txt; + + // Print table header. + echo ' +
    +
    + +
    +

    ', $txt['mboards_delete_cat'], '

    +
    +
    +

    ', $txt['mboards_delete_cat_contains'], ':

    +
      '; + + foreach ($context['category']['children'] as $child) + echo ' +
    • ', $child, '
    • '; + + echo ' +
    +
    +
    +

    ', $txt['mboards_delete_what_do'], '

    +
    +
    +

    +
    + : + +

    + + + + + +
    +
    +
    '; +} + +/** + * Below is the template for adding/editing a board on the forum. + */ +function template_modify_board() +{ + global $context, $scripturl, $txt, $modSettings; + + // The main table header. + echo ' +
    +
    + +
    +

    + ', isset($context['board']['is_new']) ? $txt['mboards_new_board_name'] : $txt['boards_edit'], ' +

    +
    +
    +
    '; + + // Option for choosing the category the board lives in. + echo ' +
    + ', $txt['mboards_category'], ': +
    +
    + +
    '; + + // If this isn't the only board in this category let the user choose where the board is to live. + if ((isset($context['board']['is_new']) && count($context['board_order']) > 0) || count($context['board_order']) > 1) + { + echo ' +
    + ', $txt['order'], ': +
    +
    '; + + // The first select box gives the user the option to position it before, after or as a child of another board. + echo ' + '; + + // The second select box lists all the boards in the category. + echo ' + +
    '; + } + + // Options for board name and description. + echo ' +
    + ', $txt['full_name'], ':
    + ', $txt['name_on_display'], ' +
    +
    + +
    +
    + ', $txt['mboards_description'], ':
    + ', str_replace('{allowed_tags}', implode(', ', $context['description_allowed_tags']), $txt['mboards_description_desc']), ' +
    +
    + +
    +
    + ', $txt['permission_profile'], ':
    + ', $context['can_manage_permissions'] ? sprintf($txt['permission_profile_desc'], $scripturl . '?action=admin;area=permissions;sa=profiles;' . $context['session_var'] . '=' . $context['session_id']) : strip_tags($txt['permission_profile_desc']), ' +
    +
    + +
    +
    + ', $txt['mboards_groups'], ':
    + ', empty($modSettings['deny_boards_access']) ? $txt['mboards_groups_desc'] : $txt['boardsaccess_option_desc'], ''; + + echo ' +
    +
    '; + + if (!empty($modSettings['deny_boards_access'])) + echo ' + + + + + + + '; + + // List all the membergroups so the user can choose who may access this board. + foreach ($context['groups'] as $group) + if (empty($modSettings['deny_boards_access'])) + echo ' +
    '; + else + echo ' + + + + + + + '; + + if (empty($modSettings['deny_boards_access'])) + echo ' + + ', $txt['check_all'], ' + +

    + '; + else + echo ' + + + + + + + +
    ', $txt['permissions_option_on'], '', $txt['permissions_option_off'], '', $txt['permissions_option_deny'], '
    + + + + + + + +
    + + + + + + + + ', $txt['check_all'], ' +
    +
    '; + + // Options to choose moderators, specify as announcement board and choose whether to count posts here. + echo ' +
    + ', $txt['mboards_moderators'], ':
    + ', $txt['mboards_moderators_desc'], '
    +
    +
    + +
    +
    +
    + ', $txt['mboards_moderator_groups'], ':
    + ', $txt['mboards_moderator_groups_desc'], '
    +
    +
    + +
    +
    +
    + +
    '; + + if (empty($context['board']['is_recycle']) && empty($context['board']['topics'])) + { + echo ' +
    +
    + ', $txt['mboards_redirect'], ':
    + ', $txt['mboards_redirect_desc'], '
    +
    +
    + +
    +
    + +
    +
    +
    + ', $txt['mboards_redirect_url'], ':
    + ', $txt['mboards_redirect_url_desc'], '
    +
    +
    + +
    +
    +
    '; + + if ($context['board']['redirect']) + echo ' +
    +
    +
    + ', $txt['mboards_redirect_reset'], ':
    + ', $txt['mboards_redirect_reset_desc'], '
    +
    +
    + + (', sprintf($txt['mboards_current_redirects'], $context['board']['posts']), ') +
    +
    +
    '; + } + + echo ' +
    +
    +
    + ', $txt['mboards_count_posts'], ':
    + ', $txt['mboards_count_posts_desc'], '
    +
    +
    + +
    +
    +
    '; + + // Here the user can choose to force this board to use a theme other than the default theme for the forum. + echo ' +
    +
    +
    + ', $txt['mboards_theme'], ':
    + ', $txt['mboards_theme_desc'], '
    +
    +
    + +
    +
    +
    +
    +
    +
    + ', $txt['mboards_override_theme'], ':
    + ', $txt['mboards_override_theme_desc'], '
    +
    +
    + +
    +
    +
    '; + + // Show any board settings added by mods using the 'integrate_edit_board' hook. + if (!empty($context['custom_board_settings']) && is_array($context['custom_board_settings'])) + { + echo ' +
    +
    +
    '; + + foreach ($context['custom_board_settings'] as $cbs_id => $cbs) + { + if (!empty($cbs['dt']) && !empty($cbs['dd'])) + echo ' +
    + ', $cbs['dt'], ' +
    + + ', $cbs['dd'], ' + '; + } + + echo ' +
    +
    '; + } + + if (!empty($context['board']['is_recycle'])) + echo ' +
    ', $txt['mboards_recycle_disabled_delete'], '
    '; + + echo ' + + + '; + + // If this board has no children don't bother with the next confirmation screen. + if ($context['board']['no_children']) + echo ' + '; + + if (isset($context['board']['is_new'])) + echo ' + + '; + else + echo ' + '; + + if (!isset($context['board']['is_new']) && empty($context['board']['is_recycle'])) + echo ' + '; + echo ' +
    +
    +
    + + '; + + // Javascript for deciding what to show. + echo ' + '; +} + +/** + * A template used when a user is deleting a board with child boards in it - to see what they want to do with them. + */ +function template_confirm_board_delete() +{ + global $context, $scripturl, $txt; + + // Print table header. + echo ' +
    +
    + + +
    +

    ', $txt['mboards_delete_board'], '

    +
    +
    +

    ', $txt['mboards_delete_board_contains'], '

    +
      '; + + foreach ($context['children'] as $child) + echo ' +
    • ', $child['node']['name'], '
    • '; + + echo ' +
    +
    +
    +

    ', $txt['mboards_delete_what_do'], '

    +
    +
    +

    +
    + : + +

    + + + + + +
    +
    +
    '; +} + +?> \ No newline at end of file diff --git a/ManageCalendar.template.php b/ManageCalendar.template.php new file mode 100644 index 0000000..8e8b340 --- /dev/null +++ b/ManageCalendar.template.php @@ -0,0 +1,86 @@ + +
    +

    ', $context['page_title'], '

    +
    +
    +
    +
    + ', $txt['holidays_title_label'], ': +
    +
    + +
    +
    + ', $txt['calendar_year'], ' +
    +
    + + + + + +
    +
    '; + + if ($context['is_new']) + echo ' + '; + else + echo ' + + + '; + echo ' + + +
    + '; +} + +?> \ No newline at end of file diff --git a/ManageLanguages.template.php b/ManageLanguages.template.php new file mode 100644 index 0000000..bca1d12 --- /dev/null +++ b/ManageLanguages.template.php @@ -0,0 +1,367 @@ + +

    + ', $txt['languages_download_complete'], ' +

    + +
    + ', $context['install_complete'], ' +
    '; + return; + } + + // An error? + if (!empty($context['error_message'])) + echo ' +
    + ', $context['error_message'], ' +
    '; + + // Provide something of an introduction... + echo ' +
    +
    +

    + ', $txt['languages_download'], ' +

    +
    +
    +

    + ', $txt['languages_download_note'], ' +

    +
    + ', $txt['languages_download_info'], ' +
    +
    '; + + // Show the main files. + template_show_list('lang_main_files_list'); + + // Do we want some FTP baby? + // If the files are not writable, we might! + if (!empty($context['still_not_writable'])) + { + if (!empty($context['package_ftp']['error'])) + echo ' +
    + ', $context['package_ftp']['error'], ' +
    '; + + echo ' +
    +

    + ', $txt['package_ftp_necessary'], ' +

    +
    +
    +

    ', $txt['package_ftp_why'], '

    +
    +
    ', $txt['package_ftp_server'], ': +
    +
    +
    + + +
    + +
    + +
    + +
    +
    + +
    + +
    + +
    +
    + +
    + +
    + +
    +
    + +
    +
    +
    '; + } + + // Install? + echo ' +
    + + + +
    +
    '; +} + +/** + * Edit language entries. Note that this doesn't always work because of PHP's max_post_vars setting. + */ +function template_modify_language_entries() +{ + global $context, $txt, $scripturl; + + echo ' +
    +
    +

    + ', $txt['edit_languages'], ' +

    +
    +
    + ', $txt['edit_language_entries_primary'], ' +
    '; + + // Not writable? Oops, show an error for ya. + if (!empty($context['lang_file_not_writable_message'])) + echo ' +
    + ', $context['lang_file_not_writable_message'], ' +
    '; + + // Show the language entries + echo ' +
    +
    + ', $context['primary_settings']['name'], ' +
    '; + + foreach ($context['primary_settings'] as $setting => $setting_info) + { + if ($setting != 'name') + echo ' +
    + + +
    +
    + +
    '; + } + + echo ' +
    +
    + + + + '; + + // Allow deleting entries. English can't be deleted though. + if ($context['lang_id'] != 'english') + echo ' + '; + + echo ' +
    +
    + +
    +
    +

    + ', $txt['edit_language_entries'], ' +

    +
    +
    +
    + ', sprintf($txt['edit_language_entries_desc'], $scripturl, $txt['themeadmin_edit_title']), ' +
    +
    +
    + ', $txt['edit_language_entries_file'], ': + + + + +
    +
    '; + + // Is it not writable? Show an error. + if (!empty($context['entries_not_writable_message'])) + echo ' +
    + ', $context['entries_not_writable_message'], ' +
    '; + + // Already have some file entries? + if (!empty($context['file_entries'])) + { + echo ' +
    '; + + $entry_num = 0; + foreach ($context['file_entries'] as $group => $entries) + { + echo ' +
    + + + ', $txt['languages_' . $group], ' + +
    '; + + foreach ($entries as $entry) + { + ++$entry_num; + + echo ' +
    + ', $entry['key'], isset($entry['subkey']) ? '[' . $entry['subkey'] . ']' : '', ' +
    +
    '; + + if ($entry['can_remove']) + echo ' + + + + + + + + + + + + '; + else + echo ' + + '; + + echo ' + + + +
    '; + } + + echo ' +
    '; + + if (!empty($context['can_add_lang_entry'][$group])) + { + echo ' + + '; + } + + echo ' +
    '; + } + + echo ' + +
    '; + } + + echo ' +
    '; +} + +/** + * Add a new language + * + */ +function template_add_language() +{ + global $context, $txt, $scripturl; + + echo ' +
    +
    +

    + ', $txt['add_language'], ' +

    +
    +
    +
    + ', $txt['add_language_smf'], ' + + '; + + // Do we have some errors? Too bad. Display a little error box. + if (!empty($context['smf_error'])) + echo ' +
    +
    +

    ', $txt['add_language_error_' . $context['smf_error']], '

    +
    '; + + echo ' +
    + ', isBrowser('is_ie') ? ' ' : '', ' + +
    +
    '; + + // Had some results? + if (!empty($context['smf_languages']['rows'])) + { + echo ' +
    +

    ', $txt['add_language_found_title'], '

    +
    +
    ', $txt['add_language_smf_found'], '
    '; + + template_show_list('smf_languages'); + } + + echo ' +
    '; +} + +?> \ No newline at end of file diff --git a/ManageMail.template.php b/ManageMail.template.php new file mode 100644 index 0000000..af06f9f --- /dev/null +++ b/ManageMail.template.php @@ -0,0 +1,80 @@ + +
    +
    +

    ', $txt['mailqueue_stats'], '

    +
    +
    +
    +
    ', $txt['mailqueue_size'], '
    +
    ', $context['mail_queue_size'], '
    +
    ', $txt['mailqueue_oldest'], '
    +
    ', $context['oldest_mail'], '
    +
    +
    +
    '; + + template_show_list('mail_queue'); + + echo ' + '; +} + +/** + * Template for testing mail send. + */ + +function template_mailtest() +{ + global $context, $txt, $scripturl; + + // The results. + if (!empty($context['result'])) + { + if ($context['result'] == 'failure') + $result_txt = sprintf($txt['mailtest_result_failure'], $scripturl . '?action=admin;area=logs;sa=errorlog;desc'); + else + $result_txt = $txt['mailtest_result_success']; + + echo ' +
    ', $result_txt, '
    '; + } + + echo ' +
    +
    +

    ', $txt['mailtest_header'], '

    +
    +
    +
    +
    ', $txt['subject'], '
    +
    +
    + +
    +
    +
    +
    +
    '; +} + +?> \ No newline at end of file diff --git a/ManageMaintenance.template.php b/ManageMaintenance.template.php new file mode 100644 index 0000000..09f7ebf --- /dev/null +++ b/ManageMaintenance.template.php @@ -0,0 +1,622 @@ + + ', sprintf($txt['maintain_done'], $context['maintenance_finished']), ' + '; + + echo ' +
    +
    +

    ', $txt['maintain_optimize'], '

    +
    +
    +
    +

    ', $txt['maintain_optimize_info'], '

    + + + +
    +
    '; + + // Show an option to convert the body column of the post table to MEDIUMTEXT or TEXT + if (isset($context['convert_to'])) + echo ' +
    +

    ', $txt[$context['convert_to'] . '_title'], '

    +
    +
    +
    +

    ', $txt['mediumtext_introduction'], '

    ', + $context['convert_to_suggest'] ? '

    ' . $txt['convert_to_suggest_text'] . '

    ' : '', ' + + + +
    +
    '; + + // We might want to convert entities if we're on UTF-8. + if ($context['convert_entities']) + echo ' +
    +

    ', $txt['entity_convert_title'], '

    +
    +
    +
    +

    ', $txt['entity_convert_introduction'], '

    + + + +
    +
    '; + + echo ' +
    '; +} + +/** + * Template for the routine maintenance tasks. + */ +function template_maintain_routine() +{ + global $context, $txt, $scripturl; + + // Starts off with general maintenance procedures. + echo ' +
    '; + + // If maintenance has finished tell the user. + if (!empty($context['maintenance_finished'])) + echo ' +
    + ', sprintf($txt['maintain_done'], $context['maintenance_finished']), ' +
    '; + + echo ' +
    +

    ', $txt['maintain_version'], '

    +
    +
    +
    +

    + ', $txt['maintain_version_info'], ' + + +

    +
    +
    +
    +

    ', $txt['maintain_errors'], '

    +
    +
    +
    +

    + ', $txt['maintain_errors_info'], ' + + + +

    +
    +
    +
    +

    ', $txt['maintain_recount'], '

    +
    +
    +
    +

    + ', $txt['maintain_recount_info'], ' + + + +

    +
    +
    +
    +

    ', $txt['maintain_rebuild_settings'], '

    +
    +
    +
    +

    + ', $txt['maintain_rebuild_settings_info'], ' + + +

    +
    +
    +
    +

    ', $txt['maintain_logs'], '

    +
    +
    +
    +

    + ', $txt['maintain_logs_info'], ' + + + +

    +
    +
    +
    +

    ', $txt['maintain_cache'], '

    +
    +
    +
    +

    + ', $txt['maintain_cache_info'], ' + + + +

    +
    +
    +
    '; +} + +/** + * Template for the member maintenance tasks. + */ +function template_maintain_members() +{ + global $context, $settings, $txt, $scripturl; + + echo ' + +
    '; + + // If maintenance has finished, tell the user. + if (!empty($context['maintenance_finished'])) + echo ' +
    + ', sprintf($txt['maintain_done'], $context['maintenance_finished']), ' +
    '; + + echo ' +
    +

    ', $txt['maintain_reattribute_posts'], '

    +
    +
    +
    +

    ', $txt['reattribute_guest_posts'], '

    +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    +
    + +
    +
    + +
    +
    +

    + + +

    + + + +
    +
    +
    +

    + ', $txt['maintain_members'], ' +

    +
    +
    +
    +

    + ', $txt['maintain_members_since1'], ' + + ', $txt['maintain_members_since2'], ' + ', $txt['maintain_members_since3'], ' +

    +

    + + ', $txt['maintain_members_all'], ' +

    + + + + +
    +
    +
    +

    ', $txt['maintain_recountposts'], '

    +
    +
    +
    +

    ', $txt['maintain_recountposts_info'], '

    + + + +
    +
    +
    + + '; +} + +/** + * Template for the topic maintenance tasks. + */ +function template_maintain_topics() +{ + global $scripturl, $txt, $context, $settings, $modSettings; + + // If maintenance has finished tell the user. + if (!empty($context['maintenance_finished'])) + echo ' +
    + ', sprintf($txt['maintain_done'], $context['maintenance_finished']), ' +
    '; + + // Bit of javascript for showing which boards to prune in an otherwise hidden list. + echo ' + '; + + echo ' +
    +
    +

    ', $txt['maintain_old'], '

    +
    +
    +
    +
    '; + + // The otherwise hidden "choose which boards to prune". + echo ' +

    + ', $txt['maintain_old_since_days1'], '', $txt['maintain_old_since_days2'], ' +

    +

    +
    +
    +
    +

    +

    +
    +

    +

    + + ', $txt['maintain_old_all'], ' +

    + + + + +
    +
    +
    + +
    +

    ', $txt['maintain_old_drafts'], '

    +
    +
    +
    +

    + ', $txt['maintain_old_drafts_days'], ' ', $txt['days_word'], ' +

    + + + +
    +
    +
    +

    ', $txt['move_topics_maintenance'], '

    +
    +
    +
    +

    + + + + +

    +

    + ', $txt['move_topics_older_than'], ' + + ', $txt['manageposts_days'], ' (', $txt['move_zero_all'], ') +

    +

    +
    +
    +

    + + + +
    +
    +
    '; +} + +/** + * Simple template for showing results of our optimization... + */ +function template_optimize() +{ + global $context, $txt, $scripturl; + + echo ' +
    +
    +

    ', $txt['maintain_optimize'], '

    +
    +
    +

    + ', $txt['database_numb_tables'], '
    + ', $txt['database_optimize_attempt'], '
    '; + + // List each table being optimized... + foreach ($context['optimized_tables'] as $table) + echo ' + ', sprintf($txt['database_optimizing'], $table['name'], $table['data_freed']), '
    '; + + // How did we go? + echo ' +
    + ', $context['num_tables_optimized'] == 0 ? $txt['database_already_optimized'] : $context['num_tables_optimized'] . ' ' . $txt['database_optimized']; + + echo ' +

    +

    ', $txt['maintain_return'], '

    +
    +
    '; +} + +/** + * Template for converting entities to UTF-8 characters + */ +function template_convert_entities() +{ + global $context, $txt, $scripturl; + + echo ' +
    +
    +

    ', $txt['entity_convert_title'], '

    +
    +
    +

    ', $txt['entity_convert_introduction'], '

    +
    + +
    +
    +
    '; +} + +/** + * Template for converting posts to UTF-8. + */ +function template_convert_msgbody() +{ + global $context, $txt, $scripturl; + + echo ' +
    +
    +

    ', $txt[$context['convert_to'] . '_title'], '

    +
    +
    +

    ', $txt['body_checking_introduction'], '

    '; + + if (!empty($context['exceeding_messages'])) + { + echo ' +

    ', $txt['exceeding_messages'], '

    +
      +
    • + ', implode('
    • ', $context['exceeding_messages']), ' +
    • +
    '; + + if (!empty($context['exceeding_messages_morethan'])) + echo ' +

    ', $context['exceeding_messages_morethan'], '

    '; + } + else + echo ' +

    ', $txt['convert_to_text'], '

    '; + + echo ' +
    +
    + + + +
    +
    +
    '; +} + +?> \ No newline at end of file diff --git a/ManageMembergroups.template.php b/ManageMembergroups.template.php new file mode 100644 index 0000000..37a5400 --- /dev/null +++ b/ManageMembergroups.template.php @@ -0,0 +1,752 @@ +
    '; + + template_show_list('post_count_membergroups_list'); +} + +/** + * Add a new membergroup. + */ +function template_new_group() +{ + global $context, $scripturl, $txt, $modSettings; + + echo ' +
    +
    +

    ', $txt['membergroups_new_group'], '

    +
    +
    +
    +
    + +
    +
    + +
    '; + + if ($context['undefined_group']) + { + echo ' +
    + +
    +
    +
    + ', $txt['membergroups_edit_select_group_type'], ' +
    '; + + if ($context['allow_protected']) + echo ' +
    '; + + echo ' +
    +
    +
    +
    +
    '; + } + + if ($context['post_group'] || $context['undefined_group']) + echo ' +
    + ', $txt['membergroups_min_posts'], ': +
    +
    + +
    '; + + if (!$context['post_group'] || !empty($modSettings['permission_enable_postgroups'])) + { + echo ' +
    +
    + ', $txt['membergroups_can_edit_later'], ' +
    +
    +
    + ', $txt['membergroups_select_permission_type'], ' + + + +
    + + + +
    + + + +
    +
    '; + } + + echo ' +
    + ', $txt['membergroups_new_board'], ':', $context['post_group'] ? '
    + ' . $txt['membergroups_new_board_post_groups'] . '' : '', ' +
    +
    '; + + template_add_edit_group_boards_list(false); + + echo ' +
    +
    + +
    '; + + if ($context['undefined_group']) + echo ' + '; + + echo ' + + +
    '; +} + +/** + * Edit an existing membergroup. + */ +function template_edit_group() +{ + global $context, $scripturl, $txt, $modSettings; + + echo ' +
    +
    +

    ', $txt['membergroups_edit_group'], ' - ', $context['group']['name'], ' +

    +
    +
    +
    +
    + +
    +
    + +
    '; + + if ($context['group']['id'] != 3 && $context['group']['id'] != 4) + echo ' +
    + +
    +
    + +
    '; + + // Group type... + if ($context['group']['allow_post_group']) + { + echo ' +
    + +
    +
    +
    + ', $txt['membergroups_edit_select_group_type'], ' +
    '; + + if ($context['group']['allow_protected']) + echo ' +
    '; + + echo ' +
    +
    +
    +
    +
    '; + } + + if ($context['group']['id'] != 3 && $context['group']['id'] != 4) + echo ' +
    + +
    +
    + +
    +
    +
    + +
    +
    + +
    '; + + // Can they inherit permissions? + if ($context['group']['id'] > 1 && $context['group']['id'] != 3) + { + echo ' +
    + :
    + ', $txt['membergroups_edit_inherit_permissions_desc'], ' +
    +
    + + +
    '; + } + + if ($context['group']['allow_post_group']) + echo ' + +
    + +
    +
    + +
    '; + + echo ' +
    + +
    +
    + +
    +
    + +
    +
    + +
    '; + + // Do we have any possible icons to select from? + if (!empty($context['possible_icons'])) + { + echo ' +
    +
    + ', $txt['membergroups_icon_image_note'], ' + ', $txt['membergroups_icon_image_size'], ' +
    +
    + ', $txt['membergroups_images_url'], ' + + * +
    '; + } + + // No? Hide the entire control. + else + echo ' + '; + + echo ' +
    +
    + ', $txt['membergroups_max_messages_note'], ' +
    +
    + +
    '; + + // Force 2FA for this membergroup? + if (!empty($modSettings['tfa_mode']) && $modSettings['tfa_mode'] == 2) + echo ' +
    +
    + ', $txt['membergroups_tfa_force_note'], ' +
    +
    + +
    '; + + if (!empty($context['categories'])) + { + echo ' +
    + ', $txt['membergroups_new_board'], ':', $context['group']['is_post_group'] ? '
    + ' . $txt['membergroups_new_board_post_groups'] . '' : '', ' +
    +
    '; + + if (!empty($context['can_manage_boards'])) + echo $txt['membergroups_can_manage_access']; + + else + template_add_edit_group_boards_list(true, 'groupForm'); + + echo ' +
    '; + } + + echo ' +
    + ', $context['group']['allow_delete'] ? ' + ' : '', ' +
    + + +
    + '; + + if ($context['group']['allow_post_group']) + echo ' + '; +} + +/** + * The template for determining which boards a group has access to. + * + * @param bool $collapse Whether to collapse the list by default + */ +function template_add_edit_group_boards_list($collapse = true, $form_id = 'new_group') +{ + global $context, $txt, $modSettings; + + echo ' +
    + ', $txt['membergroups_new_board_desc'], ' +
      '; + + foreach ($context['categories'] as $category) + { + if (empty($modSettings['deny_boards_access'])) + echo ' +
    • + ', $category['name'], ' +
        '; + else + echo ' +
      • + ', $category['name'], ' + + ', $txt['all_boards_in_cat'], ': + + +
          '; + + foreach ($category['boards'] as $board) + { + if (empty($modSettings['deny_boards_access'])) + echo ' +
        • + +
        • '; + else + echo ' +
        • + ', $board['name'], ': + + + + + +
        • '; + } + + echo ' +
        +
      • '; + } + + echo ' +
      '; + + if (empty($modSettings['deny_boards_access'])) + echo ' +

      + + +
    '; + else + echo ' +
    + + ', $txt['all'], ': + + + + + + '; + + if ($collapse) + echo ' + + '; +} + +/** + * Template for viewing the members of a group. + */ +function template_group_members() +{ + global $context, $scripturl, $txt; + + echo ' +
    +
    +

    ', $context['page_title'], '

    +
    +
    +
    +
    + ', $txt['name'], ': +
    +
    + ', $context['group']['name'], ' ', $context['group']['icons'], ' +
    '; + + // Any description to show? + if (!empty($context['group']['description'])) + echo ' +
    + ' . $txt['membergroups_members_description'] . ': +
    +
    + ', $context['group']['description'], ' +
    '; + + echo ' +
    + ', $txt['membergroups_members_top'], ': +
    +
    + ', $context['total_members'], ' +
    '; + + // Any group moderators to show? + if (!empty($context['group']['moderators'])) + { + $moderators = array(); + foreach ($context['group']['moderators'] as $moderator) + $moderators[] = '' . $moderator['name'] . ''; + + echo ' +
    + ', $txt['membergroups_members_group_moderators'], ': +
    +
    + ', implode(', ', $moderators), ' +
    '; + } + + echo ' +
    +
    +
    +
    +

    ', $txt['membergroups_members_group_members'], '

    +
    +
    +
    + +
    + + + + '; + + if ($context['can_send_email']) + echo ' + '; + + echo ' + + + '; + + if (!empty($context['group']['assignable'])) + echo ' + '; + + echo ' + + + '; + + if (empty($context['members'])) + echo ' + + + '; + + foreach ($context['members'] as $member) + { + echo ' + + '; + + if ($context['can_send_email']) + echo ' + '; + + echo ' + + + '; + + if (!empty($context['group']['assignable'])) + echo ' + '; + + echo ' + '; + } + + echo ' + +
    ', $txt['name'], $context['sort_by'] == 'name' ? ' ' : '', '', $txt['membergroups_members_last_active'], $context['sort_by'] == 'active' ? '' : '', '', $txt['date_registered'], $context['sort_by'] == 'registered' ? '' : '', ' + ', $txt['posts'], $context['sort_by'] == 'posts' ? ' ' : '', ' +
    ', $txt['membergroups_members_no_members'], '
    ', $member['name'], '', $member['last_online'], '', $member['registered'], '', $member['posts'], '
    '; + + if (!empty($context['group']['assignable'])) + echo ' +
    + +
    '; + + echo ' +
    + +
    +
    '; + + if (!empty($context['group']['assignable'])) + echo ' +
    +

    ', $txt['membergroups_members_add_title'], '

    +
    +
    +
    +
    + +
    +
    + +
    +
    +
    + +
    '; + + echo ' + + +
    '; + + if (!empty($context['group']['assignable'])) + echo ' + '; +} + +/** + * Allow the moderator to enter a reason to each user being rejected. + */ +function template_group_request_reason() +{ + global $context, $txt, $scripturl; + + // Show a welcome message to the user. + echo ' +
    +
    +
    +

    ', $txt['mc_groups_reason_title'], '

    +
    +
    +
    '; + + // Loop through and print out a reason box for each... + foreach ($context['group_requests'] as $request) + echo ' +
    + ', sprintf($txt['mc_groupr_reason_desc'], $request['member_link'], $request['group_link']), ': +
    +
    + + +
    '; + + echo ' +
    + + + + +
    +
    +
    '; +} + +?> \ No newline at end of file diff --git a/ManageMembers.template.php b/ManageMembers.template.php new file mode 100644 index 0000000..a9ebce0 --- /dev/null +++ b/ManageMembers.template.php @@ -0,0 +1,293 @@ + + +
    +

    + ', $txt['search_for'], ' + ', $txt['wild_cards_allowed'], ' +

    +
    +
    +
    +
    +
    +
    + + +
    +
    + +
    +
    + + +
    +
    + +
    +
    + + +
    +
    + +
    +
    + + +
    +
    + +
    +
    + + +
    +
    + +
    +
    +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + ', $txt['activation_status'], ' +    + +
    +
    +
    +
    +
    +

    ', $txt['member_part_of_these_membergroups'], '

    +
    + + + + + + + + + '; + + foreach ($context['membergroups'] as $membergroup) + echo ' + + + + + '; + + echo ' + + + + + + +
    ', $txt['membergroups'], '', $txt['primary'], '', $txt['additional'], '
    ', $membergroup['name'], ' + + + ', $membergroup['can_be_additional'] ? '' : '', ' +
    + ', $txt['check_all'], ' + + + + +
    + + + + + + + + '; + + foreach ($context['postgroups'] as $postgroup) + echo ' + + + + '; + + echo ' + + + + + +
    + ', $txt['membergroups_postgroups'], ' +
    + ', $postgroup['name'], ' + + +
    + ', $txt['check_all'], ' + + +
    +
    + + '; +} + +/** + * The admin member list. + */ +function template_admin_browse() +{ + global $context, $scripturl, $txt; + + template_show_list('approve_list'); + + // If we have lots of outstanding members try and make the admin's life easier. + if ($context['approve_list']['total_num_items'] > 20) + { + echo ' +
    +
    +
    +

    ', $txt['admin_browse_outstanding'], '

    +
    + + +
    +
    +
    + ', $txt['admin_browse_outstanding_days_1'], ': +
    +
    + ', $txt['admin_browse_outstanding_days_2'], '. +
    +
    + ', $txt['admin_browse_outstanding_perform'], ': +
    +
    + +
    +
    + + + + + + ', !empty($context['approve_list']['sort']['desc']) ? ' + ' : '', ' +
    + +
    '; + } +} + +?> \ No newline at end of file diff --git a/ManageNews.template.php b/ManageNews.template.php new file mode 100644 index 0000000..106c22e --- /dev/null +++ b/ManageNews.template.php @@ -0,0 +1,446 @@ +', $txt['admin_news_newsletter_' . $context['newsletter_sent']], ''; + + echo ' +
    +
    +

    ', $txt['admin_newsletters'], '

    +
    +
    + ', $txt['admin_news_select_recipients'], ' +
    +
    +
    +
    + ', $txt['admin_news_select_group'], ':
    + ', $txt['admin_news_select_group_desc'], ' +
    +
    '; + + foreach ($context['groups'] as $group) + echo ' + (', $group['member_count'], ')
    '; + + echo ' +
    + +
    +
    + +
    +
    +
    + ', $txt['admin_news_select_email'], ':
    + ', $txt['admin_news_select_email_desc'], ' +
    +
    + +
    +
    + ', $txt['admin_news_select_members'], ':
    + ', $txt['admin_news_select_members_desc'], ' +
    +
    + + +
    +
    +
    +
    +
    + ', $txt['admin_news_select_excluded_groups'], ':
    + ', $txt['admin_news_select_excluded_groups_desc'], ' +
    +
    '; + + foreach ($context['groups'] as $group) + echo ' + (', $group['member_count'], ')
    '; + + echo ' +
    +
    +
    +
    + ', $txt['admin_news_select_excluded_members'], ':
    + ', $txt['admin_news_select_excluded_members_desc'], ' +
    +
    + + +
    +
    +
    +
    +
    +
    + ', $txt['email_force'], ' +
    +
    + +
    +
    +
    +
    + + +
    +
    '; + + // This is some javascript for the simple/advanced toggling and member suggest + echo ' + + '; +} + +/** + * The form for composing a newsletter + */ +function template_email_members_compose() +{ + global $context, $txt, $scripturl; + + echo ' + +
    '; + + echo ' +
    +
    +

    + ', $txt['admin_newsletters'], ' +

    +
    +
    + ', sprintf($txt['email_variables'], $scripturl), ' +
    +
    + +
    +
    + ', $txt['subject'], ' +
    +
    + +
    +
    +
    '; + + // What about smileys? + if (!empty($context['smileys']['postform']) || !empty($context['smileys']['popup'])) + echo ' +
    '; + + // Show BBC buttons, smileys and textbox. + echo ' + ', template_control_richedit($context['post_box_name'], 'smileyBox_message', 'bbcBox_message'); + + echo ' +
      +
    • +
    • +
    • +
    + + ', template_control_richedit_buttons($context['post_box_name']), ' + +
    + + + '; + + foreach ($context['recipients'] as $key => $values) + echo ' + '; + + echo ' + '; + + echo ' + +
    '; +} + +/** + * The page shown while the newsletter is being sent + */ +function template_email_members_send() +{ + global $context, $txt, $scripturl; + + echo ' +
    +
    +

    + ', $txt['admin_newsletters'], ' +

    +
    +
    +
    + ', $context['percentage_done'], '% ', $txt['email_done'], ' +
    +
    +
    + + + + + + + + + + '; + + // All the things we must remember! + foreach ($context['recipients'] as $key => $values) + echo ' + '; + + echo ' +
    +
    + + '; +} + +/** + * The settings page. + */ +function template_news_lists() +{ + global $context, $txt; + + if (!empty($context['saved_successful'])) + echo ' +
    ', $txt['settings_saved'], '
    '; + + template_show_list('news_lists'); +} + +?> \ No newline at end of file diff --git a/ManagePaid.template.php b/ManagePaid.template.php new file mode 100644 index 0000000..6d5273f --- /dev/null +++ b/ManagePaid.template.php @@ -0,0 +1,589 @@ +'; + + if (!empty($context['disable_groups'])) + echo ' +
    ', $txt['paid_mod_edit_note'], '
    '; + + echo ' +
    +

    ', $txt['paid_' . $context['action_type'] . '_subscription'], '

    +
    +
    +
    +
    + ', $txt['paid_mod_name'], ': +
    +
    + +
    +
    + ', $txt['paid_mod_desc'], ': +
    +
    + +
    +
    + : +
    +
    + +
    +
    + :
    ', $txt['paid_mod_active_desc'], ' +
    +
    + +
    +
    +
    +
    +
    + ', $txt['paid_mod_prim_group'], ':
    + ', $txt['paid_mod_prim_group_desc'], ' +
    +
    + +
    +
    + ', $txt['paid_mod_add_groups'], ':
    + ', $txt['paid_mod_add_groups_desc'], ' +
    +
    '; + + // Put a checkbox in for each group + foreach ($context['groups'] as $id => $name) + echo ' +
    '; + + echo ' +
    +
    + ', $txt['paid_mod_reminder'], ':
    + ', $txt['paid_mod_reminder_desc'], ' ', $txt['zero_to_disable'], ' +
    +
    + +
    +
    + ', $txt['paid_mod_email'], ':
    + ', $txt['paid_mod_email_desc'], ' +
    +
    + +
    +
    +
    + + +
    +
    +
    +
    +
    + ', $txt['paid_cost'], ' (', str_replace('%1.2f', '', $modSettings['paid_currency_symbol']), '): +
    +
    + +
    +
    + ', $txt['paid_mod_span'], ': +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    '; + + echo ' +
    + ', $txt['paid_mod_price_breakdown'], '
    + ', $txt['paid_mod_price_breakdown_desc'], ' +
    +
    +
    + ', $txt['paid_duration'], ' +
    +
    + ', $txt['paid_cost'], ' (', preg_replace('~%[df\.\d]+~', '', $modSettings['paid_currency_symbol']), ') +
    +
    + ', $txt['paid_per_day'], ': +
    +
    + +
    +
    + ', $txt['paid_per_week'], ': +
    +
    + +
    +
    + ', $txt['paid_per_month'], ': +
    +
    + +
    +
    + ', $txt['paid_per_year'], ': +
    +
    + +
    +
    +
    +
    + + + +
    + '; +} + +/** + * The page for deleting a subscription. + */ +function template_delete_subscription() +{ + global $context, $scripturl, $txt; + + echo ' +
    +
    +

    ', $txt['paid_delete_subscription'], '

    +
    +
    +

    ', $txt['paid_mod_delete_warning'], '

    + + + +
    +
    '; +} + +/** + * Add or edit an existing subscriber. + */ +function template_modify_user_subscription() +{ + global $context, $scripturl, $txt; + + // Some quickly stolen javascript from Post, could do with being more efficient :) + echo ' + '; + + echo ' +
    +
    +

    + ', $txt['paid_' . $context['action_type'] . '_subscription'], ' - ', $context['current_subscription']['name'], ' + ', empty($context['sub']['username']) ? '' : ' (' . $txt['user'] . ': ' . $context['sub']['username'] . ')', ' +

    +
    +
    +
    '; + + // Do we need a username? + if ($context['action_type'] == 'add') + echo ' +
    + ', $txt['paid_username'], ':
    + ', $txt['one_username'], ' +
    +
    + +
    '; + + echo ' +
    + ', $txt['paid_status'], ': +
    +
    + +
    +
    +
    + ', $txt['start_date_and_time'], ' +   + ', (isset($txt['calendar_month']) ? $txt['calendar_month'] : $txt['calendar_month']), '  +   + ', (isset($txt['calendar_day']) ? $txt['calendar_day'] : $txt['calendar_day']), '  + + ', $txt['hour'], ': + ', $txt['minute'], ': +
    +
    + ', $txt['end_date_and_time'], ' +   + ', (isset($txt['calendar_month']) ? $txt['calendar_month'] : $txt['calendar_month']), '  +   + ', (isset($txt['calendar_day']) ? $txt['calendar_day'] : $txt['calendar_day']), '  + + ', $txt['hour'], ': + ', $txt['minute'], ': +
    + +
    + +
    + '; + + if (!empty($context['pending_payments'])) + { + echo ' +
    +

    ', $txt['pending_payments'], '

    +
    +
    + ', $txt['pending_payments_desc'], ' +
    +
    +

    ', $txt['pending_payments_value'], '

    +
    +
    + '; + } + + echo ' +
    '; +} + +/** + * Template for a user to edit/pick their subscriptions. + */ +function template_user_subscription() +{ + global $context, $txt, $scripturl, $modSettings; + + echo ' + '; +} + +/** + * The "choose payment" dialog. + */ +function template_choose_payment() +{ + global $context, $txt; + + echo ' + +
    '; +} + +/** + * The "thank you" bit... + */ +function template_paid_done() +{ + global $context, $txt, $scripturl; + + echo ' + '; +} + +?> \ No newline at end of file diff --git a/ManagePermissions.template.php b/ManagePermissions.template.php new file mode 100644 index 0000000..de9a1fc --- /dev/null +++ b/ManagePermissions.template.php @@ -0,0 +1,939 @@ + + ', sprintf($txt['permission_cannot_edit'], $scripturl . '?action=admin;area=permissions;sa=profiles'), ' + '; + + echo ' +
    +
    '; + + if (!empty($context['profile'])) + echo ' +
    +

    ', $txt['permissions_for_profile'], ': "', $context['profile']['name'], '"

    +
    '; + else + echo ' +
    +

    ', $txt['permissions_title'], '

    +
    '; + + echo ' + + + + + '; + + if (empty($modSettings['permission_enable_deny'])) + echo ' + '; + else + echo ' + + '; + + echo ' + + + + + '; + + foreach ($context['groups'] as $group) + { + echo ' + + + '; + + if (empty($modSettings['permission_enable_deny'])) + echo ' + '; + else + echo ' + + '; + + echo ' + + + '; + } + + echo ' + +
    ', $txt['membergroups_name'], '', $txt['membergroups_members_top'], '', $txt['membergroups_permissions'], '', $txt['permissions_allowed'], '', $txt['permissions_denied'], '', $context['can_modify'] ? $txt['permissions_modify'] : $txt['permissions_view'], ' + ', $context['can_modify'] ? '' : '', ' +
    + ', !empty($group['help']) ? ' ' : '' . $txt['help'] . '', '', $group['name'], ''; + + if (!empty($group['children'])) + echo ' +
    + ', $txt['permissions_includes_inherited'], ': "', implode('", "', $group['children']), '"'; + + echo ' +
    ', $group['can_search'] ? $group['link'] : $group['num_members'], '', $group['num_permissions']['allowed'], ' + ', $group['num_permissions']['allowed'], ' + + ', $group['num_permissions']['denied'], ' + + ', $group['allow_modify'] ? '' . ($context['can_modify'] ? $txt['permissions_modify'] : $txt['permissions_view']) . '' : '', ' + + ', $group['allow_modify'] && $context['can_modify'] ? '' : '', ' +
    +
    '; + + // Advanced stuff... + if ($context['can_modify']) + { + echo ' + +
    +
    + ', $txt['permissions_with_selection'], ' +
    +
    + + ', $txt['permissions_apply_pre_defined'], ': +
    +
    + +
    +
    + ', $txt['permissions_like_group'], ': +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    + +
    '; + + // Javascript for the advanced stuff. + echo ' + '; + + if (!empty($context['profile'])) + echo ' + '; + + echo ' + + '; + } + + echo ' +
    +
    '; +} + +/** + * THe page that shows which permissions profile applies to each board + */ +function template_by_board() +{ + global $context, $scripturl, $txt; + + echo ' +
    +
    +

    ', $txt['permissions_boards'], '

    +
    +
    + ', $txt['permissions_boards_desc'], ' +
    + +
    +

    + ', $txt['board_name'], ' + ', $txt['permission_profile'], ''; + echo ' +

    +
    +
    '; + + foreach ($context['categories'] as $category) + { + echo ' +
    +

    ', $category['name'], '

    +
    '; + + if (!empty($category['boards'])) + echo ' + '; + } + + if ($context['edit_all']) + echo ' + '; + else + echo ' + ', $txt['permissions_board_all'], ''; + + echo ' + + +
    +
    '; +} + +/** + * Edit permission profiles (predefined). + */ +function template_edit_profiles() +{ + global $context, $scripturl, $txt; + + echo ' +
    +
    +
    +

    ', $txt['permissions_profile_edit'], '

    +
    + + + + + + + + + + '; + + foreach ($context['profiles'] as $profile) + { + echo ' + + + + + + + '; + } + + echo ' + +
    ', $txt['permissions_profile_name'], '', $txt['permissions_profile_used_by'], '
    '; + + if (!empty($context['show_rename_boxes']) && $profile['can_edit']) + echo ' + '; + else + echo ' + ', $profile['name'], ''; + + echo ' + + ', !empty($profile['boards_text']) ? $profile['boards_text'] : $txt['permissions_profile_used_by_none'], ' +
    +
    + + '; + + if ($context['can_edit_something']) + echo ' + '; + + echo ' + +
    +
    +
    +
    +
    +

    ', $txt['permissions_profile_new'], '

    +
    +
    +
    +
    + ', $txt['permissions_profile_name'], ': +
    +
    + +
    +
    + ', $txt['permissions_profile_copy_from'], ': +
    +
    + +
    +
    + + + +
    +
    +
    '; +} + +/** + * Modify a group's permissions + */ +function template_modify_group() +{ + global $context, $scripturl, $txt, $modSettings; + + // Cannot be edited? + if (!$context['profile']['can_modify']) + echo ' +
    + ', sprintf($txt['permission_cannot_edit'], $scripturl . '?action=admin;area=permissions;sa=profiles'), ' +
    '; + else + echo ' + '; + + echo ' +
    '; + + if (!empty($modSettings['permission_enable_deny']) && $context['group']['id'] != -1) + echo ' +
    + ', $txt['permissions_option_desc'], ' +
    '; + + echo ' +
    +

    '; + + if ($context['permission_type'] == 'board') + echo ' + ', $txt['permissions_local_for'], ' "', $context['group']['name'], '" ', $txt['permissions_on'], ' "', $context['profile']['name'], '"'; + else + echo ' + ', $context['permission_type'] == 'membergroup' ? $txt['permissions_general'] : $txt['permissions_board'], ' - "', $context['group']['name'], '"'; + echo ' +

    +
    '; + + // Draw out the main bits. + template_modify_group_display($context['permission_type']); + + // If this is general permissions also show the default profile. + if ($context['permission_type'] == 'membergroup') + { + echo ' +
    +
    +

    ', $txt['permissions_board'], '

    +
    +
    + ', $txt['permissions_board_desc'], ' +
    '; + + template_modify_group_display('board'); + } + + if ($context['profile']['can_modify']) + echo ' +
    + +
    '; + + foreach ($context['hidden_perms'] as $hidden_perm) + echo ' + '; + + echo ' + + +
    '; +} + +/** + * The way of looking at permissions. + * + * @param string $type The permissions type + */ +function template_modify_group_display($type) +{ + global $context, $scripturl, $txt, $modSettings; + + $permission_type = &$context['permissions'][$type]; + $disable_field = $context['profile']['can_modify'] ? '' : 'disabled '; + + foreach ($permission_type['columns'] as $column) + { + echo ' + '; + + foreach ($column as $permissionGroup) + { + if (empty($permissionGroup['permissions'])) + continue; + + // Are we likely to have something in this group to display or is it all hidden? + $has_display_content = false; + if (!$permissionGroup['hidden']) + { + // Before we go any further check we are going to have some data to print otherwise we just have a silly heading. + foreach ($permissionGroup['permissions'] as $permission) + if (!$permission['hidden']) + $has_display_content = true; + + if ($has_display_content) + { + echo ' + + + ', $permissionGroup['name'], ''; + + if ($context['group']['id'] != -1) + echo ' + + '; + + echo ' + '; + } + } + + foreach ($permissionGroup['permissions'] as $permission) + { + if (!$permission['hidden'] && !$permissionGroup['hidden']) + { + echo ' + + + + + + + '; + } + } + } + + echo ' +
    ', $txt['permissions_option_own'], '', $txt['permissions_option_any'], '
    + ', $permission['show_help'] ? '' : '', ' + + ', $permission['name'], (!empty($permission['note']) ? '
    + ' . $permission['note'] . '' : ''), ' +
    '; + + if ($permission['has_own_any']) + { + // Guests can't do their own thing. + if ($context['group']['id'] != -1) + { + if (empty($modSettings['permission_enable_deny'])) + echo ' + '; + else + { + echo ' + '; + } + + echo ' + '; + } + + if (empty($modSettings['permission_enable_deny']) || $context['group']['id'] == -1) + echo ' + '; + else + { + echo ' + '; + } + } + else + { + if ($context['group']['id'] != -1) + echo ' + '; + + if (empty($modSettings['permission_enable_deny']) || $context['group']['id'] == -1) + echo ' + '; + else + { + echo ' + '; + } + } + echo ' +
    '; + } + + echo ' +
    '; +} + +/** + * A form for displaying inline permissions, such as on a settings page. + */ +function template_inline_permissions() +{ + global $context, $txt, $modSettings; + + // This looks really weird, but it keeps things nested properly... + echo ' +
    + ', $txt['avatar_select_permission'], ''; + + if (empty($modSettings['permission_enable_deny'])) + echo ' +
      '; + else + echo ' +
      ', $txt['permissions_option_desc'], '
      +
      +
      + ', $txt['permissions_option_on'], ' + ', $txt['permissions_option_off'], ' + ', $txt['permissions_option_deny'], ' +
      +
      +
      '; + + foreach ($context['member_groups'] as $group) + { + if (!empty($modSettings['permission_enable_deny'])) + echo ' +
      '; + else + echo ' +
    • '; + + if (empty($modSettings['permission_enable_deny'])) + echo ' + '; + else + echo ' + + + '; + + if (!empty($modSettings['permission_enable_deny'])) + echo ' +
    • +
      + ', $group['name'], ' +
      '; + else + echo ' + ', $group['name'], ' + '; + } + + if (empty($modSettings['permission_enable_deny'])) + echo ' +
    • + + ', $txt['check_all'], ' +
    • +
    '; + else + echo ' + '; + + echo ' +
    + + + + '; +} + +/** + * Edit post moderation permissions. + */ +function template_postmod_permissions() +{ + global $context, $scripturl, $txt, $modSettings; + + echo ' +
    +
    +
    +

    ', $txt['permissions_post_moderation'], '

    +
    '; + + // First, we have the bit where we can enable or disable this bad boy. + echo ' +
    +
    +
    ', $txt['permissions_post_moderation_enable'], '
    +
    +
    +
    '; + + // If we're not active, there's a bunch of stuff we don't need to show. + if (!empty($modSettings['postmod_active'])) + { + // Got advanced permissions - if so warn! + if (!empty($modSettings['permission_enable_deny'])) + echo ' +
    ', $txt['permissions_post_moderation_deny_note'], '
    '; + + echo ' +
    +
      + ', $txt['permissions_post_moderation_legend'], ': +
    • ', $txt['permissions_post_moderation_allow'], '
    • +
    • ', $txt['permissions_post_moderation_moderate'], '
    • +
    • ', $txt['permissions_post_moderation_disallow'], '
    • +
    +

    +


    + ', $txt['permissions_post_moderation_select'], ': + + +

    +
    + + + + + + + '; + + if ($modSettings['attachmentEnable'] == 1) + echo ' + '; + + echo ' + + + + + + + + + + + + '; + + if ($modSettings['attachmentEnable'] == 1) + echo ' + + + '; + + echo ' + + + '; + + foreach ($context['profile_groups'] as $group) + { + echo ' + + + + + '; + + // Guests can't have "own" permissions + if ($group['id'] == '-1') + echo ' + '; + else + echo ' + + + '; + + echo ' + + + '; + + if ($modSettings['attachmentEnable'] == 1) + echo ' + + + '; + + echo ' + '; + } + + echo ' + +
    + ', $txt['permissions_post_moderation_new_topics'], ' + + ', $txt['permissions_post_moderation_replies_own'], ' + + ', $txt['permissions_post_moderation_replies_any'], ' + + ', $txt['permissions_post_moderation_attachments'], ' +
    + ', $txt['permissions_post_moderation_group'], ' +
    + ', $group['name'], ''; + + if (!empty($group['children'])) + echo ' +
    + ', $txt['permissions_includes_inherited'], ': "', implode('", "', $group['children']), '"'; + + echo ' +
    + + + + + + + + + + + + + + + + + + + + + + + +
    '; + } + + echo ' + + +
    +
    '; +} + +?> \ No newline at end of file diff --git a/ManageScheduledTasks.template.php b/ManageScheduledTasks.template.php new file mode 100644 index 0000000..3b7c371 --- /dev/null +++ b/ManageScheduledTasks.template.php @@ -0,0 +1,117 @@ + + ', $txt['scheduled_tasks_were_run'], ' + '; + + else + { + echo ' +
    +
    +
    + ', $txt['scheduled_tasks_were_run_errors'], ' +
    '; + + foreach ($context['scheduled_errors'] as $task => $errors) + echo ' +
    + ', isset($txt['scheduled_task_' . $task]) ? $txt['scheduled_task_' . $task] : $task, ' +
      +
    • ', implode('
    • ', $errors), '
    • +
    +
    '; + + echo ' +
    +
    '; + } + } + + template_show_list('scheduled_tasks'); +} + +/** + * A template for, you guessed it, editing a task! + */ +function template_edit_scheduled_tasks() +{ + global $context, $txt, $scripturl; + + // Starts off with general maintenance procedures. + echo ' +
    +
    +

    ', $txt['scheduled_task_edit'], '

    +
    +
    + ', sprintf($txt['scheduled_task_time_offset'], $context['server_time']), ' +
    +
    +
    +
    + ', $txt['scheduled_tasks_name'], ': +
    +
    + ', $context['task']['name'], '
    + ', $context['task']['desc'], ' +
    +
    + +
    +
    + ', $txt['scheduled_task_edit_repeat'], ' + + +
    +
    +
    + ', $txt['scheduled_task_edit_start_time_desc'], ' +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    + + + +
    +
    +
    '; +} + +?> \ No newline at end of file diff --git a/ManageSearch.template.php b/ManageSearch.template.php new file mode 100644 index 0000000..70af2c6 --- /dev/null +++ b/ManageSearch.template.php @@ -0,0 +1,438 @@ + +
    +

    ', $txt['search_weights'], '

    +
    +
    +
    +
    + +
    +
    + + + + ', $context['relative_weights']['search_weight_frequency'], '% +
    +
    + + +
    +
    + + + + ', $context['relative_weights']['search_weight_age'], '% +
    +
    + + +
    +
    + + + + ', $context['relative_weights']['search_weight_length'], '% +
    +
    + + +
    +
    + + + + ', $context['relative_weights']['search_weight_subject'], '% +
    +
    + + +
    +
    + + + + ', $context['relative_weights']['search_weight_first_message'], '% +
    +
    + + +
    +
    + + + + ', $context['relative_weights']['search_weight_sticky'], '% +
    +
    + ', $txt['search_weights_total'], ' +
    +
    + + ', $context['relative_weights']['total'], ' + + 100% +
    +
    + + + +
    + '; +} + +/** + * Select the search method. + */ +function template_select_search_method() +{ + global $context, $scripturl, $txt, $modSettings; + + echo ' +
    +

    ', $txt['search_method'], '

    +
    + +
    +
    +

    ', $txt['search_method'], '

    +
    +
    +
    '; + + if (!empty($context['table_info'])) + echo ' +
    + ', $txt['search_method_messages_table_space'], ': +
    +
    + ', $context['table_info']['data_length'], ' +
    +
    + ', $txt['search_method_messages_index_space'], ': +
    +
    + ', $context['table_info']['index_length'], ' +
    '; + echo ' +
    + ', $context['double_index'] ? '
    + ' . $txt['search_double_index'] . '
    ' : '', ' +
    + ', $txt['search_index'], ' +
    +
    + + ', $txt['search_index_none'], ' +
    '; + + if ($context['supports_fulltext']) + { + echo ' +
    + + ', $txt['search_method_fulltext_index'], ' +
    +
    + '; + + if (empty($context['fulltext_index']) && empty($context['cannot_create_fulltext'])) + echo ' + ', $txt['search_index_label'], ': ', $txt['search_method_no_index_exists'], ' [', $txt['search_method_fulltext_create'], ']'; + + elseif (empty($context['fulltext_index']) && !empty($context['cannot_create_fulltext'])) + echo ' + ', $txt['search_index_label'], ': ', $txt['search_method_fulltext_cannot_create']; + else + echo ' + ', $txt['search_index_label'], ': ', $txt['search_method_index_already_exists'], ' [', $txt['search_method_fulltext_remove'], ']
    + ', $txt['search_index_size'], ': ', $context['table_info']['fulltext_length']; + echo ' +
    +
    '; + } + + echo ' +
    + + ', $txt['search_index_custom'], ' +
    +
    + '; + + if ($context['custom_index']) + echo ' + ', $txt['search_index_label'], ': ', $txt['search_method_index_already_exists'], ' [', $txt['search_index_custom_remove'], ']
    + ', $txt['search_index_size'], ': ', $context['table_info']['custom_index_length']; + + elseif ($context['partial_custom_index']) + echo ' + ', $txt['search_index_label'], ': ', $txt['search_method_index_partial'], ' [', $txt['search_index_custom_remove'], '] [', $txt['search_index_custom_resume'], ']
    + ', $txt['search_index_size'], ': ', $context['table_info']['custom_index_length']; + else + echo ' + ', $txt['search_index_label'], ': ', $txt['search_method_no_index_exists'], ' [', $txt['search_index_create_custom'], ']'; + echo ' +
    +
    '; + + foreach ($context['search_apis'] as $api) + { + if (empty($api['label']) || $api['has_template']) + continue; + + echo ' +
    + + ', $api['label'], ' +
    '; + + if ($api['desc']) + echo ' +
    + ', $api['desc'], ' +
    '; + } + + echo ' +
    +
    +
    + ', $txt['search_method'], ' +
    + +
    +
    + + + +
    +
    '; +} + +/** + * Create a search index. + */ +function template_create_index() +{ + global $context, $scripturl, $txt; + + echo ' +
    +
    +

    ', $txt['search_create_index'], '

    +
    +
    +
    +
    + +
    +
    + +
    +
    +
    + + +
    +
    '; +} + +/** + * Display a progress page while creating a search index. + */ +function template_create_index_progress() +{ + global $context, $scripturl, $txt; + + echo ' +
    +
    +

    ', $txt['search_create_index'], '

    +
    +
    +
    +

    ', $txt['search_create_index_not_ready'], '

    +
    + ', $context['percentage'], '% +
    +
    +
    +
    + +
    + + + + +
    + '; + +} + +/** + * Done creating a search index. + */ +function template_create_index_done() +{ + global $scripturl, $txt; + + echo ' +
    +

    ', $txt['search_create_index'], '

    +
    +
    +

    ', $txt['search_create_index_done'], '

    +

    + ', $txt['search_create_index_done_link'], ' +

    +
    '; +} + +/** + * Add or edit a search engine spider. + */ +function template_spider_edit() +{ + global $context, $scripturl, $txt; + + echo ' +
    +
    +

    ', $context['page_title'], '

    +
    +
    + ', $txt['add_spider_desc'], ' +
    +
    +
    +
    +
    + ', $txt['spider_name_desc'], ' +
    +
    + +
    +
    +
    + ', $txt['spider_agent_desc'], ' +
    +
    + +
    +
    +
    + ', $txt['spider_ip_info_desc'], ' +
    +
    + +
    +
    +
    + + + +
    +
    '; +} + +/** + * Show... spider... logs... + */ +function template_show_spider_logs() +{ + global $context, $txt, $scripturl; + + // Standard fields. + template_show_list('spider_logs'); + + echo ' +
    +
    +

    ', $txt['spider_logs_delete'], '

    +
    +
    +

    + ', $txt['spider_logs_delete_older'], ' + + ', $txt['spider_logs_delete_day'], ' +

    + + + +
    +
    '; +} + +/** + * Show... spider... stats... + */ +function template_show_spider_stats() +{ + global $context, $txt, $scripturl; + + // Standard fields. + template_show_list('spider_stat_list'); + + echo ' +
    +
    +

    ', $txt['spider_logs_delete'], '

    +
    +
    +

    + ', sprintf($txt['spider_stats_delete_older'], ''), ' +

    + + + +
    +
    +
    '; +} + +?> \ No newline at end of file diff --git a/ManageSmileys.template.php b/ManageSmileys.template.php new file mode 100644 index 0000000..d889643 --- /dev/null +++ b/ManageSmileys.template.php @@ -0,0 +1,488 @@ + +
    +

    + ', $context['current_set']['is_new'] ? $txt['smiley_set_new'] : $txt['smiley_set_modify_existing'], ' +

    +
    '; + + if ($context['current_set']['is_new'] && !empty($modSettings['smiley_enable'])) + { + echo ' +
    + ', $txt['smiley_set_import_info'], ' +
    '; + } + // If this is an existing set, and there are still un-added smileys - offer an import opportunity. + elseif (!empty($context['current_set']['can_import'])) + { + echo ' +
    + ', $context['smiley_set_unused_message'], ' +
    '; + } + + echo ' +
    +
    +
    + : +
    +
    + +
    +
    + : +
    +
    + ', $modSettings['smileys_url'], '/'; + + if (empty($context['smiley_set_dirs'])) + echo ' + '; + else + { + echo ' + '; + } + echo ' + /.. +
    +
    + : +
    +
    + +
    +
    + +
    + + + + '; +} + +/** + * Editing an individual smiley + */ +function template_modifysmiley() +{ + global $context, $scripturl, $txt, $modSettings; + + echo ' +
    +
    +

    ', $txt['smiley_modify_existing'], '

    +
    +
    +
    +
    + ', $txt['smiley_preview_using_set'], ': + +
    +
    + +
    +
    + : +
    '; + + if (empty($context['filenames'])) + { + echo ' +
    + +
    '; + } + else + { + foreach ($context['smiley_sets'] as $set => $smiley_set) + { + echo ' +
    + ', $smiley_set['name'], ' +
    + + + + '; + } + } + + echo ' +
    +
    +
    + : +
    +
    + +
    +
    + : +
    +
    + +
    +
    + : +
    +
    + +
    +
    + + +
    + + +
    '; +} + +/** + * Adding a new smiley. + */ +function template_addsmiley() +{ + global $context, $scripturl, $txt, $modSettings; + + echo ' +
    +
    +

    ', $txt['smileys_add_method'], '

    +
    +
    +
      +
    • + +
    • +
    • + +
    • +
    +
    +
    +
    +
    + : +
    +
    + +
    +
    + : +
    +
    '; + + if (empty($context['filenames'])) + echo ' + '; + else + { + echo ' + '; + } + + echo ' +
    +
    +
    + +
    +
    +

    ', $txt['smiley_new'], '

    +
    +
    +
    +
    + : +
    +
    + +
    +
    + : +
    +
    + +
    +
    + : +
    +
    + +
    +
    + +
    + +
    '; +} + +/** + * Ordering smileys. + */ +function template_setorder() +{ + global $context, $scripturl, $txt, $modSettings; + + foreach ($context['smileys'] as $location) + { + echo ' +
    +
    +

    ', $location['title'], '

    +
    +
    + ', $location['description'], ' +
    +
    + ', empty($context['move_smiley']) ? $txt['smileys_move_select_smiley'] : $txt['smileys_move_select_destination'], '...
    '; + + foreach ($location['rows'] as $row) + { + if (!empty($context['move_smiley'])) + echo ' + '; + + foreach ($row as $smiley) + { + if (empty($context['move_smiley'])) + echo ' + ', $smiley['description'], ''; + else + echo ' + ', $smiley['description'], ' + '; + } + + echo ' +
    '; + } + if (!empty($context['move_smiley'])) + echo ' + '; + echo ' +
    + +
    '; + } +} + +/** + * Editing Message Icons + */ +function template_editicons() +{ + template_show_list('message_icon_list'); +} + +/** + * Editing an individual message icon + */ +function template_editicon() +{ + global $context, $scripturl, $txt; + + echo ' +
    +
    +

    + ', $context['new_icon'] ? $txt['icons_new_icon'] : $txt['icons_edit_icon'], ' +

    +
    +
    +
    '; + + if (!$context['new_icon']) + echo ' +
    + ', $txt['smiley_preview'], ': +
    +
    + ', $context['icon']['title'], ' +
    '; + + echo ' +
    + :
    ', sprintf($txt['icons_extension_must_be'], '.png'), ' +
    +
    + +
    +
    + : +
    +
    + +
    +
    + : +
    +
    + +
    +
    + : +
    +
    + +
    +
    '; + + if (!$context['new_icon']) + echo ' + '; + + echo ' + + +
    +
    '; +} + +?> \ No newline at end of file diff --git a/Memberlist.template.php b/Memberlist.template.php new file mode 100644 index 0000000..002abb9 --- /dev/null +++ b/Memberlist.template.php @@ -0,0 +1,202 @@ + +
    + ', template_button_strip($context['memberlist_buttons'], 'right'), ' + +
    +
    +
    +

    + ', $txt['members_list'], ''; + + if (!isset($context['old_search'])) + echo ' + ', $context['letter_links'], ''; + echo ' +

    +
    '; + + echo ' +
    + + + '; + + // Display each of the column headers of the table. + foreach ($context['columns'] as $key => $column) + { + // @TODO maybe find something nicer? + if ($key == 'email_address' && !$context['can_send_email']) + continue; + + // This is a selected column, so underline it or some such. + if ($column['selected']) + echo ' + '; + + // This is just some column... show the link and be done with it. + else + echo ' + '; + } + + echo ' + + + '; + + // Assuming there are members loop through each one displaying their data. + if (!empty($context['members'])) + { + foreach ($context['members'] as $member) + { + echo ' + '; + /*On n'espionne pas les gens ! + * + * Mais il faut mettre quelque chose, car la colonne de titre est créée automatiquement et l'enlever fera buguer des mods + */ + echo ' + + '; + + if (!isset($context['disabled_fields']['website'])) + echo ' + '; + + // Group and date. + echo ' + + '; + + if (!isset($context['disabled_fields']['posts'])) + { + echo ' + '; + } + + // Show custom fields marked to be shown here + if (!empty($context['custom_profile_fields']['columns'])) + foreach ($context['custom_profile_fields']['columns'] as $key => $column) + echo ' + '; + + echo ' + '; + } + } + // No members? + else + echo ' + + + '; + + echo ' + +
    + ' . $column['label'] . ' + ', $column['link'], '
    + ', $context['can_send_pm'] ? '' : '', $settings['use_image_buttons'] ? '' : $member['online']['label'], $context['can_send_pm'] ? '' : '', ' + + ', $member['link'], '', $member['website']['url'] != '' ? '' : '', '', empty($member['group']) ? $member['post_group'] : $member['group'], '', $member['registered_date'], ''; + + if (!empty($member['posts'])) + echo ' +
    +
    + ', $member['posts'], ' +
    '; + + echo ' +
    ', $member['options'][$key], '
    ', $txt['search_no_results'], '
    +
    +
    '; + + // Show the page numbers again. (makes 'em easier to find!) + echo ' +
    + '; + + // If it is displaying the result of a search show a "search again" link to edit their criteria. + if (isset($context['old_search'])) + echo ' + '; + echo ' +
    + '; + +} + +/** + * A page allowing people to search the member list. + */ +function template_search() +{ + global $context, $scripturl, $txt; + + // Start the submission form for the search! + echo ' +
    +
    +
    + ', template_button_strip($context['memberlist_buttons'], 'right'), ' +
    +
    +

    + ', $txt['mlist_search'], ' +

    +
    + +
    +
    '; +} + +?> diff --git a/MessageIndex.template.php b/MessageIndex.template.php new file mode 100644 index 0000000..1939644 --- /dev/null +++ b/MessageIndex.template.php @@ -0,0 +1,592 @@ + +
    +

    ', $context['name'], '

    '; + + if (isset($context['description']) && $context['description'] != '') + echo ' +

    ', $context['description'], '

    '; + + if (!empty($context['moderators'])) + echo ' +

    ', count($context['moderators']) === 1 ? $txt['moderator'] : $txt['moderators'], ': ', implode(', ', $context['link_moderators']), '.

    '; + + if (!empty($settings['display_who_viewing'])) + { + echo ' +

    '; + + // Show just numbers...? + if ($settings['display_who_viewing'] == 1) + echo count($context['view_members']), ' ', count($context['view_members']) == 1 ? $txt['who_member'] : $txt['members']; + // Or show the actual people viewing the topic? + else + echo empty($context['view_members_list']) ? '0 ' . $txt['members'] : implode(', ', $context['view_members_list']) . ((empty($context['view_num_hidden']) || $context['can_moderate_forum']) ? '' : ' (+ ' . $context['view_num_hidden'] . ' ' . $txt['hidden'] . ')'); + + // Now show how many guests are here too. + echo $txt['who_and'], $context['view_num_guests'], ' ', $context['view_num_guests'] == 1 ? $txt['guest'] : $txt['guests'], $txt['who_viewing_board'], ' +

    '; + } + + echo ' +
    + '; + + if (!empty($context['boards']) && (!empty($options['show_children']) || $context['start'] == 0)) + { + + + // The child board TODO + echo ' +
    + +
    +
    + '; + // Like collapse icon, but don't collapse because I don't know how. TODO ! + echo' + + +

    ', $txt['sub_boards'], '

    +
    +
    +
    ', $txt['board_topics'], '
    ', $txt['posts'], '
    +
    ', $txt['last_post'], '
    + +
    '; + + foreach ($context['boards'] as $board) + { + echo ' +
    +
    + ', function_exists('template_bi_' . $board['type'] . '_icon') ? call_user_func('template_bi_' . $board['type'] . '_icon', $board) : template_bi_board_icon($board), ' +
    +
    + ', function_exists('template_bi_' . $board['type'] . '_info') ? call_user_func('template_bi_' . $board['type'] . '_info', $board) : template_bi_board_info($board), ' +
    '; + + // Show some basic information about the number of posts, etc. + echo ' +
    + ', function_exists('template_bi_' . $board['type'] . '_stats') ? call_user_func('template_bi_' . $board['type'] . '_stats', $board) : template_bi_board_stats($board), ' +
    '; + + // Show the last post if there is one. + echo ' +
    + ', function_exists('template_bi_' . $board['type'] . '_lastpost') ? call_user_func('template_bi_' . $board['type'] . '_lastpost', $board) : template_bi_board_lastpost($board), ' +
    '; + + // Won't somebody think of the children! + if (function_exists('template_bi_' . $board['type'] . '_children')) + call_user_func('template_bi_' . $board['type'] . '_children', $board); + else + template_bi_board_children($board); + + echo ' +
    '; + } + + echo ' +
    +
    +'; + } + + // Let them know why their message became unapproved. + if ($context['becomesUnapproved']) + echo ' +
    + ', $txt['post_becomes_unapproved'], ' +
    '; + + // If this person can approve items and we have some awaiting approval tell them. + if (!empty($context['unapproved_posts_message'])) + echo ' +
    + ', $context['unapproved_posts_message'], ' +
    '; + + if (!$context['no_topic_listing']) + { + echo ' +
    + ', template_button_strip($context['normal_buttons'], ), ' + ', $context['menu_separator'], ' + + '; + + // Mobile action buttons (top) + if (!empty($context['normal_buttons'])) + echo ' + '; + + echo ' +
    '; + + // If Quick Moderation is enabled start the form. + if (!empty($context['can_quick_mod']) && $options['display_quick_mod'] > 0 && !empty($context['topics'])) + echo ' +
    '; + + echo ' +
    '; + + echo ' +
    '; + + // Are there actually any topics to show? + if (!empty($context['topics'])) + { + echo ' +
    +
    ', $context['topics_headers']['subject'], ' / ', $context['topics_headers']['starter'], '
    +
    +
    ', $context['topics_headers']['replies'], '
    +
    ', $context['topics_headers']['views'], '
    +
    +
    ', $context['topics_headers']['last_post'], '
    '; + + // Show a "select all" box for quick moderation? + if (!empty($context['can_quick_mod']) && $options['display_quick_mod'] == 1) + echo ' +
    + + +
    '; + + // If it's on in "image" mode, don't show anything but the column. + elseif (!empty($context['can_quick_mod'])) + echo ' +
    '; + } + + // No topics... just say, "sorry bub". + else + echo ' +

    ', $txt['topic_alert_none'], '

    '; + + echo ' +
    '; + + // Contain the topic list + echo ' +
    '; + + foreach ($context['topics'] as $topic) + { + echo ' +
    +
    + +
    + ', $topic['is_posted_in'] ? '' : '', ' + '; + // Now we handle the icons + if ($topic['is_watched']) + echo ' + '; + + if ($topic['is_locked']) + echo ' + '; + + if ($topic['is_sticky']) + echo ' + '; + + if ($topic['is_redirect']) + echo ' + '; + + if ($topic['is_poll']) + echo ' + '; + + echo '
    '; + // End icon about topic + + echo '
    +
    +
    '; + + + + echo ' +
    + ', $topic['new'] && $context['user']['is_logged'] ? '' . $txt['new'] . '' : '', ' +

    + ', $topic['first_post']['link'], (!$topic['approved'] ? ' (' . $txt['awaiting_approval'] . ')' : ''), ' +

    +
    +

    + ', $txt['started_by'], ' ', $topic['first_post']['member']['link'], ' +

    + ', !empty($topic['pages']) ? '' . $topic['pages'] . '' : '', ' +
    +
    +
    +
    ', $topic['replies'], '
    +
    ', $topic['views'], '
    +
    +
    +

    ', sprintf($txt['last_post_topic'], '' . $topic['last_post']['time'] . '', $topic['last_post']['member']['link']), '

    +
    '; + + // Show the quick moderation options? + if (!empty($context['can_quick_mod'])) + { + echo ' +
    '; + + if ($options['display_quick_mod'] == 1) + echo ' + + '; + else + { + // Check permissions on each and show only the ones they are allowed to use. + if ($topic['quick_mod']['remove']) + echo ''; + + if ($topic['quick_mod']['lock']) + echo ''; + + if ($topic['quick_mod']['lock'] || $topic['quick_mod']['remove']) + echo '
    '; + + if ($topic['quick_mod']['sticky']) + echo ''; + + if ($topic['quick_mod']['move']) + echo ''; + } + echo ' +
    '; + } + echo ' +
    '; + } + echo ' +
    +
    + '; + + echo '
    '; + + function message_index_jump_to() + { + global $context, $settings, $txt, $modSettings; + // Sauter à... + echo '

    '; + if (!empty($context['jump_to'])) + echo ' + '; + } + message_index_jump_to(); + + if (!empty($context['can_quick_mod']) && $options['display_quick_mod'] == 1 && !empty($context['topics'])) + { + + // Action de modération et de manipulation des sujets en masse + echo ''; + + // Show a list of boards they can move the topic to. + if ($context['can_move']) + echo ' + '; + + echo ' + + '; + } + echo '
    '; + + echo ' +
    '; + + // Finish off the form - again. + if (!empty($context['can_quick_mod']) && $options['display_quick_mod'] > 0 && !empty($context['topics'])) + echo ' + +
    '; + + echo ' +
    + ', template_button_strip($context['normal_buttons'], ), ' + ', $context['menu_separator'], ' + '; + + // Mobile action buttons (bottom) + if (!empty($context['normal_buttons'])) + echo ' + '; + + echo ' +
    '; + } + + if (!empty($context['can_quick_mod']) && $options['display_quick_mod'] == 1 && !empty($context['topics']) && $context['can_move']) + echo ' + '; + + // Javascript for inline editing. + echo ' + '; + + template_topic_legend(); + + // Lets pop the... + echo ' + '; +} + +/** + * Outputs the board icon for a standard board. + * + * @param array $board Current board information. + */ +function template_bi_board_icon($board) +{ + global $context, $scripturl; + + echo ' + '; +} + +/** + * Outputs the board icon for a redirect. + * + * @param array $board Current board information. + */ +function template_bi_redirect_icon($board) +{ + global $context, $scripturl; + + echo ' + '; +} + +/** + * Outputs the board info for a standard board or redirect. + * + * @param array $board Current board information. + */ +function template_bi_board_info($board) +{ + global $context, $scripturl, $txt; + + echo ' + + ', $board['name'], ' + '; + + // Has it outstanding posts for approval? + if ($board['can_approve_posts'] && ($board['unapproved_posts'] || $board['unapproved_topics'])) + echo ' + !'; + + echo ' +
    ', $board['description'], '
    '; + + // Show the "Moderators: ". Each has name, href, link, and id. (but we're gonna use link_moderators.) + if (!empty($board['moderators']) || !empty($board['moderator_groups'])) + echo ' +

    ', count($board['link_moderators']) === 1 ? $txt['moderator'] : $txt['moderators'], ': ', implode(', ', $board['link_moderators']), '

    '; +} + +/** + * Outputs the board stats for a standard board. + * + * @param array $board Current board information. + */ +function template_bi_board_stats($board) +{ + global $txt; + + echo ' +
    ', comma_format($board['topics']), '
    +
    ', comma_format($board['posts']), '
    + '; +} + +/** + * Outputs the board stats for a redirect. + * + * @param array $board Current board information. + */ +function template_bi_redirect_stats($board) +{ + global $txt; + + echo ' +

    + ', $txt['redirects'], ': ', comma_format($board['posts']), ' +

    '; +} + +/** + * Outputs the board lastposts for a standard board or a redirect. + * When on a mobile device, this may be hidden if no last post exists. + * + * @param array $board Current board information. + */ +function template_bi_board_lastpost($board) +{ + if (!empty($board['last_post']['id'])) + echo ' +

    ', $board['last_post']['last_post_message'], '

    '; +} + +/** + * Outputs the board children for a standard board. + * + * @param array $board Current board information. + */ +function template_bi_board_children($board) +{ + global $txt, $scripturl, $context; + + // Show the "Child Boards: ". (there's a link_children but we're going to bold the new ones...) + if (!empty($board['children'])) + { + // Sort the links into an array with new boards bold so it can be imploded. + $children = array(); + /* Each child in each board's children has: + id, name, description, new (is it new?), topics (#), posts (#), href, link, and last_post. */ + foreach ($board['children'] as $child) + { + if (!$child['is_redirect']) + $child['link'] = '' . ($child['new'] ? '' . $txt['new'] . ' ' : '') . '' . $child['name'] . ''; + else + $child['link'] = '' . $child['name'] . ''; + + // Has it posts awaiting approval? + if ($child['can_approve_posts'] && ($child['unapproved_posts'] || $child['unapproved_topics'])) + $child['link'] .= ' !'; + + $children[] = $child['new'] ? '' . $child['link'] . '' : '' . $child['link'] . ''; + } + + echo ' +
    +

    ', $txt['sub_boards'], '', implode(' ', $children), '

    +
    '; + } +} + +/** + * Shows a legend for topic icons. + */ +function template_topic_legend() +{ + global $context, $settings, $txt, $modSettings; + + echo ' +
    +
    + '; + + if (empty($context['no_topic_listing'])) + echo ' +

    ' . $txt['khbb_caption'] . '

    +
      ', !empty($modSettings['enableParticipation']) && $context['user']['is_logged'] ? ' +
    • ' . $txt['participation_caption'] . '
    • ' : '', ' + ' . ($modSettings['pollMode'] == '1' ? '
    • ' . $txt['poll'] . '
    • ' : '') . ' +
    • ' . $txt['moved_topic'] . '
    • +
    • ' . $txt['locked_topic'] . '
    • +
    • ' . $txt['sticky_topic'] . '
    • +
    • ' . $txt['watching_topic'] . '
    • +
    '; + + + + echo ' +
    +
    '; +} + +?> diff --git a/ModerationCenter.template.php b/ModerationCenter.template.php new file mode 100644 index 0000000..0b3dccc --- /dev/null +++ b/ModerationCenter.template.php @@ -0,0 +1,689 @@ +'; + + // Show all the blocks they want to see. + foreach ($context['mod_blocks'] as $block) + { + $block_function = 'template_' . $block; + + echo ' +
    ', function_exists($block_function) ? $block_function() : '', '
    '; + } + + echo ' + '; +} + +/** + * Show all the group requests the user can see. + */ +function template_group_requests_block() +{ + global $context, $txt, $scripturl; + + echo ' + +
    +
      '; + + foreach ($context['group_requests'] as $request) + echo ' +
    • + ', $request['group']['name'], ' ', $txt['mc_groupr_by'], ' ', $request['member']['link'], ' +
    • '; + + // Don't have any watched users right now? + if (empty($context['group_requests'])) + echo ' +
    • + ', $txt['mc_group_requests_none'], ' +
    • '; + + echo ' +
    +
    + + '; +} + +/** + * A list of watched users + */ +function template_watched_users() +{ + global $context, $txt, $scripturl; + + echo ' + +
    +
      '; + + foreach ($context['watched_users'] as $user) + echo ' +
    • + ', sprintf(!empty($user['last_login']) ? $txt['mc_seen'] : $txt['mc_seen_never'], $user['link'], $user['last_login']), ' +
    • '; + + // Don't have any watched users right now? + if (empty($context['watched_users'])) + echo ' +
    • + ', $txt['mc_watched_users_none'], ' +
    • '; + + echo ' +
    +
    + + '; +} + +/** + * A list of reported posts + */ +function template_reported_posts_block() +{ + global $context, $txt, $scripturl; + + echo ' + +
    +
      '; + + foreach ($context['reported_posts'] as $post) + echo ' +
    • + ', sprintf($txt['mc_post_report'], $post['report_link'], $post['author']['link']), ' +
    • '; + + // Don't have any watched users right now? + if (empty($context['reported_posts'])) + echo ' +
    • + ', $txt['mc_recent_reports_none'], ' +
    • '; + + echo ' +
    +
    + + '; +} + +/** + * A list of reported users + */ +function template_reported_users_block() +{ + global $context, $txt, $scripturl; + + echo ' + +
    +
      '; + + foreach ($context['reported_users'] as $user) + echo ' +
    • + ', $user['user']['link'], ' +
    • '; + + // Don't have any watched users right now? + if (empty($context['reported_users'])) + echo ' +
    • + ', $txt['mc_reported_users_none'], ' +
    • '; + + echo ' +
    +
    + + '; +} + +/** + * Little section for making... notes. + */ +function template_notes() +{ + global $context, $txt, $scripturl; + + // Let them know the action was a success. + if (!empty($context['report_post_action'])) + echo ' +
    + ', $txt['report_action_' . $context['report_post_action']], ' +
    '; + + echo ' +
    +
    +
    +

    ', $txt['mc_notes'], '

    +
    +
    '; + + if (!empty($context['notes'])) + { + echo ' +
      '; + + // Cycle through the notes. + foreach ($context['notes'] as $note) + echo ' +
    • + ', ($note['can_delete'] ? '' : ''), $note['time'], ' ', $note['author']['link'], ': ', $note['text'], ' +
    • '; + + echo ' +
    +
    + +
    '; + } + + echo ' +
    + +
    + + +
    + +
    +
    '; +} + +/** + * Show a list of all the unapproved posts + */ +function template_unapproved_posts() +{ + global $options, $context, $txt, $scripturl; + + // Just a big table of it all really... + echo ' +
    +
    +
    +

    ', $txt['mc_unapproved_posts'], '

    +
    '; + + // No posts? + if (empty($context['unapproved_items'])) + { + echo ' +
    +

    + ', $txt['mc_unapproved_' . $context['current_view'] . '_none_found'], ' +

    +
    '; + } + else + { + echo ' +
    '; + + if (!empty($options['display_quick_mod']) && $options['display_quick_mod'] == 1) + echo ' +
      +
    • + +
    • +
    '; + + echo ' + +
    '; + + } + + foreach ($context['unapproved_items'] as $item) + { + // The buttons + $quickbuttons = array( + 'approve' => array( + 'label' => $txt['approve'], + 'href' => $scripturl.'?action=moderate;area=postmod;sa='.$context['current_view'].';start='.$context['start'].';'.$context['session_var'].'='.$context['session_id'].';approve='.$item['id'], + 'icon' => 'approve', + ), + 'delete' => array( + 'label' => $txt['remove'], + 'href' => $scripturl.'?action=moderate;area=postmod;sa='.$context['current_view'].';start='.$context['start'].';'.$context['session_var'].'='.$context['session_id'].';delete='.$item['id'], + 'icon' => 'remove_button', + 'show' => $item['can_delete'] + ), + 'quickmod' => array( + 'class' => 'inline_mod_check', + 'content' => '', + 'show' => !empty($options['display_quick_mod']) && $options['display_quick_mod'] == 1 + ), + ); + echo ' +
    +
    #', $item['counter'], '
    +
    +
    + ', $item['category']['link'], ' / ', $item['board']['link'], ' / ', $item['link'], ' +
    + ', sprintf(str_replace('
    ', ' ', $txt['last_post_topic']), $item['time'], '' . $item['poster']['link'] . ''), '
    +
    +
    +
    ', $item['body'], '
    +
    + ', template_quickbuttons($quickbuttons, 'unapproved_posts'), ' +
    '; + } + + echo ' +
    '; + + if (!empty($options['display_quick_mod']) && $options['display_quick_mod'] == 1) + echo ' +
    + + +
    '; + + if (!empty($context['unapproved_items'])) + echo ' + '; + + echo ' +
    + +
    +
    '; +} + +/** + * Callback function for showing a watched users post in the table. + * + * @param array $post An array of data about the post. + * @return string An array of HTML for showing the post info. + */ +function template_user_watch_post_callback($post) +{ + global $scripturl, $context, $txt, $delete_button; + + // We'll have a delete and a checkbox please bob. + // @todo Discuss this with the team and rewrite if required. + $quickbuttons = array( + 'delete' => array( + 'label' => $txt['remove_message'], + 'href' => $scripturl.'?action=moderate;area=userwatch;sa=post;delete='.$post['id'].';start='.$context['start'].';'.$context['session_var'].'='.$context['session_id'], + 'javascript' => 'data-confirm="' . $txt['mc_watched_users_delete_post'] . '"', + 'class' => 'you_sure', + 'icon' => 'remove_button', + 'show' => $post['can_delete'] + ), + 'quickmod' => array( + 'class' => 'inline_mod_check', + 'content' => '', + 'show' => $post['can_delete'] + ) + ); + + $output_html = ' +
    +
    + ' . $post['subject'] . ' ' . $txt['mc_reportedp_by'] . ' ' . $post['author_link'] . ' +
    +
    +
    +
    + ' . $txt['mc_watched_users_posted'] . ': ' . $post['poster_time'] . ' +
    +
    + ' . $post['body'] . ' +
    '; + + $output_html .= template_quickbuttons($quickbuttons, 'user_watch_post', 'return'); + + return $output_html; +} + +/** + * The moderation settings page. + */ +function template_moderation_settings() +{ + global $context, $txt, $scripturl; + + echo ' +
    '; + + echo ' +
    +
    ', $txt['mc_no_settings'], '
    +
    '; + + echo ' +
    '; +} + +/** + * Show a notice sent to a user. + */ +function template_show_notice() +{ + global $txt, $settings, $context, $modSettings; + + // We do all the HTML for this one! + echo ' + + + + ', $context['page_title'], ' + ', template_css(), ' + + +
    +

    ', $txt['show_notice'], '

    +
    +
    +

    ', $txt['show_notice_subject'], ': ', $context['notice_subject'], '

    +
    +
    +
    +
    + ', $txt['show_notice_text'], ': +
    +
    + ', $context['notice_body'], ' +
    +
    +
    + +'; + +} + +/** + * Add or edit a warning template. + */ +function template_warn_template() +{ + global $context, $txt, $scripturl; + + echo ' +
    +
    +
    +

    ', $context['page_title'], '

    +
    +
    + ', $txt['mc_warning_template_desc'], ' +
    +
    + + +
    +
    + : +
    +
    + +
    +
    + :
    + ', $txt['mc_warning_template_body_desc'], ' +
    +
    + +
    +
    '; + + if ($context['template_data']['can_edit_personal']) + echo ' + + +

    ', $txt['mc_warning_template_personal_desc'], '

    '; + + echo ' + + +
    + + +
    +
    + + '; +} + +?> diff --git a/MoveTopic.template.php b/MoveTopic.template.php new file mode 100644 index 0000000..2abbbb1 --- /dev/null +++ b/MoveTopic.template.php @@ -0,0 +1,398 @@ + +
    +
    +

    ', $txt['move_topic'], '

    +
    +
    +
    +
    +
    + ', $txt['move_to'], ': +
    +
    + +
    '; + + // Disable the reason textarea when the postRedirect checkbox is unchecked... + echo ' +
    +
    + '; + + // Stick our "create a redirection topic" template in here... + template_redirect_options('move'); + + echo ' + +
    +
    '; + + if ($context['back_to_topic']) + echo ' + '; + + echo ' + + +
    + '; +} + +/** + * Redirection topic options + * + * @param string $type What type of topic this is for - currently 'merge' or 'move'. Used to display appropriate text strings... + */ +function template_redirect_options($type) +{ + global $txt, $context, $modSettings; + + echo ' + +
    +
    +
    + ', $txt[$type . '_why'], ' +
    +
    + +
    +
    + +
    +
    + +
    '; + + if (!empty($modSettings['allow_expire_redirect'])) + { + echo ' +
    + ', $txt['redirect_topic_expires'], ' +
    +
    + +
    '; + } + else + echo ' + '; + + echo ' +
    +
    '; +} + +/** + * Confirmation page shown when finished merging topics. + */ +function template_merge_done() +{ + global $context, $txt, $scripturl; + + echo ' +
    +
    +

    ', $txt['merge'], '

    +
    +
    +

    ', $txt['merge_successful'], '

    +
    + +
    +
    +
    '; +} + +/** + * Merge topic page. + */ +function template_merge() +{ + global $context, $txt, $scripturl; + + echo ' +
    +
    +

    ', $txt['merge'], '

    +
    +
    + ', $txt['merge_desc'], ' +
    +
    +
    +
    + ', $txt['topic_to_merge'], ': +
    +
    + ', $context['origin_subject'], ' +
    +
    +
    +
    +
    +

    ', $txt['target_topic'], '

    +
    +
    +

    '; + + if (isset($context['merge_categories'])) + { + echo ' +
    + ', $txt['target_below'], ' (', $txt['board'], ': + ) + + +
    '; + } + else + echo $txt['target_below']; + + echo '

    +
    +
    '; + + // Don't show this if there aren't any topics... + if (!empty($context['topics'])) + { + echo ' +
    + +
    +
    +
      '; + + foreach ($context['topics'] as $topic) + echo ' +
    • + + ', $topic['subject'], ' ', $txt['started_by'], ' ', $topic['poster']['link'], ' +
    • '; + + echo ' +
    +
    +
    + +
    '; + } + // Just a nice "There aren't any topics" message + else + echo ' +
    ', $txt['topic_alert_none'], '
    '; + + echo ' +
    +
    +

    ', $txt['target_id'], '

    +
    +
    +
    +
    + ', $txt['merge_to_topic_id'], ': +
    +
    + + + + +
    +
    + +
    +
    +
    '; +} + +/** + * Extra options related to merging topics. + */ +function template_merge_extra_options() +{ + global $context, $txt, $scripturl; + + echo ' +
    +
    +
    +

    ', $txt['merge_topic_list'], '

    +
    + + + + + + + + + + + '; + + foreach ($context['topics'] as $topic) + echo ' + + + + + + + '; + echo ' + +
    ', $txt['merge_check'], '', $txt['subject'], '', $txt['started_by'], '', $txt['last_post'], '' . $txt['merge_include_notifications'] . '
    + + + ' . $topic['subject'] . ' + + ', $topic['started']['link'], '
    + ', $topic['started']['time'], ' +
    + ' . $topic['updated']['link'] . '
    + ', $topic['updated']['time'], ' +
    + +
    +
    +
    +
    + ', $txt['merge_select_subject'], ' + +
    +
    + +
    '; + + // Show an option to create a redirection topic as well... + template_redirect_options('merge'); + + if (!empty($context['boards']) && count($context['boards']) > 1) + { + echo ' +
    + ', $txt['merge_select_target_board'], ' +
      '; + + foreach ($context['boards'] as $board) + echo ' +
    • + ' . $board['name'] . ' +
    • '; + echo ' +
    +
    '; + } + if (!empty($context['polls'])) + { + echo ' +
    + ' . $txt['merge_select_poll'] . ' +
      '; + + foreach ($context['polls'] as $poll) + echo ' +
    • + ' . $poll['question'] . ' (' . $txt['topic'] . ': ' . $poll['topic']['subject'] . ') +
    • '; + echo ' +
    • + (' . $txt['merge_no_poll'] . ') +
    • +
    +
    '; + } + + echo ' +
    + + + +
    +
    +
    +
    '; +} + +?> \ No newline at end of file diff --git a/Notify.template.php b/Notify.template.php new file mode 100644 index 0000000..0735168 --- /dev/null +++ b/Notify.template.php @@ -0,0 +1,98 @@ + +

    + + ', $txt['notify'], ' +

    + +
    +

    ', $txt['notify_topic_prompt'], '

    +

    + ', $txt['yes'], ' - ', $txt['no'], ' +

    +
    '; +} + +/** + * Board notification bar. + */ +function template_notify_board() +{ + global $context, $txt, $scripturl; + + echo ' +
    +

    + + ', $txt['notify'], ' +

    +
    +
    +

    ', $txt['notify_board_prompt'], '

    +

    + ', $txt['yes'], ' - ', $txt['no'], ' +

    +
    '; +} + +/** + * + */ +function template_notify_announcements() +{ + global $context, $settings, $options, $txt, $scripturl; + + echo ' +
    +

    + + ', $txt['notify'], ' +

    +
    +
    +

    ', $txt['notify_announcements_prompt'], '

    +

    + ', $txt['yes'], ' - ', $txt['no'], ' +

    +
    '; +} + +/** + * Displays a message indicating the user's notification preferences were successfully changed + */ +function template_notify_pref_changed() +{ + global $context, $settings, $options, $txt, $scripturl; + + echo ' +
    +

    + + ', $txt['notify'], ' +

    +
    +
    +

    ', $context['notify_success_msg'], '

    +
    '; +} + +?> \ No newline at end of file diff --git a/Packages.template.php b/Packages.template.php new file mode 100644 index 0000000..3eb129f --- /dev/null +++ b/Packages.template.php @@ -0,0 +1,1868 @@ + +

    ', $txt[($context['uninstalling'] ? 'uninstall' : ('install_' . $context['extract_type']))], '

    + +
    '; + + if ($context['is_installed']) + echo ' + ', $txt['package_installed_warning1'], '
    +
    + ', $txt['package_installed_warning2'], '
    +
    '; + + echo $txt['package_installed_warning3'], ' +
    +
    '; + + if (!empty($context['package_blacklist_found'])) + echo ' +
    ', $txt['package_validation_blacklist_found'], ' +
    '; + + // Do errors exist in the install? If so light them up like a christmas tree. + if ($context['has_failure']) + echo ' +
    + ', sprintf($txt['package_will_fail_title'], $txt['package_' . ($context['uninstalling'] ? 'uninstall' : 'install')]), '
    + ', sprintf($txt['package_will_fail_warning'], $txt['package_' . ($context['uninstalling'] ? 'uninstall' : 'install')]), + !empty($context['failure_details']) ? '

    ' . $context['failure_details'] . '' : '', ' +
    '; + + // Validation info? + if (!empty($context['validation_tests'])) + { + echo ' +
    +

    ', $txt['package_validaiton_results'], '

    +
    +
    + '; + + foreach ($context['validation_tests'] as $id_server => $result) + { + echo ' + + + + '; + } + + echo ' +
    ', $context['package_servers'][$id_server]['name'], '', $txt[isset($result[$context['package_sha256_hash']]) ? $result[$context['package_sha256_hash']] : 'package_validation_status_unknown'], '
    +
    +
    '; + } + + // Display the package readme if one exists + if (isset($context['package_readme'])) + { + echo ' +
    +

    ', $txt['package_' . ($context['uninstalling'] ? 'un' : '') . 'install_readme'], '

    +
    +
    + ', $context['package_readme'], ' + ', $txt['package_available_readme_language'], ' + + +
    +
    '; + } + + // Did they specify a license to display? + if (isset($context['package_license'])) + { + echo ' +
    +

    ', $txt['package_install_license'], '

    +
    +
    + ', $context['package_license'], ' + ', $txt['package_available_license_language'], ' + + +
    +
    '; + } + + echo ' +
    +
    +

    + ', $context['uninstalling'] ? $txt['package_uninstall_actions'] : $txt['package_install_actions'], ' "', $context['package_name'], '" +

    +
    '; + + // Are there data changes to be removed? + if ($context['uninstalling'] && !empty($context['database_changes'])) + { + // This is really a special case so we're adding style inline + echo ' +
    + +
    + ', $txt['package_db_uninstall_actions'], ': +
      '; + + foreach ($context['database_changes'] as $change) + echo ' +
    • ', $change, '
    • '; + + echo ' +
    +
    +
    '; + } + + echo ' +
    '; + + if (empty($context['actions']) && empty($context['database_changes'])) + echo ' +
    +
    + ', $txt['corrupt_compatible'], ' +
    +
    '; + else + { + echo ' + ', $txt['perform_actions'], ' + +
    + + + + + + + + + + + '; + + $i = 1; + $j = 1; + $action_num = 1; + $js_operations = array(); + foreach ($context['actions'] as $packageaction) + { + // Did we pass or fail? Need to now for later on. + $js_operations[$action_num] = isset($packageaction['failed']) ? $packageaction['failed'] : 0; + + echo ' + + + + + + + '; + + // Is there water on the knee? Operation! + if (isset($packageaction['operations'])) + { + echo ' + + + '; + + // Increase it. + $action_num++; + } + } + echo ' + +
    ', $txt['package_install_type'], '', $txt['package_install_action'], '', $txt['package_install_desc'], '
    ', isset($packageaction['operations']) ? '' : '', '', $i++, '.', $packageaction['type'], '', $packageaction['action'], '', $packageaction['description'], '
    + '; + + // Show the operations. + $operation_num = 1; + foreach ($packageaction['operations'] as $operation) + { + // Determine the position text. + $operation_text = $operation['position'] == 'replace' ? 'operation_replace' : ($operation['position'] == 'before' ? 'operation_after' : 'operation_before'); + + echo ' + + + + + + + '; + } + + echo ' +
    + + + + ', $operation_num++, '.', $txt[$operation_text], '', $operation['action'], '', $operation['description'], !empty($operation['ignore_failure']) ? ' (' . $txt['operation_ignore'] . ')' : '', '
    +
    '; + + // What if we have custom themes we can install into? List them too! + if (!empty($context['theme_actions'])) + { + echo ' +
    +
    +

    + ', $context['uninstalling'] ? $txt['package_other_themes_uninstall'] : $txt['package_other_themes'], ' +

    +
    +
    +
    + ', $txt['package_other_themes_desc'], ' +
    + '; + + // Loop through each theme and display it's name, and then it's details. + foreach ($context['theme_actions'] as $id => $theme) + { + // Pass? + $js_operations[$action_num] = !empty($theme['has_failure']); + + echo ' + + + + '; + + foreach ($theme['actions'] as $action) + { + echo ' + + + + + + '; + + // Is there water on the knee? Operation! + if (isset($action['operations'])) + { + echo ' + + + '; + + // Increase it. + $action_num++; + } + } + } + + echo ' +
    '; + + if (!empty($context['themes_locked'])) + echo ' + '; + echo ' + + + ', $theme['name'], ' +
    ', isset($packageaction['operations']) ? + '' : '', ' + + ', $action['type'], '', $action['action'], '', $action['description'], '
    + '; + + $operation_num = 1; + foreach ($action['operations'] as $operation) + { + // Determine the position text. + $operation_text = $operation['position'] == 'replace' ? 'operation_replace' : ($operation['position'] == 'before' ? 'operation_after' : 'operation_before'); + + echo ' + + + + + + + '; + } + + echo ' +
    + + + + ', $operation_num++, '.', $txt[$operation_text], '', $operation['action'], '', $operation['description'], !empty($operation['ignore_failure']) ? ' (' . $txt['operation_ignore'] . ')' : '', '
    +
    +
    '; + } + } + + // Are we effectively ready to install? + if (!$context['ftp_needed'] && (!empty($context['actions']) || !empty($context['database_changes']))) + echo ' +
    + +
    '; + + // If we need ftp information then demand it! + elseif ($context['ftp_needed']) + echo ' +
    +

    ', $txt['package_ftp_necessary'], '

    +
    +
    + ', template_control_chmod(), ' +
    '; + + echo ' + + ', (isset($context['form_sequence_number']) && !$context['ftp_needed']) ? ' + ' : '', ' +
    '; + + // Toggle options. + echo ' + '; +} + +/** + * Extract package contents + */ +function template_extract_package() +{ + global $context, $txt, $scripturl; + + echo ' +
    +

    '; + + if (empty($context['redirect_url'])) + echo $context['uninstalling'] ? $txt['uninstall'] : $txt['extracting']; + else + echo $txt['package_installed_redirecting']; + + echo '

    +
    +
    '; + + // If we are going to redirect we have a slightly different agenda. + if (!empty($context['redirect_url'])) + echo ' + ', $context['redirect_text'], '

    + ', $txt['package_installed_redirect_go_now'], ' | ', $txt['package_installed_redirect_cancel'], ' + '; + + elseif ($context['uninstalling']) + echo ' + ', $txt['package_uninstall_done'] .'
    + ', '', $txt['package_keep'], '', '', $txt['package_delete2'], ''; + + elseif ($context['install_finished']) + { + if ($context['extract_type'] == 'avatar') + echo ' + ', $txt['avatars_extracted']; + + elseif ($context['extract_type'] == 'language') + echo ' + ', $txt['language_extracted']; + + else + echo ' + ', $txt['package_installed_done']; + } + else + echo ' + ', $txt['corrupt_compatible']; + + echo ' +
    '; + + // Show the "restore permissions" screen? + if (function_exists('template_show_list') && !empty($context['restore_file_permissions']['rows'])) + { + echo '
    '; + template_show_list('restore_file_permissions'); + } +} + +/** + * List files in a package + */ +function template_list() +{ + global $context, $txt, $scripturl; + + echo ' +
    +

    ', $txt['list_file'], '

    +
    +
    +

    ', $txt['files_archive'], ' ', $context['filename'], ':

    +
    +
    +
      '; + + foreach ($context['files'] as $fileinfo) + echo ' +
    1. ', $fileinfo['filename'], ' (', $fileinfo['size'], ' ', $txt['package_bytes'], ')
    2. '; + + echo ' +
    +
    + [ ', $txt['back'], ' ] +
    '; +} + +/** + * Examine a single file within a package + */ +function template_examine() +{ + global $context, $txt, $scripturl; + + echo ' +
    +

    ', $txt['package_examine_file'], '

    +
    +
    +

    ', $txt['package_file_contents'], ' ', $context['filename'], ':

    +
    +
    +
    ', $context['filedata'], '
    + [ ', $txt['list_files'], ' ] +
    '; +} + +/** + * List all packages + */ +function template_browse() +{ + global $context, $txt, $scripturl, $modSettings; + + echo ' +
    +
    +
    +

    + ', $txt['packages_adding_title'], ' +

    +
    +
    + ', $txt['packages_adding'], ' +
    + + + '; + + if (empty($modSettings['disable_smf_js'])) + echo ' + '; + + // This sets the announcements and current versions themselves ;). + echo ' + '; + + echo ' +
    '; + + if ($context['available_packages'] == 0) + echo ' +
    ', $txt['no_packages'], '
    '; + else + { + foreach ($context['modification_types'] as $type) + if (!empty($context['packages_lists_' . $type]['rows'])) + template_show_list('packages_lists_' . $type); + + echo ' +
    '; + } + + // The advanced (emulation) box, collapsed by default + echo ' +
    +
    + +
    +

    + ', $txt['package_emulate_desc'], ' +

    +
    +
    + ', $txt['package_emulate'], ':
    + + ', $txt['package_emulate_revert'], ' + +
    +
    + + +
    +
    +
    + +
    +
    +
    + + + +
    + '; +} + +/** + * List package servers + */ +function template_servers() +{ + global $context, $txt, $scripturl; + + if (!empty($context['package_ftp']['error'])) + echo ' +
    +
    ', $context['package_ftp']['error'], '
    +
    '; + + echo ' +
    +
    +

    ', $txt['package_upload_title'], '

    +
    +
    +
    +
    +
    + ', $txt['package_upload_select'], ': +
    +
    + +
    +
    + + +
    +
    + +
    '; + + if ($context['package_download_broken']) + { + echo ' +
    +

    ', $txt['package_ftp_necessary'], '

    +
    +
    +

    + ', $txt['package_ftp_why_download'], ' +

    +
    +
    +
    + +
    +
    + + + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    + +
    +
    +
    '; + } + + echo ' +
    +
    + ' . $txt['package_servers'] . ' + +
    +
    + ' . $txt['add_server'] . ' +
    +
    +
    + ' . $txt['server_name'] . ': +
    +
    + +
    +
    + ' . $txt['serverurl'] . ': +
    +
    + +
    +
    +
    + + +
    +
    +
    +
    + ', $txt['package_download_by_url'], ' +
    +
    +
    + ' . $txt['serverurl'] . ': +
    +
    + +
    +
    + ', $txt['package_download_filename'], ': +
    +
    +
    + ', $txt['package_download_filename_info'], ' +
    +
    + +
    +
    +
    +
    +
    '; +} + +/** + * Confirm package operation + */ +function template_package_confirm() +{ + global $context, $txt; + + echo ' +
    +

    ', $context['page_title'], '

    +
    + '; +} + +/** + * List packages. + */ +function template_package_list() +{ + global $context, $txt, $smcFunc; + + echo ' +
    +

    ', $context['page_title'], '

    +
    +
    '; + + // No packages, as yet. + if (empty($context['package_list'])) + echo ' +
      +
    • ', $txt['no_packages'], '
    • +
    '; + + // List out the packages... + else + { + echo ' +
      '; + + foreach ($context['package_list'] as $i => $packageSection) + { + echo ' +
    • + ', $packageSection['title'], ''; + + if (!empty($packageSection['text'])) + echo ' +
      +

      ', $packageSection['text'], '

      +
      '; + + echo ' + <', $context['list_type'], ' id="package_section_', $i, '" class="packages">'; + + foreach ($packageSection['items'] as $id => $package) + { + echo ' +
    • '; + + // Textual message. Could be empty just for a blank line... + if ($package['is_text']) + echo ' + ', empty($package['name']) ? ' ' : $package['name']; + + // This is supposed to be a rule.. + elseif ($package['is_line']) + echo ' +
      '; + + // A remote link. + elseif ($package['is_remote']) + echo ' + ', $package['link'], ''; + + // A title? + elseif ($package['is_heading'] || $package['is_title']) + echo ' + ', $package['name'], ''; + + // Otherwise, it's a package. + else + { + // 1. Some mod [ Download ]. + echo ' + ', $package['can_install'] || !empty($package['can_emulate_install']) ? '' . $package['name'] . ' [ ' . $txt['download'] . ' ]' : $package['name'], ' +
        '; + + // Show the mod type? + if ($package['type'] != '') + echo ' +
      • + ', $txt['package_type'], ':  ', $smcFunc['ucwords']($smcFunc['strtolower']($package['type'])), ' +
      • '; + + // Show the version number? + if ($package['version'] != '') + echo ' +
      • + ', $txt['mod_version'], ':  ', $package['version'], ' +
      • '; + + // How 'bout the author? + if (!empty($package['author']) && $package['author']['name'] != '' && isset($package['author']['link'])) + echo ' +
      • + ', $txt['mod_author'], ':  ', $package['author']['link'], ' +
      • '; + + // The homepage... + if ($package['author']['website']['link'] != '') + echo ' +
      • + ', $txt['author_website'], ':  ', $package['author']['website']['link'], ' +
      • '; + + // Description: bleh bleh! + // Location of file: http://someplace/. + echo ' +
      • + ', $txt['file_location'], ':  ', $package['href'], ' +
      • +
      • +
        + ', $txt['package_description'], ':  ', $package['description'], ' +
        +
      • +
      '; + } + + echo ' +
    • '; + } + echo ' + + '; + } + echo ' +
    '; + } + + echo ' +
    '; + + // Now go through and turn off all the sections. + if (!empty($context['package_list'])) + { + $section_count = count($context['package_list']); + + echo ' + '; + } +} + +/** + * Confirmation page showing a package was uploaded/downloaded successfully. + */ +function template_downloaded() +{ + global $context, $txt, $scripturl; + + echo ' +
    +

    ', $context['page_title'], '

    +
    +
    +

    + ', (empty($context['package_server']) ? $txt['package_uploaded_successfully'] : $txt['package_downloaded_successfully']), ' +

    +
      +
    • + ', $context['package']['name'], ' + ', $context['package']['list_files']['link'], ' + ', $context['package']['install']['link'], ' +
    • +
    +

    +

    [ ', $txt['back'], ' ]

    +
    '; +} + +/** + * Installation options - FTP info and backup settings + */ +function template_install_options() +{ + global $context, $txt, $scripturl; + + if (!empty($context['saved_successful'])) + echo ' +
    ', $txt['settings_saved'], '
    '; + + echo ' +
    +

    ', $txt['package_install_options'], '

    +
    +
    + ', $txt['package_install_options_ftp_why'], ' +
    +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + + + +
    +
    '; +} + +/** + * CHMOD control form + * + * @return bool False if nothing to do. + */ +function template_control_chmod() +{ + global $context, $txt; + + // Nothing to do? Brilliant! + if (empty($context['package_ftp'])) + return false; + + if (empty($context['package_ftp']['form_elements_only'])) + { + echo ' + ', sprintf($txt['package_ftp_why'], 'document.getElementById(\'need_writable_list\').style.display = \'\'; return false;'), '
    +
    + ', $txt['package_ftp_why_file_list'], ' +
      '; + + if (!empty($context['notwritable_files'])) + foreach ($context['notwritable_files'] as $file) + echo ' +
    • ', $file, '
    • '; + + echo ' +
    '; + + if (!$context['server']['is_windows']) + echo ' +
    + ', $txt['package_chmod_linux'], '
    + # chmod a+w ', implode(' ', $context['notwritable_files']), ''; + + echo ' +
    '; + } + + echo ' +
    +
    + ', !empty($context['package_ftp']['error']) ? $context['package_ftp']['error'] : '', ' +
    +
    '; + + if (!empty($context['package_ftp']['destination'])) + echo ' +
    '; + + echo ' +
    +
    +
    + +
    +
    + + + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    '; + + if (empty($context['package_ftp']['form_elements_only'])) + echo ' +
    + + +
    '; + + if (!empty($context['package_ftp']['destination'])) + echo ' + +
    '; + + // Hide the details of the list. + if (empty($context['package_ftp']['form_elements_only'])) + echo ' + '; + + // Quick generate the test button. + echo ' + '; + + // Make sure the button gets generated last. + $context['insert_after_template'] .= ' + '; +} + +/** + * Wrapper for the above template function showing that FTP is required + */ +function template_ftp_required() +{ + global $txt; + + echo ' +
    + + ', $txt['package_ftp_necessary'], ' + +
    + ', template_control_chmod(), ' +
    +
    '; +} + +/** + * View operation details. + */ +function template_view_operations() +{ + global $context, $txt, $settings, $modSettings; + + echo ' + + + + ', $txt['operation_title'], ' + ', template_css(); + + template_javascript(); + + echo ' + + +
    +
    + ', $context['operations']['search'], ' +
    +
    + ', $context['operations']['replace'], ' +
    +
    + +'; +} + +/** + * The file permissions page. + */ +function template_file_permissions() +{ + global $txt, $scripturl, $context; + + // This will handle expanding the selection. + echo ' + '; + + echo ' +
    +
    + ', $txt['package_file_perms_warning'], ': +
    +
      + ', $txt['package_file_perms_warning_desc'], ' +
    +
    +
    +
    + +
    +
    +

    + ', $txt['package_file_perms'], '', $txt['package_file_perms_new_status'], ' +

    +
    + + + + + + + + + + + + + '; + + foreach ($context['file_tree'] as $name => $dir) + { + echo ' + + + + + + + + + '; + + if (!empty($dir['contents'])) + template_permission_show_contents($name, $dir['contents'], 1); + } + + echo ' + +
    ', $txt['package_file_perms_name'], '', $txt['package_file_perms_status'], '', $txt['package_file_perms_status_read'], '', $txt['package_file_perms_status_write'], '', $txt['package_file_perms_status_execute'], '', $txt['package_file_perms_status_custom'], '', $txt['package_file_perms_status_no_change'], '
    + '; + + if (!empty($dir['type']) && ($dir['type'] == 'dir' || $dir['type'] == 'dir_recursive')) + echo ' + '; + + echo ' + ', $name, ' + + + ', ($dir['perms']['chmod'] ? $txt['package_file_perms_writable'] : $txt['package_file_perms_not_writable']), ' + ', ($dir['perms']['perms'] ? ' (' . $txt['package_file_perms_chmod'] . ': ' . substr(sprintf('%o', $dir['perms']['perms']), -4) . ')' : ''), ' + + + + + + + + + + +
    +
    +
    +

    ', $txt['package_file_perms_change'], '

    +
    +
    +
    +
    +
    + + +
    +
    + ', $txt['package_file_perms_custom'], ': (?) +
    +
    + + + +
    +
    + ', $txt['package_file_perms_predefined_note'], ' +
    +
    +
    '; + + // Likely to need FTP? + if (empty($context['ftp_connected'])) + echo ' +

    + ', $txt['package_file_perms_ftp_details'], ': +

    + ', template_control_chmod(), ' +
    ', $txt['package_file_perms_ftp_retain'], '
    '; + + echo ' + + + +
    '; + + // Any looks fors we've already done? + foreach ($context['look_for'] as $path) + echo ' + '; + + echo ' +
    +
    '; +} + +/** + * Shows permissions for items within a directory (called from template_file_permissions) + * + * @param string $ident A unique ID - typically the directory name + * @param array $contents An array of items within the directory + * @param int $level How far to go inside the directory + * @param bool $has_more Whether there are more files to display besides what's in $contents + */ +function template_permission_show_contents($ident, $contents, $level, $has_more = false) +{ + global $txt, $scripturl, $context; + $js_ident = preg_replace('~[^A-Za-z0-9_\-=:]~', ':-:', $ident); + + // Have we actually done something? + $drawn_div = false; + + foreach ($contents as $name => $dir) + { + if (isset($dir['perms'])) + { + if (!$drawn_div) + { + $drawn_div = true; + echo ' + + '; + } + + $cur_ident = preg_replace('~[^A-Za-z0-9_\-=:]~', ':-:', $ident . '/' . $name); + + echo ' + + ' . str_repeat(' ', $level * 5), ' + ', (!empty($dir['type']) && $dir['type'] == 'dir_recursive') || !empty($dir['list_contents']) ? '' : ''; + + if (!empty($dir['type']) && ($dir['type'] == 'dir' || $dir['type'] == 'dir_recursive')) + echo ' + '; + + echo ' + ', $name, ' + ', (!empty($dir['type']) && $dir['type'] == 'dir_recursive') || !empty($dir['list_contents']) ? '' : '', ' + + + ', ($dir['perms']['chmod'] ? $txt['package_file_perms_writable'] : $txt['package_file_perms_not_writable']), ' + ', ($dir['perms']['perms'] ? ' (' . $txt['package_file_perms_chmod'] . ': ' . substr(sprintf('%o', $dir['perms']['perms']), -4) . ')' : ''), ' + + + + + + + + '; + + if (!empty($dir['contents'])) + template_permission_show_contents($ident . '/' . $name, $dir['contents'], $level + 1, !empty($dir['more_files'])); + } + } + + // We have more files to show? + if ($has_more) + echo ' + + ' . str_repeat(' ', $level * 5), ' + ', $txt['package_file_perms_more_files'], ' + + + '; + + if ($drawn_div) + { + // Hide anything too far down the tree. + $isFound = false; + foreach ($context['look_for'] as $tree) + if (substr($tree, 0, strlen($ident)) == $ident) + $isFound = true; + + if ($level > 1 && !$isFound) + echo ' + '; + } +} + +/** + * A progress page showing what permissions changes are being applied + */ +function template_action_permissions() +{ + global $txt, $scripturl, $context; + + $countDown = 3; + + echo ' +
    +
    +

    ', $txt['package_file_perms_applying'], '

    +
    '; + + if (!empty($context['skip_ftp'])) + echo ' +
    + ', $txt['package_file_perms_skipping_ftp'], ' +
    '; + + // How many have we done? + $remaining_items = count($context['method'] == 'individual' ? $context['to_process'] : $context['directory_list']); + $progress_message = sprintf($context['method'] == 'individual' ? $txt['package_file_perms_items_done'] : $txt['package_file_perms_dirs_done'], $context['total_items'] - $remaining_items, $context['total_items']); + $progress_percent = round(($context['total_items'] - $remaining_items) / $context['total_items'] * 100, 1); + + echo ' +
    +
    + ', $progress_message, '
    +
    + ', $progress_percent, '% +
    +
    +
    '; + + // Second progress bar for a specific directory? + if ($context['method'] != 'individual' && !empty($context['total_files'])) + { + $file_progress_message = sprintf($txt['package_file_perms_files_done'], $context['file_offset'], $context['total_files']); + $file_progress_percent = round($context['file_offset'] / $context['total_files'] * 100, 1); + + echo ' +
    +
    + ', $file_progress_message, '
    +
    + ', $file_progress_percent, '% +
    +
    +
    '; + } + + echo ' +
    '; + + // Put out the right hidden data. + if ($context['method'] == 'individual') + echo ' + + + '; + else + echo ' + + + + + '; + + // Are we not using FTP for whatever reason. + if (!empty($context['skip_ftp'])) + echo ' + '; + + // Retain state. + foreach ($context['back_look_data'] as $path) + echo ' + '; + + echo ' + + +
    + +
    +
    +
    '; + + // Just the countdown stuff + echo ' + '; +} + +?> \ No newline at end of file diff --git a/PersonalMessage.template.php b/PersonalMessage.template.php new file mode 100644 index 0000000..976b277 --- /dev/null +++ b/PersonalMessage.template.php @@ -0,0 +1,2013 @@ +'; + + // Show the capacity bar, if available. + if (!empty($context['limit_bar'])) + echo ' +
    +
    +

    + ', $txt['pm_capacity'], ': + + + + ', $context['limit_bar']['text'], ' +

    +
    '; + + // Message sent? Show a small indication. + if (isset($context['pm_sent'])) + echo ' +
    + ', $txt['pm_sent'], ' +
    '; +} + +/** + * Just the end of the index bar, nothing special. + */ +function template_pm_below() +{ + echo ' + '; +} + +/** + * Displays a popup with information about your personal messages + */ +function template_pm_popup() +{ + global $context, $txt, $scripturl; + + // Unlike almost every other template, this is designed to be included into the HTML directly via $().load() + echo ' +
    +
    + ', $context['can_send_pm'] ? '' . $txt['pm_new_short'] . '' : '', ' + ', $context['can_draft'] ? ' | ' . $txt['pm_drafts_short'] . '' : '', ' + ', $txt['pm_settings_short'], ' +
    + +
    +
    '; + + if (empty($context['unread_pms'])) + echo ' +
    ', $txt['pm_no_unread'], '
    '; + else + { + foreach ($context['unread_pms'] as $id_pm => $pm_details) + echo ' +
    +
    + ', !empty($pm_details['member']) ? $pm_details['member']['avatar']['image'] : '', ' +
    +
    +
    ', $pm_details['pm_link'], '
    +
    + ', $pm_details['replied_to_you'] ? '' : '', + !empty($pm_details['member']) ? $pm_details['member']['link'] : $pm_details['member_from'], ' - ', $pm_details['time'], ' +
    +
    +
    '; + } + + echo ' +
    '; +} + +/** + * Shows a particular folder (eg inbox or outbox), all the PMs in it, etc. + */ +function template_folder() +{ + global $context, $scripturl, $txt; + + // The every helpful javascript! + echo ' + '; + + echo ' +
    '; + + // If we are not in single display mode show the subjects on the top! + if ($context['display_mode'] != 1) + { + template_subject_list(); + + echo ' +

    '; + } + + // Got some messages to display? + if ($context['get_pmessage']('message', true)) + { + // Show a few buttons if we are in conversation mode and outputting the first message. + if ($context['display_mode'] == 2) + { + // This bit uses info set in template_subject_list, so it's wrapped + // in an if just in case a mod or custom theme breaks it. + if (!empty($context['current_pm_subject'])) + { + echo ' +
    +
    +

    + ', $txt['conversation'], ' +

    +
    +
    +
    ', $context['current_pm_subject'], '
    +

    ', $txt['started_by'], ' ', $context['current_pm_author'], ', ', $context['current_pm_time'], '

    '; + } + else + { + echo ' +
    '; + } + + // Show the conversation buttons. + template_button_strip($context['conversation_buttons'], 'right'); + + echo ' +
    '; + } + + while ($message = $context['get_pmessage']('message')) + template_single_pm($message); + + if (empty($context['display_mode'])) + echo ' +
    + +
    + +
    +
    '; + + // Show a few buttons if we are in conversation mode and outputting the first message. + elseif ($context['display_mode'] == 2 && isset($context['conversation_buttons'])) + { + echo ' +
    '; + + template_button_strip($context['conversation_buttons'], 'right'); + + echo ' +
    '; + } + + echo ' +
    '; + } + + // Individual messages = buttom list! + if ($context['display_mode'] == 1) + { + template_subject_list(); + echo '
    '; + } + + echo ' + + '; +} + +/** + * Template for displaying a single personal message. + * + * @param array $message An array of information about the message to display. + */ +function template_single_pm($message) +{ + global $context, $scripturl, $txt, $settings, $options, $modSettings; + + echo ' +
    +
    +
    '; + + // Are there any custom fields above the member name? + if (!empty($message['custom_fields']['above_member'])) + { + echo ' +
    +
      '; + + foreach ($message['custom_fields']['above_member'] as $custom) + echo ' +
    • ', $custom['value'], '
    • '; + + echo ' +
    +
    '; + } + + echo ' +

    '; + + // Show online and offline buttons? + if (!empty($modSettings['onlineEnable']) && !$message['member']['is_guest']) + echo ' + '; + + // Custom fields BEFORE the username? + if (!empty($message['custom_fields']['before_member'])) + foreach ($message['custom_fields']['before_member'] as $custom) + echo ' + ', $custom['value'], ''; + + // Show a link to the member's profile. + echo ' + ', $message['member']['link']; + + // Custom fields AFTER the username? + if (!empty($message['custom_fields']['after_member'])) + foreach ($message['custom_fields']['after_member'] as $custom) + echo ' + ', $custom['value'], ''; + + echo ' +

    '; + + echo ' + +
    +
    +
    +
    +
    ', $message['subject'], '
    +
    + +
    +
    +
    + ', $message['body'], ' +
    +
    +
    '; + + // Add an extra line at the bottom if we have labels enabled. + if ($context['folder'] != 'sent' && !empty($context['currently_using_labels']) && $context['display_mode'] != 2) + { + echo ' +
    '; + + // Add the label drop down box. + if (!empty($context['currently_using_labels'])) + { + echo ' + + '; + } + echo ' +
    '; + } + + // Message options + template_quickbuttons($message['quickbuttons'], 'pm'); + + echo ' +
    + +
    '; + + // Are there any custom profile fields for above the signature? + if (!empty($message['custom_fields']['above_signature'])) + { + echo ' +
    +
      '; + + foreach ($message['custom_fields']['above_signature'] as $custom) + echo ' +
    • ', $custom['value'], '
    • '; + + echo ' +
    +
    '; + } + + // Show the member's signature? + if (!empty($message['member']['signature']) && empty($options['show_no_signatures']) && $context['signature_enabled']) + echo ' +
    + ', $message['member']['signature'], ' +
    '; + + // Are there any custom profile fields for below the signature? + if (!empty($message['custom_fields']['below_signature'])) + { + echo ' +
    +
      '; + + foreach ($message['custom_fields']['below_signature'] as $custom) + echo ' +
    • ', $custom['value'], '
    • '; + + echo ' +
    +
    '; + } + + echo ' +
    +
    +
    +
    '; +} + +/** + * Just list all the personal message subjects - to make templates easier. + */ +function template_subject_list() +{ + global $context, $settings, $txt, $scripturl; + + echo ' +
    +
    +

    + ', $context['folder'] == 'sent' ? $txt['sent_items'] : $context['current_label'], ' +

    +
    + + + + + + + + + + + '; + + if (!$context['show_delete']) + echo ' + + + '; + + while ($message = $context['get_pmessage']('subject')) + { + // Used for giving extra info in conversation view + if ($context['current_pm'] == $message['id']) + { + $context['current_pm_subject'] = $message['subject']; + $context['current_pm_time'] = $message['time']; + $context['current_pm_author'] = $message['member']['link']; + } + + echo ' + + + + + + + '; + } + + echo ' + +
    + + + ', $txt['date'], $context['sort_by'] == 'date' ? ' ' : '', ' + + ', $txt['subject'], $context['sort_by'] == 'subject' ? ' ' : '', ' + + ', ($context['from_or_to'] == 'from' ? $txt['from'] : $txt['pm_to']), $context['sort_by'] == 'name' ? ' ' : '', ' + + +
    ', $txt['pm_alert_none'], '
    + + ', $message['is_replied_to'] ? '' : '', ' + ', $message['time'], ' + ', ($context['display_mode'] != 0 && $context['current_pm'] == $message['id'] ? '*' : ''), '', $message['subject'], $message['is_unread'] ? ' ' . $txt['new'] . '' : '', ' + ', ($context['from_or_to'] == 'from' ? $message['member']['link'] : (empty($message['recipients']['to']) ? '' : implode(', ', $message['recipients']['to']))), ' ', $message['time'], ' + + ', ($context['from_or_to'] == 'from' ? $message['member']['link'] : (empty($message['recipients']['to']) ? '' : implode(', ', $message['recipients']['to']))), ' + + +
    +
    + +
     '; + + if ($context['show_delete']) + { + if (!empty($context['currently_using_labels']) && $context['folder'] != 'sent') + { + echo ' + + '; + } + + echo ' + '; + } + + echo ' +
    +
    '; +} + +/** + * The form for the PM search feature + */ +function template_search() +{ + global $context, $scripturl, $txt; + + if (!empty($context['search_errors'])) + echo ' +
    + ', implode('
    ', $context['search_errors']['messages']), ' +
    '; + + echo ' +
    +
    +
    +

    ', $txt['pm_search_title'], '

    +
    + '; + + // Do we have some labels setup? If so offer to search by them! + if ($context['currently_using_labels']) + { + echo ' +
    +
    + +
    +
      '; + + foreach ($context['search_labels'] as $label) + echo ' +
    • + +
    • '; + + echo ' +
    +
    +
    +
    + + + +
    +
    +
    '; + + // Some javascript for the advanced toggling + echo ' + '; + } + + echo ' +
    '; +} + +/** + * Displays results from a PM search + */ +function template_search_results() +{ + global $context, $txt; + + echo ' +
    +
    +

    ', $txt['pm_search_results'], '

    +
    +
    + ', sprintf($txt['pm_search_results_info'], $context['num_results'], sentence_list($context['search_in'])), ' +
    +
    + +
    '; + + // Complete results? + if (empty($context['search_params']['show_complete']) && !empty($context['personal_messages'])) + echo ' + + + + + + + + + '; + + // Print each message out... + foreach ($context['personal_messages'] as $message) + { + // Are we showing it all? + if (!empty($context['search_params']['show_complete'])) + template_single_pm($message); + + // Otherwise just a simple list! + // @todo No context at all of the search? + else + echo ' + + + + + '; + } + + // Finish off the page... + if (empty($context['search_params']['show_complete']) && !empty($context['personal_messages'])) + echo ' + +
    ', $txt['date'], '', $txt['subject'], '', $txt['from'], '
    ', $message['time'], '', $message['link'], '', $message['member']['link'], '
    '; + + // No results? + if (empty($context['personal_messages'])) + echo ' +
    +

    ', $txt['pm_search_none_found'], '

    +
    '; + + echo ' +
    + +
    '; + +} + +/** + * The form for sending a new PM + */ +function template_send() +{ + global $context, $options, $scripturl, $modSettings, $txt; + + // Show which messages were sent successfully and which failed. + if (!empty($context['send_log'])) + { + echo ' +
    +
    +

    ', $txt['pm_send_report'], '

    +
    +
    '; + + if (!empty($context['send_log']['sent'])) + foreach ($context['send_log']['sent'] as $log_entry) + echo ' + ', $log_entry, '
    '; + + if (!empty($context['send_log']['failed'])) + foreach ($context['send_log']['failed'] as $log_entry) + echo ' + ', $log_entry, '
    '; + + echo ' +
    +
    '; + } + + // Show the preview of the personal message. + echo ' + '; + + // Main message editing box. + echo ' +
    +
    +
    +

    + ', $txt['new_message'], ' +

    +
    +
    '; + + // If there were errors for sending the PM, show them. + echo ' +
    +
    +
    + ', $txt['error_while_submitting'], ' +
    +
    + ', empty($context['post_error']['messages']) ? '' : implode('
    ', $context['post_error']['messages']), ' +
    +
    +
    '; + + if (!empty($modSettings['drafts_pm_enabled'])) + echo ' + '; + + echo ' +
    '; + + // To and bcc. Include a button to search for members. + echo ' +
    + ', $txt['pm_to'], ': +
    '; + + // Autosuggest will be added by the JavaScript later on. + echo ' +
    + '; + + // A link to add BCC, only visible with JavaScript enabled. + echo ' + '; + + // A div that'll contain the items found by the autosuggest. + echo ' +
    '; + + echo ' +
    '; + + // This BCC row will be hidden by default if JavaScript is enabled. + echo ' +
    + ', $txt['pm_bcc'], ': +
    +
    + +
    +
    '; + + // The subject of the PM. + echo ' +
    + ', $txt['subject'], ': +
    +
    + +
    +
    '; + + // Show BBC buttons, smileys and textbox. + echo ' + ', template_control_richedit($context['post_box_name'], 'smileyBox_message', 'bbcBox_message'); + + // If the admin enabled the pm drafts feature, show a draft selection box + if (!empty($context['drafts_pm_save']) && !empty($context['drafts']) && !empty($options['drafts_show_saved_enabled'])) + { + echo ' +
    +

    + ', $txt['drafts_show'], ' +

    +
    +
    +
    +
    ', $txt['subject'], '
    +
    ', $txt['draft_saved_on'], '
    '; + + foreach ($context['drafts'] as $draft) + echo ' +
    ', $draft['link'], '
    +
    ', $draft['poster_time'], '
    '; + echo ' +
    +
    '; + } + + // Require an image to be typed to save spamming? + if ($context['require_verification']) + echo ' +
    + ', $txt['pm_visual_verification_label'], ': + ', template_control_verification($context['visual_verification_id'], 'all'), ' +
    '; + + // Send, Preview, spellcheck buttons. + echo ' + + ', template_control_richedit_buttons($context['post_box_name']), ' + + + + + + + +
    +
    +
    '; + + echo ' + '; + + // Show the message you're replying to. + if ($context['reply']) + echo ' +

    +
    +
    +

    ', $txt['subject'], ': ', $context['quoted_message']['subject'], '

    +
    +
    +
    + ', $txt['on'], ': ', $context['quoted_message']['time'], ' + ', $txt['from'], ': ', $context['quoted_message']['member']['name'], ' +
    +
    + ', $context['quoted_message']['body'], ' +
    +
    '; + + echo ' + '; +} + +/** + * This template asks the user whether they wish to empty out their folder/messages. + */ +function template_ask_delete() +{ + global $context, $scripturl, $txt; + + echo ' +
    +
    +

    + ', ($context['delete_all'] ? $txt['delete_message'] : $txt['delete_all']), ' +

    +
    +
    +

    ', $txt['delete_all_confirm'], '

    +
    + ', $txt['yes'], ' - ', $txt['no'], ' +
    '; +} + +/** + * This template asks the user what messages they want to prune. + */ +function template_prune() +{ + global $context, $scripturl, $txt; + + echo ' +
    +
    +

    ', $txt['pm_prune'], '

    +
    +
    +
    +

    ', $txt['pm_prune_desc1'], ' ', $txt['pm_prune_desc2'], '

    + + +
    +
    +
    +
    +

    ', $txt['pm_remove_all'], '

    + + +
    +
    '; +} + +/** + * Here we allow the user to setup labels, remove labels and change rules for labels (i.e, do quite a bit) + */ +function template_labels() +{ + global $context, $scripturl, $txt; + + echo ' +
    +
    +
    +

    ', $txt['pm_manage_labels'], '

    +
    +
    + ', $txt['pm_labels_desc'], ' +
    + + + + + + + + '; + if (count($context['labels']) < 2) + echo ' + + + '; + else + { + foreach ($context['labels'] as $label) + { + if ($label['id'] == -1) + continue; + + echo ' + + + + '; + } + } + echo ' + +
    + ', $txt['pm_label_name'], ' + '; + + if (count($context['labels']) > 2) + echo ' + '; + + echo ' +
    ', $txt['pm_labels_no_exist'], '
    + +
    '; + + if (!count($context['labels']) < 2) + echo ' +
    + + +
    '; + + echo ' + +
    +
    +
    +
    +

    ', $txt['pm_label_add_new'], '

    +
    +
    +
    +
    + : +
    +
    + +
    +
    + +
    + +
    +
    '; +} + +/** + * Template for reporting a personal message. + */ +function template_report_message() +{ + global $context, $txt, $scripturl; + + echo ' +
    + +
    + ', $txt['pm_report_desc'], ' +
    +
    +
    +

    ', $txt['pm_report_title'], '

    +
    +
    +
    '; + + // If there is more than one admin on the forum, allow the user to choose the one they want to direct to. + // @todo Why? + if ($context['admin_count'] > 1) + { + echo ' +
    + ', $txt['pm_report_admins'], ': +
    +
    + +
    '; + } + + echo ' +
    + ', $txt['pm_report_reason'], ': +
    +
    + +
    +
    +
    + +
    +
    + +
    '; +} + +/** + * Little template just to say "Yep, it's been submitted" + */ +function template_report_message_complete() +{ + global $context, $txt, $scripturl; + + echo ' +
    +
    +

    ', $txt['pm_report_title'], '

    +
    +
    +

    ', $txt['pm_report_done'], '

    + ', $txt['pm_report_return'], ' +
    '; +} + +/** + * Manage rules. + */ +function template_rules() +{ + global $context, $txt, $scripturl; + + echo ' +
    +
    +
    +

    ', $txt['pm_manage_rules'], '

    +
    +
    + ', $txt['pm_manage_rules_desc'], ' +
    + + + + + + + + '; + + if (empty($context['rules'])) + echo ' + + + '; + + foreach ($context['rules'] as $rule) + echo ' + + + + '; + + echo ' + +
    + ', $txt['pm_rule_title'], ' + '; + + if (!empty($context['rules'])) + echo ' + '; + + echo ' +
    + ', $txt['pm_rules_none'], ' +
    + ', $rule['name'], ' + + +
    +
    + ', $txt['pm_add_rule'], ''; + + if (!empty($context['rules'])) + echo ' + [', $txt['pm_apply_rules'], ']'; + + if (!empty($context['rules'])) + echo ' + + '; + + echo ' +
    +
    '; + +} + +/** + * Template for adding/editing a rule. + */ +function template_add_rule() +{ + global $context, $txt, $scripturl; + + echo ' + '; + + echo ' +
    +
    +
    +

    ', $context['rid'] == 0 ? $txt['pm_add_rule'] : $txt['pm_edit_rule'], '

    +
    +
    +
    +
    + ', $txt['pm_rule_name'], ':
    + ', $txt['pm_rule_name_desc'], ' +
    +
    + +
    +
    +
    + ', $txt['pm_rule_criteria'], ''; + + // Add a dummy criteria to allow expansion for none js users. + $context['rule']['criteria'][] = array('t' => '', 'v' => ''); + + // For each criteria print it out. + $isFirst = true; + foreach ($context['rule']['criteria'] as $k => $criteria) + { + if (!$isFirst && $criteria['t'] == '') + echo '
    '; + + elseif (!$isFirst) + echo '
    '; + + echo ' + + + + + + + '; + + // If this is the dummy we add a means to hide for non js users. + if ($isFirst) + $isFirst = false; + + elseif ($criteria['t'] == '') + echo '
    '; + } + + echo ' +
    + +

    + ', $txt['pm_rule_logic'], ': + +
    +
    + ', $txt['pm_rule_actions'], ''; + + // As with criteria - add a dummy action for "expansion". + $context['rule']['actions'][] = array('t' => '', 'v' => ''); + + // Print each action. + $isFirst = true; + foreach ($context['rule']['actions'] as $k => $action) + { + if (!$isFirst && $action['t'] == '') + echo '
    '; + elseif (!$isFirst) + echo '
    '; + + echo ' + + + + '; + + if ($isFirst) + $isFirst = false; + + elseif ($action['t'] == '') + echo '
    '; + } + + echo ' +
    + +
    +
    +
    +

    ', $txt['pm_rule_description'], '

    +
    +
    +
    ', $txt['pm_rule_js_disabled'], '
    +
    +
    + + +
    +
    +
    '; + + // Now setup all the bits! + echo ' + '; +} + +/** + * Template for showing all of a user's PM drafts. + */ +function template_showPMDrafts() +{ + global $context, $scripturl, $txt; + + echo ' +
    +
    +

    + ', $txt['drafts_show'], ' +

    +
    +

    + ', $txt['drafts_show_desc'], ' +

    '; + + // No drafts? Just show an informative message. + if (empty($context['drafts'])) + echo ' +
    + ', $txt['draft_none'], ' +
    '; + else + { + echo ' +
    + +
    '; + + // For every draft to be displayed, give it its own div, and show the important details of the draft. + foreach ($context['drafts'] as $draft) + { + echo ' +
    +
    #', $draft['counter'], '
    +
    +
    + ', $draft['subject'], ' +
    +
    +
    ', $txt['pm_to'], ': ', implode(', ', $draft['recipients']['to']), '
    '; + + if(!empty($draft['recipients']['bcc'])) + echo' +
    ', $txt['pm_bcc'], ': ', implode(', ', $draft['recipients']['bcc']), '
    '; + + echo ' +
    +
    + ', $txt['draft_saved_on'], ': ', sprintf($txt['draft_days_ago'], $draft['age']), (!empty($draft['remaining']) ? ', ' . sprintf($txt['draft_retain'], $draft['remaining']) : ''), ' +
    +
    +
    + ', $draft['body'], ' +
    '; + + // Draft buttons + template_quickbuttons($draft['quickbuttons'], 'pm_drafts'); + + echo ' +
    '; + } + + // Show page numbers. + echo ' +
    + +
    '; + } +} + +?> diff --git a/Poll.template.php b/Poll.template.php new file mode 100644 index 0000000..f97d629 --- /dev/null +++ b/Poll.template.php @@ -0,0 +1,163 @@ + + var pollOptionNum = 0; + var pollOptionId = ', $context['last_choice_id'], '; + + function addPollOption() + { + if (pollOptionNum == 0) + { + for (var i = 0; i < document.forms.postmodify.elements.length; i++) + if (document.forms.postmodify.elements[i].id.substr(0, 8) == "options-") + pollOptionNum++; + } + pollOptionNum++ + pollOptionId++ + + setOuterHTML(document.getElementById("pollMoreOptions"), \'
    :

    '; + + if (!empty($context['poll_error']['messages'])) + echo ' +

    +
    +
    + ', $context['is_edit'] ? $txt['error_while_editing_poll'] : $txt['error_while_adding_poll'], ': +
    +
    + ', empty($context['poll_error']['messages']) ? '' : implode('
    ', $context['poll_error']['messages']), ' +
    +
    +
    '; + + // Start the main poll form. + echo ' +
    +
    +
    +
    +

    ', $context['page_title'], '

    +
    '; + + echo ' +
    +
    + +
    + ', $txt['poll_question'], ': +
    +
    ', $txt['poll_question'], ':
    +
    '; + + foreach ($context['choices'] as $choice) + { + echo ' +
    + : +
    +
    + '; + + // Does this option have a vote count yet, or is it new? + if ($choice['votes'] != -1) + echo ' (', $choice['votes'], ' ', $txt['votes'], ')'; + + echo ' +
    '; + } + + echo ' +

    +
    + (', $txt['poll_add_option'], ') +
    +
    + ', $txt['poll_options'], ': +
    '; + + if ($context['can_moderate_poll']) + { + echo ' +
    + +
    +
    + +
    +
    +
    + ', $txt['poll_run_limit'], ' +
    +
    + ', $txt['days_word'], ' +
    +
    + +
    +
    + +
    '; + + if ($context['poll']['guest_vote_allowed']) + echo ' +
    + +
    +
    + +
    '; + } + + echo ' +
    + ', $txt['poll_results_visibility'], ': +
    +
    +
    +
    + +
    +
    +
    '; + + // If this is an edit, we can allow them to reset the vote counts. + if ($context['is_edit']) + echo ' +
    + ', $txt['reset_votes'], ' + ' . $txt['reset_votes_check'] . ' +
    '; + echo ' + +
    +
    + + +
    +
    +
    + '; +} + +?> diff --git a/Post.template.php b/Post.template.php new file mode 100644 index 0000000..e0c9a30 --- /dev/null +++ b/Post.template.php @@ -0,0 +1,1231 @@ +'; + + // When using Go Back due to fatal_error, allow the form to be re-submitted with changes. + if (isBrowser('is_firefox')) + echo ' + window.addEventListener("pageshow", reActivate, false);'; + + // Start with message icons - and any missing from this theme. + echo ' + var icon_urls = {'; + + foreach ($context['icons'] as $icon) + echo ' + \'', $icon['value'], '\': \'', $icon['url'], '\'', $icon['is_last'] ? '' : ','; + + echo ' + };'; + + // If this is a poll - use some javascript to ensure the user doesn't create a poll with illegal option combinations. + if ($context['make_poll']) + echo ' + var pollOptionNum = 0, pollTabIndex; + var pollOptionId = ', $context['last_choice_id'], '; + function addPollOption() + { + if (pollOptionNum == 0) + { + for (var i = 0, n = document.forms.postmodify.elements.length; i < n; i++) + if (document.forms.postmodify.elements[i].id.substr(0, 8) == \'options-\') + { + pollOptionNum++; + pollTabIndex = document.forms.postmodify.elements[i].tabIndex; + } + } + pollOptionNum++ + pollOptionId++ + + setOuterHTML(document.getElementById(\'pollMoreOptions\'), ', JavaScriptEscape('
    :

    '), '); + }'; + + // If we are making a calendar event we want to ensure we show the current days in a month etc... this is done here. + if ($context['make_event']) + echo ' + var monthLength = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];'; + + // End of the javascript, start the form and display the link tree. + echo ' + +
    '; + + // If the user wants to see how their message looks - the preview section is where it's at! + echo ' + +
    '; + + if ($context['make_event'] && (!$context['event']['new'] || !empty($context['current_board']))) + echo ' + '; + + // Start the main table. + echo ' +
    +
    +

    ', $context['page_title'], '

    +
    +
    +
    ', isset($context['current_topic']) ? ' + ' : ''; + + // If an error occurred, explain what happened. + echo ' + '; + + // If this won't be approved let them know! + if (!$context['becomes_approved']) + echo ' +
    + ', $txt['wait_for_approval'], ' + +
    '; + + // If it's locked, show a message to warn the replier. + if (!empty($context['locked'])) + echo ' +
    + ', $txt['topic_locked_no_reply'], ' +
    '; + + if (!empty($modSettings['drafts_post_enabled'])) + echo ' + '; + + // The post header... important stuff + template_post_header(); + + // Are you posting a calendar event? + if ($context['make_event']) + { + // Note to theme writers: The JavaScripts expect the input fields for the start and end dates & times to be contained in a wrapper element with the id "event_time_input" + echo ' +
    +
    +
    + ', $txt['calendar_event_options'], ' + +
    +
    + ', $txt['calendar_event_title'], ' + +
    +
    +
    +
    +
    + ', $txt['start'], ' + + +
    +
    + ', $txt['end'], ' + + +
    +
    +
    +
    + + +
    +
    + ', $txt['calendar_timezone'], ' + +
    +
    +
    +
    +
    + ', $txt['location'], ' + +
    +
    +
    +
    '; + } + + // If this is a poll then display all the poll options! + if ($context['make_poll']) + { + echo ' +
    +
    +
    + ', $txt['poll_question'], ' +
    +
    ', $txt['poll_question'], '
    +
    + +
    '; + + // Loop through all the choices and print them out. + foreach ($context['choices'] as $choice) + echo ' +
    + : +
    +
    + +
    '; + + echo ' +

    +
    + (', $txt['poll_add_option'], ') +
    +
    + ', $txt['poll_options'], ' +
    +
    + +
    +
    + +
    +
    +
    + ', $txt['poll_run_limit'], ' +
    +
    + ', $txt['days_word'], ' +
    +
    + +
    +
    + +
    '; + + if ($context['poll_options']['guest_vote_enabled']) + echo ' +
    + +
    +
    + +
    '; + + echo ' +
    + ', $txt['poll_results_visibility'], ': +
    +
    +
    +
    + +
    +
    +
    +
    '; + } + + // Show the actual posting area... + echo ' + ', template_control_richedit($context['post_box_name'], 'smileyBox_message', 'bbcBox_message'); + + // If we're editing and displaying edit details, show a box where they can say why + if (isset($context['editing']) && $modSettings['show_modify']) + echo ' +
    +
    + ', $txt['reason_for_edit'], ': +
    +
    + +
    +
    '; + + // If this message has been edited in the past - display when it was. + if (isset($context['last_modified'])) + echo ' +
    + ', $context['last_modified_text'], ' +
    '; + + // If the admin has enabled the hiding of the additional options - show a link and image for it. + if (!empty($modSettings['additional_options_collapsable'])) + echo ' +
    + ', $context['can_post_attachment'] ? $txt['post_additionalopt_attach'] : $txt['post_additionalopt'], ' +
    '; + + echo ' +
    '; + + // Display the checkboxes for all the standard options - if they are available to the user! + echo ' +
    +
      + ', $context['can_notify'] ? '
    • ' : '', ' + ', $context['can_lock'] ? '
    • ' : '', ' +
    • + ', $context['can_sticky'] ? '
    • ' : '', ' +
    • ', ' + ', $context['can_move'] ? '
    • ' : '', ' + ', $context['can_announce'] && $context['is_first_post'] ? '
    • ' : '', ' + ', $context['show_approval'] ? '
    • ' : '', ' +
    +
    '; + + // If this post already has attachments on it - give information about them. + if (!empty($context['current_attachments'])) + { + echo ' +
    +
    + ', $txt['attachments'], ': +
    +
    + + ', $txt['uncheck_unwatchd_attach'], ': +
    '; + + foreach ($context['current_attachments'] as $attachment) + echo ' +
    + +
    '; + + echo ' +
    '; + + if (!empty($context['files_in_session_warning'])) + echo ' +
    ', $context['files_in_session_warning'], '
    '; + } + + // Is the user allowed to post any additional ones? If so give them the boxes to do it! + if ($context['can_post_attachment']) + { + // Print dropzone UI. + echo ' +
    +
    + ', $txt['attachments'], ': +
    +
    +
    + +
    +
    +
    + + + + +
    +
    + +
    +
    + + +
    +
    + + +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    '; + + echo ' +
    +
    +
    + +
    +
    +
    +
    + (', $txt['clean_attach'], ')'; + + if (!empty($modSettings['attachmentSizeLimit'])) + echo ' + '; + + echo ' +
    +
    +
    '; + + // Add any template changes for an alternative upload system here. + call_integration_hook('integrate_upload_template'); + + echo ' +
    '; + + // Show some useful information such as allowed extensions, maximum size and amount of attachments allowed. + if (!empty($modSettings['attachmentCheckExtensions'])) + echo ' + ', $txt['allowed_types'], ': ', $context['allowed_extensions'], '
    '; + + if (!empty($context['attachment_restrictions'])) + echo ' + ', $txt['attach_restrictions'], ' ', implode(', ', $context['attachment_restrictions']), '
    '; + + if ($context['num_allowed_attachments'] <= count($context['current_attachments'])) + echo ' + ', $txt['attach_limit_nag'], '
    '; + + if (!$context['can_post_attachment_unapproved']) + echo ' + ', $txt['attachment_requires_approval'], '', '
    '; + + echo ' +
    +
    '; + } + + echo ' +
    '; + + // If the admin enabled the drafts feature, show a draft selection box + if (!empty($modSettings['drafts_post_enabled']) && !empty($context['drafts']) && !empty($modSettings['drafts_show_saved_enabled']) && !empty($options['drafts_show_saved_enabled'])) + { + echo ' +
    +

    + ', $txt['drafts_show'], ' +

    +
    +
    +
    +
    ', $txt['subject'], '
    +
    ', $txt['draft_saved_on'], '
    '; + + foreach ($context['drafts'] as $draft) + echo ' +
    ', $draft['link'], '
    +
    ', $draft['poster_time'], '
    '; + echo ' +
    +
    '; + } + + // Is visual verification enabled? + if ($context['require_verification']) + echo ' +
    + + ', $txt['verification'], ': + + ', template_control_verification($context['visual_verification_id'], 'all'), ' +
    '; + + // Finally, the submit buttons. + echo ' + + ', template_control_richedit_buttons($context['post_box_name']); + + // Option to delete an event if user is editing one. + if ($context['make_event'] && !$context['event']['new']) + echo ' + '; + + echo ' + +
    +
    +
    +
    '; + + // Assuming this isn't a new topic pass across the last message id. + if (isset($context['topic_last_message'])) + echo ' + '; + + echo ' + + + +
    '; + + echo ' + '; + + // If the user is replying to a topic show the previous posts. + if (isset($context['previous_posts']) && count($context['previous_posts']) > 0) + { + echo ' +
    +
    +
    +

    ', $txt['topic_summary'], '

    +
    + '; + + $ignored_posts = array(); + foreach ($context['previous_posts'] as $post) + { + $ignoring = false; + if (!empty($post['is_ignored'])) + $ignored_posts[] = $ignoring = $post['id']; + + echo ' +
    +
    +
    +
    + ', $txt['posted_by'], ' ', $post['poster'], ' +
    +  - ', $post['time'], ' +
    '; + + if ($ignoring) + echo ' +
    + ', $txt['ignoring_user'], ' + +
    '; + + echo ' +
    ', $post['message'], '
    '; + + if ($context['can_quote']) + echo ' + '; + + echo ' +
    +
    '; + } + + echo ' +
    +
    + '; + } +} + +/** + * The template for the spellchecker. + */ +function template_spellcheck() +{ + global $context, $settings, $txt, $modSettings; + + // The style information that makes the spellchecker look... like the forum hopefully! + echo ' + + + + ', $txt['spell_check'], ' + + + + + + + + +
    +
     
    + + + + + +
    + ', $txt['spellcheck_change_to'], '
    + +
    + ', $txt['spellcheck_suggest'], '
    + +
    +
    + + + + +
    +
    + +'; +} + +/** + * The template for the AJAX quote feature + */ +function template_quotefast() +{ + global $context, $settings, $txt, $modSettings; + + echo ' + + + + ', $txt['retrieving_quote'], ' + + + + ', $txt['retrieving_quote'], ' + + + +'; +} + +/** + * The form for sending out an announcement + */ +function template_announce() +{ + global $context, $txt, $scripturl; + + echo ' +
    +
    +
    +
    +

    ', $txt['announce_title'], '

    +
    +
    + ', $txt['announce_desc'], ' +
    +
    +

    + ', $txt['announce_this_topic'], ' ', $context['topic_subject'], ' +

    +
      '; + + foreach ($context['groups'] as $group) + echo ' +
    • + (', $group['member_count'], ') +
    • '; + + echo ' +
    • + +
    • +
    +
    +
    + + + + + +
    +
    +
    +
    +
    +
    '; +} + +/** + * The confirmation/progress page, displayed after the admin has clicked the button to send the announcement. + */ +function template_announcement_send() +{ + global $context, $txt, $scripturl; + + echo ' +
    +
    +
    +

    + ', $txt['announce_sending'], ' ', $context['topic_subject'], ' +

    +
    + ', $context['percentage_done'], '% ', $txt['announce_done'], ' +
    +
    +
    +
    + + + + + + + +
    +
    +
    +
    +
    +
    + '; +} + +/** + * Prints the input fields in the form's header (subject, message icon, guest name & email, etc.) + * + * Mod authors can use the 'integrate_post_end' hook to modify or add to these (see Post.php). + * + * Theme authors can customize the output in a couple different ways: + * 1. Change specific values in the $context['posting_fields'] array. + * 2. Add an 'html' element to the 'label' and/or 'input' elements of the field they want to + * change. This should contain the literal HTML string to be printed. + * + * See the documentation in Post.php for more info on the $context['posting_fields'] array. + */ +function template_post_header() +{ + global $context, $txt; + + // Sanity check: submitting the form won't work without at least a subject field + if (empty($context['posting_fields']['subject']) || !is_array($context['posting_fields']['subject'])) + { + $context['posting_fields']['subject'] = array( + 'label' => array('html' => ''), + 'input' => array('html' => '') + ); + } + + // THEME AUTHORS: Above this line is a great place to make customizations to the posting_fields array + + // Start printing the header + echo ' +
    '; + + foreach ($context['posting_fields'] as $pfid => $pf) + { + // We need both a label and an input + if (empty($pf['label']) || empty($pf['input'])) + continue; + + // The labels are pretty simple... + echo ' +
    '; + + // Any leading HTML before the label + if (!empty($pf['label']['before'])) + echo ' + ', $pf['label']['before']; + + if (!empty($pf['label']['html'])) + echo $pf['label']['html']; + else + echo ' + ', $pf['label']['text'], ''; + + // Any trailing HTML after the label + if (!empty($pf['label']['after'])) + echo ' + ', $pf['label']['after']; + + echo ' +
    '; + + // Here's where the fun begins... + echo ' +
    '; + + // Any leading HTML before the main input + if (!empty($pf['input']['before'])) + echo ' + ', $pf['input']['before']; + + // If there is a literal HTML string already defined, just print it. + if (!empty($pf['input']['html'])) + { + echo $pf['input']['html']; + } + // Simple text inputs and checkboxes + elseif (in_array($pf['input']['type'], array('text', 'password', 'color', 'date', 'datetime-local', 'email', 'month', 'number', 'range', 'tel', 'time', 'url', 'week', 'checkbox'))) + { + echo ' + $value) + { + if (is_bool($value)) + echo $value ? ' ' . $attribute : ''; + else + echo ' ', $attribute, '="', $value, '"'; + } + } + + echo ' tabindex="', $context['tabindex']++, '">'; + } + // textarea + elseif ($pf['input']['type'] === 'textarea') + { + echo ' + $value) + { + if ($attribute === 'value') + continue; + elseif (is_bool($value)) + echo $value ? ' ' . $attribute : ''; + else + echo ' ', $attribute, '="', $value, '"'; + } + } + + echo ' tabindex="', $context['tabindex']++, '">', !empty($pf['input']['attributes']['value']) ? $pf['input']['attributes']['value'] : '', ''; + } + // Select menus are more complicated + elseif ($pf['input']['type'] === 'select' && is_array($pf['input']['options'])) + { + // The select element itself + echo ' + $value) + { + if (is_bool($value)) + echo $value ? ' ' . $attribute : ''; + else + echo ' ', $attribute, '="', $value, '"'; + } + } + + echo ' tabindex="', $context['tabindex']++, '">'; + + // The options + foreach ($pf['input']['options'] as $optlabel => $option) + { + // An option containing options is an optgroup + if (!empty($option['options']) && is_array($option['options'])) + { + echo ' + $value) + { + if ($attribute === 'options') + continue; + elseif (is_bool($value)) + echo $value ? ' ' . $attribute : ''; + else + echo ' ', $attribute, '="', $value, '"'; + } + } + + echo '>'; + + foreach ($option['options'] as $grouped_optlabel => $grouped_option) + { + echo ' + $value) + { + if (is_bool($value)) + echo $value ? ' ' . $attribute : ''; + else + echo ' ', $attribute, '="', $value, '"'; + } + + echo '>', $grouped_option['label'], ''; + + } + + echo ' + '; + } + // Simple option + else + { + echo ' + $value) + { + if (is_bool($value)) + echo $value ? ' ' . $attribute : ''; + else + echo ' ', $attribute, '="', $value, '"'; + } + + echo '>', $optlabel, ''; + } + } + + // Close the select element + echo ' + '; + } + // Radio_select makes a div with some radio buttons in it + elseif ($pf['input']['type'] === 'radio_select' && is_array($pf['input']['options'])) + { + echo ' + $value) + { + if ($attribute === 'name') + continue; + elseif (is_bool($value)) + echo $value ? ' ' . $attribute : ''; + else + echo ' ', $attribute, '="', $value, '"'; + } + } + + echo '>'; + + foreach ($pf['input']['options'] as $optlabel => $option) + { + echo ' + '; + } + + echo ' +
    '; + } + + // Any trailing HTML after the main input + if (!empty($pf['input']['after'])) + echo ' + ', $pf['input']['after']; + + echo ' + '; + } + + echo ' + '; +} + +?> diff --git a/Printpage.template.php b/Printpage.template.php new file mode 100644 index 0000000..a96b1de --- /dev/null +++ b/Printpage.template.php @@ -0,0 +1,238 @@ + + + + + + + ', $txt['print_page'], ' - ', $context['topic_subject'], ' + + + '; + + template_print_options(); + + echo ' +

    ', $context['forum_name_html_safe'], '

    +

    ', $context['category_name'], ' => ', (!empty($context['parent_boards']) ? implode(' => ', $context['parent_boards']) . ' => ' : ''), $context['board_name'], ' => ', $txt['topic_started'], ': ', $context['poster_name'], ' ', $txt['search_on'], ' ', $context['post_time'], '

    +
    '; +} + +/** + * The main page. This shows the relevant info in a printer-friendly format + */ +function template_main() +{ + global $context, $options, $txt, $scripturl, $topic; + + if (!empty($context['poll'])) + { + echo ' +
    ', $txt['poll'], ' +
    ', $txt['poll_question'], ': ', $context['poll']['question'], ''; + + $options = 1; + foreach ($context['poll']['options'] as $option) + echo ' +
    ', $txt['option'], ' ', $options++, ': ', $option['option'], ' + ', $context['allow_poll_view'] ? $txt['votes'] . ': ' . $option['votes'] . '' : '', ' +
    '; + + echo ' +
    '; + } + + foreach ($context['posts'] as $post) + { + echo ' +
    + ', $txt['title'], ': ', $post['subject'], '
    + ', $txt['post_by'], ': ', $post['member'], ' ', $txt['search_on'], ' ', $post['time'], ' +
    +
    + ', $post['body']; + + // Show attachment images + if (isset($_GET['images']) && !empty($context['printattach'][$post['id_msg']])) + { + echo ' +
    '; + + foreach ($context['printattach'][$post['id_msg']] as $attach) + echo ' + '; + } + + echo ' +
    '; + } +} + +/** + * The footer. + */ +function template_print_below() +{ + echo ' +
    '; + + template_print_options(); + + echo ' + + +'; +} + +/** + * Displays the print page options + */ +function template_print_options() +{ + global $scripturl, $topic, $txt; + + $url_text = $scripturl . '?action=printpage;topic=' . $topic . '.0'; + $url_images = $url_text . ';images'; + + echo ' + '; +} + +?> \ No newline at end of file diff --git a/Profile.template.php b/Profile.template.php new file mode 100644 index 0000000..bf520d3 --- /dev/null +++ b/Profile.template.php @@ -0,0 +1,3508 @@ + + disableAutoComplete(); + '; + + // If an error occurred while trying to save previously, give the user a clue! + echo ' + ', template_error_message(); + + // If the profile was update successfully, let the user know this. + if (!empty($context['profile_updated'])) + echo ' +
    + ', $context['profile_updated'], ' +
    '; +} + +/** + * Template for any HTML needed below the profile (closing off divs/tables, etc.) + */ +function template_profile_below() +{ +} + +/** + * Template for showing off the spiffy popup of the menu + */ +function template_profile_popup() +{ + global $context, $scripturl; + + // Unlike almost every other template, this is designed to be included into the HTML directly via $().load() + + echo ' + + + '; +} + +/** + * The "popup" showing the user's alerts + */ +function template_alerts_popup() +{ + global $context, $txt, $scripturl; + + // Unlike almost every other template, this is designed to be included into the HTML directly via $().load() + echo ' + +
    '; + + if (empty($context['unread_alerts'])) + template_alerts_all_read(); + + else + { + foreach ($context['unread_alerts'] as $id_alert => $details) + { + echo ' + <', !$details['show_links'] ? 'a href="' . $scripturl . '?action=profile;area=showalerts;alert=' . $id_alert . '" onclick="this.classList.add(\'alert_read\')"' : 'div', ' class="unread_notify"> +
    + ', empty($details['sender']['avatar']['image']) ? '' : $details['sender']['avatar']['image'] . ' + ', $details['icon'], ' +
    +
    + ', $details['text'], ' - ', $details['time'], ' +
    + '; + } + } + + echo ' +
    + '; +} + +/** + * A simple template to say "You don't have any unread alerts". + */ +function template_alerts_all_read() +{ + global $txt; + + echo '
    ', $txt['alerts_no_unread'], '
    '; +} + +/** + * This template displays a user's details without any option to edit them. + */ +function template_summary() +{ + global $context, $settings, $scripturl, $modSettings, $txt; + + // Display the basic information about the user + echo ' +
    +
    '; + + // Are there any custom profile fields for above the name? + if (!empty($context['print_custom_fields']['above_member'])) + { + $fields = ''; + foreach ($context['print_custom_fields']['above_member'] as $field) + if (!empty($field['output_html'])) + $fields .= ' +
  • ' . $field['output_html'] . '
  • '; + + if (!empty($fields)) + echo ' +
    +
      ', $fields, ' +
    +
    '; + } + + echo ' +
    +

    '; + + if (!empty($context['print_custom_fields']['before_member'])) + foreach ($context['print_custom_fields']['before_member'] as $field) + if (!empty($field['output_html'])) + echo ' + ', $field['output_html'], ''; + + echo ' + ', $context['member']['name']; + + if (!empty($context['print_custom_fields']['after_member'])) + foreach ($context['print_custom_fields']['after_member'] as $field) + if (!empty($field['output_html'])) + echo ' + ', $field['output_html'], ''; + + echo ' + ', (!empty($context['member']['group']) ? $context['member']['group'] : $context['member']['post_group']), ' +

    +
    + ', $context['member']['avatar']['image']; + + // Are there any custom profile fields for below the avatar? + if (!empty($context['print_custom_fields']['below_avatar'])) + { + $fields = ''; + foreach ($context['print_custom_fields']['below_avatar'] as $field) + if (!empty($field['output_html'])) + $fields .= ' +
  • ' . $field['output_html'] . '
  • '; + + if (!empty($fields)) + echo ' +
    +
      ', $fields, ' +
    +
    '; + } + + echo ' +
      '; + + // Email is only visible if it's your profile or you have the moderate_forum permission + if ($context['member']['show_email']) + echo ' +
    • '; + + // Don't show an icon if they haven't specified a website. + if ($context['member']['website']['url'] !== '' && !isset($context['disabled_fields']['website'])) + echo ' +
    • ', ($settings['use_image_buttons'] ? '' : $txt['www']), '
    • '; + + // Are there any custom profile fields as icons? + if (!empty($context['print_custom_fields']['icons'])) + { + foreach ($context['print_custom_fields']['icons'] as $field) + if (!empty($field['output_html'])) + echo ' +
    • ', $field['output_html'], '
    • '; + } + + echo ' +
    + '; + + // Can they add this member as a buddy? + if (!empty($context['can_have_buddy']) && !$context['user']['is_owner']) + echo ' +
    + ', $txt['buddy_' . ($context['member']['is_buddy'] ? 'remove' : 'add')], ''; + + echo ' +
    '; + + if (!$context['user']['is_owner'] && $context['can_send_pm']) + echo ' + ', $txt['profile_sendpm_short'], ''; + + echo ' + ', $txt['showPosts'], ''; + + if ($context['user']['is_owner'] && !empty($modSettings['drafts_post_enabled'])) + echo ' + ', $txt['drafts_show'], ''; + + echo ' + ', $txt['statPanel'], ''; + + // Are there any custom profile fields for bottom? + if (!empty($context['print_custom_fields']['bottom_poster'])) + { + $fields = ''; + foreach ($context['print_custom_fields']['bottom_poster'] as $field) + if (!empty($field['output_html'])) + $fields .= ' +
  • ' . $field['output_html'] . '
  • '; + + if (!empty($fields)) + echo ' +
    +
      ', $fields, ' +
    +
    '; + } + + echo ' +
    + +
    +
    '; + + if ($context['user']['is_owner'] || $context['user']['is_admin']) + echo ' +
    ', $txt['username'], ':
    +
    ', $context['member']['username'], '
    '; + + if (!isset($context['disabled_fields']['posts'])) + echo ' +
    ', $txt['profile_posts'], ':
    +
    ', $context['member']['posts'], ' (', $context['member']['posts_per_day'], ' ', $txt['posts_per_day'], ')
    '; + + if ($context['member']['show_email']) + echo ' +
    ', $txt['email'], ':
    +
    ', $context['member']['email'], '
    '; + + if (!empty($modSettings['titlesEnable']) && !empty($context['member']['title'])) + echo ' +
    ', $txt['custom_title'], ':
    +
    ', $context['member']['title'], '
    '; + + if (!empty($context['member']['blurb'])) + echo ' +
    ', $txt['personal_text'], ':
    +
    ', $context['member']['blurb'], '
    '; + + echo ' +
    ', $txt['age'], ':
    +
    ', $context['member']['age'] . ($context['member']['today_is_birthday'] ? '   ' : ''), '
    '; + + echo ' +
    '; + + // Any custom fields for standard placement? + if (!empty($context['print_custom_fields']['standard'])) + { + $fields = array(); + + foreach ($context['print_custom_fields']['standard'] as $field) + if (!empty($field['output_html'])) + $fields[] = $field; + + if (count($fields) > 0) + { + echo ' +
    '; + + foreach ($fields as $field) + echo ' +
    ', $field['name'], ':
    +
    ', $field['output_html'], '
    '; + + echo ' +
    '; + } + } + + echo ' +
    '; + + // Can they view/issue a warning? + if ($context['can_view_warning'] && $context['member']['warning']) + { + echo ' +
    ', $txt['profile_warning_level'], ':
    +
    + ', $context['member']['warning'], '%'; + + // Can we provide information on what this means? + if (!empty($context['warning_status'])) + echo ' + (', $context['warning_status'], ')'; + + echo ' +
    '; + } + + // Is this member requiring activation and/or banned? + if (!empty($context['activate_message']) || !empty($context['member']['bans'])) + { + // If the person looking at the summary has permission, and the account isn't activated, give the viewer the ability to do it themselves. + if (!empty($context['activate_message'])) + echo ' +
    + ', $context['activate_message'], ' (', $context['activate_link_text'], ') +
    '; + + // If the current member is banned, show a message and possibly a link to the ban. + if (!empty($context['member']['bans'])) + { + echo ' +
    + ', $txt['user_is_banned'], ' [' . $txt['view_ban'] . '] +
    + '; + } + } + + echo ' +
    ', $txt['date_registered'], ':
    +
    ', $context['member']['registered'], '
    '; + + // If the person looking is allowed, they can check the members IP address and hostname. + if ($context['can_see_ip']) + { + if (!empty($context['member']['ip'])) + echo ' +
    ', $txt['ip'], ':
    +
    ', $context['member']['ip'], '
    '; + + if (empty($modSettings['disableHostnameLookup']) && !empty($context['member']['ip'])) + echo ' +
    ', $txt['hostname'], ':
    +
    ', $context['member']['hostname'], '
    '; + } + + echo ' +
    ', $txt['local_time'], ':
    +
    ', $context['member']['local_time'], '
    '; + + if (!empty($modSettings['userLanguage']) && !empty($context['member']['language'])) + echo ' +
    ', $txt['language'], ':
    +
    ', $context['member']['language'], '
    '; + + if ($context['member']['show_last_login']) + echo ' +
    ', $txt['lastLoggedIn'], ':
    +
    ', $context['member']['last_login'], (!empty($context['member']['is_hidden']) ? ' (' . $txt['hidden'] . ')' : ''), '
    '; + + echo ' +
    '; + + // Are there any custom profile fields for above the signature? + if (!empty($context['print_custom_fields']['above_signature'])) + { + $fields = ''; + foreach ($context['print_custom_fields']['above_signature'] as $field) + if (!empty($field['output_html'])) + $fields .= ' +
  • ' . $field['output_html'] . '
  • '; + + if (!empty($fields)) + echo ' +
    +
      ', $fields, ' +
    +
    '; + } + + // Show the users signature. + if ($context['signature_enabled'] && !empty($context['member']['signature'])) + echo ' +
    +
    ', $txt['signature'], ':
    + ', $context['member']['signature'], ' +
    '; + + // Are there any custom profile fields for below the signature? + if (!empty($context['print_custom_fields']['below_signature'])) + { + $fields = ''; + foreach ($context['print_custom_fields']['below_signature'] as $field) + if (!empty($field['output_html'])) + $fields .= ' +
  • ' . $field['output_html'] . '
  • '; + + if (!empty($fields)) + echo ' +
    +
      ', $fields, ' +
    +
    '; + } + + echo ' +
    +
    '; +} + +/** + * Template for showing all the posts of the user, in chronological order. + */ +function template_showPosts() +{ + global $context, $scripturl, $txt; + + echo ' +
    +

    + ', (!isset($context['attachments']) && empty($context['is_topics']) ? $txt['showMessages'] : (!empty($context['is_topics']) ? $txt['showTopics'] : $txt['showAttachments'])), !$context['user']['is_owner'] ? ' - ' . $context['member']['name'] : '', ' +

    +
    ', !empty($context['page_index']) ? ' +
    + +
    +
    ' : ''; + + // Are we displaying posts or attachments? + if (!isset($context['attachments'])) + { + // For every post to be displayed, give it its own div, and show the important details of the post. OK ? + foreach ($context['posts'] as $post) + { + echo ' +
    +
    +
    +
    #', $post['counter'], '
    +
    + ', $post['board']['name'], ' / ', $post['subject'], ' +
    +
    +
    ', $post['time'], '
    +
    '; + + if (!$post['approved']) + echo ' +
    + ', $txt['post_awaiting_approval'], ' +
    '; + + // affiche les messages mais uniquement si on passe dessus (collapse) + echo ' +
    + ', $txt['khbb_collapse_recent_post'], ' +
    + ', $post['body'], ' +
    +
    + '; + + + + // Post options + template_quickbuttons($post['quickbuttons'], 'profile_showposts'); + + echo ' +
    '; + } + } + else + template_show_list('attachments'); + + + // No posts? Just end with a informative message. + if ((isset($context['attachments']) && empty($context['attachments'])) || (!isset($context['attachments']) && empty($context['posts']))) + echo ' +
    + ', isset($context['attachments']) ? $txt['show_attachments_none'] : ($context['is_topics'] ? $txt['show_topics_none'] : $txt['show_posts_none']), ' +
    '; + + echo '
    '; + + // Show more page numbers. + if (!empty($context['page_index'])) + echo ' +
    + +
    '; +} + +/** + * Template for showing all alerts + */ +function template_showAlerts() +{ + global $context, $txt, $scripturl; + + // Do we have an update message? + if (!empty($context['update_message'])) + echo ' +
    + ', $context['update_message'], ' +
    '; + + echo ' +
    +

    + ', $txt['alerts'], !$context['user']['is_owner'] ? ' - ' . $context['member']['name'] : '', ' +

    +
    '; + + if (empty($context['alerts'])) + echo ' +
    + ', $txt['alerts_none'], ' +
    '; + + else + { + // Start the form if checkboxes are in use + if ($context['showCheckboxes']) + echo ' +
    '; + + echo ' +
    '; + + foreach ($context['alerts'] as $id => $alert) + { + echo ' +
    '; + echo ' +
    ', $alert['text'], ' - ', $alert['time'], '
    '; + // Alert options + template_quickbuttons($alert['quickbuttons'], 'profile_alerts'); + echo '
    '; + } + + echo ' +
    +
    + +
    '; + + if ($context['showCheckboxes']) + echo ' + ', $txt['check_all'], ': + + + + '; + + echo ' + ', $txt['alert_purge'], ' +
    +
    '; + + if ($context['showCheckboxes']) + echo ' +
    '; + } +} + +/** + * Template for showing all of a user's drafts + */ +function template_showDrafts() +{ + global $context, $scripturl, $txt; + + echo ' +
    +

    + ', $txt['drafts'], !$context['user']['is_owner'] ? ' - ' . $context['member']['name'] : '', ' +

    +
    ', !empty($context['page_index']) ? ' +
    + +
    ' : ''; + + // No drafts? Just show an informative message. + if (empty($context['drafts'])) + echo ' +
    + ', $txt['draft_none'], ' +
    '; + else + { + // For every draft to be displayed, give it its own div, and show the important details of the draft. OK + foreach ($context['drafts'] as $draft) + { + echo ' +
    +
    +
    +
    #', $draft['counter'], ' +
    +
    + ', $draft['board']['name'], ' / ', $draft['topic']['link'], '    '; + + if (!empty($draft['sticky'])) + echo ' + '; + + if (!empty($draft['locked'])) + echo ' + '; + + echo '
    +
    + ', $txt['draft_saved_on'], ': ', $draft['time'], ' +
    '; + // Draft buttons + template_quickbuttons($draft['quickbuttons'], 'profile_drafts'); + echo ' +
    +
    +
    + ', $draft['body'], ' +
    + +
    '; + } + } + + // Show page numbers. + echo ' +
    + +
    '; +} + +/** + * Template for showing and managing the buddy list. + */ +function template_editBuddies() +{ + global $context, $scripturl, $txt; + + if (!empty($context['saved_successful'])) + echo ' +
    ', $context['user']['is_owner'] ? $txt['profile_updated_own'] : sprintf($txt['profile_updated_else'], $context['member']['name']), '
    '; + + elseif (!empty($context['saved_failed'])) + echo ' +
    ', $context['saved_failed'], '
    '; + + echo ' +
    +
    +

    + ', $txt['editBuddies'], ' +

    +
    + + + + '; + // + + if ($context['can_moderate_forum']) + echo ' + '; + + if (!empty($context['custom_pf'])) + foreach ($context['custom_pf'] as $column) + echo ' + '; + + echo ' + + + + '; + + // If they don't have any buddies don't list them! + if (empty($context['buddies'])) + echo ' + + + '; + + // Now loop through each buddy showing info on each. + else + { + foreach ($context['buddies'] as $buddy) + { + echo ' + + '; + /* + ';*/ + + if ($buddy['show_email']) + echo ' + '; + + // Show the custom profile fields for this user. + if (!empty($context['custom_pf'])) + foreach ($context['custom_pf'] as $key => $column) + echo ' + '; + + echo ' + + '; + } + } + + echo ' + +
    ', $txt['name'], '', $txt['status'], '', $txt['email'], '', $column['label'], '', $txt['remove'], '
    + ', $txt['no_buddies'], ' +
    + + + + ', $buddy['options'][$key], ' + +
    +
    '; + + // Add a new buddy? + echo ' +
    +
    +

    ', $txt['buddy_add'], '

    +
    +
    +
    +
    + +
    +
    + + +
    +
    +
    '; + + if (!empty($context['token_check'])) + echo ' + '; + + echo ' + +
    + '; +} + +/** + * Template for showing the ignore list of the current user. + */ +function template_editIgnoreList() +{ + global $context, $scripturl, $txt; + + if (!empty($context['saved_successful'])) + echo ' +
    ', $context['user']['is_owner'] ? $txt['profile_updated_own'] : sprintf($txt['profile_updated_else'], $context['member']['name']), '
    '; + + elseif (!empty($context['saved_failed'])) + echo ' +
    ', $context['saved_failed'], '
    '; + + echo ' +
    +
    +

    + ', $txt['editIgnoreList'], ' +

    +
    + + + + '; + //'; + + if ($context['can_moderate_forum']) + echo ' + '; + + echo ' + + + + '; + + // If they don't have anyone on their ignore list, don't list it! + if (empty($context['ignore_list'])) + echo ' + + + '; + + // Now loop through each buddy showing info on each. + foreach ($context['ignore_list'] as $member) + { + echo ' + + '; + /*';*/ + + if ($context['can_moderate_forum']) + echo ' + '; + echo ' + + '; + } + + echo ' + +
    ', $txt['name'], '', $txt['status'], '', $txt['email'], '', $txt['ignore_remove'], '
    + ', $txt['no_ignore'], ' +
    + + + + + +
    +
    '; + + // Add to the ignore list? + echo ' +
    +
    +

    ', $txt['ignore_add'], '

    +
    +
    +
    +
    + +
    +
    + + +
    +
    +
    '; + + if (!empty($context['token_check'])) + echo ' + '; + + echo ' + +
    + '; +} + +/** + * This template shows an admin information on a users IP addresses used and errors attributed to them. + */ +function template_trackActivity() +{ + global $context, $scripturl, $txt; + + // The first table shows IP information about the user. + echo ' +
    +

    ', $txt['view_ips_by'], ' ', $context['member']['name'], '

    +
    '; + + // The last IP the user used. + echo ' +
    +
    +
    + ', $txt['most_recent_ip'], ': + ', (empty($context['last_ip2']) ? '' : '
    + (' . $txt['why_two_ip_address'] . ')'), ' +
    +
    + ', $context['last_ip'], ''; + + // Second address detected? + if (!empty($context['last_ip2'])) + echo ' + , ', $context['last_ip2'], ''; + + echo ' +
    '; + + // Lists of IP addresses used in messages / error messages. + echo ' +
    ', $txt['ips_in_messages'], ':
    +
    + ', (count($context['ips']) > 0 ? implode(', ', $context['ips']) : '(' . $txt['none'] . ')'), ' +
    +
    ', $txt['ips_in_errors'], ':
    +
    + ', (count($context['error_ips']) > 0 ? implode(', ', $context['error_ips']) : '(' . $txt['none'] . ')'), ' +
    '; + + // List any members that have used the same IP addresses as the current member. + echo ' +
    ', $txt['members_in_range'], ':
    +
    + ', (count($context['members_in_range']) > 0 ? implode(', ', $context['members_in_range']) : '(' . $txt['none'] . ')'), ' +
    +
    +
    '; + + // Show the track user list. + template_show_list('track_user_list'); +} + +/** + * The template for trackIP, allowing the admin to see where/who a certain IP has been used. + */ +function template_trackIP() +{ + global $context, $txt; + + // This function always defaults to the last IP used by a member but can be set to track any IP. + // The first table in the template gives an input box to allow the admin to enter another IP to track. + echo ' +
    +

    ', $txt['trackIP'], '

    +
    +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    '; + + // The table inbetween the first and second table shows links to the whois server for every region. + if ($context['single_ip']) + { + echo ' +
    +

    ', $txt['whois_title'], ' ', $context['ip'], '

    +
    +
    '; + + foreach ($context['whois_servers'] as $server) + echo ' + ', $server['name'], '
    '; + echo ' +
    +
    '; + } + + // The second table lists all the members who have been logged as using this IP address. + echo ' +
    +

    ', $txt['members_from_ip'], ' ', $context['ip'], '

    +
    '; + + if (empty($context['ips'])) + echo ' +

    + ', $txt['no_members_from_ip'], ' +

    '; + + else + { + echo ' + + + + + + + + '; + + // Loop through each of the members and display them. + foreach ($context['ips'] as $ip => $memberlist) + echo ' + + + + '; + + echo ' + +
    ', $txt['ip_address'], '', $txt['display_name'], '
    ', $ip, '', implode(', ', $memberlist), '
    '; + } + + echo ' +
    '; + + template_show_list('track_message_list'); + + echo '
    '; + + template_show_list('track_user_list'); + + // 3rd party integrations may have added additional tracking. + if (!empty($context['additional_track_lists'])) + { + foreach ($context['additional_track_lists'] as $list) + { + echo '
    '; + + template_show_list($list); + } + } +} + +/** + * This template shows an admin which permissions a user have and which group(s) give them each permission. + */ +function template_showPermissions() +{ + global $context, $scripturl, $txt; + + echo ' +
    +

    + ', $txt['showPermissions'], ' +

    +
    '; + + if ($context['member']['has_all_permissions']) + echo ' +
    ', $txt['showPermissions_all'], '
    '; + + else + { + echo ' +
    ', $txt['showPermissions_help'], '
    +
    '; + + if (!empty($context['no_access_boards'])) + { + echo ' +
    +

    ', $txt['showPermissions_restricted_boards'], '

    +
    +
    + ', $txt['showPermissions_restricted_boards_desc'], ':
    '; + + foreach ($context['no_access_boards'] as $no_access_board) + echo ' + ', $no_access_board['name'], '', $no_access_board['is_last'] ? '' : ', '; + echo ' +
    '; + } + + // General Permissions section. + echo ' +
    +
    +

    ', $txt['showPermissions_general'], '

    +
    '; + if (!empty($context['member']['permissions']['general'])) + { + echo ' + + + + + + + + '; + + foreach ($context['member']['permissions']['general'] as $permission) + { + echo ' + + + + '; + } + echo ' + +
    ', $txt['showPermissions_permission'], '', $txt['showPermissions_status'], '
    + ', $permission['is_denied'] ? '' . $permission['name'] . '' : $permission['name'], ' + '; + + if ($permission['is_denied']) + echo ' + ', $txt['showPermissions_denied'], ': ', implode(', ', $permission['groups']['denied']), ''; + else + echo ' + ', $txt['showPermissions_given'], ': ', implode(', ', $permission['groups']['allowed']); + + echo ' +
    +
    +
    '; + } + else + echo ' +

    ', $txt['showPermissions_none_general'], '

    '; + + // Board permission section. + echo ' +
    +
    +

    + ', $txt['showPermissions_select'], ': + +

    +
    +
    '; + + if (!empty($context['member']['permissions']['board'])) + { + echo ' + + + + + + + + '; + + foreach ($context['member']['permissions']['board'] as $permission) + { + echo ' + + + + '; + } + echo ' + +
    ', $txt['showPermissions_permission'], '', $txt['showPermissions_status'], '
    + ', $permission['is_denied'] ? '' . $permission['name'] . '' : $permission['name'], ' + '; + + if ($permission['is_denied']) + echo ' + ', $txt['showPermissions_denied'], ': ', implode(', ', $permission['groups']['denied']), ''; + + else + echo ' + ', $txt['showPermissions_given'], ': ', implode(', ', $permission['groups']['allowed']); + + echo ' +
    '; + } + else + echo ' +

    ', $txt['showPermissions_none_board'], '

    '; + echo ' +
    '; + } +} + +/** + * Template for user statistics, showing graphs and the like. + */ +function template_statPanel() +{ + global $context, $txt; + + // First, show a few text statistics such as post/topic count. + echo ' +
    +
    +
    '; + + foreach ($context['text_stats'] as $key => $stat) + { + echo ' +
    ', $txt['statPanel_' . $key], '
    '; + + if (!empty($stat['url'])) + echo ' +
    ', $stat['text'], '
    '; + else + echo ' +
    ', $stat['text'], '
    '; + } + + echo ' +
    +
    '; + + // This next section draws a graph showing what times of day they post the most. + echo ' +
    +
    +

    + ', $txt['statPanel_activityTime'], ' +

    +
    '; + + // If they haven't post at all, don't draw the graph. + if (empty($context['posts_by_time'])) + echo ' +

    ', $txt['statPanel_noPosts'], '

    '; + + // Otherwise do! + else + { + echo ' +
      '; + + // The labels. + foreach ($context['posts_by_time'] as $time_of_day) + echo ' +
    • +
      +
      + ', sprintf($txt['statPanel_activityTime_posts'], $time_of_day['posts'], $time_of_day['posts_percent']), ' +
      +
      + ', $time_of_day['hour_format'], ' +
    • '; + + echo ' +
    '; + } + + echo ' +
    '; + + // Two columns with the most popular boards by posts and activity (activity = users posts / total posts). + echo ' +
    +
    +
    +

    + ', $txt['statPanel_topBoards'], ' +

    +
    '; + + if (empty($context['popular_boards'])) + echo ' +

    ', $txt['statPanel_noPosts'], '

    '; + + else + { + echo ' +
    '; + + // Draw a bar for every board. + foreach ($context['popular_boards'] as $board) + { + echo ' +
    ', $board['link'], '
    +
    +
    + ', sprintf($txt['statPanel_topBoards_memberposts'], $board['posts'], $board['total_posts_member'], $board['posts_percent']), ' +
    + ', empty($context['hide_num_posts']) ? $board['posts'] : '', ' +
    '; + } + + echo ' +
    '; + } + echo ' +
    +
    +
    +

    + ', $txt['statPanel_topBoardsActivity'], ' +

    +
    '; + + if (empty($context['board_activity'])) + echo ' +

    ', $txt['statPanel_noPosts'], '

    '; + else + { + echo ' +
    '; + + // Draw a bar for every board. + foreach ($context['board_activity'] as $activity) + { + echo ' +
    ', $activity['link'], '
    +
    +
    + ', sprintf($txt['statPanel_topBoards_posts'], $activity['posts'], $activity['total_posts'], $activity['posts_percent']), ' +
    + ', $activity['percent'], '% +
    '; + } + + echo ' +
    '; + } + echo ' +
    +
    '; + + echo ' +
    '; +} + +/** + * Template for editing profile options. + */ +function template_edit_options() +{ + global $context, $scripturl, $txt, $modSettings; + + // The main header! + // because some browsers ignore autocomplete=off and fill username in display name and/ or email field, fake them out. + $url = !empty($context['profile_custom_submit_url']) ? $context['profile_custom_submit_url'] : $scripturl . '?action=profile;area=' . $context['menu_item_selected'] . ';u=' . $context['id_member']; + $url = $context['require_password'] && !empty($modSettings['force_ssl']) ? strtr($url, array('http://' => 'https://')) : $url; + + echo ' +
    +
    + + +
    +
    +

    '; + + // Don't say "Profile" if this isn't the profile... + if (!empty($context['profile_header_text'])) + echo ' + ', $context['profile_header_text']; + else + echo ' + ', $txt['profile']; + + echo ' +

    +
    '; + + // Have we some description? + if ($context['page_desc']) + echo ' +

    ', $context['page_desc'], '

    '; + + echo ' +
    '; + + // Any bits at the start? + if (!empty($context['profile_prehtml'])) + echo ' +
    ', $context['profile_prehtml'], '
    '; + + if (!empty($context['profile_fields'])) + echo ' +
    '; + + // Start the big old loop 'of love. + $lastItem = 'hr'; + foreach ($context['profile_fields'] as $key => $field) + { + // We add a little hack to be sure we never get more than one hr in a row! + if ($lastItem == 'hr' && $field['type'] == 'hr') + continue; + + $lastItem = $field['type']; + if ($field['type'] == 'hr') + echo ' +
    +
    +
    '; + + elseif ($field['type'] == 'callback') + { + if (isset($field['callback_func']) && function_exists('template_profile_' . $field['callback_func'])) + { + $callback_func = 'template_profile_' . $field['callback_func']; + $callback_func(); + } + } + else + { + echo ' +
    + ', $field['type'] !== 'label' ? '' : '', ''; + + // Does it have any subtext to show? + if (!empty($field['subtext'])) + echo ' +
    + ', $field['subtext'], ''; + + echo ' +
    +
    '; + + // Want to put something infront of the box? + if (!empty($field['preinput'])) + echo ' + ', $field['preinput']; + + // What type of data are we showing? + if ($field['type'] == 'label') + echo ' + ', $field['value']; + + // Maybe it's a text box - very likely! + elseif (in_array($field['type'], array('int', 'float', 'text', 'password', 'color', 'date', 'datetime', 'datetime-local', 'email', 'month', 'number', 'time', 'url'))) + { + if ($field['type'] == 'int' || $field['type'] == 'float') + $type = 'number'; + else + $type = $field['type']; + $step = $field['type'] == 'float' ? ' step="0.1"' : ''; + + echo ' + '; + } + // You "checking" me out? ;) + elseif ($field['type'] == 'check') + echo ' + + '; + + // Always fun - select boxes! + elseif ($field['type'] == 'select') + { + echo ' + '; + } + + // Something to end with? + if (!empty($field['postinput'])) + echo ' + ', $field['postinput']; + + echo ' +
    '; + } + } + + if (!empty($context['profile_fields'])) + echo ' +
    '; + + // Are there any custom profile fields - if so print them! + if (!empty($context['custom_fields'])) + { + if ($lastItem != 'hr') + echo ' +
    '; + + echo ' +
    '; + + foreach ($context['custom_fields'] as $field) + echo ' +
    + ', $field['name'], '
    + ', $field['desc'], ' +
    +
    + ', $field['input_html'], ' +
    '; + + echo ' +
    '; + } + + // Any closing HTML? + if (!empty($context['profile_posthtml'])) + echo ' +
    ', $context['profile_posthtml'], '
    '; + + // Only show the password box if it's actually needed. + if ($context['require_password']) + echo ' +
    +
    +
    + ', $txt['required_security_reasons'], ' +
    +
    + +
    +
    '; + + // The button shouldn't say "Change profile" unless we're changing the profile... + if (!empty($context['submit_button_text'])) + echo ' + '; + else + echo ' + '; + + if (!empty($context['token_check'])) + echo ' + '; + + echo ' + + + +
    +
    '; + + // Any final spellchecking stuff? + if (!empty($context['show_spellchecking'])) + echo ' +
    '; +} + +/** + * Personal Message settings. + */ +function template_profile_pm_settings() +{ + global $context, $modSettings, $txt; + + echo ' +
    + +
    +
    + +
    +
    + +
    +
    + + +
    + +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + + +
    +
    +
    +
    +
    + +
    +
    + + +
    '; + +} + +/** + * Template for showing theme settings. Note: template_options() actually adds the theme specific options. + */ +function template_profile_theme_settings() +{ + global $context, $modSettings; + + $skeys = array_keys($context['theme_options']); + $first_option_key = array_shift($skeys); + $titled_section = false; + + foreach ($context['theme_options'] as $i => $setting) + { + // Just spit out separators and move on + if (empty($setting) || !is_array($setting)) + { + // Avoid double separators and empty titled sections + $empty_section = true; + for ($j=$i+1; $j < count($context['theme_options']); $j++) + { + // Found another separator, so we're done + if (!is_array($context['theme_options'][$j])) + break; + + // Once we know there's something to show in this section, we can stop + if (!isset($context['theme_options'][$j]['enabled']) || !empty($context['theme_options'][$j]['enabled'])) + { + $empty_section = false; + break; + } + } + if ($empty_section) + { + if ($i === $first_option_key) + $first_option_key = array_shift($skeys); + + continue; + } + + // Insert a separator (unless this is the first item in the list) + if ($i !== $first_option_key) + echo ' +
    +
    +
    '; + + // Should we give a name to this section? + if (is_string($setting) && !empty($setting)) + { + $titled_section = true; + echo ' +
    ' . $setting . '
    +
    '; + } + else + $titled_section = false; + + continue; + } + + // Is this disabled? + if (isset($setting['enabled']) && $setting['enabled'] === false) + { + if ($i === $first_option_key) + $first_option_key = array_shift($skeys); + + continue; + } + + // Some of these may not be set... Set to defaults here + $opts = array('calendar_start_day', 'topics_per_page', 'messages_per_page', 'display_quick_mod'); + if (in_array($setting['id'], $opts) && !isset($context['member']['options'][$setting['id']])) + $context['member']['options'][$setting['id']] = 0; + + if (!isset($setting['type']) || $setting['type'] == 'bool') + $setting['type'] = 'checkbox'; + + elseif ($setting['type'] == 'int' || $setting['type'] == 'integer') + $setting['type'] = 'number'; + + elseif ($setting['type'] == 'string') + $setting['type'] = 'text'; + + if (isset($setting['options'])) + $setting['type'] = 'list'; + + echo ' +
    + '; + + if (isset($setting['description'])) + echo ' +
    + ', $setting['description'], ''; + echo ' +
    +
    '; + + // Display checkbox options + if ($setting['type'] == 'checkbox') + echo ' + + '; + + // How about selection lists, we all love them + elseif ($setting['type'] == 'list') + { + echo ' + '; + } + // A textbox it is then + else + { + if (isset($setting['type']) && $setting['type'] == 'number') + { + $min = isset($setting['min']) ? ' min="' . $setting['min'] . '"' : ' min="0"'; + $max = isset($setting['max']) ? ' max="' . $setting['max'] . '"' : ''; + $step = isset($setting['step']) ? ' step="' . $setting['step'] . '"' : ''; + + echo ' + '; + } + + // end of this defintion + echo ' +
    '; + } +} + +/** + * The template for configuring alerts + */ +function template_alert_configuration() +{ + global $context, $txt, $scripturl, $modSettings; + + echo ' +
    +

    + ', $txt['alert_prefs'], ' +

    +
    +

    + ', (empty($context['description']) ? $txt['alert_prefs_desc'] : $context['description']), ' +

    +
    +
    +

    + ', $txt['notification_general'], ' +

    +
    +
    +
    +
    + ', $context['id_member'] == 0 ? ' +
    + ' . $txt['notify_announcements_desc'] . '' : '', ' +
    +
    + + +
    '; + + if (!empty($modSettings['enable_ajax_alerts'])) + echo ' +
    + +
    +
    + +
    '; + + echo ' +
    +
    +
    +

    + ', $txt['notify_what_how'], ' +

    +
    + '; + + foreach ($context['alert_types'] as $alert_group => $alerts) + { + echo ' + + + + + + '; + + if (isset($context['alert_group_options'][$alert_group])) + { + foreach ($context['alert_group_options'][$alert_group] as $opts) + { + if ($opts[0] == 'hide') + continue; + + echo ' + + + '; + } + } + + foreach ($alerts as $alert_id => $alert_details) + { + echo ' + + '; + + foreach ($context['alert_bits'] as $type => $bitmask) + { + echo ' + '; + } + + echo ' + '; + } + } + + echo ' +
    ', $txt['alert_group_' . $alert_group], '', $txt['receive_alert'], '', $txt['receive_mail'], '
    '; + + $label = $txt['alert_opt_' . $opts[1]]; + $label_pos = isset($opts['label']) ? $opts['label'] : ''; + if ($label_pos == 'before') + echo ' + '; + + $this_value = isset($context['alert_prefs'][$opts[1]]) ? $context['alert_prefs'][$opts[1]] : 0; + switch ($opts[0]) + { + case 'check': + echo ' + '; + break; + + case 'select': + echo ' + '; + break; + } + + if ($label_pos == 'after') + echo ' + '; + + echo ' +
    + ', $txt['alert_' . $alert_id], isset($alert_details['help']) ? '' : '', ' + '; + + $this_value = isset($context['alert_prefs'][$alert_id]) ? $context['alert_prefs'][$alert_id] : 0; + switch ($alert_details[$type]) + { + case 'always': + echo ' + '; + break; + case 'yes': + echo ' + '; + break; + case 'never': + echo ' + '; + break; + } + echo ' +
    +
    +
    + + ', !empty($context['token_check']) ? ' + ' : '', ' + + +
    +
    +
    '; +} + +/** + * Template for showing which topics you're subscribed to + */ +function template_alert_notifications_topics() +{ + global $txt; + + // The main containing header. + echo ' +
    +

    + ', $txt['watched_topics'], ' +

    +
    +

    ', $txt['watched_topics_desc'], '

    +
    '; + + template_show_list('topic_notification_list'); +} + +/** + * Template for showing which boards you're subscribed to + */ +function template_alert_notifications_boards() +{ + global $txt; + + echo ' +
    +

    + ', $txt['watched_boards'], ' +

    +
    +

    ', $txt['watched_boards_desc'], '

    +
    '; + + template_show_list('board_notification_list'); +} + +/** + * Template for choosing group membership. + */ +function template_groupMembership() +{ + global $context, $scripturl, $txt; + + // The main containing header. + echo ' +
    +
    +

    + ', $txt['profile'], ' +

    +
    +

    ', $txt['groupMembership_info'], '

    '; + + // Do we have an update message? + if (!empty($context['update_message'])) + echo ' +
    + ', $context['update_message'], '. +
    '; + + echo ' +
    '; + + // Requesting membership to a group? + if (!empty($context['group_request'])) + { + echo ' +
    +
    +

    ', $txt['request_group_membership'], '

    +
    +
    + ', $txt['request_group_membership_desc'], ': + +
    + + +
    +
    +
    '; + } + else + { + echo ' +
    +

    ', $txt['current_membergroups'], '

    +
    '; + + foreach ($context['groups']['member'] as $group) + { + echo ' +
    '; + + if ($context['can_edit_primary']) + echo ' + '; + + echo ' + '; + + // Can they leave their group? + if ($group['can_leave']) + echo ' + ' . $txt['leave_group'] . ''; + + echo ' +
    '; + } + + if ($context['can_edit_primary']) + echo ' +
    + +
    '; + + // Any groups they can join? + if (!empty($context['groups']['available'])) + { + echo ' +
    +

    ', $txt['available_groups'], '

    +
    '; + + foreach ($context['groups']['available'] as $group) + { + echo ' +
    + ', (empty($group['color']) ? $group['name'] : '' . $group['name'] . ''), '', (!empty($group['desc']) ? '
    ' . $group['desc'] . '' : ''), ''; + + if ($group['type'] == 3) + echo ' + ', $txt['join_group'], ''; + + elseif ($group['type'] == 2 && $group['pending']) + echo ' + ', $txt['approval_pending'], ''; + + elseif ($group['type'] == 2) + echo ' + ', $txt['request_group'], ''; + + echo ' +
    '; + } + } + + // Javascript for the selector stuff. + echo ' + '; + } + + echo ' +
    '; + + if (!empty($context['token_check'])) + echo ' + '; + + echo ' + + +
    '; +} + +/** + * Template for managing ignored boards + */ +function template_ignoreboards() +{ + global $context, $txt, $scripturl; + + // The main containing header. + echo ' +
    +
    +

    + ', $txt['profile'], ' +

    +
    +

    ', $txt['ignoreboards_info'], '

    +
    +
    +
      '; + + foreach ($context['categories'] as $category) + { + echo ' +
    • + ', $category['name'], ' +
        '; + + $cat_boards = array_values($category['boards']); + foreach ($cat_boards as $key => $board) + { + echo ' +
      • + '; + + // Nest child boards inside another list. + $curr_child_level = $board['child_level']; + $next_child_level = $cat_boards[$key + 1]['child_level'] ?? 0; + + if ($next_child_level > $curr_child_level) + { + echo ' +
          '; + } + else + { + // Close child board lists until we reach a common level + // with the next board. + while ($next_child_level < $curr_child_level--) + { + echo ' + +
        '; + } + + echo ' +
      • '; + } + } + + echo ' +
      +
    • '; + } + + echo ' +
    +
    '; + + // Show the standard "Save Settings" profile button. + template_profile_save(); + + echo ' +
    +
    +
    '; +} + +/** + * Simply loads some theme variables common to several warning templates. + */ +function template_load_warning_variables() +{ + global $modSettings, $context; + + // Setup the warning mode + $context['warning_mode'] = array( + 0 => 'none', + $modSettings['warning_watch'] => 'watched', + $modSettings['warning_moderate'] => 'moderated', + $modSettings['warning_mute'] => 'muted', + ); + + // Work out the starting warning. + $context['current_warning_mode'] = $context['warning_mode'][0]; + foreach ($context['warning_mode'] as $limit => $warning) + if ($context['member']['warning'] >= $limit) + $context['current_warning_mode'] = $warning; +} + +/** + * Template for viewing a user's warnings + */ +function template_viewWarning() +{ + global $context, $txt; + + template_load_warning_variables(); + + echo ' +
    +

    + ', sprintf($txt['profile_viewwarning_for_user'], $context['member']['name']), ' +

    +
    +

    ', $txt['viewWarning_help'], '

    +
    +
    +
    + ', $txt['profile_warning_name'], ': +
    +
    + ', $context['member']['name'], ' +
    +
    + ', $txt['profile_warning_level'], ': +
    +
    +
    +
    + ', $context['member']['warning'], '% +
    +
    '; + + // There's some impact of this? + if (!empty($context['level_effects'][$context['current_level']])) + echo ' +
    + ', $txt['profile_viewwarning_impact'], ': +
    +
    + ', $context['level_effects'][$context['current_level']], ' +
    '; + + echo ' +
    +
    '; + + template_show_list('view_warnings'); +} + +/** + * Template for issuing warnings + */ +function template_issueWarning() +{ + global $context, $scripturl, $txt; + + template_load_warning_variables(); + + echo ' + '; + + echo ' +
    +
    +

    + ', $context['user']['is_owner'] ? $txt['profile_warning_level'] : $txt['profile_issue_warning'], ' +

    +
    '; + + if (!$context['user']['is_owner']) + echo ' +

    ', $txt['profile_warning_desc'], '

    '; + + echo ' +
    +
    '; + + if (!$context['user']['is_owner']) + echo ' +
    + ', $txt['profile_warning_name'], ': +
    +
    + ', $context['member']['name'], ' +
    '; + + echo ' +
    + ', $txt['profile_warning_level'], ':'; + + // Is there only so much they can apply? + if ($context['warning_limit']) + echo ' +
    + ', sprintf($txt['profile_warning_limit_attribute'], $context['warning_limit']), ''; + + echo ' +
    +
    + 0% 100% +
    + ', $txt['profile_warning_impact'], ': ', $context['member']['warning'], '% (', $context['level_effects'][$context['current_level']], ') +
    +
    '; + + if (!$context['user']['is_owner']) + { + echo ' +
    + ', $txt['profile_warning_reason'], ':
    + ', $txt['profile_warning_reason_desc'], ' +
    +
    + +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + + +
    + +
    '; + } + echo ' +
    +
    '; + + if (!empty($context['token_check'])) + echo ' + '; + + echo ' + + + +
    +
    +
    '; + + // Previous warnings? + template_show_list('view_warnings'); + + echo ' + '; +} + +/** + * Template to show for deleting a user's account - now with added delete post capability! + */ +function template_deleteAccount() +{ + global $context, $scripturl, $txt; + + // The main containing header. + echo ' +
    +
    +

    + ', $txt['deleteAccount'], ' +

    +
    '; + + // If deleting another account give them a lovely info box. + if (!$context['user']['is_owner']) + echo ' +

    ', $txt['deleteAccount_desc'], '

    '; + + echo ' +
    '; + + // If they are deleting their account AND the admin needs to approve it - give them another piece of info ;) + if ($context['needs_approval']) + echo ' +
    ', $txt['deleteAccount_approval'], '
    '; + + // If the user is deleting their own account warn them first - and require a password! + if ($context['user']['is_owner']) + { + echo ' +
    ', $txt['own_profile_confirm'], '
    +
    + ', $txt['current_password'], ': + + '; + + if (!empty($context['token_check'])) + echo ' + '; + + echo ' + + + +
    '; + } + // Otherwise an admin doesn't need to enter a password - but they still get a warning - plus the option to delete lovely posts! + else + { + echo ' +
    ', $txt['deleteAccount_warning'], '
    '; + + // Only actually give these options if they are kind of important. + if ($context['can_delete_posts']) + { + echo ' +
    +
    + + '; + + if ($context['show_perma_delete']) + echo ' +
    + '; + + echo ' +
    '; + } + + echo ' +
    + +
    +
    + '; + + if (!empty($context['token_check'])) + echo ' + '; + + echo ' + + + +
    '; + } + echo ' +
    +
    +
    '; +} + +/** + * Template for the password box/save button stuck at the bottom of every profile page. + */ +function template_profile_save() +{ + global $context, $txt; + + echo ' + +
    '; + + // Only show the password box if it's actually needed. + if ($context['require_password']) + echo ' +
    +
    + ', $txt['current_password'], ':
    + ', $txt['required_security_reasons'], ' +
    +
    + +
    +
    '; + + echo ' +
    '; + + if (!empty($context['token_check'])) + echo ' + '; + + echo ' + + + + +
    '; +} + +/** + * Small template for showing an error message upon a save problem in the profile. + */ +function template_error_message() +{ + global $context, $modSettings, $txt; + + echo ' +
    '; + + if (!empty($context['post_errors'])) + { + echo ' + ', !empty($context['custom_error_title']) ? $context['custom_error_title'] : $txt['profile_errors_occurred'], ': +
      '; + + // Cycle through each error and display an error message. + foreach ($context['post_errors'] as $error) + { + $text_key_error = $error == 'password_short' ? + sprintf($txt['profile_error_' . $error], (empty($modSettings['password_strength']) ? 4 : 8)) : + (isset($txt['profile_error_' . $error]) ? $txt['profile_error_' . $error] : ''); + + echo ' +
    • ', isset($txt['profile_error_' . $error]) ? $text_key_error : $error, '
    • '; + } + + echo ' +
    '; + } + + echo ' +
    '; +} + +/** + * Display a load of drop down selectors for allowing the user to change group. + */ +function template_profile_group_manage() +{ + global $context, $txt, $scripturl; + + echo ' +
    + ', $txt['primary_membergroup'], '
    + ', $txt['moderator_why_missing'], ' +
    +
    + +
    +
    + ', $txt['additional_membergroups'], ' +
    +
    + + '; + + // For each membergroup show a checkbox so members can be assigned to more than one group. + foreach ($context['member_groups'] as $member_group) + if ($member_group['can_be_additional']) + echo ' +
    '; + + echo ' +
    + + +
    '; + +} + +/** + * Callback function for entering a birthdate! + */ +function template_profile_birthdate() +{ + global $txt, $context; + + // Just show the pretty box! + //echo 'no birthday'; +} + +/** + * Show the signature editing box? + */ +function template_profile_signature_modify() +{ + global $txt, $context; + + echo ' + + + + + + +
    + ', $txt['signature'], '
    + ', $txt['sig_info'], '
    +
    '; + + if ($context['show_spellchecking']) + echo ' + '; + + echo ' +
    +
    +
    '; + + // If there is a limit at all! + if (!empty($context['signature_limits']['max_length'])) + echo ' + ', sprintf($txt['max_sig_characters'], $context['signature_limits']['max_length']), ' ', $context['signature_limits']['max_length'], '
    '; + + if (!empty($context['show_preview_button'])) + echo ' + '; + + if ($context['signature_warning']) + echo ' + ', $context['signature_warning'], ''; + + // Some javascript used to count how many characters have been used so far in the signature. + echo ' + +
    '; +} + +/** + * Template for selecting an avatar + */ +function template_profile_avatar_select() +{ + global $context, $txt, $modSettings, $scripturl; + + // Start with the upper menu + echo ' +
    + + + '; + + if (empty($modSettings['gravatarEnabled']) || empty($modSettings['gravatarOverride'])) + echo ' + +
    '; + + if (!empty($context['member']['avatar']['allow_server_stored'])) + echo ' + +
    '; + + if (!empty($context['member']['avatar']['allow_external'])) + echo ' + +
    '; + + if (!empty($context['member']['avatar']['allow_upload'])) + echo ' + +
    '; + + if (!empty($context['member']['avatar']['allow_gravatar'])) + echo ' + + + '; + + echo ' +
    +
    '; + + // If users are allowed to choose avatars stored on the server show selection boxes to choice them from. + if (!empty($context['member']['avatar']['allow_server_stored'])) + { + echo ' +
    +
    + +
    +
    + +
    +
    + +
    + +
    '; + } + + // If the user can link to an off server avatar, show them a box to input the address. + if (!empty($context['member']['avatar']['allow_external'])) + echo ' +
    + ', $context['member']['avatar']['choice'] == 'external' ? '
    ' : '', ' +
    ', $txt['avatar_by_url'], '
    ', !empty($modSettings['avatar_action_too_large']) && $modSettings['avatar_action_too_large'] == 'option_download_and_resize' ? template_max_size('external') : '', ' +
    +
    '; + + // If the user is able to upload avatars to the server show them an upload box. + if (!empty($context['member']['avatar']['allow_upload'])) + echo ' +
    + ', $context['member']['avatar']['choice'] == 'upload' ? '
    ' : '', ' + ', template_max_size('upload'), ' + ', (!empty($context['member']['avatar']['id_attach']) ? '
    ' : ''), ' +
    '; + + // if the user is able to use Gravatar avatars show then the image preview + if (!empty($context['member']['avatar']['allow_gravatar'])) + { + echo ' +
    + ', $context['member']['avatar']['choice'] == 'gravatar' ? '
    ' : ''; + + if (empty($modSettings['gravatarAllowExtraEmail'])) + echo ' +
    ', $txt['gravatar_noAlternateEmail'], '
    '; + else + { + // Depending on other stuff, the stored value here might have some odd things in it from other areas. + if ($context['member']['avatar']['external'] == $context['member']['email']) + $textbox_value = ''; + else + $textbox_value = $context['member']['avatar']['external']; + + echo ' +
    ', $txt['gravatar_alternateEmail'], '
    + '; + } + echo ' +
    '; + } + + echo ' + +
    '; +} + +/** + * This is just a really little helper to avoid duplicating code unnecessarily + * + * @param string $type The type of avatar + */ +function template_max_size($type) +{ + global $modSettings, $txt; + + $w = !empty($modSettings['avatar_max_width_' . $type]) ? comma_format($modSettings['avatar_max_width_' . $type]) : 0; + $h = !empty($modSettings['avatar_max_height_' . $type]) ? comma_format($modSettings['avatar_max_height_' . $type]) : 0; + + $suffix = (!empty($w) ? 'w' : '') . (!empty($h) ? 'h' : ''); + if (empty($suffix)) + return; + + echo ' +
    ', sprintf($txt['avatar_max_size_' . $suffix], $w, $h), '
    '; +} + +/** + * Select the time format! + */ +function template_profile_timeformat_modify() +{ + global $context, $txt, $scripturl; + + echo ' +
    +
    + + + + +
    +
    + + +
    '; +} + +/** + * Template for picking a theme + */ +function template_profile_theme_pick() +{ + global $txt, $context, $scripturl; + + echo ' +
    + ', $txt['current_theme'], ' +
    +
    + ', $context['member']['theme']['name'], ' ', $txt['change'], ' +
    '; +} + +/** + * Smiley set picker. + */ +function template_profile_smiley_pick() +{ + global $txt, $context, $modSettings, $settings; + + echo ' +
    + +
    +
    + + :) +
    '; +} + +/** + * Template for setting up and managing Two-Factor Authentication. + */ +function template_tfasetup() +{ + global $txt, $context, $scripturl, $modSettings; + + echo ' +
    +

    ', $txt['tfa_title'], '

    +
    +
    +
    '; + + if (!empty($context['tfa_backup'])) + echo ' +
    + ', $txt['tfa_backup_used_desc'], ' +
    '; + + elseif ($modSettings['tfa_mode'] == 2) + echo ' +
    + ', $txt['tfa_forced_desc'], ' +
    '; + + echo ' +
    + ', $txt['tfa_desc'], ' +
    +
    +
    +
    + ', $txt['tfa_step1'], '
    '; + + if (!empty($context['tfa_pass_error'])) + echo ' +
    + ', $txt['tfa_pass_invalid'], ' +
    '; + + echo ' + +
    +
    + ', $txt['tfa_step2'], ' +
    ', $txt['tfa_step2_desc'], '
    +
    ', $context['tfa_secret'], '
    +
    +
    + ', $txt['tfa_step3'], '
    '; + + if (!empty($context['tfa_error'])) + echo ' +
    + ', $txt['tfa_code_invalid'], ' +
    '; + + echo ' + + +
    + + +
    +
    +
    +
    + +
    '; + + if (!empty($context['from_ajax'])) + echo ' +
    + '; + + echo ' +
    +
    '; +} + +/** + * Template for disabling two-factor authentication. + */ +function template_tfadisable() +{ + global $txt, $context, $scripturl; + + echo ' +
    +

    ', $txt['tfadisable'], '

    +
    +
    +
    '; + + if ($context['user']['is_owner']) + echo ' +
    + ', $txt['current_password'], '
    + +
    '; + else + echo ' +
    + ', sprintf($txt['tfa_disable_for_user'], $context['user']['name']), ' +
    '; + + echo ' + + + + +
    +
    '; +} + +/** + * Template for setting up 2FA backup code + */ +function template_tfasetup_backup() +{ + global $context, $txt; + + echo ' +
    +

    ', $txt['tfa_backup_title'], '

    +
    +
    +
    +
    ', $txt['tfa_backup_desc'], '
    +
    ', $context['tfa_backup'], '
    +
    +
    '; +} + +/** + * Simple template for showing the 2FA area when editing a profile. + */ +function template_profile_tfa() +{ + global $context, $txt, $scripturl, $modSettings; + + echo ' +
    + ', $txt['tfa_profile_label'], '
    +
    ', $txt['tfa_profile_desc'], '
    +
    +
    '; + + if (!$context['tfa_enabled'] && $context['user']['is_owner']) + echo ' + ', $txt['tfa_profile_enable'], ''; + + elseif (!$context['tfa_enabled']) + echo ' + ', $txt['tfa_profile_disabled']; + + else + echo ' + ', sprintf($txt['tfa_profile_enabled'], (!empty($modSettings['force_ssl']) ? strtr($scripturl, array('http://' => 'https://')) : $scripturl) . '?action=profile;u=' . $context['id_member'] . ';area=tfadisable'); + + echo ' +
    '; +} + +/** + * Template for initiating and retrieving profile data exports + */ +function template_export_profile_data() +{ + global $context, $scripturl, $txt; + + $default_settings = array('included' => array(), 'format' => ''); + $dltoken = ''; + + // The main containing header. + echo ' +
    +

    + ', $txt['export_profile_data'], ' +

    +
    +
    ', $context['export_profile_data_desc'], '
    '; + + if (!empty($context['completed_exports'])) + { + echo ' +
    +

    ', $txt['completed_exports'], '

    +
    +
    '; + + foreach ($context['completed_exports'] as $basehash_ext => $parts) + { + echo ' +
    '; + + if (!empty($context['outdated_exports'][$basehash_ext])) + { + echo ' +
    +

    ', $txt['export_outdated_warning'], '

    +
      '; + + foreach ($context['outdated_exports'][$basehash_ext] as $datatype) + echo ' +
    • ', $txt[$datatype], '
    • '; + + echo ' +
    +
    '; + } + + echo ' +

    ', sprintf($txt['export_file_desc'], $parts[1]['included_desc'], $context['export_formats'][$parts[1]['format']]['description']), '

    '; + + if (count($parts) > 10) + echo ' +
    + ', sprintf($txt['export_file_count'], count($parts)), ''; + + echo ' +
      '; + + foreach ($parts as $part => $file) + { + $dltoken = $file['dltoken']; + if (empty($default_settings['included'])) + $default_settings['included'] = $file['included']; + if (empty($default_settings['format'])) + $default_settings['format'] = $file['format']; + + echo ' +
    • + ', $file['dlbasename'], ' (', $file['size'], ', ', $file['mtime'], ') +
    • '; + } + + echo ' +
    '; + + if (count($parts) > 10) + echo ' +
    '; + + echo ' +
    + + + + +
    +
    '; + } + + echo ' +
    '; + } + + if (!empty($context['active_exports'])) + { + echo ' +
    +

    ', $txt['active_exports'], '

    +
    +
    '; + + foreach ($context['active_exports'] as $file) + { + $dltoken = $file['dltoken']; + if (empty($default_settings['included'])) + $default_settings['included'] = $file['included']; + if (empty($default_settings['format'])) + $default_settings['format'] = $file['format']; + + echo ' +
    1 ? ' class="descbox"' : '', '> +

    ', sprintf($txt['export_file_desc'], $file['included_desc'], $context['export_formats'][$file['format']]['description']), '

    +
    + + + +
    +
    '; + } + + echo ' +
    '; + } + + echo ' +
    +

    ', $txt['export_settings'], '

    +
    +
    +
    +
    '; + + foreach ($context['export_datatypes'] as $datatype => $datatype_settings) + { + if (!empty($datatype_settings['label'])) + echo ' +
    + +
    +
    + +
    '; + } + + echo ' +
    +
    +
    + ', $txt['export_format'], ' +
    +
    + +
    +
    +
    '; + + // At least one active or completed export exists. + if (!empty($dltoken)) + { + echo ' + +
    + + + +
    '; + } + // No existing exports. + else + { + echo ' + '; + } + + echo ' + + +
    +
    +
    '; +} + +?> diff --git a/Recent.template.php b/Recent.template.php new file mode 100644 index 0000000..f419ec7 --- /dev/null +++ b/Recent.template.php @@ -0,0 +1,443 @@ + +
    +
    +

    + ', $txt['recent_posts'], ' +

    +
    '; + + if (!empty($context['page_index'])) + echo ' +
    + +
    '; + + if (empty($context['posts'])) + echo ' +
    ', $txt['no_messages'], '
    '; + + foreach ($context['posts'] as $post) + { + echo ' +
    +
    +
    +
    #', $post['counter'], '
    +
    ', $post['board']['link'], ' / ', $post['link'], '
    +
    + ', $txt['last_poster'], ' ', $post['poster']['link'], ' - ', $post['time'], ' +
    '; + // affiche des derniers messages ; rendre cela fermé (collapse). Todo : à améliorer + echo ' +
    + ', $txt['khbb_collapse_recent_post'], ' +
    ', $post['message'], '
    +
    + '; + + echo ' +
    '; + } + + echo ' +
    +
    + +
    +
    '; +} + +/** + * Template for showing unread posts + */ +function template_unread() +{ + global $context, $txt, $scripturl, $modSettings, $board_info; + + // User action pop on mobile screen (or actually small screen), this uses responsive css does not check mobile device. + if (!empty($context['recent_buttons'])) + echo ' + '; + + echo ' +
    +
    +

    + ', (!empty($board_info['name']) ? $board_info['name'] . ' - ' : '') . $context['page_title'], ' +

    +
    '; + + if ($context['showCheckboxes']) + echo ' +
    + + + '; + + if (!empty($context['topics'])) + { + echo ' +
    + ', $context['menu_separator'], ' + + ', !empty($context['recent_buttons']) ? template_button_strip($context['recent_buttons'], 'right') : ''; + + // Mobile action (top) + if (!empty($context['recent_buttons'])) + echo ' + '; + + echo ' +
    '; + + echo ' +
    +
    +
    + + + '; + + // Show a "select all" box for quick moderation? + if ($context['showCheckboxes']) + echo ' +
    + +
    '; + + echo ' +
    +
    '; + + foreach ($context['topics'] as $topic) + { + echo ' +
    +
    + + ', $topic['is_posted_in'] ? '' : '', ' +
    +
    '; + + // Now we handle the icons + echo ' +
    '; + + if ($topic['is_locked']) + echo ' + '; + + if ($topic['is_sticky']) + echo ' + '; + + if ($topic['is_poll']) + echo ' + '; + + echo ' +
    '; + + echo ' +
    + ' . $txt['new'] . ' + ', $topic['is_sticky'] ? '' : '', '', $topic['first_post']['link'], '', $topic['is_sticky'] ? '' : '', ' +
    +

    + ', $topic['first_post']['started_by'], ' +

    + ', !empty($topic['pages']) ? '' . $topic['pages'] . '' : '', ' +
    +
    +

    + ', $topic['replies'], ' ', $txt['replies'], ' +
    + ', $topic['views'], ' ', $txt['views'], ' +

    +
    +
    + ', sprintf($txt['last_post_topic'], '' . $topic['last_post']['time'] . '', $topic['last_post']['member']['link']), ' +
    '; + + if ($context['showCheckboxes']) + echo ' +
    + +
    '; + + echo ' +
    '; + } + + if (empty($context['topics'])) + echo ' +
    '; + + echo ' +
    +
    '; + + echo ' +
    + ', !empty($context['recent_buttons']) ? template_button_strip($context['recent_buttons'], 'right') : '', ' + ', $context['menu_separator'], ' + '; + + // Mobile action (bottom) + if (!empty($context['recent_buttons'])) + echo ' + '; + + echo ' +
    '; + } + else + echo ' +
    +

    + ', $context['showing_all_topics'] ? $txt['topic_alert_none'] : sprintf($txt['unread_topics_visit_none'], $scripturl), ' +

    +
    '; + + if ($context['showCheckboxes']) + echo ' +
    '; + + echo ' +
    '; + + if (empty($context['no_topic_listing'])) + template_topic_legend(); + message_index_jump_to(); +} + +/** + * Template for showing unread replies (eg new replies to topics you've posted in) + */ +function template_replies() +{ + global $context, $txt, $scripturl, $modSettings, $board_info; + + // User action pop on mobile screen (or actually small screen), this uses responsive css does not check mobile device. + if (!empty($context['recent_buttons'])) + echo ' + '; + + echo ' +
    +
    +

    + ', (!empty($board_info['name']) ? $board_info['name'] . ' - ' : '') . $context['page_title'], ' +

    +
    '; + + if ($context['showCheckboxes']) + echo ' +
    + + + '; + + if (!empty($context['topics'])) + { + echo ' +
    + ', $context['menu_separator'], ' + + ', !empty($context['recent_buttons']) ? template_button_strip($context['recent_buttons'], 'right') : ''; + + // Mobile action (top) + if (!empty($context['recent_buttons'])) + echo ' + '; + + echo ' +
    '; + + echo ' +
    +
    +
    + + + '; + + // Show a "select all" box for quick moderation? + if ($context['showCheckboxes']) + echo ' +
    + +
    '; + + echo ' +
    +
    '; + + foreach ($context['topics'] as $topic) + { + echo ' +
    +
    + + ', $topic['is_posted_in'] ? '' : '', ' +
    +
    '; + + // Now we handle the icons + echo ' +
    '; + + if ($topic['is_locked']) + echo ' + '; + + if ($topic['is_sticky']) + echo ' + '; + + if ($topic['is_poll']) + echo ' + '; + + echo ' +
    '; + + echo ' +
    + ' . $txt['new'] . ' + ', $topic['is_sticky'] ? '' : '', '', $topic['first_post']['link'], '', $topic['is_sticky'] ? '' : '', ' +
    +

    + ', $topic['first_post']['started_by'], ' +

    + ', !empty($topic['pages']) ? '' . $topic['pages'] . '' : '', ' +
    +
    +

    + ', $topic['replies'], ' ', $txt['replies'], ' +
    + ', $topic['views'], ' ', $txt['views'], ' +

    +
    +
    + ', sprintf($txt['last_post_topic'], '' . $topic['last_post']['time'] . '', $topic['last_post']['member']['link']), ' +
    '; + + if ($context['showCheckboxes']) + echo ' +
    + +
    '; + + echo ' +
    '; + } + + echo ' +
    +
    +
    + ', !empty($context['recent_buttons']) ? template_button_strip($context['recent_buttons'], 'right') : '', ' + ', $context['menu_separator'], ' + '; + + // Mobile action (bottom) + if (!empty($context['recent_buttons'])) + echo ' + '; + + echo ' +
    '; + } + else + echo ' +
    +

    + ', $context['showing_all_topics'] ? $txt['topic_alert_none'] : $txt['updated_topics_visit_none'], ' +

    +
    '; + + if ($context['showCheckboxes']) + echo ' +
    '; + + echo ' +
    '; + + if (empty($context['no_topic_listing'])) + template_topic_legend(); + message_index_jump_to(); +} + +?> diff --git a/Register.template.php b/Register.template.php new file mode 100644 index 0000000..f109b56 --- /dev/null +++ b/Register.template.php @@ -0,0 +1,791 @@ +'; + + if (!empty($context['agreement'])) + echo ' +
    +
    +

    ', $txt['registration_agreement'], '

    +
    +
    +
    ', $context['agreement'], '
    +
    +
    '; + + if (!empty($context['privacy_policy'])) + echo ' +
    +

    ', $txt['privacy_policy'], '

    +
    +
    +
    ', $context['privacy_policy'], '
    +
    '; + + echo ' +
    '; + + // Age restriction in effect? + if ($context['show_coppa']) + echo ' +
    +
    + '; + else + echo ' + '; + + echo ' + + + +
    + '; +} + +/** + * Before registering - get their information. + */ +function template_registration_form() +{ + global $context, $scripturl, $txt, $modSettings; + + echo ' + '; + + // Any errors? + if (!empty($context['registration_errors'])) + { + echo ' +
    + ', $txt['registration_errors_occurred'], ' +
      '; + + // Cycle through each error and display an error message. + foreach ($context['registration_errors'] as $error) + echo ' +
    • ', $error, '
    • '; + + echo ' +
    +
    '; + } + + echo ' +
    +
    +
    +

    ', $txt['registration_form'], '

    +
    +
    +

    ', $txt['required_info'], '

    +
    +
    +
    +
    +
    + +
    +
    + + +
    +
    +
    + +
    +
    +
    +
    +
    + + +
    +
    +
    +
    + +
    +
    + + +
    +
    +
    +
    + +
    +
    + +
    +
    '; + + // If there is any field marked as required, show it here! + if (!empty($context['custom_fields_required']) && !empty($context['custom_fields'])) + { + echo ' +
    '; + + foreach ($context['custom_fields'] as $field) + if ($field['show_reg'] > 1) + echo ' +
    + ', $field['name'], ': + ', $field['desc'], ' +
    +
    ', str_replace('name="', 'tabindex="' . $context['tabindex']++ . '" name="', $field['input_html']), '
    '; + + echo ' +
    '; + } + + echo ' +
    +
    +
    '; + + // If we have either of these, show the extra group. + if (!empty($context['profile_fields']) || !empty($context['custom_fields'])) + echo ' +
    +

    ', $txt['additional_information'], '

    +
    +
    +
    +
    '; + + if (!empty($context['profile_fields'])) + { + // Any fields we particularly want? + foreach ($context['profile_fields'] as $key => $field) + { + if ($field['type'] == 'callback') + { + if (isset($field['callback_func']) && function_exists('template_profile_' . $field['callback_func'])) + { + $callback_func = 'template_profile_' . $field['callback_func']; + $callback_func(); + } + } + else + { + echo ' +
    + ', $field['label'], ':'; + + // Does it have any subtext to show? + if (!empty($field['subtext'])) + echo ' + ', $field['subtext'], ''; + + echo ' +
    +
    '; + + // Want to put something infront of the box? + if (!empty($field['preinput'])) + echo ' + ', $field['preinput']; + + // What type of data are we showing? + if ($field['type'] == 'label') + echo ' + ', $field['value']; + + // Maybe it's a text box - very likely! + elseif (in_array($field['type'], array('int', 'float', 'text', 'password', 'url'))) + echo ' + '; + + // You "checking" me out? ;) + elseif ($field['type'] == 'check') + echo ' + '; + + // Always fun - select boxes! + elseif ($field['type'] == 'select') + { + echo ' + '; + } + + // Something to end with? + if (!empty($field['postinput'])) + echo ' + ', $field['postinput']; + + echo ' +
    '; + } + } + } + + // Are there any custom fields? + if (!empty($context['custom_fields'])) + { + foreach ($context['custom_fields'] as $field) + if ($field['show_reg'] < 2) + echo ' +
    + ', $field['name'], ': + ', $field['desc'], ' +
    +
    ', $field['input_html'], '
    '; + } + + // If we have either of these, close the list like a proper gent. + if (!empty($context['profile_fields']) || !empty($context['custom_fields'])) + echo ' +
    +
    +
    '; + + if ($context['visual_verification']) + echo ' +
    +

    ', $txt['verification'], '

    +
    +
    +
    + ', template_control_verification($context['visual_verification_id'], 'all'), ' +
    +
    '; + + echo ' +
    '; + + // Age restriction in effect? + if (empty($context['agree']) && $context['show_coppa']) + echo ' +
    +
    + '; + else + echo ' + '; + + echo ' +
    + + + +
    + '; +} + +/** + * After registration... all done ;). + */ +function template_after() +{ + global $context; + + // Not much to see here, just a quick... "you're now registered!" or what have you. + echo ' +
    +
    +

    ', $context['title'], '

    +
    +
    +

    ', $context['description'], '

    +
    +
    '; +} + +/** + * Template for giving instructions about COPPA activation. + */ +function template_coppa() +{ + global $context, $txt, $scripturl; + + // Formulate a nice complicated message! + echo ' +
    +

    ', $context['page_title'], '

    +
    +
    +

    ', $context['coppa']['body'], '

    +

    + ', $txt['coppa_form_link_popup'], ' | ', $txt['coppa_form_link_download'], ' +

    +

    ', $context['coppa']['many_options'] ? $txt['coppa_send_to_two_options'] : $txt['coppa_send_to_one_option'], '

    '; + + // Can they send by post? + if (!empty($context['coppa']['post'])) + echo ' +

    1) ', $txt['coppa_send_by_post'], '

    +
    + ', $context['coppa']['post'], ' +
    '; + + // Can they send by fax?? + if (!empty($context['coppa']['fax'])) + echo ' +

    ', !empty($context['coppa']['post']) ? '2' : '1', ') ', $txt['coppa_send_by_fax'], '

    +
    + ', $context['coppa']['fax'], ' +
    '; + + // Offer an alternative Phone Number? + if ($context['coppa']['phone']) + echo ' +

    ', $context['coppa']['phone'], '

    '; + + echo ' +
    '; +} + +/** + * An easily printable form for giving permission to access the forum for a minor. + */ +function template_coppa_form() +{ + global $context, $txt; + + // Show the form (As best we can) + echo ' + + + + + + + + + + + + + +
    ', $context['forum_contacts'], '
    + ', $txt['coppa_form_address'], ': ', $context['ul'], '
    + ', $context['ul'], '
    + ', $context['ul'], '
    + ', $context['ul'], ' +
    + ', $txt['coppa_form_date'], ': ', $context['ul'], ' +

    +
    + ', $context['coppa_body'], ' +
    +
    '; +} + +/** + * Show a window containing the spoken verification code. + */ +function template_verification_sound() +{ + global $context, $settings, $txt, $modSettings; + + echo ' + + + + ', $txt['visual_verification_sound'], ' + + ', template_css(), ' + + + +
    '; + + if (isBrowser('is_ie') || isBrowser('is_ie11')) + echo ' + + + + '; + else + echo ' + '; + + echo ' +
    + ', $txt['visual_verification_sound_again'], '
    + ', $txt['visual_verification_sound_direct'], '

    + ', $txt['visual_verification_sound_close'], '
    +
    + +'; +} + +/** + * The template for the form allowing an admin to register a user from the admin center. + */ +function template_admin_register() +{ + global $context, $scripturl, $txt, $modSettings; + + echo ' +
    +
    +
    +

    ', $txt['admin_browse_register_new'], '

    +
    +
    '; + + if (!empty($context['registration_done'])) + echo ' +
    + ', $context['registration_done'], ' +
    '; + + echo ' +
    +
    + + ', $txt['admin_register_username_desc'], ' +
    +
    + +
    +
    + + ', $txt['admin_register_email_desc'], ' +
    +
    + +
    +
    + + ', $txt['admin_register_password_desc'], ' +
    +
    + +
    '; + + if (!empty($context['member_groups'])) + { + echo ' +
    + + ', $txt['admin_register_group_desc'], ' +
    +
    + +
    '; + } + + // If there is any field marked as required, show it here! + if (!empty($context['custom_fields_required']) && !empty($context['custom_fields'])) + foreach ($context['custom_fields'] as $field) + if ($field['show_reg'] > 1) + echo ' +
    + ', $field['name'], ': + ', $field['desc'], ' +
    +
    + ', str_replace('name="', 'tabindex="' . $context['tabindex']++ . '" name="', $field['input_html']), ' +
    '; + + echo ' +
    + + ', $txt['admin_register_email_detail_desc'], ' +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    + + + + +
    +
    +
    +
    +
    '; +} + +/** + * Form for editing the agreement shown for people registering to the forum. + */ +function template_edit_agreement() +{ + global $context, $scripturl, $txt; + + if (!empty($context['saved_successful'])) + echo ' +
    ', $txt['settings_saved'], '
    '; + + elseif (!empty($context['could_not_save'])) + echo ' +
    ', $txt['admin_agreement_not_saved'], '
    '; + + // Warning for if the file isn't writable. + if (!empty($context['warning'])) + echo ' +
    ', $context['warning'], '
    '; + + // Just a big box to edit the text file ;) + echo ' +
    +
    +

    ', $txt['registration_agreement'], '

    +
    +
    '; + + // Is there more than one language to choose from? + if (count($context['editable_agreements']) > 1) + { + echo ' +
    +

    ', $txt['language_configuration'], '

    +
    +
    +
    + ', $txt['admin_agreement_select_language'], ': + +
    + + + + +
    +
    +
    '; + } + + // Show the actual agreement in an oversized text box. + echo ' +
    + +
    + ', $context['agreement_info'], ' +
    +
    + + + + + + +
    +
    '; +} + +/** + * Template for editing reserved words. + */ +function template_edit_reserved_words() +{ + global $context, $scripturl, $txt; + + if (!empty($context['saved_successful'])) + echo ' +
    ', $txt['settings_saved'], '
    '; + + echo ' +
    +
    +

    ', $txt['admin_reserved_set'], '

    +
    +
    +

    ', $txt['admin_reserved_line'], '

    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    + + + + +
    +
    +
    '; +} + +// Form for editing the privacy policy shown to people registering to the forum. +function template_edit_privacy_policy() +{ + global $context, $settings, $options, $scripturl, $txt; + + if (!empty($context['saved_successful'])) + echo ' +
    ', $txt['settings_saved'], '
    '; + + // Just a big box to edit the text file ;). + echo ' +
    +

    ', $txt['privacy_policy'], '

    +
    +
    '; + + // Is there more than one language to choose from? + if (count($context['editable_policies']) > 1) + { + echo ' +
    +
    + ', $txt['admin_agreement_select_language'], ': + +
    + + + +
    +
    +
    '; + } + + echo ' +
    '; + + // Show the actual policy in an oversized text box. + echo ' + +
    ', $context['privacy_policy_info'], '
    +
    + + + + + + +
    +
    +
    '; +} + +?> diff --git a/Reminder.template.php b/Reminder.template.php new file mode 100644 index 0000000..4a56e03 --- /dev/null +++ b/Reminder.template.php @@ -0,0 +1,205 @@ + +
    + + + +
    '; +} + +/** + * The page to pick an option - secret question/answer (if set) or email + */ +function template_reminder_pick() +{ + global $context, $txt, $scripturl; + + echo ' +
    +
    + +
    '; +} + +/** + * Just a simple "We sent you an email. Click the link in it to continue." message + */ +function template_sent() +{ + global $context; + + echo ' +
    + '; +} + +/** + * Template for setting the new password + */ +function template_set_password() +{ + global $context, $txt, $scripturl, $modSettings; + + echo ' +
    +
    + + + + + +
    + '; +} + +/** + * The page that asks a user to answer their secret question + */ +function template_ask() +{ + global $context, $txt, $scripturl, $modSettings; + + echo ' +
    +
    + +
    + '; + +} + +?> \ No newline at end of file diff --git a/ReportToMod.template.php b/ReportToMod.template.php new file mode 100644 index 0000000..ddb1b32 --- /dev/null +++ b/ReportToMod.template.php @@ -0,0 +1,97 @@ + +
    +

    + ', $txt['preview'], ' +

    +
    +
    +
    + ', empty($context['preview_message']) ? '
    ' : $context['preview_message'], ' +
    +
    +
    '; + + echo ' +
    +
    + +
    +

    ', $context['page_title'], '

    +
    +
    '; + + if (!empty($context['post_errors'])) + { + echo ' +
    +
      '; + + foreach ($context['post_errors'] as $key => $error) + echo ' +
    • ', $error, '
    • '; + + echo ' +
    '; + } + else + echo ' + '; + + echo ' +

    ', $context['notice'], '

    +
    +
    + : +
    +
    + +
    +
    + + + +
    + +
    '; +} + +?> \ No newline at end of file diff --git a/ReportedContent.template.php b/ReportedContent.template.php new file mode 100644 index 0000000..96c4072 --- /dev/null +++ b/ReportedContent.template.php @@ -0,0 +1,573 @@ + + ', $txt['report_action_' . $context['report_post_action']], ' +
    '; + + echo ' +
    +
    +

    + ', $context['view_closed'] ? $txt['mc_reportedp_closed'] : $txt['mc_reportedp_active'], ' +

    +
    +
    '; + + if (!empty($context['reports']) && !$context['view_closed'] && !empty($options['display_quick_mod']) && $options['display_quick_mod'] == 1) + echo ' +
      +
    • + +
    • +
    '; + + echo ' + +
    '; + + foreach ($context['reports'] as $report) + { + echo ' +
    +
    + ', !empty($report['topic']['board_name']) ? '' . $report['topic']['board_name'] . '' : '??', ' / ', $report['subject'], ' ', $txt['mc_reportedp_by'], ' ', $report['author']['link'], ' +
    +
    + ', $txt['mc_reportedp_last_reported'], ': ', $report['last_updated'], ' - '; + + // Prepare the comments... + $comments = array(); + foreach ($report['comments'] as $comment) + $comments[$comment['member']['id']] = $comment['member']['link']; + + echo ' + ', $txt['mc_reportedp_reported_by'], ': ', implode(', ', $comments), ' +
    +
    + ', $report['body'], ' +
    '; + + // Reported post options + template_quickbuttons($report['quickbuttons'], 'reported_posts'); + + echo ' +
    '; + } + + // Were none found? + if (empty($context['reports'])) + echo ' +
    +

    ', $txt['mc_reportedp_none_found'], '

    +
    '; + + echo ' +
    + '; + + if (!empty($context['reports']) && !$context['view_closed'] && !empty($options['display_quick_mod']) && $options['display_quick_mod'] == 1) + echo ' +
    + + +
    '; + + echo ' +
    + +
    '; +} + +/** + * A block to show the current top reported posts. + */ +function template_reported_posts_block() +{ + global $context, $txt, $scripturl; + + echo ' + +
    +
    +
      '; + + foreach ($context['reported_posts'] as $report) + echo ' +
    • + ', $report['subject'], ' ', $txt['mc_reportedp_by'], ' ', $report['author']['link'], ' +
    • '; + + // Don't have any watched users right now? + if (empty($context['reported_posts'])) + echo ' +
    • + ', $txt['mc_recent_reports_none'], ' +
    • '; + + echo ' +
    +
    +
    + + '; +} + +/** + * Handles viewing details of and managing a specific report + */ +function template_viewmodreport() +{ + global $context, $scripturl, $txt; + + // Let them know the action was a success. + if (!empty($context['report_post_action'])) + echo ' +
    + ', $txt['report_action_' . $context['report_post_action']], ' +
    '; + + echo ' +
    +
    +
    +

    + ', sprintf($txt['mc_viewmodreport'], $context['report']['message_link'], $context['report']['author']['link']), ' +

    +
    +
    +

    + + ', sprintf($txt['mc_modreport_summary'], $context['report']['num_reports'], $context['report']['last_updated']), ' + '; + + $report_buttons = array( + 'ignore' => array( + 'text' => !$context['report']['ignore'] ? 'mc_reportedp_ignore' : 'mc_reportedp_unignore', + 'url' => $scripturl.'?action=moderate;area=reportedposts;sa=handle;ignore='.(int) !$context['report']['ignore'].';rid='.$context['report']['id'].';'.$context['session_var'].'='.$context['session_id'].';'.$context['mod-report-ignore_token_var'].'='.$context['mod-report-ignore_token'], + 'class' => !$context['report']['ignore'] ? ' you_sure' : '', + 'custom' => !$context['report']['ignore'] ? ' data-confirm="' . $txt['mc_reportedp_ignore_confirm'] . '"' : '', + 'icon' => 'ignore' + ), + 'close' => array( + 'text' => $context['report']['closed'] ? 'mc_reportedp_open' : 'mc_reportedp_close', + 'url' => $scripturl.'?action=moderate;area=reportedposts;sa=handle;closed='.(int) !$context['report']['closed'].';rid='.$context['report']['id'].';'.$context['session_var'].'='.$context['session_id'].';'.$context['mod-report-closed_token_var'].'='.$context['mod-report-closed_token'], + 'icon' => 'close' + ) + ); + + // Report buttons + template_button_strip($report_buttons, 'right'); + + echo ' +

    +
    +
    + ', $context['report']['body'], ' +
    +
    +
    +

    ', $txt['mc_modreport_whoreported_title'], '

    +
    '; + + foreach ($context['report']['comments'] as $comment) + echo ' +
    +

    + ', sprintf($txt['mc_modreport_whoreported_data'], $comment['member']['link'] . (empty($comment['member']['id']) && !empty($comment['member']['ip']) ? ' (' . $comment['member']['ip'] . ')' : ''), $comment['time']), ' +

    +

    ', $comment['message'], '

    +
    '; + + echo ' +
    +
    +

    ', $txt['mc_modreport_mod_comments'], '

    +
    +
    '; + + if (empty($context['report']['mod_comments'])) + echo ' +
    +

    ', $txt['mc_modreport_no_mod_comment'], '

    +
    '; + + foreach ($context['report']['mod_comments'] as $comment) + { + echo ' +
    +

    + ', $comment['member']['link'], ': (', $comment['time'], ')', ($comment['can_edit'] ? '' . $txt['mc_reportedp_comment_edit'] . '' . $txt['mc_reportedp_comment_delete'] . '' : ''), ' +

    +
    '; + + echo ' +
    +

    ', $comment['message'], '

    +
    '; + } + + echo ' +
    +

    + + ', $txt['mc_reportedp_new_comment'], ' + +

    +
    + +
    + + +
    +
    +
    '; + + template_show_list('moderation_actions_list'); + + echo ' + +
    +
    '; +} + +/** + * Template for editing a mod comment. + */ +function template_edit_comment() +{ + global $context, $scripturl, $txt; + + echo ' +
    +
    +
    +
    +

    ', $txt['mc_modreport_edit_mod_comment'], '

    +
    +
    + +
    + +
    +
    +
    + + +
    +
    '; +} + +/** + * A block to show the current top reported member profiles. + */ +function template_reported_members_block() +{ + global $context, $txt, $scripturl; + + echo ' + +
    +
    +
      '; + + foreach ($context['reported_members'] as $report) + echo ' +
    • + ', $report['user_name'], ' +
    • '; + + // Don't have any reported members right now? + if (empty($context['reported_members'])) + echo ' +
    • + ', $txt['mc_recent_reports_none'], ' +
    • '; + + echo ' +
    +
    +
    + + '; +} + +/** + * Lists all reported members + */ +function template_reported_members() +{ + global $context, $txt, $scripturl, $options; + + // Let them know the action was a success. + if (!empty($context['report_post_action']) && !empty($txt['report_action_' . $context['report_post_action']])) + echo ' +
    + ', $txt['report_action_' . $context['report_post_action']], ' +
    '; + + echo ' +
    +
    +

    + ', $context['view_closed'] ? $txt['mc_reportedp_closed'] : $txt['mc_reportedp_active'], ' +

    +
    +
    '; + + if (!empty($context['reports']) && !$context['view_closed'] && !empty($options['display_quick_mod']) && $options['display_quick_mod'] == 1) + echo ' +
      +
    • + +
    • +
    '; + + echo ' + +
    '; + + foreach ($context['reports'] as $report) + { + echo ' +
    +
    + ', $report['user']['name'], ' +
    +
    + ', $txt['mc_reportedp_last_reported'], ': ', $report['last_updated'], ' - '; + + // Prepare the comments... + $comments = array(); + foreach ($report['comments'] as $comment) + $comments[$comment['member']['id']] = $comment['member']['link']; + + echo ' + ', $txt['mc_reportedp_reported_by'], ': ', implode(', ', $comments), ' +
    +
    + ', template_quickbuttons($report['quickbuttons'], 'reported_members'), ' +
    '; + } + + // Were none found? + if (empty($context['reports'])) + echo ' +
    +

    ', $txt['mc_reportedp_none_found'], '

    +
    '; + + echo ' +
    + +
    + ', (!$context['view_closed'] && !empty($context['reports'])) ? '' : '', ' +
    +
    + +
    '; +} + +/** + * Template for viewing and managing a specific report about a user's profile + */ +function template_viewmemberreport() +{ + global $context, $scripturl, $txt; + + // Let them know the action was a success. + if (!empty($context['report_post_action'])) + echo ' +
    + ', $txt['report_action_' . $context['report_post_action']], ' +
    '; + + echo ' +
    +
    +
    +

    + ', sprintf($txt['mc_viewmemberreport'], $context['report']['user']['link']), ' +

    +
    +
    +

    + + ', sprintf($txt['mc_memberreport_summary'], $context['report']['num_reports'], $context['report']['last_updated']), ' + '; + + $report_buttons = array( + 'ignore' => array( + 'text' => !$context['report']['ignore'] ? 'mc_reportedp_ignore' : 'mc_reportedp_unignore', + 'url' => $scripturl.'?action=moderate;area=reportedmembers;sa=handle;ignore='.(int)!$context['report']['ignore'].';rid='.$context['report']['id'].';'.$context['session_var'].'='.$context['session_id'].';'.$context['mod-report-ignore_token_var'].'='.$context['mod-report-ignore_token'], + 'class' => !$context['report']['ignore'] ? ' you_sure' : '', + 'custom' => !$context['report']['ignore'] ? ' data-confirm="' . $txt['mc_reportedp_ignore_confirm'] . '"' : '', + 'icon' => 'ignore' + ), + 'close' => array( + 'text' => $context['report']['closed'] ? 'mc_reportedp_open' : 'mc_reportedp_close', + 'url' => $scripturl.'?action=moderate;area=reportedmembers;sa=handle;closed='.(int)!$context['report']['closed'].';rid='.$context['report']['id'].';'.$context['session_var'].'='.$context['session_id'].';'.$context['mod-report-closed_token_var'].'='.$context['mod-report-closed_token'], + 'icon' => 'close' + ) + ); + + // Report buttons + template_button_strip($report_buttons, 'right'); + + echo ' +

    +
    +
    +
    +

    ', $txt['mc_memberreport_whoreported_title'], '

    +
    '; + + foreach ($context['report']['comments'] as $comment) + echo ' +
    +

    + ', sprintf($txt['mc_modreport_whoreported_data'], $comment['member']['link'] . (empty($comment['member']['id']) && !empty($comment['member']['ip']) ? ' (' . $comment['member']['ip'] . ')' : ''), $comment['time']), ' +

    +

    ', $comment['message'], '

    +
    '; + + echo ' +
    +
    +

    ', $txt['mc_modreport_mod_comments'], '

    +
    +
    '; + + if (empty($context['report']['mod_comments'])) + echo ' +
    +

    ', $txt['mc_modreport_no_mod_comment'], '

    +
    '; + + foreach ($context['report']['mod_comments'] as $comment) + { + echo ' +
    +

    ', $comment['member']['link'], ': (', $comment['time'], ')', ($comment['can_edit'] ? '' . $txt['mc_reportedp_comment_edit'] . ' ' . $txt['mc_reportedp_comment_delete'] . '' : ''), '

    +
    '; + + echo ' +
    +

    ', $comment['message'], '

    +
    '; + } + + echo ' +
    +

    + + ', $txt['mc_reportedp_new_comment'], ' + +

    +
    + +
    + + +
    +
    +
    '; + + template_show_list('moderation_actions_list'); + + echo ' + +
    +
    '; +} + +?> diff --git a/Reports.template.php b/Reports.template.php new file mode 100644 index 0000000..3902985 --- /dev/null +++ b/Reports.template.php @@ -0,0 +1,237 @@ + +
    +

    ', $txt['generate_reports_type'], '

    +
    +
    +
    '; + + // Go through each type of report they can run. + foreach ($context['report_types'] as $type) + { + if (isset($type['description'])) + echo ' +
    ', $type['description'], '
    '; + + echo ' +
    + + +
    '; + } + echo ' +
    + + +
    + '; +} + +/** + * This is the standard template for showing reports. + */ +function template_main() +{ + global $context, $txt; + + echo ' +
    +

    ', $txt['results'], '

    +
    +
    '; + + if (!empty($context['report_buttons'])) + template_button_strip($context['report_buttons'], 'right'); + + echo ' +
    '; + + // Go through each table! + foreach ($context['tables'] as $table) + { + echo ' + '; + + if (!empty($table['title'])) + echo ' + + + + + + '; + + // Now do each row! + $row_number = 0; + foreach ($table['data'] as $row) + { + if ($row_number == 0 && !empty($table['shading']['top'])) + echo ' + '; + else + echo ' + '; + + // Now do each column. + $column_number = 0; + + foreach ($row as $data) + { + // If this is a special separator, skip over! + if (!empty($data['separator']) && $column_number == 0) + { + echo ' + '; + break; + } + + // Shaded? + if ($column_number == 0 && !empty($table['shading']['left'])) + echo ' + '; + else + echo ' + '; + + $column_number++; + } + + echo ' + '; + + $row_number++; + } + echo ' + +
    ', $table['title'], '
    + ', $data['v'], ': + + ', $data['v'] == $table['default_value'] ? '' : ($data['v'] . (empty($data['v']) ? '' : ':')), ' + + ', $data['v'], ' +
    '; + } +} + +/** + * Header of the print page! + */ +function template_print_above() +{ + global $context, $settings, $modSettings; + + echo ' + + + + ', $context['page_title'], ' + + + '; +} + +/** + * The main print page + */ +function template_print() +{ + global $context; + + // Go through each table! + foreach ($context['tables'] as $table) + { + echo ' +
    + '; + + if (!empty($table['title'])) + echo ' + + + '; + + // Now do each row! + $row_number = 0; + foreach ($table['data'] as $row) + { + if ($row_number == 0 && !empty($table['shading']['top'])) + echo ' + '; + else + echo ' + '; + + // Now do each column!! + $column_number = 0; + foreach ($row as $data) + { + // If this is a special separator, skip over! + if (!empty($data['separator']) && $column_number == 0) + { + echo ' + '; + break; + } + + // Shaded? + if ($column_number == 0 && !empty($table['shading']['left'])) + echo ' + '; + else + echo ' + '; + + $column_number++; + } + + echo ' + '; + + $row_number++; + } + echo ' +
    + ', $table['title'], ' +
    + ', $data['v'], ': + + ', $data['v'] == $table['default_value'] ? '' : ($data['v'] . (empty($data['v']) ? '' : ':')), ' + + ', $data['v'], ' +
    +
    +
    '; + } +} + +/** + * Footer of the print page. + */ +function template_print_below() +{ + echo ' + + +'; +} + +?> \ No newline at end of file diff --git a/Search.template.php b/Search.template.php new file mode 100644 index 0000000..20d581f --- /dev/null +++ b/Search.template.php @@ -0,0 +1,474 @@ + +
    '; + + if (!empty($context['search_errors'])) + echo ' +
    + ', implode('
    ', $context['search_errors']['messages']), ' +
    '; + + if (!empty($context['search_ignored'])) + echo ' +
    + ', $txt['search_warning_ignored_word' . (count($context['search_ignored']) == 1 ? '' : 's')], ': ', implode(', ', $context['search_ignored']), ' +
    '; + + echo ' +
    +

    + ', $txt['set_parameters'], ' +

    +
    + '; + + if (empty($context['search_params']['topic'])) + { + echo ' +
    +
    + + +
    +
    + + + +
    +
    +
    '; + + echo ' + '; + } + + echo ' +
    + '; +} + +/** + * The search results page. + */ +function template_results() +{ + global $context, $options, $txt, $scripturl, $message; + + if (isset($context['did_you_mean']) || empty($context['topics']) || !empty($context['search_ignored'])) + { + echo ' +
    +
    +

    + ', $txt['search_adjust_query'], ' +

    +
    +
    '; + + // Did they make any typos or mistakes, perhaps? + if (isset($context['did_you_mean'])) + echo ' +

    + ', $txt['search_did_you_mean'], ' ', $context['did_you_mean'], '. +

    '; + + if (!empty($context['search_ignored'])) + echo ' +

    + ', $txt['search_warning_ignored_word' . (count($context['search_ignored']) == 1 ? '' : 's')], ': ', implode(', ', $context['search_ignored']), ' +

    '; + + echo ' +
    + ', $txt['search_for'], ': + + + + + + + + + '; + + if (!empty($context['search_params']['brd'])) + foreach ($context['search_params']['brd'] as $board_id) + echo ' + '; + + echo ' +
    +
    +
    '; + } + + if ($context['compact']) + { + echo ' + '; + + echo ' +
    +

    + ', $txt['mlist_search_results'], ': ', $context['search_params']['search'], ' +

    + '; + + // Was anything even found? + if (!empty($context['topics'])) + { + echo ' +
    + ', $txt['search_order'], ' + +
    +
    +
    + +
    '; + } + else + { + echo ' + +
    ', $txt['search_no_results'], '
    '; + } + + // While we have results to show ... + while ($topic = $context['get_topics']()) + { + echo ' +
    '; + + foreach ($topic['matches'] as $message) + { + echo ' +
    +
    #', $message['counter'], '
    +
    +
    +
    ', $topic['board']['link'], ' / ', $message['subject_highlighted'], '
    + ', sprintf(str_replace('
    ', ' ', $txt['last_post_topic']), $message['time'], '' . $message['member']['link'] . ''), '
    +
    +
    +
    '; + + if ($message['body_highlighted'] != '') + echo ' +
    ', $message['body_highlighted'], '
    '; + } + + echo ' +
    '; + } + } + else + { + echo ' +
    +

    + ', $txt['mlist_search_results'], ': ', $context['search_params']['search'], ' +

    + '; + + // Was anything even found? + if (!empty($context['topics'])) + { + echo ' +
    + ', $txt['search_order'], ' + +
    +
    +
    + +
    '; + } + else + { + echo ' + +
    ', $txt['search_no_results'], '
    '; + } + + while ($topic = $context['get_topics']()) + { + foreach ($topic['matches'] as $message) + { + echo ' +
    +
    #', $message['counter'], '
    +
    +
    + ', $topic['board']['link'], ' / ', $message['subject_highlighted'], ' +
    + ', sprintf(str_replace('
    ', ' ', $txt['last_post_topic']), $message['time'], '' . $message['member']['link'] . ''), '
    +
    +
    ', $message['body_highlighted'], '
    '; + + echo ' +
    +
    '; + } + } + } + + echo ' +
    '; + + if (!empty($context['topics'])) + echo ' + '; + + // Show a jump to box for easy navigation. + echo ' + + +
    '; +} + +?> diff --git a/Settings.template.php b/Settings.template.php new file mode 100644 index 0000000..3e4c193 --- /dev/null +++ b/Settings.template.php @@ -0,0 +1,240 @@ + 'show_children', + 'label' => $txt['show_children'], + 'default' => true, + ), + array( + 'id' => 'topics_per_page', + 'label' => $txt['topics_per_page'], + 'options' => array( + 0 => $txt['per_page_default'], + 5 => 5, + 10 => 10, + 25 => 25, + 50 => 50, + ), + 'default' => true, + 'enabled' => empty($modSettings['disableCustomPerPage']), + ), + array( + 'id' => 'messages_per_page', + 'label' => $txt['messages_per_page'], + 'options' => array( + 0 => $txt['per_page_default'], + 5 => 5, + 10 => 10, + 25 => 25, + 50 => 50, + ), + 'default' => true, + 'enabled' => empty($modSettings['disableCustomPerPage']), + ), + array( + 'id' => 'view_newest_first', + 'label' => $txt['recent_posts_at_top'], + 'default' => true, + ), + array( + 'id' => 'show_no_avatars', + 'label' => $txt['show_no_avatars'], + 'default' => true, + ), + array( + 'id' => 'show_no_signatures', + 'label' => $txt['show_no_signatures'], + 'default' => true, + ), + array( + 'id' => 'posts_apply_ignore_list', + 'label' => $txt['posts_apply_ignore_list'], + 'default' => false, + 'enabled' => !empty($modSettings['enable_buddylist']) + ), + $txt['theme_opt_posting'], + array( + 'id' => 'return_to_post', + 'label' => $txt['return_to_post'], + 'default' => true, + ), + array( + 'id' => 'no_new_reply_warning', + 'label' => $txt['no_new_reply_warning'], + 'default' => true, + ), + array( + 'id' => 'auto_notify', + 'label' => $txt['auto_notify'], + 'default' => true, + ), + array( + 'id' => 'wysiwyg_default', + 'label' => $txt['wysiwyg_default'], + 'default' => false, + 'enabled' => empty($modSettings['disable_wysiwyg']), + ), + array( + 'id' => 'drafts_autosave_enabled', + 'label' => $txt['drafts_autosave_enabled'], + 'default' => true, + 'enabled' => !empty($modSettings['drafts_autosave_enabled']) && (!empty($modSettings['drafts_post_enabled']) || !empty($modSettings['drafts_pm_enabled'])), + ), + array( + 'id' => 'drafts_show_saved_enabled', + 'label' => $txt['drafts_show_saved_enabled'], + 'default' => true, + 'enabled' => !empty($modSettings['drafts_show_saved_enabled']) && (!empty($modSettings['drafts_post_enabled']) || !empty($modSettings['drafts_pm_enabled'])), + ), + $txt['theme_opt_moderation'], + array( + 'id' => 'display_quick_mod', + 'label' => $txt['display_quick_mod'], + 'options' => array( + 0 => $txt['display_quick_mod_none'], + 1 => $txt['display_quick_mod_check'], + 2 => $txt['display_quick_mod_image'], + ), + 'default' => true, + ), + $txt['theme_opt_personal_messages'], + array( + 'id' => 'popup_messages', + 'label' => $txt['popup_messages'], + 'default' => true, + ), + array( + 'id' => 'view_newest_pm_first', + 'label' => $txt['recent_pms_at_top'], + 'default' => true, + ), + array( + 'id' => 'pm_remove_inbox_label', + 'label' => $txt['pm_remove_inbox_label'], + 'default' => true, + ), + $txt['theme_opt_calendar'], + array( + 'id' => 'calendar_default_view', + 'label' => $txt['calendar_default_view'], + 'options' => array( + 'viewlist' => $txt['calendar_viewlist'], + 'viewmonth' => $txt['calendar_viewmonth'], + 'viewweek' => $txt['calendar_viewweek'] + ), + 'default' => true, + 'enabled' => !empty($modSettings['cal_enabled']), + ), + array( + 'id' => 'calendar_start_day', + 'label' => $txt['calendar_start_day'], + 'options' => array( + 0 => $txt['days'][0], + 1 => $txt['days'][1], + 6 => $txt['days'][6], + ), + 'default' => true, + 'enabled' => !empty($modSettings['cal_enabled']), + ), + ); +} + +/** + * This pseudo-template defines all the available theme settings (but not their actual values) + */ +function template_settings() +{ + global $context, $txt; + + $context['theme_settings'] = array( + array( + 'id' => 'header_logo_url', + 'label' => $txt['header_logo_url'], + 'description' => $txt['header_logo_url_desc'], + 'type' => 'text', + ), + array( + 'id' => 'site_slogan', + 'label' => $txt['site_slogan'], + 'description' => $txt['site_slogan_desc'], + 'type' => 'text', + ), + array( + 'id' => 'og_image', + 'label' => $txt['og_image'], + 'description' => $txt['og_image_desc'], + 'type' => 'url', + ), + '', + array( + 'id' => 'smiley_sets_default', + 'label' => $txt['smileys_default_set_for_theme'], + 'options' => $context['smiley_sets'], + 'type' => 'text', + ), + '', + array( + 'id' => 'enable_news', + 'label' => $txt['enable_random_news'], + ), + array( + 'id' => 'show_newsfader', + 'label' => $txt['news_fader'], + ), + array( + 'id' => 'newsfader_time', + 'label' => $txt['admin_fader_delay'], + 'type' => 'number', + ), + '', + array( + 'id' => 'number_recent_posts', + 'label' => $txt['number_recent_posts'], + 'description' => $txt['zero_to_disable'], + 'type' => 'number', + ), + array( + 'id' => 'show_stats_index', + 'label' => $txt['show_stats_index'], + ), + array( + 'id' => 'show_latest_member', + 'label' => $txt['latest_members'], + ), + array( + 'id' => 'show_group_key', + 'label' => $txt['show_group_key'], + ), + array( + 'id' => 'display_who_viewing', + 'label' => $txt['who_display_viewing'], + 'options' => array( + 0 => $txt['who_display_viewing_off'], + 1 => $txt['who_display_viewing_numbers'], + 2 => $txt['who_display_viewing_names'], + ), + 'type' => 'list', + ), + ); +} + +?> \ No newline at end of file diff --git a/SplitTopics.template.php b/SplitTopics.template.php new file mode 100644 index 0000000..e98346b --- /dev/null +++ b/SplitTopics.template.php @@ -0,0 +1,221 @@ + +
    + +
    +

    ', $txt['split'], '

    +
    +
    +

    + : + +

    +
      +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    +
    +
    + + +
    +
    +
    + '; +} + +/** + * A simple confirmation that things were split as expected, with links to the current board and the old and new topics. + */ +function template_main() +{ + global $context, $txt, $scripturl; + + echo ' +
    +
    +

    ', $txt['split'], '

    +
    +
    +

    ', $txt['split_successful'], '

    + +
    +
    '; +} + +/** + * The form for selecting which posts to split. + */ +function template_select() +{ + global $context, $txt, $scripturl, $options; + + echo ' +
    +
    +
    +
    +

    ', $txt['split'], ' - ', $txt['select_split_posts'], '

    +
    +
    + ', $txt['please_select_split'], ' +
    +
    + +
    +
      '; + + foreach ($context['not_selected']['messages'] as $message) + echo ' +
    • +
      + + ', sprintf($txt['post_by_member'], $message['subject'], $message['poster']), ' + ', $message['time'], ' +
      +
      ', $message['body'], '
      +
    • '; + + echo ' +
    +
    +
    +
    +

    + ', $txt['split_selected_posts'], ' (', $txt['split_reset_selection'], ') +

    +
    +
    + ', $txt['split_selected_posts_desc'], ' +
    +
    + +
    +
      '; + + if (!empty($context['selected']['messages'])) + foreach ($context['selected']['messages'] as $message) + echo ' +
    • +
      + + ', sprintf($txt['post_by_member'], $message['subject'], $message['poster']), ' + ', $message['time'], ' +
      +
      ', $message['body'], '
      +
    • '; + + echo ' +
    +
    +
    +
    + + + + +
    +
    +
    + '; +} + +?> \ No newline at end of file diff --git a/Stats.template.php b/Stats.template.php new file mode 100644 index 0000000..c9b23f2 --- /dev/null +++ b/Stats.template.php @@ -0,0 +1,264 @@ + +
    +

    ', $context['page_title'], '

    +
    +
    +
    +

    + ', $txt['general_stats'], ' +

    +
    +
    +
    ', $txt['total_members'], ':
    +
    ', $context['show_member_list'] ? '' . $context['num_members'] . '' : $context['num_members'], '
    +
    ', $txt['total_posts'], ':
    +
    ', $context['num_posts'], '
    +
    ', $txt['total_topics'], ':
    +
    ', $context['num_topics'], '
    +
    ', $txt['total_cats'], ':
    +
    ', $context['num_categories'], '
    +
    ', $txt['users_online'], ':
    +
    ', $context['users_online'], '
    +
    ', $txt['most_online'], ':
    +
    ', $context['most_members_online']['number'], ' - ', $context['most_members_online']['date'], '
    +
    ', $txt['users_online_today'], ':
    +
    ', $context['online_today'], '
    '; + + if (!empty($modSettings['hitStats'])) + echo ' +
    ', $txt['num_hits'], ':
    +
    ', $context['num_hits'], '
    '; + + echo ' +
    +
    +
    ', $txt['average_members'], ':
    +
    ', $context['average_members'], '
    +
    ', $txt['average_posts'], ':
    +
    ', $context['average_posts'], '
    +
    ', $txt['average_topics'], ':
    +
    ', $context['average_topics'], '
    +
    ', $txt['total_boards'], ':
    +
    ', $context['num_boards'], '
    +
    ', $txt['latest_member'], ':
    +
    ', $context['common_stats']['latest_member']['link'], '
    +
    ', $txt['average_online'], ':
    +
    ', $context['average_online'], '
    '; + + if (!empty($context['gender'])) + { + echo ' +
    ', $txt['gender_stats'], ':
    +
    '; + + foreach ($context['gender'] as $g => $n) + echo tokenTxtReplace($g), ': ', $n, '
    '; + + echo ' +
    '; + } + + if (!empty($modSettings['hitStats'])) + echo ' +
    ', $txt['average_hits'], ':
    +
    ', $context['average_hits'], '
    '; + + echo ' +
    '; + + foreach ($context['stats_blocks'] as $name => $block) + { + echo ' +
    +
    +

    + ', $txt['top_' . $name], ' +

    +
    +
    '; + + foreach ($block as $item) + { + echo ' +
    + ', $item['link'], ' +
    +
    '; + + if (!empty($item['percent'])) + echo ' +
    '; + else + echo ' +
    '; + + echo ' + ', $item['num'], ' +
    '; + } + + echo ' +
    +
    '; + } + + echo ' +
    +
    +
    +

    + ', $txt['forum_history'], ' +

    +
    '; + + if (!empty($context['yearly'])) + { + echo ' + + + + + + + + '; + + if (!empty($modSettings['hitStats'])) + echo ' + '; + + echo ' + + + '; + + foreach ($context['yearly'] as $id => $year) + { + echo ' + + + + + + '; + + if (!empty($modSettings['hitStats'])) + echo ' + '; + + echo ' + '; + + foreach ($year['months'] as $month) + { + echo ' + + + + + + '; + + if (!empty($modSettings['hitStats'])) + echo ' + '; + + echo ' + '; + + if ($month['expanded']) + { + foreach ($month['days'] as $day) + { + echo ' + + + + + + '; + + if (!empty($modSettings['hitStats'])) + echo ' + '; + + echo ' + '; + } + } + } + } + + echo ' + +
    ', $txt['yearly_summary'], '', $txt['stats_new_topics'], '', $txt['stats_new_posts'], '', $txt['stats_new_members'], '', $txt['most_online'], '', $txt['page_views'], '
    + * ', $year['year'], ' + ', $year['new_topics'], '', $year['new_posts'], '', $year['new_members'], '', $year['most_members_online'], '', $year['hits'], '
    + ', $month['month'], ' ', $month['year'], ' + ', $month['new_topics'], '', $month['new_posts'], '', $month['new_members'], '', $month['most_members_online'], '', $month['hits'], '
    ', $day['year'], '-', $day['month'], '-', $day['day'], '', $day['new_topics'], '', $day['new_posts'], '', $day['new_members'], '', $day['most_members_online'], '', $day['hits'], '
    + + '; + } +} + +?> \ No newline at end of file diff --git a/Themes.template.php b/Themes.template.php new file mode 100644 index 0000000..71a1ff9 --- /dev/null +++ b/Themes.template.php @@ -0,0 +1,1183 @@ + +

    + + ', $txt['themeadmin_install_title'], ' +

    + +
    + ', $txt['themeadmin_explain'], ' +
    '; + + echo ' +
    +
    +

    ', + $txt['settings'], ' +

    +
    +
    +
    +
    + +
    +
    + + +
    +
    + : +
    +
    +
    '; + + foreach ($context['themes'] as $theme) + echo ' +
    '; + + echo ' +
    + + +
    +
    + +
    +
    + + ', $txt['theme_select'], ' +
    +
    + : +
    +
    + + ', $txt['theme_select'], ' +
    +
    + + + +
    +
    '; + + // Link to simplemachines.org for latest themes and info! + echo ' +
    +

    + ', $txt['theme_adding_title'], ' +

    +
    +
    + ', $txt['theme_adding'], ' +
    '; + + // All the install options. + echo ' +
    +
    +

    + ', $txt['theme_install'], ' +

    +
    +
    '; + + if ($context['can_create_new']) + { + // From a file. + echo ' +
    + ', $txt['theme_install_file'], ' +
    + + + + +
    +
    '; + + // Copied from the default. + echo ' +
    + ', $txt['theme_install_new'], ' +
    + + + + +
    +
    '; + } + + // From a dir. + echo ' +
    + ', $txt['theme_install_dir'], ' +
    + + + + +
    +
    '; + + echo ' +
    +
    '; + + echo ' + '; +} + +/** + * This lists all themes + */ +function template_list_themes() +{ + global $context, $scripturl, $txt; + + // Show a nice confirmation message. + if (isset($_GET['done'])) + echo ' +
    + ', $txt['theme_confirmed_' . $_GET['done']], ' +
    '; + + echo ' +
    +

    ', $txt['themeadmin_list_heading'], '

    +
    +
    + ', $txt['themeadmin_list_tip'], ' +
    +
    +
    +

    ', $txt['theme_settings'], '

    +
    +
    '; + + // Show each theme.... with X for delete, an enable/disable link and a link to their own settings page. + foreach ($context['themes'] as $theme) + { + echo ' +
    +

    + + ', $theme['name'] . (!empty($theme['version']) ? ' (' . $theme['version'] . ')' : ''), ' + + + ', (!empty($theme['enable']) || $theme['id'] == 1 ? '' : ''), ''; + + // You *cannot* disable/enable/delete the default theme. It's important! + if ($theme['id'] != 1) + { + // Enable/Disable. + echo ' + '; + + // Deleting. + echo ' + '; + } + + echo ' + +

    +
    +
    +
    +
    ', $txt['themeadmin_list_theme_dir'], ':
    + ', $theme['theme_dir'], $theme['valid_path'] ? '' : ' ' . $txt['themeadmin_list_invalid'], ' +
    ', $txt['themeadmin_list_theme_url'], ':
    +
    ', $theme['theme_url'], '
    +
    ', $txt['themeadmin_list_images_url'], ':
    +
    ', $theme['images_url'], '
    +
    +
    '; + } + + echo ' +
    +

    ', $txt['themeadmin_list_reset'], '

    +
    +
    +
    +
    + : +
    +
    + +
    +
    + : +
    +
    + +
    +
    + + + +
    +
    '; +} + +/** + * This lets you reset themes + */ +function template_reset_list() +{ + global $context, $scripturl, $txt; + + echo ' +
    +

    ', $txt['themeadmin_reset_title'], '

    +
    +
    + ', $txt['themeadmin_reset_tip'], ' +
    +
    '; + + // Show each theme.... with X for delete and a link to settings. + foreach ($context['themes'] as $theme) + { + echo ' +
    +

    ', $theme['name'], '

    +
    +
    + +
    '; + } + + echo ' +
    '; +} + +/** + * This displays the form for setting theme options + */ +function template_set_options() +{ + global $context, $scripturl, $txt; + + echo ' +
    + +
    +

    + ', $context['theme_options_reset'] ? $txt['themeadmin_reset_options_title'] : $txt['theme_options_title'], ' - ', $context['theme_settings']['name'], ' +

    +
    +
    + ', $context['theme_options_reset'] ? $txt['themeadmin_reset_options_info'] : $txt['theme_options_defaults'], ' +
    +
    +
    '; + + $skeys = array_keys($context['options']); + $first_option_key = array_shift($skeys); + $titled_section = false; + + foreach ($context['options'] as $i => $setting) + { + // Just spit out separators and move on + if (empty($setting) || !is_array($setting)) + { + // Insert a separator (unless this is the first item in the list) + if ($i !== $first_option_key) + echo ' +
    +
    +
    '; + + // Should we give a name to this section? + if (is_string($setting) && !empty($setting)) + { + $titled_section = true; + echo ' +
    ' . $setting . '
    +
    '; + } + else + $titled_section = false; + + continue; + } + + echo ' +
    '; + + // Show the change option box? + if ($context['theme_options_reset']) + echo ' + + + '; + + echo ' + '; + + if (isset($setting['description'])) + echo ' +
    + ', $setting['description'], ''; + echo ' +
    '; + + // Display checkbox options + if ($setting['type'] == 'checkbox') + echo ' +
    + + '; + + // How about selection lists, we all love them + elseif ($setting['type'] == 'list') + { + echo ' +
    + '; + } + // A textbox it is then + else + { + echo ' +
    '; + + if (isset($setting['type']) && $setting['type'] == 'number') + { + $min = isset($setting['min']) ? ' min="' . $setting['min'] . '"' : ' min="0"'; + $max = isset($setting['max']) ? ' max="' . $setting['max'] . '"' : ''; + $step = isset($setting['step']) ? ' step="' . $setting['step'] . '"' : ''; + + echo ' + '; + } + + // End of this defintion, close open dds + echo ' +
    '; + } + + // Close the option page up + echo ' +
    + + + +
    +
    '; +} + +/** + * The page for setting and managing theme settings. + */ +function template_set_settings() +{ + global $context, $settings, $scripturl, $txt; + + echo ' +
    +
    +
    +

    + ', $txt['theme_settings'], ' - ', $context['theme_settings']['name'], ' +

    +
    +
    '; + + // @todo Why can't I edit the default theme popup. + if ($context['theme_settings']['theme_id'] != 1) + echo ' +
    +

    + ', $txt['theme_edit'], ' +

    +
    + '; + + echo ' +
    +

    + ', $txt['theme_url_config'], ' +

    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    '; + + // Do we allow theme variants? + if (!empty($context['theme_variants'])) + { + echo ' +
    +

    + ', $txt['theme_variants'], ' +

    +
    +
    +
    + : +
    +
    + +
    +
    + : +
    +
    + + +
    +
    + '; + } + + echo ' +
    +

    + ', $txt['theme_options'], ' +

    +
    +
    '; + + $skeys = array_keys($context['settings']); + $first_setting_key = array_shift($skeys); + $titled_section = false; + + foreach ($context['settings'] as $i => $setting) + { + // Is this a separator? + if (empty($setting) || !is_array($setting)) + { + // We don't need a separator before the first list element + if ($i !== $first_setting_key) + echo ' +
    +
    +
    '; + + // Add a fake heading? + if (is_string($setting) && !empty($setting)) + { + $titled_section = true; + echo ' +
    ' . $setting . '
    +
    '; + } + else + $titled_section = false; + + continue; + } + + echo ' +
    + :'; + + if (isset($setting['description'])) + echo '
    + ', $setting['description'], ''; + + echo ' +
    '; + + // A checkbox? + if ($setting['type'] == 'checkbox') + echo ' +
    + + +
    '; + + // A list with options? + elseif ($setting['type'] == 'list') + { + echo ' +
    + +
    '; + } + // A Textarea? + elseif ($setting['type'] == 'textarea') + { + echo ' +
    + +
    '; + } + // A regular input box, then? + else + { + echo ' +
    '; + + if (isset($setting['type']) && $setting['type'] == 'number') + { + $min = isset($setting['min']) ? ' min="' . $setting['min'] . '"' : ' min="0"'; + $max = isset($setting['max']) ? ' max="' . $setting['max'] . '"' : ''; + $step = isset($setting['step']) ? ' step="' . $setting['step'] . '"' : ''; + + echo ' + +
    '; + } + } + + echo ' +
    + + + +
    +
    +
    '; + + if (!empty($context['theme_variants'])) + { + echo ' + '; + } +} + +/** + * This template allows for the selection of different themes ;) + */ +function template_pick() +{ + global $context, $scripturl, $txt; + + echo ' +
    +
    '; + + // Just go through each theme and show its information - thumbnail, etc. + foreach ($context['available_themes'] as $theme) + { + echo ' +
    +

    + ', $theme['name'], ' +

    +
    +
    +
    +
    + + + +
    +

    ', $theme['description'], '

    '; + + if (!empty($theme['variants'])) + { + echo ' + : + '; + } + + echo ' +
    +

    + ', $theme['num_users'], ' ', ($theme['num_users'] == 1 ? $txt['theme_user'] : $txt['theme_users']), ' +

    +
    + +
    +
    '; + } + + echo ' + + + +
    +
    '; +} + +/** + * Okay, that theme was installed/updated successfully! + */ +function template_installed() +{ + global $context, $scripturl, $txt; + + // The aftermath. + echo ' +
    +

    ', $context['page_title'], '

    +
    +
    '; + + // Oops! there was an error :( + if (!empty($context['error_message'])) + echo ' +

    + ', $context['error_message'], ' +

    '; + + // Not much to show except a link back... + else + echo ' +

    + ', $context['installed_theme']['name'], ' ', $txt['theme_' . (isset($context['installed_theme']['updated']) ? 'updated' : 'installed') . '_message'], ' +

    +

    + ', $txt['back'], ' +

    '; + + echo ' +
    '; +} + +/** + * The page for editing themes. + */ +function template_edit_list() +{ + global $context, $scripturl, $txt; + + echo ' +
    +
    +

    ', $txt['themeadmin_edit_title'], '

    +
    +
    '; + + foreach ($context['themes'] as $theme) + { + echo ' +
    + + ', $theme['name'], '', !empty($theme['version']) ? ' + (' . $theme['version'] . ')' : '', ' + + +
    '; + } + + echo ' +
    +
    '; +} + +/** + * The page allowing you to copy a template from one theme to another. + */ +function template_copy_template() +{ + global $context, $scripturl, $txt; + + echo ' +
    +

    ', $txt['themeadmin_edit_filename'], '

    +
    +
    + ', $txt['themeadmin_edit_copy_warning'], ' +
    +
    +
      '; + + foreach ($context['available_templates'] as $template) + { + echo ' +
    • + ', $template['filename'], $template['already_exists'] ? ' (' . $txt['themeadmin_edit_exists'] . ')' : '', ' + '; + + if ($template['can_copy']) + echo ' + ', $txt['themeadmin_edit_do_copy'], ''; + else + echo $txt['themeadmin_edit_no_copy']; + + echo ' + +
    • '; + } + + echo ' +
    +
    '; +} + +/** + * This lets you browse a list of files in a theme so you can choose which one to edit. + */ +function template_edit_browse() +{ + global $context, $txt; + + if (!empty($context['browse_title'])) + echo ' +
    +

    ', $context['browse_title'], '

    +
    '; + + echo ' + + + + + + + + + '; + + foreach ($context['theme_files'] as $file) + { + echo ' + + + + + '; + } + + echo ' + +
    ', $txt['themeadmin_edit_filename'], '', $txt['themeadmin_edit_modified'], '', $txt['themeadmin_edit_size'], '
    '; + + if ($file['is_editable']) + echo ' + ', $file['filename'], ''; + + elseif ($file['is_directory']) + echo ' + ', $file['filename'], ''; + + else + echo $file['filename']; + + echo ' + ', !empty($file['last_modified']) ? $file['last_modified'] : '', '', $file['size'], '
    '; +} + +/** + * Wanna edit the stylesheet? + */ +function template_edit_style() +{ + global $context, $settings, $scripturl, $txt; + + if ($context['session_error']) + echo ' +
    + ', $txt['error_session_timeout'], ' +
    '; + + // From now on no one can complain that editing css is difficult. If you disagree, go to www.w3schools.com. + echo ' + + '; + + // Just show a big box.... gray out the Save button if it's not saveable... (ie. not 777.) + echo ' +
    +
    +

    ', $txt['theme_edit'], ' - ', $context['edit_filename'], '

    +
    +
    '; + + if (!$context['allow_save']) + echo ' + ', $txt['theme_edit_no_save'], ': ', $context['allow_save_filename'], '
    '; + + echo ' + +
    +
    + + +
    +
    + + '; + + // Hopefully it exists. + if (isset($context['admin-te-' . md5($context['theme_id'] . '-' . $context['edit_filename']) . '_token'])) + echo ' + '; + + echo ' +
    '; +} + +/** + * This edits the template... + */ +function template_edit_template() +{ + global $context, $scripturl, $txt; + + if ($context['session_error']) + echo ' +
    + ', $txt['error_session_timeout'], ' +
    '; + + if (isset($context['parse_error'])) + echo ' +
    + ', $txt['themeadmin_edit_error'], ' +
    ', $context['parse_error'], '
    +
    '; + + // Just show a big box.... gray out the Save button if it's not saveable... (ie. not 777.) + echo ' +
    +
    +

    ', $txt['theme_edit'], ' - ', $context['edit_filename'], '

    +
    +
    '; + + if (!$context['allow_save']) + echo ' + ', $txt['theme_edit_no_save'], ': ', $context['allow_save_filename'], '
    '; + + foreach ($context['file_parts'] as $part) + echo ' + :
    +
    + +
    '; + + echo ' +
    + + + '; + + // Hopefully it exists. + if (isset($context['admin-te-' . md5($context['theme_id'] . '-' . $context['edit_filename']) . '_token'])) + echo ' + '; + + echo ' +
    +
    +
    '; +} + +/** + * This allows you to edit a file + */ +function template_edit_file() +{ + global $context, $scripturl, $txt; + + if ($context['session_error']) + echo ' +
    + ', $txt['error_session_timeout'], ' +
    '; + + // Is this file writeable? + if (!$context['allow_save']) + echo ' +
    + ', $txt['theme_edit_no_save'], ': ', $context['allow_save_filename'], ' +
    '; + + // Just show a big box.... gray out the Save button if it's not saveable... (ie. not 777.) + echo ' +
    +
    +

    ', $txt['theme_edit'], ' - ', $context['edit_filename'], '

    +
    +
    +
    + + + '; + + // Hopefully it exists. + if (isset($context['admin-te-' . md5($context['theme_id'] . '-' . $context['edit_filename']) . '_token'])) + echo ' + '; + + echo ' +
    +
    '; +} + +?> \ No newline at end of file diff --git a/Who.template.php b/Who.template.php new file mode 100644 index 0000000..8a179a1 --- /dev/null +++ b/Who.template.php @@ -0,0 +1,258 @@ + +
    +
    +

    ', $txt['who_title'], '

    +
    +
    +
    + +
    + ', $txt['who_show'], ' + + +
    +
    + + + + + + + + + '; + + foreach ($context['members'] as $member) + { + echo ' + + + + + '; + } + + // No members? + if (empty($context['members'])) + echo ' + + + '; + + echo ' + +
    ', $txt['who_user'], $context['sort_by'] == 'user' ? '' : '', '', $txt['who_time'], $context['sort_by'] == 'time' ? '' : '', '', $txt['who_action'], '
    '; + + // Guests can't be messaged. + if (!$member['is_guest']) + echo ' + + ', $context['can_send_pm'] ? '' : '', $settings['use_image_buttons'] ? '' : $member['online']['label'], $context['can_send_pm'] ? '' : '', ' + '; + + echo ' + + ', $member['is_guest'] ? $member['name'] : '' . $member['name'] . '', ' + '; + + if (!empty($member['ip'])) + echo ' + (' . str_replace(':', ':​', $member['ip']) . ')'; + + echo ' + ', $member['time'], ''; + + if (is_array($member['action'])) + { + $tag = !empty($member['action']['tag']) ? $member['action']['tag'] : 'span'; + + echo ' + <', $tag, !empty($member['action']['class']) ? ' class="' . $member['action']['class'] . '"' : '', '> + ', $txt[$member['action']['label']], (!empty($member['action']['error_message']) ? $member['action']['error_message'] : ''), ' + '; + } + else + echo $member['action']; + + echo ' +
    + ', $txt['who_no_online_' . ($context['show_by'] == 'guests' || $context['show_by'] == 'spiders' ? $context['show_by'] : 'members')], ' +
    +
    + +
    + ', $txt['who_show'], ' + + +
    +
    +
    +
    + '; +} + +/** + * This displays a nice credits page + */ +function template_credits() +{ + global $context, $txt; + + // The most important part - the credits :P. + echo ' +
    +
    +

    ', $txt['credits'], '

    +
    '; + + foreach ($context['credits'] as $section) + { + if (isset($section['pretext'])) + echo ' +
    +

    ', $section['pretext'], '

    +
    '; + + if (isset($section['title'])) + echo ' +
    +

    ', $section['title'], '

    +
    '; + + echo ' +
    +
    '; + + foreach ($section['groups'] as $group) + { + echo ' +
    + ', isset($group['title']) ? '' . $group['title'] . '' : '', ' +
    +
    '; + + $names = sentence_list($group['members']); + echo sprintf($txt['credits_list'], $names); + + echo ' +
    '; + } + + echo ' +
    '; + + if (isset($section['posttext'])) + echo ' +

    ', $section['posttext'], '

    '; + + echo ' +
    '; + } + + // Other software and graphics + if (!empty($context['credits_software_graphics'])) + { + echo ' +
    +

    ', $txt['credits_software_graphics'], '

    +
    +
    '; + + if (!empty($context['credits_software_graphics']['graphics'])) + echo ' +
    +
    ', $txt['credits_graphics'], '
    +
    ', implode('
    ', $context['credits_software_graphics']['graphics']), '
    +
    '; + + if (!empty($context['credits_software_graphics']['software'])) + echo ' +
    +
    ', $txt['credits_software'], '
    +
    ', implode('
    ', $context['credits_software_graphics']['software']), '
    +
    '; + + if (!empty($context['credits_software_graphics']['fonts'])) + echo ' +
    +
    ', $txt['credits_fonts'], '
    +
    ', implode('
    ', $context['credits_software_graphics']['fonts']), '
    +
    '; + echo ' +
    '; + } + + // How about Modifications, we all love em + if (!empty($context['credits_modifications']) || !empty($context['copyrights']['mods'])) + { + echo ' +
    +

    ', $txt['credits_modifications'], '

    +
    +
    +
      '; + + // Display the credits. + if (!empty($context['credits_modifications'])) + echo ' +
    • ', implode('
    • ', $context['credits_modifications']), '
    • '; + + // Legacy. + if (!empty($context['copyrights']['mods'])) + echo ' +
    • ', implode('
    • ', $context['copyrights']['mods']), '
    • '; + + echo ' +
    +
    '; + } + + // SMF itself + echo ' +
    +

    ', $txt['credits_forum'], ' ', $txt['credits_copyright'], '

    +
    +
    + ', $context['copyrights']['smf'], ' +
    +
    '; +} + +?> \ No newline at end of file diff --git a/Xml.template.php b/Xml.template.php new file mode 100644 index 0000000..e32de41 --- /dev/null +++ b/Xml.template.php @@ -0,0 +1,474 @@ + + + ', cleanXml($context['message']), ' +'; +} + +/** + * This defines the XML for the AJAX quote feature + */ +function template_quotefast() +{ + global $context; + + echo '<', '?xml version="1.0" encoding="', $context['character_set'], '"?', '> + + ', cleanXml($context['quote']['xml']), ' +'; +} + +/** + * This defines the XML for the inline edit feature + */ +function template_modifyfast() +{ + global $context; + + echo '<', '?xml version="1.0" encoding="', $context['character_set'], '"?', '> + + + + +'; + +} + +/** + * The XML for handling things when you're done editing a post inline + */ +function template_modifydone() +{ + global $context, $txt; + + echo '<', '?xml version="1.0" encoding="', $context['character_set'], '"?', '> + + '; + if (empty($context['message']['errors'])) + { + // Build our string of info about when and why it was modified + $modified = empty($context['message']['modified']['time']) ? '' : sprintf($txt['last_edit_by'], $context['message']['modified']['time'], $context['message']['modified']['name']); + $modified .= empty($context['message']['modified']['reason']) ? '' : ' ' . sprintf($txt['last_edit_reason'], $context['message']['modified']['reason']); + + echo ' + + + + '; + } + else + echo ' + ', $context['message']['errors']), ']]>'; + echo ' + +'; +} + +/** + * This handles things when editing a topic's subject from the messageindex. + */ +function template_modifytopicdone() +{ + global $context, $txt; + + echo '<', '?xml version="1.0" encoding="', $context['character_set'], '"?', '> + + '; + if (empty($context['message']['errors'])) + { + // Build our string of info about when and why it was modified + $modified = empty($context['message']['modified']['time']) ? '' : sprintf($txt['last_edit_by'], $context['message']['modified']['time'], $context['message']['modified']['name']); + $modified .= empty($context['message']['modified']['reason']) ? '' : sprintf($txt['last_edit_reason'], $context['message']['modified']['reason']); + + echo ' + ' . $modified . ''), ']]>'; + + if (!empty($context['message']['subject'])) + echo ' + '; + } + else + echo ' + ', $context['message']['errors'])), ']]>'; + echo ' + +'; +} + +/** + * The massive XML for previewing posts. + */ +function template_post() +{ + global $context; + + echo '<', '?xml version="1.0" encoding="', $context['character_set'], '"?', '> + + + + + + '; + + if (!empty($context['post_error'])) + foreach ($context['post_error'] as $message) + echo ' + '; + + echo ' + + + + + ', isset($context['post_error']['no_message']) || isset($context['post_error']['long_message']) ? ' + ' : '', ' + + ', isset($context['topic_last_message']) ? $context['topic_last_message'] : '0', ''; + + if (!empty($context['previous_posts'])) + { + echo ' + '; + + foreach ($context['previous_posts'] as $post) + echo ' + + + + + ', $post['is_ignored'] ? '1' : '0', ' + '; + + echo ' + '; + } + + echo ' +'; +} + +/** + * All the XML for previewing a PM + */ +function template_pm() +{ + global $context, $txt; + + // @todo something could be removed...otherwise it can be merged again with template_post + echo '<', '?xml version="1.0" encoding="', $context['character_set'], '"?', '> + + + + + + '; + + if (!empty($context['post_error']['messages'])) + foreach ($context['post_error']['messages'] as $message) + echo ' + '; + + echo ' + + + + ', isset($context['post_error']['no_message']) || isset($context['post_error']['long_message']) ? ' + ' : '', ' + '; + + echo ' +'; +} + +/** + * The XML for previewing a warning + */ +function template_warning() +{ + global $context; + + // @todo something could be removed...otherwise it can be merged again with template_post + echo '<', '?xml version="1.0" encoding="', $context['character_set'], '"?', '> + + + + + + '; + + if (!empty($context['post_error']['messages'])) + foreach ($context['post_error']['messages'] as $message) + echo ' + '; + + echo ' + '; + + echo ' +'; +} + +/** + * The XML for hiding/showing stats sections via AJAX + */ +function template_stats() +{ + global $context, $modSettings; + + if (empty($context['yearly'])) + return; + + echo '<', '?xml version="1.0" encoding="', $context['character_set'], '"?', '> +'; + foreach ($context['yearly'] as $year) + foreach ($year['months'] as $month) + { + echo ' + '; + + foreach ($month['days'] as $day) + echo ' + '; + + echo ' + '; + } + + echo ' +'; +} + +/** + * The XML for selecting items to split + */ +function template_split() +{ + global $context; + + echo '<', '?xml version="1.0" encoding="', $context['character_set'], '"?', '> + + + '; + foreach ($context['changes'] as $change) + { + if ($change['type'] == 'remove') + echo ' + '; + else + echo ' + + + + + + '; + } + echo ' +'; +} + +/** + * This is just to hold off some errors if people are stupid. + */ +if (!function_exists('template_button_strip')) +{ + function template_button_strip($button_strip, $direction = 'top', $strip_options = array()) + { + } + + function template_menu() + { + } + + function theme_linktree() + { + } +} + +/** + * XML for search results + */ +function template_results() +{ + global $context, $txt; + echo '<', '?xml version="1.0" encoding="', $context['character_set'], '"?', '> +'; + + if (empty($context['topics'])) + echo ' + ', $txt['search_no_results'], ''; + else + { + echo ' + '; + + while ($topic = $context['get_topics']()) + { + echo ' + + ', $topic['id'], ' + ', $topic['relevance'], ' + + ', $topic['board']['id'], ' + ', cleanXml($topic['board']['name']), ' + ', $topic['board']['href'], ' + + + ', $topic['category']['id'], ' + ', cleanXml($topic['category']['name']), ' + ', $topic['category']['href'], ' + + '; + + foreach ($topic['matches'] as $message) + { + echo ' + + ', $message['id'], ' + + + + ', $message['timestamp'], ' + ', $message['start'], ' + + + ', $message['member']['id'], ' + ', cleanXml($message['member']['name']), ' + ', $message['member']['href'], ' + + '; + } + echo ' + + '; + } + + echo ' + '; + } + + echo ' +'; +} + +/** + * The XML for the Jump To box + */ +function template_jump_to() +{ + global $context; + + echo '<', '?xml version="1.0" encoding="', $context['character_set'], '"?', '> +'; + + foreach ($context['jump_to'] as $category) + { + echo ' + '; + + foreach ($category['boards'] as $board) + echo ' + '; + } + echo ' +'; +} + +/** + * The XML for displaying a column of message icons and selecting one via AJAX + */ +function template_message_icons() +{ + global $context; + + echo '<', '?xml version="1.0" encoding="', $context['character_set'], '"?', '> +'; + + foreach ($context['icons'] as $icon) + echo ' + '; + + echo ' +'; +} + +/** + * The XML for instantly showing whether a username is valid on the registration page + */ +function template_check_username() +{ + global $context; + + echo '<', '?xml version="1.0" encoding="', $context['character_set'], '"?', '> + + ', cleanXml($context['checked_username']), ' +'; +} + +/** + * This prints XML in its most generic form. + */ +function template_generic_xml() +{ + global $context; + + echo '<', '?xml version="1.0" encoding="', $context['character_set'], '"?', '>'; + + // Show the data. + template_generic_xml_recursive($context['xml_data'], 'smf', '', -1); +} + +/** + * Recursive function for displaying generic XML data. + * + * @param array $xml_data An array of XML data + * @param string $parent_ident The parent tag + * @param string $child_ident The child tag + * @param int $level How many levels to indent the code + */ +function template_generic_xml_recursive($xml_data, $parent_ident, $child_ident, $level) +{ + // This is simply for neat indentation. + $level++; + + echo "\n" . str_repeat("\t", $level), '<', $parent_ident, '>'; + + foreach ($xml_data as $key => $data) + { + // A group? + if (is_array($data) && isset($data['identifier'])) + template_generic_xml_recursive($data['children'], $key, $data['identifier'], $level); + // An item... + elseif (is_array($data) && isset($data['value'])) + { + echo "\n", str_repeat("\t", $level), '<', $child_ident; + + if (!empty($data['attributes'])) + foreach ($data['attributes'] as $k => $v) + echo ' ' . $k . '="' . $v . '"'; + echo '>'; + } + } + + echo "\n", str_repeat("\t", $level), ''; +} + +?> \ No newline at end of file diff --git a/css/admin.css b/css/admin.css new file mode 100644 index 0000000..5f1694b --- /dev/null +++ b/css/admin.css @@ -0,0 +1,650 @@ +/* Start with most common */ +.action_admin .generic_list { + overflow: auto; +} +#admin_content .windowbg { + /*margin: 0 0 10px 0;*/ + box-shadow: none; + padding: 1em; +} +#admin_content tr.windowbg td { + padding: .3em 1em; +} +#admin_content .windowbg form p { + display: flex; + justify-content: space-between; +} +#admin_content .button:not(.floatnone) { + float: right; +} +.action_admin .table_grid td { + border: 1px solid #ddd; + border-top: 0; +} +.action_admin .generic_list .flow_auto { + padding: 4px 2px; +} +.windowbg.nopadding { + margin: 0 !important; + padding: 0; +} +.windowbg ol { + margin-top: 0; + margin-bottom: 0; +} +a.help span { + margin-right: 2px; +} +.table_caption, tr.table_caption td { + color: #000; + font-size: 10px; + font-weight: bold; +} +.additional_row div.floatleft { + padding: 0 10px; +} +fieldset { + padding: 6px; +} +fieldset dl { + margin: 0; +} +legend { + font-weight: bold; + color: #000; +} + +/* Styles for the admin home screen. +------------------------------------------------------- */ +/* Admin quick search bar, and results page. */ +.admin_search { + padding: 5px; + font-size: 0.9em; + float: right; + display: flex; + justify-content: space-between; + align-items: center; +} +.admin_search input, .admin_search select, .admin_search .button { + border-radius: 4px; + margin: 0 0 0 2px; +} +.admin_search input[type="search"] { + min-width: 0; + flex: 1 1 auto; +} + +/* The welcome thingy. */ +#welcome { + border: 1px solid #ddd; + border-top: none; + border-radius: 0 0 7px 7px; + font-size: 0.9em; + padding: 12px 9px 8px 9px; +} +#welcome a { + font-weight: bold; +} +#welcome img { + vertical-align: middle; +} +.search_results { + margin: 0 -6px; +} +.search_results li { + margin: 0; + padding: 5px 0; + overflow: auto; + line-height: 1.7em; + border-bottom: double #ccc; +} +.search_results li:last-child { + border: none; +} +.search_results li a strong { + color: #346; +} +.search_results li p { + padding: 0 20px; + line-height: 1.7em; +} + +/* Cleaned this up a bit for less clutter. +/* Admin and moderation could generally do with a clean up everywhere. +/* Live news from smorg and support information. */ +#live_news, #support_info { + width: 70%; +} +#support_info { + width: 30%; + padding-left: 6px; +} +#admin_main_section { + overflow: auto; +} +#admin_main_section .windowbg { + padding: 6px 0; + border-radius: 0; + height: 12em; + overflow: auto; +} +#smfAnnouncements dt { + padding: 4px 6px 2px 6px; + border-top: 1px solid #bf6900; +} +#smfAnnouncements dt a { + color: #bf6900; + font-weight: bold; + display: block; +} +#smfAnnouncements dd { + margin: 0; + padding: 6px 12px; + border-top: double #ddd; +} + +fieldset.admin_group legend { + background: #eaf1f4; + border: 1px solid #cacdd3; + padding: 1px 5px; + border-radius: 3px; +} +fieldset.admin_group a { + display: inline-block; + width: 100px; + font-size: 85%; + text-align: center; + vertical-align: top; +} +fieldset.admin_group .inactive { + opacity: 0.4; +} + +/* The update warning. */ +#update_section { + margin: 6px 0; +} + +/* The icons. */ +.large_admin_menu_icon_file { + margin: 0 auto; + display: block; + width: 32px; + height: 32px; +} +.large_admin_menu_icon::before { + background: url(../images/icons/admin_sprite.png) no-repeat -5px -47px; + margin: 0 auto; + display: block; + content: ''; + width: 32px; + height: 32px; +} +.large_admin_menu_icon.attachment::before { + background-position: -5px -5px; +} +.large_admin_menu_icon.ban::before { + background-position: -47px -5px; +} +.large_admin_menu_icon.boards::before { + background-position: -89px -5px; +} +.large_admin_menu_icon.calendar::before { + background-position: -131px -5px; +} +.large_admin_menu_icon.current_theme::before { + background-position: -173px -5px; +} +.large_admin_menu_icon.default::before { + background-position: -5px -47px; +} +.large_admin_menu_icon.engines::before { + background-position: -47px -47px; +} +.large_admin_menu_icon.exit::before { + background-position: -89px -47px; +} +.large_admin_menu_icon.features::before { + background-position: -131px -47px; +} +.large_admin_menu_icon.languages::before { + background-position: -173px -47px; +} +.large_admin_menu_icon.logs::before { + background-position: -5px -89px; +} +.large_admin_menu_icon.mail::before { + background-position: -47px -89px; +} +.large_admin_menu_icon.maintain::before { + background-position: -89px -89px; +} +.large_admin_menu_icon.membergroups::before { + background-position: -131px -89px; +} +.large_admin_menu_icon.members::before { + background-position: -173px -89px; +} +.large_admin_menu_icon.modifications::before { + background-position: -5px -131px; +} +.large_admin_menu_icon.news::before { + background-position: -47px -131px; +} +.large_admin_menu_icon.packages::before { + background-position: -89px -131px; +} +.large_admin_menu_icon.paid::before { + background-position: -131px -131px; +} +.large_admin_menu_icon.permissions::before { + background-position: -173px -131px; +} +.large_admin_menu_icon.posts::before { + background-position: -5px -173px; +} +.large_admin_menu_icon.regcenter::before { + background-position: -47px -173px; +} +.large_admin_menu_icon.reports::before { + background-position: -89px -173px; +} +.large_admin_menu_icon.scheduled::before { + background-position: -131px -173px; +} +.large_admin_menu_icon.search::before { + background-position: -173px -173px; +} +.large_admin_menu_icon.security::before { + background-position: -215px -5px; +} +.large_admin_menu_icon.server::before { + background-position: -215px -47px; +} +.large_admin_menu_icon.smiley::before { + background-position: -215px -89px; +} +.large_admin_menu_icon.support::before { + background-position: -215px -131px; +} +.large_admin_menu_icon.themes::before { + background-position: -215px -173px; +} +.large_admin_menu_icon.warning::before { + background-position: -5px -215px; +} + +/* Styles for the support and credits page. +/* Hey, people might actually want to put their names on it now! +/* Only a couple of trivial markup hacks that wont break any mods or themes. +/* The older I get, the more devious I get. :D +/* Nobody ever themes admin anyway. That's why it looked like crap. */ +#support_credits_list dl { + padding: 0 6px; +} +#support_credits_list dt { + float: left; + padding: 6px 0.8em 0 0; + text-indent: -4px; +} +#support_credits_list dd { + padding: 6px 0; +} + +/* Styles for the package manager. */ +#package_list .tborder { + margin: .25em 0 .25em 26px; +} +#package_list ol, #package_list ol li { + list-style: decimal; + margin-left: 50px; + border: none; +} +#package_list li { + border: 1px solid #cacdd3; + padding: 0.2em; + margin: 1px; +} +.package_section { + border: 1px solid #cacdd3; +} +span.package_server { + padding: 0 3em; +} +pre.file_content { + overflow: auto; + width: 100%; + padding-bottom: 1em; +} +#view_package table { + border-collapse: collapse; +} +#view_package td[colspan="5"] { + border: none; + font-size: 0.9em; + padding: 0; +} + +/* Styles for the file permissions section. */ +.file_permissions { + font-size: 0.8em; + white-space: nowrap; +} +.perms_status { + display: block; + width: 35%; + text-align: center; +} +.perm_read { + background-color: #d1f7bf; + width: 8%; +} +.perm_writable { + background-color: #ffbbbb; + width: 8%; +} +.perm_execute { + background-color: #fdd7af; + width: 8%; +} +.perm_custom { + background-color: #c2c6c0; + width: 8%; +} +.perm_no_change { + background-color: #eee; + width: 8%; +} + +/* Styles for the BBC permissions */ +.list_bbc { + width: 33%; +} + +/* Styles for the manage boards section. */ +#manage_boards { + overflow: auto; +} +.roundframe .windowbg { + border: 0; + padding: 0; + background: none; +} +#manage_boards li.windowbg { + padding: 8px 0; + margin: 0; + border-radius: 0; + border: 1px solid #ddd; + border-bottom: none; +} +#manage_boards li.windowbg:first-child { + border-top: none; +} +#manage_boards li.windowbg:last-child { + border-bottom: 1px solid #ddd; +} +#manage_boards li.windowbg:hover { + background: #d0e7f8; +} +#manage_boards li .floatleft { + font-weight: bold; + padding: 0 6px; +} +#manage_boards li#recycle_board { + background-color: #dee; +} +#manage_boards li.redirect_board, #manage_boards li.redirect_board:hover { + background-color: #eed; +} +.move_links { + padding: 0 13px 0 0; +} +#manage_boards .button { + margin: 0 8px 0 0; +} +#manage_boards dl { + padding: 8px 6px 0 6px; +} + +#manage_boards dl textarea, #manage_boards dl table { + margin: 0 0 8px 0; +} +#manage_boards span.post_group, #manage_boards span.regular_members { + border-bottom: 1px dotted #000; + cursor: help; +} +.select_all_box { + display: none; +} + +/* Styles for the manage members section. */ +.msearch_details { + display: block; + width: 49%; +} +dl.right dt { + padding-right: 10px; +} + +/* Styles for the manage membergroups section. */ +.denyboards_layout .board:hover { + background: #e3e9ec; +} +.all_boards_in_cat { + margin-left: 2.5em; +} + +/* Styles for the question and answers */ +fieldset.qa_fieldset { + clear: both; + display: none; +} + +/* Styles for the manage search section. */ +span.search_weight { + width: 40px; + padding: 0 0.5em; + text-align: right; +} +.search_settings { + width: 47%; +} + +/* Styles for the manage bans section. */ +.ban_restriction { + margin: 0.2em 0 0.2em 2.2em; +} +.ban_settings { + width: 46%; +} +#manage_bans dl { + margin-bottom: 1em; +} +#manage_bans fieldset dl.settings { + margin-bottom: 0; +} +#manage_bans textarea { + min-height: 4em; + height: 5em; +} + +/* Styles for the manage subscriptions section. */ +#fixed_area { + width: 97%; +} + +/* Styles for the manage permissions section. */ +.perm_name, .perm_profile, .perm_board { + display: block; + width: 40%; +} +.perm_boards { + padding: 0; + margin: 0 0 0.6em 0; +} +.perm_boards li { + list-style-type: none; + border: 1px solid #cacdd3; + border-top: 0; + padding: 0.2em; +} +.perm_boards li:first-child { + border-top: 1px solid #cacdd3; +} +.perm_groups { + background-color: #fff; +} +.perms { + width: 20px; + display: inline-block; + text-align: center; +} + +/* Styles for the themes section. */ +ul.theme_options { + padding: 0; + margin: 0; +} +ul.theme_options li { + list-style: none; + padding: 0.4em; +} +.is_directory { + padding-left: 18px; +} +.is_directory span { + margin: -2px 3px 0 0; +} +.edit_file { + width: 100%; + font-family: monospace; + margin: 1ex 0; + white-space: pre; +} + +dl.themes_list { + margin: 0; +} +dl.themes_list dt { + margin-bottom: 3px; + width: 40%; +} +dl.themes_list dd { + width: 59%; + font-style: italic; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; +} + +/* Generic boxes/textboxes requires to be full-width */ +#agreement, #reserved { + display: block; + width: 100%; +} +#modcenter { + display: flex; + width: 100%; + flex-direction: column; +} + +#modcenter .half_content { + width: 100%; +} +#modcenter .half_content .windowbg { + padding: 1em; +} +#modcenter .half_content .windowbg ul { + list-style: initial; +} +#modcenter .half_content .windowbg ul { + margin-left: 1em; +} +/* Styles for the moderation center. */ +/* Moderation Notes */ +ul.moderation_notes { + margin: 0; + padding: 0; + list-style: none; + overflow: auto; + height: 10.2em; +} +ul.moderation_notes li { + padding: 0.2em; + border-bottom: 1px solid #ccc; +} +.notes { + margin-top: 0.4em; +} +.post_note { + width: calc(100% - 17ex); +} +.post_note input { + width: 100%; +} + +/* Styles for the Report generation */ +#report_buttons { + min-height: 2.4em; + padding: 3px 0; +} +.report_results th { + border-left: 1px solid #ddd; + border-right: 1px solid #ddd; +} + +#support_credits .sub_bar { + padding: 6px 0px 5px 0px; +} +#taskpad .button, #admin_form_wrapper { + margin: 5px 0 5px 0; +} +h3.config_hd { + background: url(../images/icons/config_hd.png) no-repeat 12px; + padding: 8px 0 8px 45px; +} +.full_width { + width: 100%; +} + +#versions .table_grid { + margin: 0; +} +#Sources .half_table, #Default .half_table, #Languages .half_table { + padding-left: 20px; +} + +.windowbg.highlight2 { + background: #d0e7f8; +} + +/* Css edit page */ +#css_preview_box { + margin-bottom: 2ex; + border: 1px solid #777; + width: 100%; + height: 400px; +} + +/* Smileys and Message icons section */ +.move_smileys img { + padding: 2px; + border: 2px solid transparent; + border-radius: 2px; + vertical-align: middle; +} + +.move_smileys a:hover img { + border-color: #71a0c8; +} + +.move_smileys .selected_item { + border-color: #ffb42d; +} + +/* Progress bars */ + +.progress_bar { + margin: 20px auto; + max-width: 750px; +} diff --git a/css/calendar.css b/css/calendar.css new file mode 100644 index 0000000..63d1148 --- /dev/null +++ b/css/calendar.css @@ -0,0 +1,351 @@ +/* Styles for the calendar section. +------------------------------------------------- */ +#calendar { + overflow: hidden; +} +#calendar .windowbg { + box-shadow: none; + border-radius: 0; + box-sizing: content-box; + margin: 0; +} +/* Used to indicate the current day in the grid. */ +#main_grid .calendar_today span.day_text, +#month_grid .calendar_today, +.calendar_week tr.days_wrapper td.calendar_today:first-child { + font-weight: bold; +} +.calendar_today, +td.days:hover { + background: #fff; +} +#month_grid { + width: 214px; + float: left; + text-align: center; + overflow: hidden; + margin-right: 10px; +} +#month_grid h3 a { + padding: 0 6px 0 6px; +} +#month_grid table { + width: 100%; + margin-bottom: 12px; + border-collapse: collapse; + background: #f0f4f7; + border: 1px solid #ddd; +} +#main_grid { + overflow: auto; +} +#main_grid table { + width: 99.9%; + border-collapse: collapse; + background: #f0f4f7; + margin: 1px 0 0 0; + border: 1px solid #ddd; + overflow: auto; +} +#main_grid .cat_bar { + border-radius: 5px 5px 0 0; +} +#month_grid th:first-child { + background: #e7eaef; +} +#month_grid th.days { + background: #e7eaef; + font-size: smaller; +} +#month_grid th.days, +#month_grid td.weeks { + padding: 2px; + text-align: center; +} +#month_grid td.weeks { + font-size: large; + background: #e7eaef; + width: 5%; +} +#month_grid td.weeks a:hover { + text-decoration: underline; +} +#month_grid h3.catbg, +#main_grid h3.catbg { + padding: 8px 6px 4px 6px; +} +#main_grid h3.catbg span { + display: block; + font-size: 1.5em; + margin: -3px 4px 0 4px; +} +#main_grid th:first-child { + background: #e7eaef; +} +#main_grid th.days { + width: 14%; + padding: 5px 10px; + text-align: left; + background: #e7eaef; +} +#main_grid td.weeks { + text-align: center; + font-weight: bold; + font-size: 1.8em; + background: #e7eaef; + padding: 5px; +} +#main_grid td.weeks a:hover { + text-decoration: none; +} +/* Main Highlighting */ +#main_grid td.disabled, +#month_grid td.disabled { + background: #eee; + border: 1px solid #ddd; +} +#main_grid td.events, +#month_grid td.events { + background: rgba(30, 245, 20, 0.1); +} +#main_grid td.holidays, +#month_grid td.holidays { + background: rgba(23, 110, 245, 0.1); +} +#main_grid td.birthdays, +#month_grid td.birthdays { + background: rgba(102, 0, 255, 0.1); +} +/* Special Case Highlighting */ +#main_grid td.events:hover, +#month_grid td.events:hover, +#month_grid td.calendar_today.events { + background: rgba(30, 245, 20, 0.2); +} +#main_grid td.holidays:hover, +#month_grid td.holidays:hover, +#month_grid td.calendar_today.holidays { + background: rgba(23, 110, 245, 0.2); +} +#main_grid td.birthdays:hover, +#month_grid td.birthdays:hover, +#month_grid td.calendar_today.birthdays { + background: rgba(153, 51, 255, 0.2); +} +#main_grid td.days, +#month_grid td.days { + vertical-align: top; + text-align: left; + border-right: 1px solid #ddd; + border-bottom: 1px solid #ddd; +} +#main_grid td.days { + padding: 5px; +} +#month_grid td.days { + padding: 0; + width: 12.5%; + text-align: center; +} +#month_grid td.days a { + display: block; + padding: 5px; +} +#month_grid td.days a:hover { + text-decoration: none; + background: rgba(97, 135, 166, 0.2); +} +#main_grid tbody tr:nth-child(2) td.days, +#month_grid tbody tr:nth-child(2) { + border-top: 1px solid #ddd; +} +#main_grid tbody tr.days_wrapper > td:nth-child(2), +#month_grid tr.days_wrapper > td:nth-child(2) { + border-left: 1px solid #ddd; +} +#main_grid tr.days_wrapper:nth-child(2) > td.weeks { + border-top: 1px solid #ddd; +} +#main_grid table:last-child td.weeks { + border-bottom: 1px solid #ddd; +} +#main_grid tr:not(.days_wrapper) th, +#main_grid tr:not(.days_wrapper) td { + min-height: 30px; +} +#calendar_range, +#calendar_navigation { + padding: 5px 0; + text-align: center; + max-width: 50%; + margin: auto; +} +#main_grid .act_day { + font-size: 12pt; +} +#main_grid .active_post_event > a { + color: #999; +} +div.week_month_title { + font-weight: bold; + font-size: xx-large; + margin: 0.8em 0 0.4em 0.15em; + line-height: 1.2em; +} +div.week_month_title a { + color: #555; +} +td.week_post { + vertical-align: middle !important; +} +div.week_add_event { + /* text-align: center; */ +} +div.week_add_event > a { + /* font-size: x-large; */ + color: #999; +} +div.week_add_event > a:hover { + color: #555; +} +span.hidelink { + font-style: italic; +} +#view_button { + margin-top: -2px; + margin-left: inherit; +} +#main_grid .buttonrow, +#main_grid .buttonlist { + margin: 5px 0; + padding: 0 +} +#main_grid td.days, +.calendar_week td.days { + height: 100px; + padding: 10px; +} +.modify_event:hover { + text-decoration: none; +} +.modify_event_links { + float: right; +} +.event_wrapper:not(:last-child) { + margin-bottom: 5px; + padding-bottom: 5px; + border-bottom: 1px solid #ddd; +} +.event_time, .event_location { + color: #777; +} +.post_event_link { + vertical-align: middle; + height: 18px; + display: inline-block; +} +.active_post_event { + margin-top: 1em; +} + +/* Break long words in calendar table cells to avoid layout problems */ +#main_grid td.days { + -webkit-hyphens: auto; + -ms-hyphens: auto; + hyphens: auto; + word-wrap: break-word; /* IE fallback */ + overflow-wrap: break-word; +} + +/* At less than 1024px wide, #main_grid needs all the space it can get */ +@media (max-width: 1023px) { + #month_grid { + display: none; + } +} + +/* Small screens get the calendar in a vertical list */ +@media (max-width: 665px) { + #main_grid table { + border: none; + background: none; + } + #main_grid tr { + margin-bottom: 1em; + } + #main_grid tr:first-of-type { + display: none; + } + #main_grid tr:not(:first-of-type) { + display: block; + } + #main_grid td { + display: block; + } + + #main_grid .calendar_table .days { + margin-top: 0; + height: auto; + } + #main_grid .calendar_table .days:not(.disabled) { + min-height: 45px; + } + #main_grid .calendar_table .weeks a::before { + content: attr(title); + font-size: 0.65em; + margin: 0 0.5em; + vertical-align: top; + } + #main_grid .calendar_table .weeks { + margin-top: 0; + } + + #main_grid .calendar_week tr { + border: 1px solid #ddd !important; + } + #main_grid .calendar_week td { + margin: 0; + height: auto; + border: none !important; + } + #main_grid .calendar_week .event_col::before, + #main_grid .calendar_week .holiday_col::before, + #main_grid .calendar_week .birthday_col::before { + content: attr(data-css-prefix); + } + #main_grid .calendar_week .holiday_col:empty { + display: none; + } + #main_grid .calendar_week .birthday_col:empty { + display: none; + } + div.week_add_event { + display: inline-block; + } + div.week_add_event > a { + font-size: 1em; + text-decoration: underline; + } +} + +@media (max-width: 639px) { + .calendar_top { + padding: 12px 8px; + } + #calendar_range, + #calendar_navigation { + max-width: none; + } +} +@media (max-width: 539px) { + #calendar_range { + clear: both; + padding: 10px 0 0; + } +} +@media (max-width: 479px) { + #calendar_navigation { + clear: both; + padding: 10px 0 0; + } +} \ No newline at end of file diff --git a/css/calendar.rtl.css b/css/calendar.rtl.css new file mode 100644 index 0000000..2622398 --- /dev/null +++ b/css/calendar.rtl.css @@ -0,0 +1,23 @@ +/* Styles for the calendar section. +------------------------------------------------- */ +#main_grid .cat_bar { + margin: 0 0 0 2px; +} +#month_grid { + float: right; + margin: 0 0 0 1%; +} +#main_grid table.weeklist td.windowbg { + border-left: 2px solid #fff; + border-bottom: 2px solid #fff; +} +#main_grid img.calendar_icon { + float: right; + margin: 0 0 0 4px; +} +#main_grid table.weeklist td.weekdays { + text-align: left; + vertical-align: middle; + border-right: 2px solid #fff; + border-bottom: 2px solid #fff; +} \ No newline at end of file diff --git a/css/index.css b/css/index.css new file mode 100644 index 0000000..d7f9dce --- /dev/null +++ b/css/index.css @@ -0,0 +1,4905 @@ +/* You can find detailed information at https://wiki.simplemachines.org/smf/Curve2_CSS */ + +.test { + background : bisque ; + display : block ; +} + +/* Variables */ +html { + --bgcolor: #9890bd; + --dark-color: #2d1040; /* Pour les textes entre autre */ + --color1: #6359db; + --color2: #6639af; + --color3: #9073ff; + --color4: #483D8B; /* Liens */ + --color5: #a6006c; /* liens cassés et erreurs */ + --neutral-color: #ddd; /* Gris */ + --neutral-light-color: #ffffff; /* Blanc */ + --neutral-mid-color: #787392; /* Contraste OK sur blanc mais attire moins l'œil ; gris */ + --khanat-color: #100873; + --khaganat-color: #8530bf ; + --colortest: bisque ; +} + +/* Index */ + +html { + scroll-padding-top: 3rem; + height:100%; +} +body { + background: var(--bgcolor); + font-size: 100%; + font-family: "Luciole","Ubuntu","Cantarell","Segoe UI","Roboto","Oxygen","Fira Sans","Droid Sans","Helvetica Neue","Helvetica","Arial",sans-serif; + color: var(--dark-color); + position: relative; + height: 100%; + background: url("../images/curve2.png") repeat-y fixed left bottom,url("../images/curve.png") repeat-y fixed right bottom var(--bgcolor); + +} +::selection { + text-shadow: none; + background: #99d4ff; + color: rgba(0, 0, 0, 0.6); +} + +/* General reset */ +* { + box-sizing: border-box; + padding: 0; + margin: 0; +} +ul, ol { + list-style: none; +} +ul.normallist { + list-style-type: disc; + padding: 0 0 0 15px; +} +table { + empty-cells: show; +} +abbr { + border-bottom: 0.1em dotted; +} +input, select, textarea { + color: var(--dark-color); + font: 83.33%/150% ; + background: var(--neutral-light-color); + outline: none; + border: 1px solid #bbb; + vertical-align: middle; + border-radius: 3px; + box-shadow: 1px 2px 1px rgba(160, 187, 221, 0.2) inset; + padding: 0.3em 0.4em; +} +input:hover, textarea:hover, select:hover, button:hover, +input:focus, textarea:focus, select:focus, button:focus { + outline: none; + border-color: var(--color1); +} +textarea:hover { + background: #fbfbfb; +} + +input, button, select { + padding: 0 0.4em; + height: 2em; + line-height: 2em; +} +select { + padding: 0.22em 0.2em; /* selects don't apply line-height */ +} + +/* This is about links */ +a, a:visited, a:link { + color: var(--color4); + text-decoration: none; + border-bottom-style: dotted; + border-bottom-width: 1px; +} +/* Only for Accessibility */ +.link_access { + background-color: var(--neutral-light-color); +} +.link_access:not(:focus):not(:active) { + clip: rect(0 0 0 0); /* Old compatibility*/ + clip-path: inset(50%); + height: 1px; + overflow: hidden; + position: absolute; + white-space: nowrap; + width: 1px; + +} +.link_access:focus { + border-radius:5px; + padding:0.5em; + display: inline-block; +} + +/*a:hover { + text-decoration: underline; + cursor: pointer; +} + +a:link { + color: #483D8B; + text-decoration: underline dotted; +}*/ + +a:hover, +a:focus, +a:link:hover, +a:link:focus, +a:visited:hover, +a:visited:focus, +a:link:active, +a:visited:active { + /*text-decoration: underline;*/ + border-bottom-style: solid; + cursor: pointer; +} + +/* Selects with more than one line */ +select[size] { + height: auto; +} +input[type="file"] { + padding: 2px; + height: auto; +} +/* Remove default mozilla dotted borders */ +input[type="submit"]::-moz-focus-inner, button::-moz-focus-inner { + border: 0; +} +/* Prevent inputs and images overflowing */ +img, input, select, textarea { + max-width: 100%; +} + +/* Use a consistent monospace font everywhere */ +.monospace, .bbc_code, .phpcode, pre { + font-family: "DejaVu Sans Mono", Menlo, Monaco, Consolas, monospace; +} + +.sceditor-container textarea, .sceditor-container textarea:focus { + box-shadow: none; +} +#quick_edit_body_container textarea, +.move_topic textarea, +dd textarea { + width: 100%; + min-height: 100px; +} +/* Apply the font only to these elements */ +input, button, select { + font-size: 0.75rem; +} +/* Number inputs don't support size nor width, so add some common ones here and set a default... */ +input[type="number"] { + padding-right: 0; /* Removes weird white space after arrows in some browsers */ + width: calc(4ch + 15px + 0.8em); +} +input[type="number"][size="2"], input[type="number"][size="1"] { + width: calc(2ch + 15px + 0.8em); +} +input[type="number"][size="3"] { + width: calc(3ch + 15px + 0.8em); +} +input[type="number"][size="5"] { + width: calc(5ch + 15px + 0.8em); +} +input[type="number"][size="6"] { + width: calc(6ch + 15px + 0.8em); +} +select option { + padding: 0 4px; +} +/* Fieldsets are used to group elements */ +fieldset { + padding: 18px; + margin: 0 0 6px 0; + border: 1px solid var(--neutral-color); + border-radius: 3px; +} +fieldset legend { + font-weight: bold; + color: #555; + box-shadow: none; + border: none; +} +summary { + margin: 5px 0; +} + +/* Define strong as bold, and em as italics */ +/* Note: in some particular places, strong has been redefined as font-weight: 600; */ +/* This gives a better effect for those areas, and will default to bold for fonts which do not support numerical font-weight */ +strong, .strong { + font-weight: bold; + color: #444; +} +.cat_bar strong { + color: var(--neutral-light-color); +} +em, .em { + font-style: italic; +} +/* Default color on these tags */ +h1, h2, h3, h4, h5, h6 { + font-size: 1em; + color: #444; + font-weight: inherit; +} +/* All input elements that are checkboxes or radio buttons shouldn't have a border around them */ +input[type="checkbox"], input[type="radio"] { + border: none; + background: none; + vertical-align: middle; + box-shadow: none; + margin: 0 3px; +} +.moderationbuttons_mobile_check { + display: none; +} +/* Give disabled input elements a different style */ +input[disabled], textarea[disabled], select[disabled], .button.disabled, .button[disabled]:hover, .button[disabled]:focus { + background: #eee; + color: #999; + border-color: #b6b6b6; + opacity: 0.8; + cursor: default; +} +/* Standard horizontal rule.. ([hr], etc.) */ +hr { + border: none; + margin: 12px 0; + height: 2px; + background: var(--neutral-light-color); + box-shadow: 0 1px 0 #bbb inset; +} + +/* Help popups require a different styling of the body element. */ +/* Deprecated? */ +body#help_popup { + padding: 12px; +} + +#likes li { + clear: both; + padding: 1px 0; + display: flex; + align-items: center; +} +#likes .avatar { + height: 5em; + width: 5em; + margin: 0 10px 0 0; +} +#likes li .like_profile { + flex: 1 0 auto; +} +#likes li .like_time { + padding: 4px 0; +} +#likes .description { + font-style: italic; + opacity: 0.4; + font-size: 0.9em; + display: block; +} + +/* The "new" button */ +.new_posts, a.new_posts { + display: inline-block; + position: relative; + top: -2px; + padding: 0 4px; + background: var(--color4); + color: var(--neutral-light-color); + border-radius: 2px; + opacity: 0.8; + border-bottom: none; + margin-right: .3em; +} +a.new_posts:visited { + color: var(--neutral-light-color); +} +.new_posts:hover, .new_posts:focus { + text-decoration: none; + border-bottom: none; + opacity: 1; +} + +/* Common classes to easy styling. +------------------------------------------------------- */ +.floatright { + float: right; +} +.floatleft { + float: left; +} +.floatnone { + float: none; +} +.flow_auto { + overflow: auto; +} +.flow_hidden { + overflow: hidden; +} +.clear { + clear: both; +} +.clear_left { + clear: left; +} +.clear_right { + clear: right; +} + +/* Default font sizes: small (8pt), normal (10pt), and large (14pt). */ +.smalltext, tr.smalltext th { + font-size: 0.9em; +} +.largetext { + font-size: 1.4em; +} +h2.largetext { + font-size: large; +} +.xlargetext { + font-size: x-large; +} +.centertext, .centercol { + margin: 0 auto; + text-align: center; +} +.righttext { + margin-left: auto; + margin-right: 0; + text-align: right; +} +.lefttext { + margin-left: 0; + margin-right: auto; + text-align: left; +} +.justifytext { + text-align: justify; +} +.double_height { + line-height: 2em; +} +/* some common padding styles */ +.padding { + padding: 8px; +} +.main_section, .lower_padding { + padding-bottom: 6px; +} +.half_content { + width: 50%; + display: inline-block; + vertical-align: top; +} +.half_content:nth-of-type(odd) { + margin-right: -0.25em; + padding-right: 0.3%; +} +.half_content:nth-of-type(even) { + margin-left: -0.2em; + padding-left: 0.3%; +} + +/* Blockquote stylings */ +blockquote { + margin: 0.6em 0; + padding: 6px 10px; + border: 1px solid #d6dfe2; + border-left: 2px solid #aaa; + border-right: 2px solid #aaa; +} +blockquote cite { + display: block; + border-bottom: 1px solid rgba(0, 0, 0, 0.1); + font-size: 0.9em; + margin-bottom: 3px; +} +blockquote cite::before { + color: #aaa; + font-size: 22px; + font-style: normal; + content: "\275D"; + margin-right: 3px; + vertical-align: middle; +} +.bbc_standard_quote { + background-color: #e0e6f6; +} +.bbc_alternate_quote { + background-color: #ebf4f8; +} + +/* A code block - maybe PHP ;). */ +.bbc_code { + display: block; + font-size: 0.78rem; + background: #f3f3f3; + border: 1px solid #dfdfdf; + border-top: 2px solid #bbb; + border-bottom: 3px solid #aaa; + border-radius: 2px; + margin: 1px 0 6px 0; + padding: 3px 12px; + overflow: auto; + white-space: nowrap; + max-height: 25em; +} +/* The "Quote:" and "Code:" header parts... */ +.codeheader, .quoteheader { + color: #666; + font-size: 0.9em; + padding: 0 2px; +} +/* For links to change the code stuff... */ +.codeoperation { + font-weight: normal; +} +/* Expand code bbc */ +.expand_code { + max-height: none; +} +/* Styling for BBC tags */ +.bbc_link { + border-bottom: 1px solid #a8b6cf; +} +.bbc_link:hover, .bbc_link:focus { + text-decoration: none; + border-bottom: none; + border-bottom: 1px solid #346; +} +.bbc_size { + line-height: 1.4em; +} +.bbc_color a { + color: inherit; +} +.bbc_table { + font: inherit; + color: inherit; +} +.bbc_table td { + font: inherit; + color: inherit; + vertical-align: top; +} +.bbc_list { + text-align: left; + padding: 0 0 0 35px; + list-style-type: inherit; +} +.bbc_float { + margin-bottom: 1em; + /* default max-width to use if none was specified in the BBC */ + max-width: 45%; +} +.bbc_float.floatleft { + margin-right: 1em; + clear: left; +} +.bbc_float.floatright { + margin-left: 1em; + clear: right; +} +.bbc_img { + object-fit: contain; +} +.postarea .bbc_img.resized:hover, .postarea .bbc_img.resized:focus { + cursor: pointer; +} +.bbc_img.original_size { + height: auto !important; + width: auto !important; + max-height: none; + max-width: 100%; +} +/* No image should have a border when linked. */ +a img { + border: 0; +} + +/* Those collapse and expand icons are wonderful. */ +.toggle_up::before, .toggle_down::before { + width: 17px; + height: 17px; + display: inline-block; + background: #f7f7f7 url(../images/icons/toggle.png) no-repeat 0 0 / 17px; + overflow: hidden; + content: ""; + vertical-align: middle; + margin: 0 5px 0 5px; + transition: background-color 0.25s; + clip-path: polygon(50% 0%, 95% 25%, 95% 75%, 50% 100%, 5% 75%, 5% 25%); +} +.toggle_down::before { + background-position: 0 -17px; +} + +.toggle_up:hover:before, .toggle_down:hover:before, +.toggle_up:focus:before, .toggle_down:focus:before { + background-color: #bfd4e7; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.25) inset; + transition: background-color 0.25s; +} + +/* Generally, those [?] icons. This makes your cursor a help icon. */ +.help { + cursor: help; + opacity: 0.9; +} +.help:hover, .help:focus { + opacity: 1; +} + +/* Highlighted text - such as search results. */ +.highlight { + font-weight: bold; + color: var(--khaganat-color) !important; + font-size: 1.1em; + background-color: inherit; +} + +/* the page navigation area */ +.pagesection { + padding: 0 0.5em; + overflow: hidden; + clear: both; + display: flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: space-between; + width: 100%; + align-items: center; + background: var(--neutral-light-color); +} +.khbb_head_subject { + flex-direction: column; + align-items: left !important; +} +.khbb_head_subject .display_title { + /*padding: 0.5em; + margin: 0 auto;*/ +} + +.pages::after, .jump_to::after, .code::after, +strong[id^='child_list_']::after { + content: ": "; +} +.pages { + font-size: 0.9em; + margin-left: 7px; +} +/*#main_content_section .pagesection { + margin: 4px 0 0 0; +}*/ +.pagelinks .button { + padding: 0 5px; +} + +.nav_page { + padding: 0 1px; +} +.expand_pages { + font-weight: bold; + cursor: pointer; +} +.current_page { + padding: 0 4px 0 2px; + font-weight: bold; +} +.current_page::before, .codeoperation::before { + content: "["; +} +.current_page::after, .codeoperation::after { + content: "]"; +} + +/* Posts and personal messages displayed throughout the forum. */ +.post { + overflow: auto; + line-height: 1.4em; + height: 100%; +} +.post .inner { + padding: 0.5em; +} + +#preview_body { + padding: 0.5em; +} +/* Post in special pages */ +#admin_content .windowbg, #admin_content .windowbg .quickbuttons_profile_showposts { + padding: 0 0em 1em 1em; +} + +/* Calendar colors for birthdays, events and holidays */ +.birthday { + color: var(--khaganat-color) ; +} + +.event { + color: #078907; +} + +.holiday > span { + color: #025dff; +} +/* Events that are currently selected on the calendar. Won't see it much, probably. */ +.sel_event { + font-weight: bold; +} + +.warn_moderate { + color: #ffa500; +} + +.warn_watch, .success { + color: green; +} + +a.moderation_link, a.moderation_link:visited { + font-weight: bold; + padding: 0px 8px; + background: #f59e00; +} +/* AJAX notification bar +------------------------------------------------------- */ +#ajax_in_progress { + background: var(--neutral-light-color); + border-bottom: 4px solid #f96f00; + color: #f96f00; + text-align: center; + font-size: 1.6em; + padding: 8px; + width: 100%; + line-height: 25px; + position: fixed; + top: 0; + left: 0; +} + +#ajax_in_progress a { + color: orange; + font-size: 0.9em; + float: right; + margin-right: 20px; +} + +/* Lists with settings use these a lot. +------------------------------------------------------- */ +dl.settings { + clear: right; + overflow: auto; + margin: 0 0 10px 0; + padding: 5px; +} +dl.settings dt { + width: 56%; + float: left; + margin: 0 0 10px 0; + clear: both; +} +dl.settings dt.windowbg { + width: 98%; + float: left; + margin: 0 0 3px 0; + padding: 0 0 5px 0; + clear: both; +} +dl.settings dd { + width: 42%; + float: right; + margin: 0 0 3px 0; +} +dl.settings img { + margin: 0 10px 0 0; + vertical-align: middle; +} + +/* a general table class */ +table.table_grid { + border-collapse: collapse; + margin: 0; + width: 100%; +} +table.table_grid td { + padding: 3px; +} +/* Some predefined widths (mostly for tables) */ +.table_grid.half_content, .half_table { + width: 50%; +} +.equal_table { + width: 33%; +} +.quarter_table { + width: 25%; +} +.small_table { + width: 10%; +} +.table_icon { + width: 5%; +} + +.title_bar th, .windowbg th { + padding: 4px 8px; + text-align: left; +} +.title_bar .sort_down, .title_bar .sort_up { + margin: -3px 0 0 2px; +} + +/* GenericList */ +.additional_row { + padding: 6px 0 6px 0; +} +.additional_row::after { + content: ""; + display: block; + clear: both; +} +img.sort, .sort { + margin-bottom: -4px; + margin-left: 4px; +} + +/* table_grid styles for Profile > Show Permissions. */ +#permissions table.table_grid td { + padding: 5px 10px; + cursor: default; +} + +.postbg { + border-left: 1px solid #7f7f7f; + border-right: 1px solid #7f7f7f; +} + +/* Styles used by the auto suggest control. +------------------------------------------------------- */ +.auto_suggest_div { + position: absolute; + visibility: hidden; + border-radius: 3px; + outline: none !important; + border: 1px solid #bbb; + z-index: 100; +} +.auto_suggest_item { + background: var(--neutral-color); + padding: 1px 4px; +} +.auto_suggest_item_hover { + background: #888; + cursor: pointer; + color: #eee; + padding: 1px 4px; +} + +/* Styles for the standard dropdown menus. +------------------------------------------------------- */ +.dropmenu, #top_info { + position: relative; +} + +.dropmenu > .subsections > a::before { + content:'☰'; + position: absolute; + transform: translate(-50%, -50%); + top: 50%; + padding-right: 1.3em; +} +/* Level 1 button background. */ +.dropmenu > li, #top_info > li { + display: inline-block; +} +/* Disable default focus outlines */ +.dropmenu a { + outline: 0; +} +/* For cases where we want to spotlight something specific to an item, e.g. an amount */ +.amt { + margin-left: 3px; + padding: 3px 6px 0px 6px; + color: var(--neutral-light-color); + background: var(--color1); + clip-path: polygon(50% 0%, 95% 25%, 95% 75%, 50% 100%, 5% 75%, 5% 25%); + +} +.dropmenu li .active .amt, #top_info li .active .amt { + background: rgba(0, 0, 0, 0.2); + color: inherit; +} +#top_info .top_menu.visible { + display: block; +} +/* Needed for new PM notifications. */ +.dropmenu li strong { + color: #333; +} + +.dropmenu li a, #top_info > li > a { + display: block; + border-bottom: none; + padding-left: 1.3em; +} +/* Level 1 active button. */ +.dropmenu a.active, #top_info a.active { + font-weight: bold; + background: var(--color2) ; +} +/* Level 1 hover effects. */ +.dropmenu > li:hover > a, +.dropmenu > li:focus > a, +.dropmenu > li > a:focus, +#top_info > li:hover > a, +#top_info > li:focus > a, +#top_info > li > a:focus, +#top_info > li > a.open { + background: var(--khaganat-color); + cursor: pointer; + color: var(--neutral-light-color); + border: none; +} +/* Level 1 active button. */ +.dropmenu li a.active:hover, +.dropmenu li a.active:focus, +.dropmenu li:hover a.active, +.dropmenu li:focus a.active { + background: var(--khaganat-color); + font-weight: bold; +} + +a.mobile_user_menu, +a[class^="mobile_generic_menu_"] { + display: none; +} + + +#main_menu { + margin: 0 0 4px 0; +} + +/* User information. */ +#profileview { + padding: 1em; +} +#profile_menu_top::after { + content: " \25BC"; +} +.profile_user_info, .profile_user_avatar { + display: inline-block; + margin: 0 9px; + vertical-align: middle; +} +.profile_user_avatar img.avatar { + max-width: 100px; +} +.profile_username { + font-size: 150%; + display: block; +} +.profile_user_links ol { + margin-left: 10px; + clear: both; + column-count: 2; +} +.profile_user_links li { + font-size: .8rem; + line-height: 2em; + padding-left: 24px; + text-indent: -24px; + -webkit-hyphens: auto; + hyphens: auto; +} +/* Fixes bug with border-box on scrollable js */ +.scrollable, +.scrollable *, +#profile_menu { + box-sizing: content-box; +} +.top_menu.scrollable { + max-height: 30em; +} +.pm_unread, .alerts_unread { + margin-top: 5px; + border-top: 1px solid var(--neutral-color); +} +.unread_notify { + border-bottom: 1px solid var(--neutral-color); +} +.no_unread { + margin-top: 5px; + text-align: center; +} +.unread_notify:hover, +.unread_notify:focus { + background: #eee; + text-decoration: none; + border-bottom: none; +} +.unread_notify:last-child { + border-bottom: none; +} +.unread_notify { + display: flex; + align-items: center; + padding: 6px 5px; + line-height: 20px; +} +.unread_notify.alert_read { + opacity: 0.5; + outline: none; + filter: grayscale(1); +} +.unread_notify strong { + font-weight: 600; +} +.unread_notify .avatar { + width: 40px; + height: 40px; + object-fit: scale-down; + margin: 4px 4px 4px 0; + display: inline-block; + color: transparent; /* For broken images */ + vertical-align: bottom; +} +.unread_notify_image { + position: relative; + width: 44px; + margin-right: 4px; + text-align: center; +} +.unread_notify_image span.alert_icon { + display: block; + line-height: 1em; +} +.unread_notify_image .avatar + .alert_icon { + width: auto; + position: absolute; + right: 0; + top: 0; +} +.unread_notify .details { + display: inline-block; + vertical-align: top; + max-width: calc(100% - 48px); +} +#pm_menu .subject { + font-weight: bold; +} +/* Levels 2 and 3 submenu wrapper. */ +generic_menu .dropmenu .subsections ul li a { + background:bisque; +} +.dropmenu li ul, .top_menu { + z-index: 90; + position: absolute; + display: none; + min-width: 18.2em; + font-weight: normal; + background: var(--neutral-light-color); +} +.dropmenu li li:hover, +.dropmenu li li:focus, +.dropmenu li li:hover > a, +.dropmenu li li:focus > a, +.dropmenu li li a:focus, +.dropmenu li li a:hover, +.dropmenu li:hover li a:hover, +.dropmenu li:focus li a:focus { + background: var(--khaganat-color); + color: var(--neutral-light-color); +} + +/* Level 2 link background. */ +.dropmenu li li { + margin: 0; + padding: 0; + font-size: 1em; + position: relative; +} +/* fuck to work on focus */ +.dropmenu li li a { + padding: 0 9px; + border: none; + line-height: 2.2em; +} +/* Necessary to allow highlighting of 1st level while hovering over submenu. */ + +.dropmenu li:hover li a, +.dropmenu li:focus li a { + background: none; + color: var(--dark-color); +} + +.dropmenu li li a > img { + vertical-align: middle; +} +/* The profile/pm menus are declared off .dropmenu li ul for consistency but have other characteristics. */ +.top_menu { + min-width: 25em; +} +.top_menu .login { + width: 100%; +} +.top_menu .login dt { + text-align: left; + width: 55%; +} +.top_menu .login dd { + width: 43%; +} +.top_menu .login input { + width: 90%; +} +/* Note: The next declarations are for keyboard access with js disabled. */ +.dropmenu ul a:focus, .dropmenu ul ul a:focus { + margin-left: 9990px; + border: none; + width: 17em; +} +.dropmenu ul ul a:focus { + margin-left: 19950px; +} +/* Cancel those for hover and/or js access. */ +.dropmenu ul li:hover a:focus, .dropmenu ul li a:focus { + margin-left: 0; + width: auto; +} +/* Level 3 submenu wrapper positioning. */ +.dropmenu li ul ul { + margin: -3em 10em 10em 18em; +} +/* Level 3 maintains font-size the same as Level 2. */ +.dropmenu li li li a { + font-size: 1em; +} +/* Levels 2 and 3 hover effects. */ +.dropmenu li li:hover, +.dropmenu li li:focus { + border: none; +} + +/* Reposition Level 2 submenu as visible on hover. */ +.dropmenu ul { + display: block; + border: solid 1px var(--khaganat-color); + box-shadow: 0px 0px 5px 1px var(--neutral-light-color); + border-radius: 0 0.5em; +} +/* Hiding Level 3 submenu off hover. */ +.dropmenu li:hover ul ul, .dropmenu li ul ul, .dropmenu li:hover ul ul ul, .dropmenu li ul ul ul { + left: -9999px; +} +/* Reposition as visible on hover. */ +.dropmenu li li:hover ul, .dropmenu li li ul { + left: 0; +} +.dropmenu li li.subsections > a::after { + position: absolute; + padding: 5px 0; + right: 10px; + font: 83.33%/150% ; + content: "\25ba"; +} +/* Highlighting of current section */ +.dropmenu li li a.chosen { + font-weight: bold; +} + +/* The extra menu rows for admin sections, etc. */ +#adm_submenus { + margin: 0 0 6px 0; + overflow: hidden; +} + +/* Styles for the standard button lists. TODO +------------------------------------------------------- */ +.buttonlist, .buttonrow, .pagelinks { + z-index: 100; + padding: 5px 0 5px 0; +} +.sceditor-button { + border-bottom: none; +} + +.button, button { + display: inline-block; + color: var(--dark-color); + font-size: 0.7rem; + line-height: 2em; + text-transform: uppercase; + cursor: pointer; + min-height: calc(2em + 2em * (0.9 - 0.85)); /* "input" font size minus ".button" font size */ + border: 1px solid; + border-color: var(--bgcolor); + border-radius: 3px; + box-shadow: 1px 1px 1px rgba(221, 221, 221, 0.57) inset; + box-sizing: border-box; + vertical-align: middle; + background: var(--neutral-color); + outline: none; + padding: 0 0.4em; +} + +a.button, a.button:hover, .button:focus { + border-bottom: none; +} + +html[lang="el-GR"] .button, +html[lang="el-GR"] .quickbuttons > li > a, +html[lang="el-GR"] .inline_mod_check { + text-transform: capitalize; +} +.pagesection .button { + color: var(--color4); +} + +/* the active one */ +.button.active { + background: var(--khaganat-color); + color: var(--neutral-light-color); + font-weight: bold; + border-bottom: none; + +} +.button.active:hover, .button.active:focus { + background: var(--khaganat-color); + box-shadow: none; + border-bottom: none; +} +.cat_bar .button { + box-shadow: none; +} +/* In a .buttonrow, the buttons are joined together */ +.buttonrow { + margin: 0 5px; +} +.buttonrow .button { + display: table-cell; + border-radius: 0; +} +.buttonrow .button:first-child { + border-radius: 3px 0 0 3px; +} +.buttonrow .button:last-child { + border-radius: 0 3px 3px 0; +} +/* in a titlebg, the buttonlist is of small height */ +.titlebg .buttonlist { + margin: 0; + padding: 0; +} + +/* Styles for the general looks of the theme. +------------------------------------------------------- */ + +/* Box-shadow only on this one. */ +#wrapper { + clear: both; +} + +/* Set maximum width limit for content */ +#top_section .inner_wrap, #wrapper, #footer .inner_wrap, #footer { + max-width: 1200px; + margin: 0 auto; + width: 90%; +} + +/* The framing graphics */ +/* The top bar. */ +#top_section { + border-bottom: 1px solid #bbb; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.16); + background: var(--neutral-light-color); + clear: both; +} +#top_section::after { + content: ""; + display: block; + clear: both; +} +#top_info { + padding: 5px 0; + line-height: 1.3em; + max-width: 100%; +} +#pm_menu, #alerts_menu, #profile_menu { + left: 0; + right: 0; + padding-right: 10px; +} +#profile_menu_top > img.avatar { + height: 18px; + width: 18px; + margin: 2px 5px 0 0; + float: left; +} +#pm_menu_top .main_icons, +#alerts_menu_top .main_icons { + display: none; +} +.notice { + font-weight: bold; +} + +#search_form { + padding: 5px 0; +} +#languages_form { + display: flex; +} +/* The logo and slogan. */ +#header { + background-color: rgba(255,255,255,0.5); + position: relative; + display: flex; + align-items: center; + flex-wrap: wrap; + justify-content: center; + flex-direction: column; + min-height: 8em; +} +#header::after { + content: ""; + display: block; + clear: both; +} +/* The main title. */ +h1.forumtitle { + font-size: 1.8em; + font-weight: normal; +} +h1.forumtitle a { + color: white; + text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.3); + border-bottom: none; + border-bottom-style: inherit !important; + /*display: flex; + justify-content: center; + * Pour slogan ? mais j'ai enlevé le code de la fonction.*/ +} +h1.forumtitle a:hover { + border-bottom: none; +} + +h1.forumtitle a img { + padding: .5em; + padding-bottom: 0; + max-height: 6em; + width: auto; + height: auto; +} + +/* Slogan */ +#siteslogan, img#smflogo { + padding-right: 2px; + font-size: 1.4em; +} +/* Tweak the SMF logo */ +img#smflogo { + margin: 16px 0 0 0; +} +/* Even guests need to be aligned */ +.welcome { + padding: 0 10px; + line-height: 2.5em; +} +/* +/* The user info, news, etc.*/ +#upper_section { + padding: 2px 2px 0 2px; +} +#inner_section { + padding: 12px 10px 2px 10px; + border-radius: 6px 6px 0 0; +} +#inner_section::after { + content: ""; + display: block; + clear: both; +} +/* The upper_section, float the two each way */ +#inner_wrap { + display: flex; + justify-content: space-between; + align-items: center; + border-bottom: 1px solid #bbb; + margin-bottom: 12px; +} +.user { + padding: 0 4px 8px 4px; + font-size: 0.9em; + white-space: nowrap; +} +.user:only-child { + width: 100%; + display: flex; + justify-content: space-between; +} +.user time, +.user .unread_links, +.user .unread_links li { + display: inline-block; +} +.user:not(:last-child) time:not(:last-child)::after, +.user .unread_links li:not(:last-child)::after { + content: " • "; + margin: 0 1ch; +} +ul li.greeting { + font-weight: bold; +} + +time { + margin: 0.5em 1em 0 1em; + float: inline-start; +} +/* The login form. */ +#guest_form { + overflow: hidden; + font-size: 0.9em; + margin-left: -2px; +} +.login fieldset { + display: flex; + flex-direction: column; +} +.login fieldset label { + padding: .5em 0; + display: flex; + justify-content: end; +} +.login fieldset input, .login fieldset select { + width: 50%; + margin-left: 1em; +} +.login .khbb_register { +font-size: large; +} +/* News section on header */ +#header .news { + padding: 0 0.5em; + display: flex; + align-items: baseline; + max-width: 50%; + background-color: var(--neutral-light-color) ; + box-shadow: 0px 0px 5px 1px var(--neutral-light-color); + border-radius: 0 0.5em; +} + + .news p { + display: inline; +} + +/* News section on other place (like menu) */ +#inner_wrap .news { + padding: 0 0 8px 1ch; + font-size: 0.9em; + display: flex; + align-items: baseline; + max-width: 50%; +} +#inner_wrap .news h2 { + line-height: initial; +} +#inner_wrap .news h2, +#inner_wrap .news p { + display: inline; + padding-left: 1ch; +} + +/* The navigation list (i.e. linktree) + * Sur un poste, affiche en haut où on est (quel forum etc)*/ +.navigate_section { + width: 100%; + /* modif de https://www.simplemachines.org/community/index.php?topic=580159.0 */ + display: flex; + flex-direction: row; + flex-wrap: wrap; + margin-bottom: .2em; +} +/* Hide title forum from linktree */ +.navigate_section li:first-child { + display: none; +} + +#main_content_section .navigate_section { + margin: 0px; + padding: 0; +} + +/*We don't want the p tag to have a margin*/ +.navigate_section p { + margin: 0; +} + +/*Flex it up */ +.navigate_section ul { + padding: 0px; + margin: 0px; +} + +.navigate_section ul li .dividers { + display: none; +} +/*Forming the arrows*/ +.navigate_section ul li { + background-color: var(--color1); + box-sizing: border-box; + display: inline-flex; + max-height: 2em; + padding: .5em 1em .5em 1.5em; + position: relative; + text-decoration: none; + border-bottom: none; + transition-timing-function: ease-in; + transition: 0.5s; + line-height: 1.1em; + float: none; +} + +.navigate_section ul li:before { + border-top: 1em solid transparent; + border-bottom: 1em solid transparent; + border-left: 1em solid var(--bgcolor); + content: ""; + position: absolute; + top: 0; + right: -1.25em; + z-index: 1; +} +.navigate_section ul li:after { + border-top: 1em solid transparent; + border-bottom: 1em solid transparent; + border-left: 1em solid var(--color1); + content: ""; + position: absolute; + top: 0; + right: -1em; + transition-timing-function: ease-in; + transition: 0.5s; + z-index: 1; +} + +/* Colors */ +.navigate_section strong { + color: var(--color1); +} +.navigate_section ul li a { + color: var(--neutral-light-color); +} +.navigate_section ul li:hover { + background-color: var(--color2); +} +.navigate_section ul li:hover:after { + border-left-color: var(--color2); +} +.navigate_section ul li:last-child { + background-color: var(--color2); +} + +.navigate_section ul li:last-child::after { + border-left-color: var(--color2); +} + + + +/* The content section */ +#content_section { + margin: 0 auto; + clear: both; + position:relative; +} +#main_content_section { + padding: 0px; + position: relative; +} +#main_content_section::after { + content: ""; + display: block; + clear: both; +} +/* The footer with copyright links etc. */ +.footer2 { + padding: 10px 0; + background: var(--color2); +} +#footer ul { + display: flex; + justify-content: space-between; +} +#footer li, #footer p, #footer a { + font-size: 0.9em; + color: var(--neutral-light-color); +} +#footer li.copyright { + display: block; + font-family: Verdana, sans-serif; /* Copyright must be Verdana! */ +} +#footerfix { + flex: 1 0 auto; +} + +/* The posting icons */ +#postbuttons_upper ul li a span { + line-height: 19px; + padding: 0 0 0 6px; +} +.mark_read { + margin: 3px 0; + display: flex; + align-items: center; + justify-content: end; +} +/* Stupid but I can't edit the class in html. This and the flex resolve probem with infocenter*/ +.mark_read > .floatright { + float: none; +} +.mark_read .buttonlist { + margin: 0; + padding: 0; +} + +/* the small stats */ +#index_common_stats { + margin: -4px 8px 6px 8px; + padding: 4px 0 0 0; + font-size: 0.9em; + border-top: 1px solid var(--neutral-color); +} + +.fix_rtl_names { + display: inline-block; +} + +/* The quick buttons */ + +.quickbuttons { + clear: right; + text-align: right; + display:flex; +} +.quickbuttons > li { +} + +.quickbuttons li:hover, .quickbuttons li a:hover, .quickbuttons li a:focus { + background: var(--khaganat-color); + color: var(--neutral-light-color); +} + +#recent .quickbuttons { + margin: 0; +} + +.quickbuttons > li > a, .quickbuttons > li > a:hover, .quickbuttons > li > a:focus { + border-bottom: none; +} +/* Citer tout un message, c'est mal. Citez avec discernement et effort ! Donc on supprime.*/ +.quickbuttons > li:first-child { + background-color: lime; + display: none; +} + +.quickbuttons > li > a, .inline_mod_check { + display: block; + height: auto; + padding: .3em .1em 0em .1em;; + color: var(--dark-color); + font-size: 0.7rem; + text-transform: uppercase; + cursor: pointer; + /* min-height: calc(2em + 2em * (0.9 - 0.85)); "input" font size minus ".button" font size */ + border: 1px solid; + border-color: var(--neutral-color) #bbb #aaa var(--neutral-color); + border-radius: 3px; + box-shadow: 1px 1px 1px rgba(221, 221, 221, 0.57) inset; + box-sizing: border-box; + vertical-align: middle; +} +.quickbuttons > li:first-child > a { + border-radius: 4px 0 0 4px; +} +.quickbuttons > li:last-child > a, .inline_mod_check:last-child { + border-radius: 0 4px 4px 0; +} +.quickbuttons > li:only-child > a, .inline_mod_check:only-child { + border-radius: 4px; + margin: 2px; + height: 23px; +} +.inline_mod_check input { + position: relative; + top: -1px; + height: auto; +} +.moderationbuttons_check:focus { + box-shadow: 0 0 4px #499dd8; +} +.quick_edit, .post_options { + position: relative; +} +/* Drop part of QuickButtons */ +.post_options ul { + display: none; + position: absolute; + top: 100%; + right: -1px; + z-index: 90; + padding: 6px; + background: var(--neutral-light-color); + font-weight: normal; + text-align: left; + border: solid 1px #999; + border-left: solid 1px #aaa; + border-top: solid 1px #bbb; + border-radius: 4px 0 4px 4px; + box-shadow: 2px 3px 3px rgba(0, 0, 0, 0.2); +} +.post_options:hover ul { + display: block; +} +.post_options ul a { + display: block; + width: 12em; + padding: 0 6px; + line-height: 2.2em; + /*text-decoration: none;*/ + border: 1px solid transparent; + border-radius: 3px; +} +.post_options ul a:hover, .post_options ul a:focus { + border-color: #c4cbd3; +} +/* Note: The next declarations are for keyboard access with js disabled. */ +.quickbuttons ul li a:focus { + margin: 0 -9910px 0 9910px; +} +/* Cancel for hover and/or js access. */ +.quickbuttons ul li:hover a:focus, .quickbuttons ul li a:focus { + margin: 0; +} +/* Fixes for quickbuttons + Fix for quote on reply box */ +#post_modify { + border-radius: 4px; +} + +/* The jump to box */ +#display_jump_to { + padding: 5px 0; + margin: 4px 0; + font-size: 1em; +} +#topic_icons #message_index_jump_to { + padding: 0; +} + +/* The category separator string is 29 dashes */ +#display_jump_to_select, +#message_index_jump_to_select, +#search_jump_to_select, +#quick_mod_jump_to_select { + width: 29ch; +} + +.quickModifyMargin { + margin: 10px 0 5px 0; + padding-bottom: 5px; +} + +/* Styles for edit event section +---------------------------------------------------- */ +#post_event .roundframe { + padding: 12px 12%; + overflow: auto; +} +#post_event fieldset { + padding: 6px; + clear: both; +} +#post_event span.label { + margin: 0 0.5em 0 2px; + min-width: 60px; + display: inline-block; +} + +.event_options { + line-height: 25px; + display: flex; + flex-flow: row wrap; +} +.event_options div { + min-height: 25px; + margin-bottom: 5px; + flex: 1 0 auto; +} +.event_options_left { + box-sizing: border-box; + width: 55%; + min-width: 238px; +} +.event_options_right { + box-sizing: border-box; + width: 45%; + min-width: 270px; +} +.event_options_left div, +.event_options_right div { + white-space: nowrap; +} + +#post_event #event_main input { + margin: 0; +} +#event_time_input { + clear: left; +} +#event_time_input > div { + display: flex; +} +#event_time_input input.date_input { + width: 40%; + margin: 2px 0.5ch 0; + flex: 1 1 auto; +} +#event_time_input input.time_input { + width: 13ch; + margin: 2px 0.5ch 0; + flex: 0 1 auto; +} +#post_event input[type="checkbox"] { + height: auto; +} +#post_event input[type="text"][disabled] { + color: transparent; +} +#post_event select, #event_options input[type="text"], #tz { + max-width: calc(100% - 75px); +} +#post_event select, #evtitle, #event_location { + width: calc(100% - 75px); +} +#post_event input[type="checkbox"] + select { + max-width: calc(100% - 95px); +} + +/* Styles for the recent messages section. +---------------------------------------------------- */ + +#readbuttons_top .pagelinks, #readbuttons .pagelinks { + padding-bottom: 12px; + width: 60%; +} +#readbuttons .pagelinks { + padding-top: 12px; +} +#recent { + clear: both; +} +/* test sur la prévisualisation des messages, attention aux effets de bords */ +#recent .windowbg { + padding: 0.5em; + margin-top: 0.2em; + border-radius: 3px; + display: flex; + flex-direction: column; +} +.recent_title { + display: flex; + flex-direction: row; + align-items: baseline; + justify-content: space-between; + padding: 0.5em 1em 0 0; +} +#unread .recent_title { + justify-content: flex-start; +} + +#recent .windowbg div { + /*width: 100%;*/ +} +#recent .windowbg .topic_details { + +} +/* Styles for the move topic section. */ +.move_topic { + width: 710px; + margin: auto; + text-align: left; +} +div.move_topic fieldset { + margin-top: 1ex; + padding: 6px; +} +/* Styles for the report topic/user section. */ +#report_form dl.settings dt { + width: 20%; +} +#report_form dl.settings dd { + width: 79%; +} +#report_comment { + width: 70%; +} +/* Styles for the split topic section. */ +div#selected, div#not_selected { + width: 49%; +} +ul.split_messages li a.split_icon { + padding: 0 6px; + opacity: 0.8; +} +ul.split_messages li a.split_icon:hover { + opacity: 1; +} +.split_messages, .message_header { + margin-bottom: 8px; +} +/* Styles for the merge topic section. */ +ul.merge_topics li { + list-style-type: none; +} +dl.merge_topic dt { + width: 25%; +} +dl.merge_topic dd { + width: 74%; +} +fieldset.merge_options { + clear: both; +} +.custom_subject { + margin: 6px 0; +} + +/* Styles for the login areas. +------------------------------------------------------- */ +.login { + width: 540px; + max-width: 100%; + margin: 0 auto; +} +.popup_content .login { + width: 100%; +} +.login dl { + overflow: auto; + clear: right; +} +.login dt, .login dd { + margin: 0 0 5px 0; + width: 44%; + padding: 1px; +} +.login dt { + float: left; + clear: both; + text-align: right; + font-weight: bold; +} +.login dd { + width: 54%; + float: right; + text-align: left; +} +.login p { + text-align: center; +} + +.login input[type="submit"] { + margin: 1em 0 0 1em; +} +.login p:not(:last-of-type) input[type="submit"] { + margin-bottom: 1em; +} + +/* Additional register fields */ +#registration fieldset { + border: none; + padding: 0; + margin: 0; +} +#registration .roundframe { + border-top: none; + padding: 1em; +} +dl.register_form { + margin: 0; + clear: right; +} +dl.register_form dt { + font-weight: normal; + float: left; + clear: both; + width: 50%; + margin: 6px 0 0 0; +} +dl.register_form dt span { + display: block; +} +dl.register_form dd { + float: left; + width: 49%; + margin: 6px 0 0 0; +} +#confirm_buttons { + text-align: center; + padding: 12px 0; +} +.coppa_contact { + padding: 4px; + width: 32ex; + background: var(--neutral-light-color); + color: #222; + margin-left: 5ex; + border: 1px solid #222; +} +.valid_input { + background: #f5fff0; +} +.invalid_input { + background: var(--neutral-light-color)0f0; +} + +/* Styles for maintenance mode. +------------------------------------------------------- */ +#maintenance_mode img.floatleft { + margin-right: 12px; +} + +/* Custom profile fields like to play with us some times. */ +#admin_content .custom_field { + margin-bottom: 15px; +} +#admin_login .centertext { + padding: 12px; +} +#admin_login .centertext .error { + padding: 0 0 12px 0; +} +#admin_login .centertext a.help img, .custom_field a img { + vertical-align: middle; +} + +tr.windowbg td, tr.bg td, .table_grid tr td { + padding: 4px 8px; + text-align: left; +} +#credits p { + font-style: italic; +} + +.errorfile_table { + background: var(--neutral-light-color); + border-collapse: collapse; +} +.errorfile_table .file_line { + text-align: right; + padding-right: 6px; +} +.errorfile_table td.current { + font-weight: bold; + border-top: 1px solid rgba(0, 0, 0, 0.2); + border-bottom: 1px solid rgba(0, 0, 0, 0.2); + border-width: 1px 0 1px 1px; + background: rgba(245, 141, 15, 0.2); +} + +.generic_menu { + +} +.generic_menu > ul > li > a { + background-color: var(--color3); + color: var(--neutral-light-color); + display: block; + padding: 1em 0.8em 1em 1.5em; +} + + +/* Some lovely generic icons. +------------------------------------------------- */ +.main_icons::before { + content: ""; + width: 16px; + height: 16px; + display: inline-block; + background: url(../images/icons/main_icons_sprite.png) no-repeat -5px -5px / 260px auto; + vertical-align: middle; +} +.main_icons.alerts::before { + background: url(../images/icons/alerts.png); + background-size: 16px; +} +.main_icons.profile::before { + background: url(../images/icons/profile.png); + background-size: 16px; +} + +/* Small fix for topics */ +.quickbuttons .main_icons::before, .button .main_icons::before { + margin: -3px 3px 0 1px; +} + +.main_icons.gender_None::before { + background: none; +} + +.main_icons.gender_0::before { + display: none; +} + +/* This is a small fix for dropmenu icons */ +.dropmenu .main_icons::before, #profile_menu .main_icons::before, .dropmenu img { + /*margin: -3px 8px 0 0;*/ + vertical-align: middle; +} + +/* Top row */ +.main_icons.help::before { + background-position: -5px -5px; +} +.main_icons.search::before, .main_icons.engines::before { + background-position: -31px -5px; +} +.main_icons.quick_edit_button::before, .main_icons.modify_button::before { + background-position: -57px -5px; +} +.main_icons.check::before { + background-position: -83px -5px; +} +.main_icons.invalid::before { + background-position: -109px -5px; +} +.main_icons.gender_2::before { + background-position: -135px -5px; +} +.main_icons.watch::before { + background-position: -239px -5px; +} +/* 2nd row */ +.main_icons.move::before, .main_icons.next_page::before { + background-position: -5px -31px; +} +.main_icons.general::before, .main_icons.boards::before, .main_icons.topics_views::before { + background-position: -31px -31px; +} +.main_icons.gender_1::before { + background-position: -57px -31px; +} +.main_icons.features::before { + background-position: -83px -31px; +} +.main_icons.posters::before { + background-position: -109px -31px; +} +.main_icons.replies::before, .main_icons.topics_replies::before { + background-position: -135px -31px; +} +.main_icons.history::before, .main_icons.time_online::before, .main_icons.scheduled::before { + background-position: -161px -31px; +} +.main_icons.views::before { + background-position: -187px -31px; +} +.main_icons.last_post::before { + background-position: -213px -31px; +} +.main_icons.starters::before, .main_icons.people::before, .main_icons.membergroups::before, .main_icons.mlist::before { + background-position: -239px -31px; +} +/* 3rd Street Saints */ +.main_icons.poll::before { + background-position: -5px -57px; +} +.main_icons.previous_page::before { + background-position: -31px -57px; +} +.main_icons.inbox::before { + background-position: -57px -57px; +} +.main_icons.www::before { + background-position: -83px -57px; +} +.main_icons.exit::before, .main_icons.logout::before { + background-position: -109px -57px; +} +.main_icons.switch::before { + background-position: -135px -57px; +} +.main_icons.replied::before, .main_icons.send::before { + background-position: -161px -57px; +} +.main_icons.im_on::before { + background-position: -187px -57px; +} +.main_icons.im_off::before { + background-position: -213px -57px; +} +.main_icons.split_desel::before { + background-position: -239px -57px; +} +/* 4th Row */ +.main_icons.split_sel::before { + background-position: -5px -83px; +} +.main_icons.mail::before { + background-position: -31px -83px; +} +.main_icons.warning_mute::before { + background-position: -57px -83px; +} +.main_icons.warn_button::before, +.main_icons.warning_moderate::before { + background-position: -83px -83px; +} +.main_icons.mail_new::before { + background-position: -109px -83px; +} +.main_icons.drafts::before, +.main_icons.reply_button::before, +.main_icons.reply_all_button::before { + background-position: -135px -83px; +} +.main_icons.warning_watch::before { + background-position: -161px -83px; +} +.main_icons.calendar_export::before { + background-position: -187px -83px; +} +.main_icons.calendar::before { + background-position: -213px -83px; +} +.main_icons.calendar_modify::before { + background-position: -239px -83px; +} +/* 5th Row */ +.main_icons.plus::before { + background-position: -5px -109px; +} +.main_icons.warning::before, .main_icons.moderate::before { + background-position: -31px -109px; +} +.main_icons.themes::before { + background-position: -57px -109px; +} +.main_icons.support::before { + background-position: -83px -109px; +} +.main_icons.liked_users::before, .main_icons.liked_messages::before, .main_icons.like::before { + background-position: -109px -109px; +} +.main_icons.unlike::before { + background-position: -135px -109px; +} +.main_icons.current_theme::before { + background-position: -161px -109px; +} +.main_icons.stats::before { + background-position: -187px -109px; +} +.main_icons.right_arrow::before { + background-position: -213px -109px; +} +.main_icons.left_arrow::before { + background-position: -239px -109px; +} +/* 6th Row */ +.main_icons.smiley::before { + background-position: -5px -135px; +} +.main_icons.server::before { + background-position: -31px -135px; +} +.main_icons.ban::before, .main_icons.ignore::before { + background-position: -57px -135px; +} + +.main_icons.boards::before { + background-position: -83px -135px; +} +.main_icons.regcenter::before { + background-position: -109px -135px; +} +.main_icons.posts::before { + background-position: -135px -135px; +} +.main_icons.sort_down::before { + background: none; + content: "⮃"; +} +.main_icons.change_menu2::before, .main_icons.sent::before { + background-position: -187px -135px; +} +.main_icons.post_moderation_moderate::before { + background-position: -213px -135px; +} +.main_icons.sort_up::before { + background-position: -239px -135px; +} +/* 7th Row */ +.main_icons.post_moderation_deny::before { + background-position: -5px -161px; +} +.main_icons.post_moderation_attach::before { + background-position: -31px -161px; +} +.main_icons.post_moderation_allow::before { + background-position: -57px -161px; +} +.main_icons.personal_message::before { + background-position: -83px -161px; +} +.main_icons.permissions::before, .main_icons.login::before { + background-position: -109px -161px; +} +.main_icons.paid::before { + background-position: -135px -161px; +} +.main_icons.packages::before { + background-position: -161px -161px; +} +.main_icons.filter::before { + background-position: -187px -161px; + margin: 0 5px 0 0; +} +.main_icons.change_menu::before { + background-position: -213px -161px; +} +.main_icons.package_ops::before { + background-position: -239px -161px; +} +/* 8th Row */ +.main_icons.reports::before { + background-position: -5px -187px; +} +.main_icons.news::before { + background-position: -31px -187px; +} +.main_icons.delete::before, .main_icons.hide_popup::before, .main_icons.prune::before, .main_icons.remove_button::before { + background-position: -57px -187px; +} +.main_icons.modifications::before { + background-position: -83px -187px; +} +.main_icons.maintain::before, .main_icons.admin::before { + background-position: -109px -187px; +} +.main_icons.administration::before, .main_icons.home::before { + background-position: -135px -187px; +} +.main_icons.frenemy::before { + background-position: -161px -187px; +} +.main_icons.attachment::before { + background-position: -187px -187px; +} +.main_icons.lock::before, .main_icons.security::before { + background-position: -213px -187px; +} +.main_icons.error::before, .main_icons.disable::before { + background-position: -239px -187px; +} +/* 9th Row */ +.main_icons.languages::before, +.main_icons.recent_posts::before { + background-position: -5px -213px; +} +.main_icons.members_request::before { + background-position: -31px -213px; +} +.main_icons.members_delete::before { + background-position: -57px -213px; +} +.main_icons.members::before { + background-position: -83px -213px; +} +.main_icons.members_watched::before { + background-position: -109px -213px; +} +.main_icons.sticky::before { + background-position: -135px -213px; +} +.main_icons.corefeatures::before, .main_icons.settings::before, .main_icons.manrules::before, .main_icons.manlabels::before { + background-position: -161px -213px; +} +.main_icons.calendar::before { + background-position: -187px -213px; +} +.main_icons.logs::before { + background-position: -213px -213px; +} +.main_icons.valid::before { + background-position: -239px -213px; +} +/* 10th Row */ +.main_icons.approve::before, .main_icons.enable::before, +.main_icons.approve_button::before, +.main_icons.read_button::before { + background-position: -5px -239px; +} +.main_icons.close::before { + background-position: -31px -239px; +} +.main_icons.details::before { + background-position: -57px -239px; +} +.main_icons.merge::before { + background-position: -83px -239px; +} +.main_icons.folder::before { + background-position: -109px -239px; +} +.main_icons.restore_button::before { + background-position: -135px -239px; +} +.main_icons.split_button::before { + background-position: -161px -239px; +} +.main_icons.unapprove_button::before, +.main_icons.unread_button::before { + background-position: -187px -239px; +} +.main_icons.quote::before, .main_icons.quote_selected::before { + background-position: -213px -239px; +} +.main_icons.notify_button::before { + background-position: -239px -239px; +} + +.main_icons.select_above::before { + background-position: -161px -5px; +} +.main_icons.select_here::before { + background-position: -187px -5px; +} +.main_icons.select_below::before { + background-position: -213px -5px; +} +/* Styles for (fatal) errors. +------------------------------------------------- */ + +#fatal_error { + width: 80%; + margin: 0 auto 10px auto; +} +.errorbox::before, .noticebox::before, .infobox::before { + width: 16px; + height: 16px; + background: url(../images/icons/main_icons_sprite.png) no-repeat -57px -83px; + left: 10px; + content: ""; + position: absolute; + top: 50%; + margin-top: -8px; +} +.errorbox, .noticebox, .infobox { + padding: 7px 10px 7px 35px; + margin-bottom: 12px; + position: relative; +} +.errorbox { + background-color: #fee; + border-top: 2px solid #c34; + border-bottom: 2px solid #c34; +} +.errorbox h2 { + padding: 0; + margin: 0; + font-size: 1.1em; + text-decoration: underline; +} +.errorbox p { + margin: 12px 0 0 0; +} +.errorbox p.alert { + padding: 0; + margin: 0 4px 0 0; + float: left; + width: 12px; + font-size: 1.5em; +} +.errorbox span { + text-decoration: underline; +} + +/* Styles for info boxes +------------------------------------------------- */ + +.noticebox::before { + background-position: -83px -83px; +} +.infobox::before { + background-position: -161px -83px; +} +.noticebox { + color: #666; + background: var(--neutral-light-color)6ca; + border-top: 1px solid #ffd324; + border-bottom: 1px solid #ffd324; +} +.infobox { + color: #222; + background: #cfc; + border-top: 1px solid green; + border-bottom: 1px solid green; +} +.descbox { + padding: 7px 10px 7px 10px; + border: 1px solid #c5c5c5; + margin: 6px 0; +} + +/* Styles for stats bars and progress bars. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ + +.generic_bar, .progress_bar { + border: 1px solid #cecaca; + background: var(--neutral-light-color); + min-height: 16px; + line-height: 1.4em; + border-radius: 2px; + position: relative; + overflow: hidden; + color: rgba(0, 0, 0, 0.6); +} +.generic_bar span, .progress_bar span { + position: relative; + z-index: 2; + text-shadow: 1px 1px rgba(255, 255, 255, .4); + display: inline-block; + padding: 0 5px; +} +.generic_bar .bar, .progress_bar .bar { + position: absolute; + z-index: 1; + top: 0; + left: 0; + bottom: 0; + background: orange; + transition: width .3s; + border-radius: 1px; + box-shadow: 4px -4px 8px rgba(0, 0, 0, 0.1) inset, + 4px 4px 8px rgba(255,255,255,0.3) inset; + display: block; +} +.generic_bar.vertical { + width: 15px; +} +.generic_bar.vertical .bar { + right: 0; + top: auto; + box-shadow: 4px -4px 4px rgba(0, 0, 0, 0.1) inset, + 4px 4px 4px rgba(255,255,255,0.3) inset; +} + +.progress_bar { + border-radius: 4px; + text-align: center; + font-weight: bold; + color: rgba(0, 0, 0, 0.8); +} +.progress_bar .bar { + box-shadow: -1px 1px 0 rgba(255, 255, 255, 0.25) inset, + 1px -1px 0 rgba(0,0,0,0.1) inset; + background-color: #75da41; + background-size: 30px 30px; + background-image: linear-gradient(135deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.progress_yellow .bar { + background-color: #f6c51c; +} + +.progress_green .bar { + background-color: #75da41; +} + +.progress_red .bar { + background-color: #f45d4c; +} + +.progress_blue .bar { + background-color: #34c2e3; +} + +/* Styles for the profile section. +------------------------------------------------- */ + +dl { + overflow: auto; +} + +/* The basic user info on the left */ +#basicinfo { + width: 20%; + float: left; +} +#detailedinfo { + width: 79.5%; + float: right; +} +#basicinfo > * { + margin-bottom: 3px; +} +#basicinfo h4 { + font-size: 1.4em; + font-weight: normal; + -webkit-hyphens: auto; + -ms-hyphens: auto; + hyphens: auto; + word-wrap: break-word; /* IE fallback */ + overflow-wrap: break-word; +} +#basicinfo h4 span.position { + font-size: 0.8em; + display: block; +} +#basicinfo img.avatar, dl.settings img.avatar { + display: block; + max-width: 160px; + height: auto !important; +} +#basicinfo ul { + list-style-type: none; +} +#basicinfo .icon_fields li { + display: block; + float: left; + margin-right: 5px; + height: 20px; +} +#basicinfo #userstatus { + display: block; + clear: both; +} +#basicinfo #userstatus img { + vertical-align: middle; +} +#detailedinfo dl, #tracking dl { + clear: right; + overflow: auto; + margin: 0 0 18px 0; + padding: 0 0 15px 0; + border-bottom: 1px #ccc solid; +} +#detailedinfo dt, #tracking dt { + width: 35%; + margin: 0 0 3px 0; + font-weight: bold; + color: #444; +} +#detailedinfo dd, #tracking dd { + width: 65%; + float: left; + margin: 0 0 3px 0; +} +#detailedinfo .noborder { + border-bottom: 0; +} +#detailedinfo dt.clear { + width: 100%; +} +#personal_picture { + display: block; + margin-bottom: 4px; +} +#avatar_server_stored div { + float: left; +} +#avatar_upload { + overflow: auto; +} +#smileypr { + margin-left: 10px; +} +.edit_avatar_img { + margin: 0 0 1em; +} + +/* Activity by time */ +#activitytime { + margin: 6px 0; +} +.activity_stats { + margin: 10px 0; +} +.activity_stats li { + width: 4.16%; + float: left; + text-align: center; +} +.activity_stats li span { + display: block; + border: 1px solid #666; + border-left: none; + border-right: none; + background: #eee; +} +.activity_stats li.last span { + border-right: none; +} +.activity_stats li .generic_bar { + height: 100px; + border-bottom: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + margin: 0 auto; +} +.activity_stats li .generic_bar span { + position: absolute; + top: -1000em; + left: -1000em; +} + +.profile_pie { + background: url(../images/stats_pie.png); + background-size: auto 20px; + float: left; + height: 20px; + width: 20px; + margin: 0 12px 0 0; + text-indent: -1000em; +} + +/* View posts */ +.topic .time { + float: right; +} +.counter { + padding: 5px 6px 1px 2px; + font-size: 2.2em; + font-weight: bold; + color: #3f3f3f; + float: left; +} +.topic_details { + padding: 0 4px 4px 4px; + display: flex; +} +.counter + .topic_details { + margin-left: 25px; +} +.list_posts { + padding: 1em 2em; + -webkit-hyphens: auto; + -ms-hyphens: auto; + hyphens: auto; + overflow-wrap: break-word; +} + +#recent .list_posts { + border: 1px solid var(--neutral-color); + border-radius: 5px; +} + +.topic h4 { + margin: 3px 0; +} +.topic .post { + margin: 0 12px; + min-height: 80px; + height: auto !important; + height: 80px; +} +.topic .mod_icons { + text-align: right; + margin-right: 12px; +} + +#creator dt { + width: 40%; +} +#creator dd { + width: 55%; + margin: 0 0 10px 2px; +} +.centericon { + vertical-align: middle; +} +.sizefix { + width: 16px; + height: 16px; +} + +.boardslist > ul > li { + margin: 12px; +} +.boardslist > ul > li > ul { + columns: 2 250px; +} +.boardslist > ul > li > ul > li { + break-inside: avoid; + display: inline-block; + vertical-align: top; + width: 100%; +} +.boardslist a { + font-weight: bold; + border-bottom: 1px solid #c4c4c4; + display: block; + margin-bottom: 0.5em; +} +.boardslist a:hover { + text-decoration: none; + border-bottom: 1px solid #334466; +} +.boardslist label { + display: inline-block; + text-indent: -3ch; + margin: 0 3ch; +} + +#theme_settings { + overflow: auto; + margin: 0; + padding: 0; +} + +#theme_settings li { + margin: 10px 0; + padding: 0; +} +/* Paid Subscriptions */ +#paid_subscription { + width: 100%; +} +#paid_subscription dl.settings { + margin-bottom: 0; +} +#paid_subscription dl.settings dd, #paid_subscription dl.settings dt { + margin-bottom: 4px; +} +/* Pick theme */ +#pick_theme { + width: 100%; + float: left; +} +#pick_theme .selected { + background: #cddbe6; +} + +/* Signature preview */ + +#preview_signature, #preview_signature_display { + width: 100%; + overflow: hidden; +} + +/* Issue a warning */ +#warn_body { + width: 100%; + font-size: 0.9em; +} +#warn_temp { + font-size: smaller; +} + +/* Warning level bar */ +.warning_level { + text-align: center; + font-weight: bold; + max-width: 250px; +} +.warning_level.none .bar { + background-color: #75da41; +} +.warning_level.watched .bar { + background-color: #ffd800; +} +.warning_level.moderated .bar { + background-color: orange; +} +.warning_level.muted .bar { + background-color: #f45d4c; +} + +/* Styles for the statistics center. +------------------------------------------------- */ +#statistics .roundframe { + margin: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; +} +dl.stats dt { + width: 50%; + float: left; + margin: 0 0 4px 0; + line-height: 1.5em; + clear: both; + font-size: 1em; + overflow: hidden; + word-wrap: break-word; /* IE fallback */ + overflow-wrap: break-word; +} +dl.stats dd { + width: 48%; + font-size: 1em; + float: left; + margin: 0 0 4px 2%; +} +dl.stats { + padding: 5px; +} + +/* Forum history table. */ +#stats td, #stats th { + width: 15%; + padding: 4px; + text-align: center; +} +#stats tr.windowbg th.lefttext { + text-align: left; +} +#stats tr.windowbg th.stats_month { + width: 25%; + padding: 0 2em; + text-align: left; +} +#stats tr.windowbg td.stats_day { + padding: 0 3.5em; + text-align: left; +} + +/* Styles for the personal messages section. +------------------------------------------------- */ + +#personal_messages h2 span#author, #personal_messages h2 span#topic_title { + float: left; +} +#personal_messages h2 span#author { + margin: 0 0 0 6px; +} +#personal_messages h2 span#topic_title { + margin: 0 0 0 9em; +} +#personal_messages div.labels { + padding: 0 12px 0 0; +} +#personal_messages .capacity_bar { + background: var(--neutral-light-color); + display: block; + margin: 6px 0 0 12px; + height: 12px; + border: 1px solid #adadad; + width: 10em; +} +#personal_messages .capacity_bar span { + border-right: 1px solid #adadad; + display: block; + height: 12px; +} +#personal_messages .capacity_bar span.empty { + background: #a6d69d; +} +#personal_messages .capacity_bar span.filled { + background: #eea800; +} +#personal_messages .capacity_bar span.full { + background: #f10909; +} +#personal_messages .reportlinks { + padding: 6px 1.3em; +} +#personal_messages .pm_inline_time { + display: none; +} +#search_labels li { + padding: 4px 6px; +} +#manrules div.righttext { + padding: 4px 1px; +} +dl.addrules dt.floatleft { + width: 15em; + color: #333; + padding: 0 15px 6px 15px; +} +#addrule fieldset { + clear: both; +} +#to_item_list_container div, #bcc_item_list_container div { + float: left; + margin-right: 10px; +} +.unread_pm { + background: #cfc; +} +/* Styles for the show alerts section. +------------------------------------------------- */ +#alerts .windowbg { + display: flex; + align-items: baseline; + justify-content: space-between; + padding-top: 1em; +} +#alerts .alert_inline_time { + display: none; +} +.alert_time time { + margin:0; + float: inherit; +} +#alerts .quickbuttons { + display: flex; + margin: 4px 0; +} +#alerts .quickbuttons li, #alerts .alert_time { + white-space: nowrap; +} +#alerts .alert_image { + width: 65px; + padding: 6px 0; + text-align: center; + vertical-align: middle; +} +#alerts .alert_image > div { + position: relative; +} +#alerts .alert_image .avatar { + max-width: 80%; + max-height: 80%; + margin-top: 4px; + vertical-align: bottom; +} +#alerts .alert_image span.alert_icon { + display: block; + width: 100%; + line-height: 1em; +} +#alerts .alert_image .avatar + .alert_icon { + width: auto; + position: absolute; + right: 0; + top: 0; +} + +/* Styles for the memberlist section. +------------------------------------------------- */ +#mlist_search { + margin: auto; + max-width: 500px; +} +#mlist .selected { + white-space: nowrap; +} +#mlist .is_online { + width: 60px; +} +#mlist .email_address { + width: 25px; +} +#mlist .website_url { + width: 70px; +} +#mlist .icq, #mlist .skype { + width: 30px; +} +#mlist .post_count { + width: 115px; +} + +/* Styles for the search section. +------------------------------------------------- */ +#searchform fieldset { + text-align: left; + padding: 0; + border: none; +} + +.searchfielset { + padding: 0; +} +#searchform .roundframe { + border-radius: 0; + margin: 0; + padding: 32px; + display: flex; + justify-content: center; +} +#searchform .alt { + border-top: 0; + border-bottom-left-radius: 7px; + border-bottom-right-radius: 7px; +} +#searchform p.clear { + clear: both; +} +#advanced_search { + text-align: center !important; +} +#advanced_search dl#search_options { + margin: 0 auto; + width: 600px; + padding-top: 12px; + overflow: hidden; +} +#advanced_search dt { + padding: 2px; + text-align: right; + width: 20%; +} +#advanced_search dd { + width: 75%; + float: left; + padding: 2px; + margin: 0 0 0 6px; + text-align: left; +} +#search_results { + margin-bottom: 5px; +} + +/* Styles for the help section. +------------------------------------------------- */ + +#help_container { + padding: 0 0 8px 0; +} +#helpmain { + margin: 12px 0 0 0; + padding: 8px 20px 12px 20px; + border: 1px solid var(--neutral-color); + box-shadow: 0 -2px 2px rgba(0, 0, 0, 0.1); + overflow: auto; +} +#helpmain p { + margin: 10px 0; + line-height: 1.5em; +} +#helpmain ul { + line-height: 2em; + margin: 0 0 0 25px; +} +#helpmain ul li { + list-style-type: disc; +} +#helpmain ul li a { + font-weight: bold; +} + +/* Styles for the tooltips +------------------------------------------------------- */ +.tooltip { + position: absolute; + z-index: 999; + left: -9999px; + word-wrap: break-word; /* IE fallback */ + overflow-wrap: break-word; + max-width: 350px; + padding: 6px 9px; + color: #333; + background: var(--neutral-light-color); + border: 1px solid #aaa; + border-radius: 4px; + box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.2), 0 0px 10px rgba(0, 0, 0, 0.05) inset; +} + +/* Styles for popup windows */ +.popup_container { + display: none; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(40, 64, 80, 0.5); + z-index: 6; +} +#genericmenu > .popup_container { + z-index: 5; +} +#adm_submenus > .popup_container { + z-index: 4; +} +.popup_window, +#main_menu .popup_window, +#genericmenu .popup_window, +#adm_submenus .popup_window { + position: relative; + width: auto; + z-index: 99; + margin: 0 auto; + padding: 0; +} +.popup_window { + top: 15%; + width: 480px; + padding: 0 6px 6px 6px; +} +.popup_heading { + padding: 10px 8px; + color: var(--khaganat-color); +} +.popup_content { + color: #222; + line-height: 1.6em; + max-height: 30em; + overflow: auto; + padding: 10px 8px; + border: 1px solid #bbb; + border-bottom: 1px solid var(--neutral-color); + border-radius: 6px 6px 2px 2px; + box-shadow: 0 -2px 3px rgba(0, 0, 0, 0.15), 0 1px 1px rgba(255, 255, 255, 0.2); +} + +#main_menu .popup_heading, +#genericmenu .popup_heading, +#adm_submenus .popup_heading { + display: none; +} +#main_menu .popup_container, +#genericmenu > .popup_container, +#adm_submenus > .popup_container { + display: block; + position: relative; + background: none; + margin: 0; + height: auto; /* In case anything fishy happens in the situations where this used make sure it stays still */ +} +.main_icons.hide_popup { + float: right; +} +.popup_heading .icon { + vertical-align: middle; + margin: -4px 4px 0 0; +} + +.generic_list_wrapper, /*.windowbg,*/ .approvebg, .approvebg2 { + background: var(--neutral-light-color); + margin: 12px 0 0 0; + padding: 12px 16px; + + overflow: auto; +} +/* Here comes the glory... */ +/* TODO : ce serait bien avec deux couleurs différentes ? mais pas évident à assortir et laisser accessible ET joli */ +.windowbg:nth-of-type(even), .bg.even { + background: var(--neutral-light-color); +} +.windowbg:nth-of-type(odd), .bg.odd { + background: var(--neutral-light-color); +} +.windowbg { + border-bottom: #ddd solid 1px; +} +.windowbg:last-child, .windowbg:last-of-type { + border-bottom: none; +} + +/* Highlight the target item */ +.windowbg:target { + background: var(--neutral-light-color); +} + +/* Add some hover on table rows */ +tr.windowbg:hover { + background: #e2eef8; +} + +/* Special treatment for #forumposts area */ +#forumposts .windowbg, #forumposts .approvebg, #forumposts .approvebg2, #pmFolder .windowbg { + overflow: visible; + padding: 0.3em; + margin-top: 0.2em; + border-radius: 3px; +} +/* Nobody wants locked topics to stand out much. */ +.windowbg.locked { + background: #e7eaef; +} +/* Sticky topics get a different background */ +.windowbg.sticky { + background: #cfdce8; +} +/* Locked AND sticky are a bit more technical */ +.windowbg.sticky.locked { + background: #e8d8cf; +} +/* Awaiting approval is a bit special, topics first */ +.windowbg.approvetopic { + background: #e4a17c; +} +/* Unapproved posts in approved topics */ +.windowbg.approvepost { + background: #ffcbcb; +} +.generic_list_wrapper .additional_row { + margin: 0; + padding: 5px 0; + border-radius: 0; +} +.generic_list_wrapper table.table_grid { + border-bottom: 1px solid #aaa; +} + +div#editlang_desc { + margin-bottom: 8px; +} +.topic_details .smalltext { + font-size: 0.9em; +} +.table_grid tr.windowbg td.centercol { + text-align: center; +} +tr.windowbg { + box-shadow: none; +} +#postmodify #message { + width: 100%; +} +#postmodify .lastedit { + font-weight: bold; +} + +.mvisible { + border-top: 1px solid var(--neutral-color); + font-size: small; + color: var(--neutral-mid-color); + float: right; + line-height: 2em; +} +.lastedit { +} + +/* Colors for background of posts requiring approval */ +.approvebg { + color: #222; + background: #ffeaea; +} +.approvebg2 { + color: #222; + background: var(--neutral-light-color)2f2; +} + +div#manage_boards dl dd textarea[name=desc] { + margin-top: 1px; +} + +.bold_text { + font-weight: bold; +} + +/* Profile > This needed for responsive (get rid of
    ) */ +.infolinks { + display: inline-block; +} +#groups .windowbg { + box-shadow: none; + border-radius: 0; + border-top: 0; + margin: 0; +} +#groups .padding { + margin: 0 0 25px 0; +} +.groupmembership textarea { + width: 100%; +} +.groupmembership .righttext { + margin-top: 1ex; +} + +/* BoardIndex */ +/* This place covers board places (boardindex/messageindex/recent) */ +.boardindex_table:not(:last-child) { +} + +h2 .collapse { + float: right; + margin: 4px 4px 0 0; +} +.board_icon a, .board_icon div { + background: url(../images/boardicons.svg) no-repeat 0 0 / 90px; + display: inline-block; + width: 45px; + height: 45px; + border-bottom:none; +} +.board_icon a:hover, .board_icon div:hover { + border-bottom:none; +} +.board_icon a.board_on2, .board_icon div.board_on2 { + background-position: -45px 0; +} +.board_icon a.board_off, .board_icon div.board_off { + background-position: 0 -45px; +} +.board_icon a.board_redirect, .board_icon div.board_redirect { + background-position: -45px -45px; +} +.board_icon { + text-align: center; + padding: 8px 0 0 0; + width: 60px; + flex-shrink: 0; +} +.boardindex_table .board_icon { + width: 80px; +} +.khbb_children .board_icon { + width: 60px; + margin-left: 20px; +} + +.boardindex_table .info { + width: calc(55% - 80px); +} +.cat_bar .info { + width: 55% ; + display:flex; + align-items: center; + padding: 0; +} +div.cat_bar.without_biseau { + padding-top: 1em; +} +.cat_bar .info > span { + margin-left: 1em; +} +.boardindex_table .board_stats, .cat_bar .board_stats { + /*padding: 13px 10px 10px;*/ +} + +.boardindex_table .board_stats p { + border-left: 1px solid var(--neutral-color); + border-right: 1px solid var(--neutral-color); +} +.info { + overflow: hidden; + overflow-wrap: break-word; + padding: 5px 5px 5px 0; + flex-grow: 1; +} +.info .subject { + font-size: 1.1em; +} +.board_stats { + width: 15%; + font-size: 0.9em; + margin: 0 0 0 auto; + text-align: center; + display: flex !important ; + justify-content: space-around; +} + +.lastpost { + width: 30%; + font-size: 0.9em; + padding-top: 3px; +} +.cat_bar .lastpost { + padding: 0; +} +.lastpost p { + display: flex; + flex-direction: column; +} + +.windowbg .lastpost p { + display: inherit; +} + +.board_icon, .info, .board_stats, .lastpost { + display: inline-block; +} +.main_container { + /* pas de marge pour les biseaux + * margin-bottom: 0.5em;*/ +} +.up_contain { + overflow: hidden; + border: 1px solid var(--neutral-color); + display: flex; + flex-wrap: wrap; + align-items: center; +} +.up_contain:last-child { + border:none; +} +/* Child boards */ +.children { + border-top: 1px solid var(--neutral-color); + padding: 5px; + width: 100%; +} +.khbb_children { + display: flex; + border-bottom: 1px solid var(--neutral-color); + align-items: center; +} +.khbb_children:last-of-type { + border:none; +} +.khbb_children .info { + margin-left: 1em; +} +.children p { + font-size: 0.9em; +} +.children span::after { + content: ", "; +} +.children span:last-of-type::after { + content: ""; +} +p.moderators { + font-size: 0.9em; + font-weight: bold; +} +span.postby { + display: block; +} +/* Info Center */ +#info_center { + clear: both; +} +#info_center .sub_bar { + border-top: 1px solid var(--neutral-color); +} +#info_center .sub_bar:first-child { + border-top: none; +} +#upshrink_stats { + margin-top: 4px; +} +#ic_recentposts { + line-height: 1.6em; + width: 98%; + margin: -2px 0 0 23px; + font-size: 0.9em; +} +#ic_recentposts th { + text-align: left; + padding: 0 4px 0 0; +} +#ic_recentposts td { + border-top: 1px solid #eaeaea; + padding: 0 4px 0 0; + vertical-align: top; +} +#ic_recentposts tr:first-child td { + border-top: none; +} +#ic_recentposts .recentpost strong { + width: 40%; +} +#ic_recentposts .recentposter { + width: 15%; +} +#ic_recentposts .recentboard { + width: 20%; +} +#ic_recentposts .recenttime { + width: 25%; +} +#ic_recentposts .recenttime strong { + color: #555; +} +#ic_recentposts .windowbg { + background: none; +} +#upshrink_stats p.inline { + border: none; + margin: 0; + padding: 2px 29px; + line-height: 1.6em; + font-size: 0.9em; +} +#upshrink_stats p.inline span { + margin: 0; + padding: 4px 0 0 0; +} +#upshrink_stats span.membergroups { + display: block; +} + +/* MessageIndex */ +/* Start with description and other things */ +#description_board, .filter_row { + padding: 8px 10px; + border-bottom: none; + box-shadow: none; +} +#description_board h2, #description_board div { + display: inline-block; +} +#description_board h2::after { + content: " - "; +} +/* Topic list */ +#topic_header { + margin: 0; + border-radius: 0; + display: flex; +} +#topic_header div { + font-size: 1em; + padding: 0; +} +#topic_header input { + margin-top: 5px !important; +} +#topic_container .windowbg { + border-top: none; + display: flex; + box-shadow: none; + border-radius: 0; + padding: 0; + margin: 0; + overflow: hidden; + align-items: center; + flex-direction: row; +} +#topic_container .lastpost, #topic_header .lastpost { + width: 20%; +} +#topic_container .lastpost, #topic_container .board_stats { + flex-shrink: 0; +} +.icon img, .moderation input { + margin-top: 15px; +} +.moderation { + display: inline-block; + width: 35px; + flex-shrink: 0; + vertical-align: middle; + text-align: center; +} +.mod_comment { + width: 100%; +} +/* Quick moderation selects and submit */ +#quick_actions { + margin: 6px 0; +} +/* Icons and jump to */ +#topic_icons::before { + display: block; + height: 8px; + clear: both; + content: ""; +} +#topic_icons .information { + font-size: .9em; +} +#topic_icons ul { + padding: 0 12px 0 4px; + line-height: 2em; + display: flex; + width: 90%; + margin: 0 auto; + justify-content: space-between; + flex-wrap: wrap; +} + +#topic_icons ul li { + padding: 0 .4em; + border: #ddd solid 1px; + border-radius: 3px; +} + +/* Should lose this before RC1. It's a kludge. Can be fixed by new image */ +#topic_icons .floatleft img:first-child { + padding: 0 2px; +} + +/* Display */ +/* Poll question */ +#poll { + overflow: hidden; +} + +/* Poll vote options */ +#poll_options ul.options li { + padding: 6px 0 6px 25px; +} + +/* Poll results */ +#poll_options dl.options { + padding: 12px 0 12px 25px; + line-height: 1.4em; +} +#poll_options dl.options dt { + padding: 4px 0; + width: 30%; + max-width: 30em; + float: left; + clear: left; +} +#poll_options dl.options .voted { + font-weight: bold; +} +#poll_options dl.options dd { + width: 60%; + max-width: 45em; + float: left; + margin: 0 0 4px 0; + text-align: right; +} + +/* Poll notices */ +#poll_options p { + margin: 0 18px 2px 18px; + padding: 0 6px 6px 6px; +} + +div#pollmoderation { + overflow: auto; +} + +/* Styles for edit poll section. */ +#edit_poll dl.poll_options dt { + width: 33%; +} +#edit_poll dl.poll_options dd { + width: 65%; +} + +/* Linked events */ +.event_title { + font-size: larger; + vertical-align: middle; +} +.event_title + a { + margin-left: 1em; +} + +/* On to the posts */ +#forumposts { + clear: both; + margin: 8px 0 0 0; + margin-bottom: 0.3em; + +} +#forumposts .cat_bar { + margin: 0 0 -4px 0; +} +/* Topic information */ +#forumposts .catbg img { + margin: 0 4px -2px 0; +} +#forumposts .catbg span { + white-space: pre; + /* Specific sizing for clarity without ClearType. */ + font-size: 0.818em; + font-weight: normal; + padding: 2px 0; +} +/* poster and postarea + moderation area underneath */ +.post_wrapper { + display: flex; +} +.post_wrapper::after { + content: ""; + display: block; + clear: both; +} +.windowbg .recent_title .page_number { + margin: 0 0.5em; +} +/* poster details and list of items */ +.poster { + /* Don't set this in em.It will eat too much space if people need to set large text sizes. */ + width: 17%; + -webkit-hyphens: auto; + -ms-hyphens: auto; + hyphens: auto; + word-wrap: break-word; /* IE fallback */ + overflow-wrap: break-word; + padding: 1em; + border-right: 1px groove var(--color1); +} +.poster h3 { + font-size: 1.2em; +} +.poster h3, .poster h3 a, .poster li:hover h3 a, .poster h3 a:hover .poster li h3 a, .poster h3 a:focus { + margin: 0; + padding: 0; + text-transform: capitalize; +} + +.poster .profile .profile_icons li, .poster .im_icons li { + display: table-cell; + padding-right: 5px; +} +.postarea { + width: 100%; + display: flex; + flex-direction: column; + justify-content: space-between; +} +.moderatorbar { +} +/* The visible stuff below the avatar. */ +.user_info > li { + margin: 3px 0 0 0; + font-size: 0.85em; +} +.poster li.title { + font-weight: bold; +} +.poster li.membergroup { + font-style: italic; +} +.poster li.postgroup { + font-style: italic; +} +/* @todo Re-code this a bit to give background on anchor. */ +.poster li.poster_online, .poster li.poster_online:hover { + padding: 1px 1px 1px 1px; + margin: 3px 10px; +} +.poster li.poster_online a { + color: #c06002; + line-height: 1.6em; +} +.poster li.poster_online:hover, .poster li.poster_online:hover a { + /*text-decoration: underline;*/ +} +.poster li.warning a img { + vertical-align: bottom; + padding: 0 2px; +} +.poster img { + vertical-align: middle; +} +img.avatar { + object-fit: scale-down; +} +.poster img.avatar { + max-width: 100%; +} + +.postarea div.flow_hidden { + width: 100%; +} +.moderatorbar { + clear: right; +} +.messageicon { + display: inline-block; +} +.messageicon img, #iconList img { + vertical-align: middle; +} +.keyinfo { + padding: 0.3em; +} +.keyinfo .postinfo { + padding: 1px 0 5px 0; + line-height: 1.5em; + font-size: 0.8em; + display: flex; + flex-flow: row wrap; + justify-content: space-between; + align-items: center; +} +.postinfo_link { + font-style: italic; +} + +.keyinfo .postinfo .spacer { + flex: 1 1 auto; +} +/*.keyinfo .postinfo .modified { + color: #333; + font-weight: normal; + font-style: italic; + padding: 2px 4px 0 4px; +}*/ +/* PMs postinfo */ +#personal_messages .keyinfo .postinfo { + flex-direction: column; + align-items: flex-start; + font-weight: normal; +} +#reason::before { + content: " - "; +} +.subject_title a { + font-size: 0.9em; + color: #333; + font-weight: bold; +} +.subject_hidden a { + display: none; +} + +.inner { + padding: 7px 8px 2px 2px; + margin: 0; + border-top: 1px solid var(--neutral-color); + box-shadow: 0 1px 0 var(--neutral-light-color) inset; + min-height: 85px; + word-wrap: break-word; /* IE fallback */ + overflow-wrap: break-word; +} +img.smiley { + vertical-align: bottom; +} +.attachments { + padding: 12px 0 0 0; +} +.attached { + padding: 0 6px 8px 6px; + max-width: 100%; + display: inline-block; + vertical-align: top; +} +.attachments_top { + margin: 0 auto; + text-align: center; +} +.attachments hr { + clear: both; + margin: 12px 0; +} +.show_on_hover:hover span { + display:none; +} +.show_on_hover:hover:before { + content:attr(data-hover); +} +/* Separator of posts. More useful in the print stylesheet. */ +#forumposts .post_separator { + display: none; +} +/* Next and previous topic links */ +.nextlinks { + text-transform: capitalize; + background: var(--neutral-color); + padding: 0.2em 0.5em 0em; +} +/* Styles for the quick reply area. */ +#quickreply { + clear: both; +} +#quickreply_options .roundframe { + margin: 0; + padding: 8px 10% 12px 10%; + border-top-left-radius: 0; + border-top-right-radius: 0; +} +#quickReplyExpand { + float: right; + margin: 2px 2px 0 2px; +} +/* Styles for edit post section */ +form#postmodify .roundframe { + padding: 12px 12%; + margin: 0; +} +#post_header { + padding: 6px; + overflow: hidden; +} +#post_header dt { + float: left; + padding: 0; + width: 15%; + margin: 6px 0 0 0; + font-weight: bold; +} +#post_header dd { + float: left; + padding: 0; + width: 83%; + margin: 4px 0; +} +#post_header img { + vertical-align: middle; +} +ul.post_options { + margin: 0 0 0 12px; + padding: 0; + overflow: hidden; +} +ul.post_options li { + margin: 2px 0; + width: 49%; + float: left; +} +#post_additional_options_header { + margin-top: 0.5em; +} +#post_additional_options { + overflow: hidden; +} +#post_additional_options .progress_bar { + height: 22px; +} +#post_settings, #postAttachment, #postAttachment2, #attachment_previews { + padding: 10px 0; +} +#postAttachment dd, #postAttachment2 dd { + margin: 4px 0; +} +#postAttachment dd { + width: 45%; + float: left; +} +#postAttachment dt, #postAttachment2 dt { + font-weight: bold; +} +#post_draft_options { + background: #fdfdfd; + border: 1px solid #aaa; + border-left: 1px solid #bbb; + border-top: none; +} +#post_draft_options .settings dd, #post_draft_options .settings dt { + width: 50%; + border-top: 1px solid #e4e4e4; + padding: 5px 10px; + margin: 0; +} +#post_draft_options .settings dd:first-of-type, #post_draft_options .settings dt:first-child { + border-top: none; /* Some people are OCD, like me. :P */ +} +#post_draft_options .settings strong { + color: #555; +} +#post_confirm_buttons { + display: flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: space-between; + width: 100%; +} +#post_confirm_buttons, #shortcuts { + padding: 12px 0; +} +#post_confirm_buttons .smalltext { + flex: 1; + word-break: break-word; + margin: 0 5px 0 0; +} +#post_confirm_buttons .post_button_container { + vertical-align: top; +} +#post_confirm_buttons .padding { + flex: 1 100%; +} +.post_verification { + margin-top: 6px; +} +.post_verification #verification_control { + margin: 4px 0 4px 12px; +} +/* The BBC buttons */ +#bbcBox_message { + margin: 10px 6px; +} +#bbcBox_message div { + margin: 2px 0; + vertical-align: top; +} +#bbcBox_message div img { + margin: 0 1px 0 0; + vertical-align: top; +} +#bbcBox_message select { + margin: 0 2px; +} +/* The smiley strip */ +#smileyBox_message { + margin: 6px; +} +/* All the signatures used in the forum. If your forum users use Mozilla, Opera, or Safari, you might add max-height here ;). */ +.signature, .attachments, .under_message, +.custom_fields_above_signature, +.custom_fields_below_signature { + width: 100%; + overflow: auto; + clear: right; + padding: 0.5em; + border-top: 1px solid var(--neutral-color); + box-shadow: 0 1px 0 var(--neutral-light-color) inset; + line-height: 1.4em; + font-size: small; + color: var(--neutral-mid-color); +} + +.under_message { + overflow: visible; + border: none; + box-shadow: none; +} +.smflikebutton { + margin-top: 4px; +} +.like_count, +.smflikebutton:last-child { + margin-bottom: 4px; +} +/* Events */ +.edit_event { + margin: 0 10px; + vertical-align: top; +} +/* ModerationButtons */ +#moderationbuttons { +} +#moderationbuttons_strip { + margin: 4px 0 4px; +} +#moderationbuttons ul li { + padding: 0 6px 4px 0; + margin: 0; +} + +/* File error */ +.errorfile_table { + font-family: monospace; + border-spacing: 1px; +} +.errorfile_table td { + background: #fbfbfb; +} +.errorfile_table .current { + background: #fbc6c6; +} +.errorfile_table .file_line.current { + background: #fb9090; +} +.errorfile_table .file_line { + background: #ececec; +} + +/* General Classes */ +/* Cat_bar / catbg */ +div.cat_bar { + background: var(--color2); + padding: 0; + padding-bottom: 1em; + color: var(--neutral-light-color); + margin-top: 0; +} + +.cat_bar h2 { + padding-left: 1em; +} + +/* Styles for rounded headers. */ +.cat_bar .desc { + font-size: 12px; + line-height: 1.5em; + font-weight: normal; + margin: auto 1em; + margin-right: 0; +} +.cat_bar .desc a { + color: var(--neutral-light-color); + font-weight: 600; +} +h2.catbg { + font-size: 1.1em; +} +h2.catbg, h2.catbg a, h2.catbg a:hover { + color: var(--neutral-light-color); +} + +h2.catbg a:hover { + text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.4); +} +h2.catbg .main_icons::before, h2.catbg .icon { + margin: 0 5px 0 0; +} +.cat_bar + .windowbg, .cat_bar + .roundframe { + margin-top: -1px; + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.cat_bar + .title_bar { + margin-top: 0; +} + +#admin_content .cat_bar { + padding: .5em 0; +} + +/* Roundframe */ +.roundframe { + /*margin: 10px 0 0 0; + padding: 12px 16px;*/ + background: var(--neutral-light-color); + /*border: 1px solid #c5c5c5; + box-shadow: 0 -2px 2px rgba(0, 0, 0, 0.1);*/ + overflow: auto; +} +/* TitleBar & SubBar */ +.title_bar { + background: var(--color2); + color: var(--neutral-light-color); + align-items: center; + /* Nul sur les stats + * margin: 5px 0 0 0;*/ +} +.title_bar a { + color: var(--neutral-light-color); +} +.sub_bar { + border-bottom: 1px solid var(--neutral-color); + text-shadow: none; + background: none; + box-shadow: 0 -1px 0 #999 inset; + clear: both; +} + +h3.titlebg, h4.titlebg, h2.subbg, h4.subbg, .subbg { + background: none; + color: #555; + font-weight: bold; + overflow: hidden; + padding: 6px 12px 5px 12px; + text-shadow: none; +} + +h2.titlebg { + color: var(--neutral-light-color); + padding: 6px 12px 5px 12px; +} +.titlebg { +} + +.title_bar + .windowbg, .title_bar + .roundframe { + margin-top: -1px; + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +/* Other */ +/* Information */ +.information { + background: #f8f8f8; + overflow: auto; + padding-bottom: .5em; + padding: 12px 9px 8px 9px; +} +.generic_list_wrapper .information div { + background: none; +} +.information a:not(.button) { + font-weight: bold; +} +p.information img { + vertical-align: middle; +} +#messageindex .information { + border-radius: 0; + margin: 0; +} +#topic_icons .information, +#messageindex .information { + border-top: 1px solid var(--neutral-color); +} +.topic_pages { + font-size: 0.75em; + margin: 0 0 0 5px; +} +.topic_pages::before { + content: "\00ab "; +} +.topic_pages::after { + content: " \00bb" +} +/* Mentions */ +.atwho-view { + position: absolute; + top: 0; + left: 0; + display: none; + margin-top: 18px; + background: var(--neutral-light-color); + border: 1px solid var(--neutral-color); + border-radius: 3px; + box-shadow: 0 0 5px rgba(0, 0, 0, 0.1); + min-width: 120px; + z-index: 11110 !important; +} +.atwho-view .cur { + background: #3366ff; + color: var(--neutral-light-color); +} +.atwho-view .cur small { + color: var(--neutral-light-color); +} +.atwho-view strong { + color: #3366ff; +} +.atwho-view .cur strong { + color: var(--neutral-light-color); + font-weight: bold; +} +.atwho-view ul { + list-style: none; + padding: 0; + margin: auto; +} +.atwho-view ul li { + display: block; + padding: 5px 10px; + border-bottom: 1px solid var(--neutral-color); + cursor: pointer; +} +.atwho-view small { + font-size: smaller; + color: #777; + font-weight: normal; +} +/* On/Off Icons (User) */ +.on, .off { + display: inline-block; + width: 14px; + height: 14px; + border-radius: 50%; + border: 1px solid transparent; + vertical-align: middle; +} +.on { + background: #89e75a; + border-color: #74d246; +} +.off { + background: #a7a2a2; + border-color: #969292; +} +#userstatus .smalltext { + margin: 0 0 0 5px !important; +} + +/* Styles for print media. */ +@media print { + #headerarea { + display: none; + } + + .tborder { + border: none; + } +} +/* Who */ +.action_who #upper_show { + margin-top: 6px; +} +.action_who #lower_pagesection { + margin-top: 4px; +} +.action_who #lower_pagelinks { + margin-top: -4px; +} +.action_who select { + margin-top: -1px !important; +} +span.member.hidden { + display: inline-block; + font-style: italic; +} + +/* Icons (converted from img to css) */ +/* Stay here till I find a better place for you guys */ +h2.profile_hd::before { + vertical-align: middle; +} +h2.profile_hd::before, +.main_icons.profile_hd::before { + content: ""; + background: url(../images/icons/profile.png) no-repeat; + height: 24px; + width: 24px; + display: inline-block; +} +.main_icons.profile_sm::before { + background: url(../images/icons/profile.png) no-repeat; +} +.xx { + background: url(../images/post/xx.png) 2px no-repeat; + padding: 25px 6px 25px 18px; +} + +/* Those classes are sharing exact same gradient. */ +/* Background of buttons */ +/* Not for .button ! +.top_menu, +#top_section, .quickbuttons > li, +.quickbuttons li ul, +.inline_mod_check, .popup_window, #inner_section, .post_options ul { + background: var(--neutral-light-color); +} + +.quickbuttons li ul li a:hover, .quickbuttons ul li a:focus, +.post_options ul a:hover, .post_options ul a:focus, .notify_dropdown a:hover, .notify_dropdown a:focus +{ + background: var(--khaganat-color); + color: var(--neutral-light-color); +}*/ +/* Well some of them has different gradient effect on hover */ +.button:hover, #search_form .button:hover { + background: var(--khaganat-color); + color: var(--neutral-light-color); +} +/* If it fits I sits... */ +/*.navigate_section ul, */ +.popup_content, .up_contain { + background: var(--neutral-light-color); +} + +/* Topic/Board follow-alert menu */ +.notify_dropdown strong { + font-size: 1.1em; +} +.notify_dropdown a { + display: block; + padding: 0.5em; + text-decoration: none; + border: 1px solid transparent; + border-radius: 3px; +} +.notify_dropdown a:hover, .notify_dropdown a:focus { + border-color: var(--neutral-color); +} +.notify_dropdown span { + font-size: 0.9em; +} + +.notify_dropdown { + top: inherit !important; + left: inherit !important; +} +/* Some new stuff */ +#display_head { + clear: both; + display: flex; + align-items: center; + background: var(--khaganat-color); + position: relative; + margin-bottom: 0.3em; + padding-bottom: 1em; +} +#recent #display_head { + margin-bottom: 0; +} +#display_head p { + padding: 0.2em 0.5em 0.2em 2em; + overflow-wrap: break-word; + line-height: 1.2em; + width: 100%; + align-items: center; + color: var(--neutral-light-color); + font-size: 12px; + max-width: 80ch; +} +#display_head span { + margin: -4px 0 0 0; +} +.display_title { + font-weight: normal; + font-size: 1.4em; + padding: 0 0.4em 0 1em; + color: var(--neutral-light-color); + z-index: 5; + /* + line-height: 1em; + overflow-wrap: break-word; + align-items: center; + display: flex; + box-sizing: content-box;*/ + +} +/* Pas forcément top vu comme les lignes peuvent bouger +.display_title:after { + border-right: 26px solid transparent; + border-bottom: 26px solid var(--khaganat-color); + margin-right: -26px; + content: " "; + box-sizing: content-box; + padding-left: 0.2em; +}*/ + +#reported_posts .main_icons, +#reported_members .main_icons { + margin: -3px 1px 0 0; +} +#reported_posts .quickbuttons li a, +#reported_members .quickbuttons li a { + background: none; +} + +/* Some colors for generic usage */ +/* Sometimes there will be an error when you post */ +/* Messages that somehow need to attract the attention. */ +.red, .meaction, .error, .alert, .warn_mute { + color: red; +} +.khbb_nav .error { + margin-left: 3px; + padding: 3px 6px 0px 6px; + background: var(--color5); + color: var(--neutral-light-color); + clip-path: polygon(50% 0%, 95% 25%, 95% 75%, 50% 100%, 5% 75%, 5% 25%); + position: absolute; + top: 0; + right: 0; +} + +/* Adding some classes for generic usage and JS rules */ +.hidden { + display: none; +} +.inline_block { + display: inline-block; +} +.block { + display: block; + margin: 0 0 5px 0; +} + +/* Alternating colors */ +.stripes:nth-of-type(even) { + background-color: #f2f2f2; +} +.stripes:nth-of-type(odd) { + background-color: var(--neutral-light-color); +} +.alternative { + background-color: #f2f2f2; +} +.alternative2 { + background-color: #e8edf0; +} + +.centerbox { + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} + +.dz-image-preview { + display: flex; + flex-flow: row wrap; + justify-content: space-between; + align-items: center; + margin-top: 12px; +} +#attachment_previews { + display: none; +} +#attachment_previews div.descbox > div, +#attachment_previews div.errorbox > div, +#attachment_previews div.infobox > div { + padding: 10px; +} +#attachment_previews .attach-preview { + flex: 0 0 auto; + width: 170px; +} +#attachment_previews .attachment_info { + flex: 1 1 auto; + width: 250px; +} +#attachment_previews .attach-ui { + min-height: 36px; + padding: 10px 0; + float: right; +} +input[name="attachBBC"] { + width: 100%; + margin-top: 10px; +} +.attachment_info .progress_bar, .attachment_info .attached_BBC, a#attach_cancel_all, a#attach_upload_all, .attach-ui { + display: none; +} +.attachment_info .progress_bar { + margin: 6px 0; +} +.attached_BBC_width_height label { + min-width: 100px; + display: inline-block; +} +.attached_BBC_width, .attached_BBC_height { + margin: 10px 1em 0 0; + display: inline-block; +} +.attachment_info input[type="number"] { + width: 5em; +} +#attachment_upload { + min-height: 50px; +} +#drop_zone_ui { + display: none; +} +#total_progress { + width: 50%; + display: none; +} +#max_files_progress, #max_files_progress_text { + display: none; +} + +/* Hide this from desktop users sshh... our little sekrit */ +.mobile_buttons, .mobile_display { + display: none; +} + +/* Two-Factor Auth code container */ +.tfacode { + background: #d0e7f8; + padding: 5px; + display: inline-block; +} + +/* TFA QR block */ +.tfa_qrcode { + padding: 6% 8%; +} + +.tfa_qrcode img { + width: 140px; +} + +/* This was named as "winfo" before, but its better named noup */ +.noup { + border-top-left-radius: 0; + border-top-right-radius: 0; + margin: 0 0 10px 0 !important; +} +.information.noup { + border-radius: 0; + margin: 0 !important; + border-bottom: none; +} +.windowbg.noup { + box-shadow: none; +} + +/* Make the reCAPTCHA dialog centered to match the positioning of the built-in verification */ +.g-recaptcha { + display: inline-block; +} + +/* If its collapsed you know what to do */ +.collapsed { + opacity: 0.5; + transition: 1s; +} +.collapsed:hover { + opacity: 1; +} + +/* Lets not allow our textarea in news section overflow too much to left */ +tr[id^='list_news_lists_'] textarea { + width: 100%; + resize: vertical; + min-height: 100px; +} + +/* Responsive Youtube embed */ +.videocontainer { + max-width: 560px; +} +.centertext .videocontainer, +.justifytext .videocontainer { + margin: 0 auto; +} +.righttext .videocontainer { + margin: 0 0 0 auto; +} +.lefttext .videocontainer { + margin: 0 auto 0 0; +} +.videocontainer > div { + position: relative; + padding-bottom: 56.25%; +} +.videocontainer iframe { + position: absolute; + top: 0; + left: 0; + width: 100% !important; + height: 100% !important; +} +.videocontainer video { + object-fit: contain; + background: black; + max-width: 100%; +} + +.backtrace:not(:last-child) { + padding-bottom: 0.5em; + border-bottom: 1px solid var(--neutral-color); + margin-bottom: 0.5em; +} + +/* To break or not to break that is the question indeed */ +.word_break { + word-break: break-all; +} + +div.sceditor-container:not(.sceditor-maximize) { + z-index: 4; +} + +#attach_current_directory { + word-break: break-word; +} +/* Add max-width for theme thumbnails */ +img.theme_thumbnail { + max-width: 250px; +} + +#lang_main_files_list .name, #member_list .email, #approve_list .email { + word-break: break-word; +} +/* khbb : les modifs 100% Khaganat */ + +.khbb_nav { + position: relative; + width: 100%; + display: flex; + background-color: rgba(255,255,255,0.5); + justify-content: space-between; + align-items: center; + z-index: 99; +} +.khbb_nav ul { + display: flex; + flex-wrap: wrap; + width: 100%; + justify-content: center; +} +.khbb_nav ul li { + position: relative; + +} +.khbb_nav ul li a{ + color: var(--dark-color); + padding: 0 0.2em; + margin: 0 0.2em; + font-size: 0.9em; + display: flex; + justify-content: center; + align-items: center; + /*background: linear-gradient(0deg, rgba(255,255,255,0.5) 0%, rgba(255,255,255,0) 50%); */ + border-left: 1px solid var(--neutral-light-color); + border-right: 1px solid var(--neutral-light-color); + border-radius: 6px; +} + +.khbb_nav ul li a:hover, .khbb_nav ul li a:focus { + /*background-color: var(--neutral-light-color);*/ + cursor: pointer; + border-left: 1px solid var(--neutral-light-color); + border-right: 1px solid var(--neutral-light-color); +} + +.khbb_nav ul li img { + width: 2em; +} +.khbb_nav ul li:hover img { + clip-path: polygon(50% 0%, 95% 25%, 95% 75%, 50% 100%, 5% 75%, 5% 25%); + background-color: var(--neutral-light-color); +} +.khbb_nav ul li a:hover .khbb_subtitlemenu, .khbb_nav ul li a:focus .khbb_subtitlemenu { + color: var(--neutral-light-color) ; +} + +.khbb_subtitlemenu { + color:var(--khaganat-color); + text-align: center; + padding: 5px; + z-index: 1; + top: 100%; + padding: 0; +} + + +.khbb_nav ul li span.amt { + position: absolute; + top: 0; + left: 0; +} + +.khbb_identity ul li { + margin-right: 0.6em; +} + +.khbb_identity { + text-transform: capitalize; + padding: 0 0.5em; + display: flex; + background-color: var(--neutral-light-color); + justify-content: center; + align-items: baseline; + max-width: 30%; + box-shadow: 0px 0px 5px 1px var(--neutral-light-color); + border-radius: 0.5em 0; +} + +.khbb_identity span { + display: inline; +} + +.go_to_top { + position:fixed; + background-color: var(--neutral-light-color) ; + max-width: 5em; + display: block; + bottom: 0; + right: 0; +} + +.khbb_subtitle { + display: flex; + justify-content: space-between; + max-width: 1200px; + margin: 0 auto; + width: 90%; +} + + +.cat_bar { + display: flex; + flex-wrap: wrap; + align-items: end; +} + +/* Pour inclure les barres de khaganat */ +.khbb_body { + display:flex; + min-height:calc(100vh - 3em);; + + flex-direction: column; + justify-content: space-between; + position: relative; +} + +.khbb_forum { + height: 100%; +} + +.khnav_logo_bg { + z-index: 1; +} + +#khfooter_bottom { +} + +.khfooter { + align-items: initial; + overflow: hidden; + margin-top: 0.5em !important; +} +.khfooter div img { + box-sizing: content-box; +} +.khfooter div { + height: 2.5em; + align-items: initial !important; +} +/* Collapse pur css // Utilser details est aussi bien ! +.khbb_collapse-able { + height: 1.2rem; + overflow: hidden; +} + +.khbb_collapse-able:active, .khbb_collapse-able:hover { + height: auto; +} +.khbb_collapse-able span { + font-size: 0.8em; + font-style: italic; +} */ + +/* Search */ +.khbb_quicksearch { +} +.khbb_no { + display:none; +} + +/* Biseaux */ +.khbiseau_bottom_white { + border-style: solid; + border-color: white transparent transparent transparent; + border-width: 0.5em; + padding: 0; + background-color: transparent !important; + } +.khbiseau_bottom_color { + border-style: solid; + border-color: var(--color2) transparent transparent transparent; + border-width: 0.5em; + padding: 0; + background-color: transparent !important; + } + +.khbiseau_topright_white { + border-style: solid; + border-color: transparent transparent #fff transparent; + border-width: 0 1.5em 1.5em 0; +} + +.khbiseau_topright_color { + border-style: solid; + border-color: transparent transparent var(--color2) transparent; + border-width: 0 1em 1em 0; +} +.khbiseau_topright_khcolor { + border-style: solid; + border-color: transparent transparent var(--khaganat-color) transparent; + border-width: 0 1em 1em 0; +} + +.khbiseau_right_color { + border-style: solid; + border-color: transparent transparent red red; + border-width: 1.5em 0em 1.5em 1.5em; + height: 100%; + position: absolute; + right: 0; +} + +/* Petit hexagone */ +.not_toggle { + padding-left: 1em; +} +.not_toggle::before { + width: 17px; + height: 17px; + display: inline-block; + background: #f7f7f7; + overflow: hidden; + content: ""; + vertical-align: middle; + margin: 0 5px 0 5px; + transition: background-color 0.25s; + clip-path: polygon(50% 0%, 95% 25%, 95% 75%, 50% 100%, 5% 75%, 5% 25%); +} + +/* Divers KH */ +.khbb_label { + background-color: var(--neutral-light-color); + color: var(--dark-color); + clip: rect(0 0 0 0); /* Old compatibility*/ + clip-path: inset(50%); + height: 1px; + overflow: hidden; + position: absolute; + white-space: nowrap; + width: 1px; +} + +.khbottom .buttonlist { + display:flex; + flex-direction: row-reverse; +} +.khbottom .button_strip_reply { + margin-left: 1em; + font-weight: bold; +} + +/*Plugin Theme Changer Remix*/ +/* Mode "rien à battre", faut mettre en "bottom" sinon ça passe pas...*/ +.changetheme { + position: absolute; + right: 0; + z-index: 2000; + top:0; +} + diff --git a/css/jquery.sceditor.theme.css b/css/jquery.sceditor.theme.css new file mode 100644 index 0000000..4ddb7d4 --- /dev/null +++ b/css/jquery.sceditor.theme.css @@ -0,0 +1,625 @@ +/*! SCEditor | (C) 2011-2013, Sam Clarke | sceditor.com/license */ +/** + * SCEditor + * https://www.sceditor.com/ + * + * Copyright (C) 2011-12, Sam Clarke (samclarke.com) + * + * SCEditor is licensed under the MIT license: + * https://opensource.org/licenses/mit-license.php + */ +div.sceditor-grip, +.sceditor-button div { + background-image: url("../images/icons/editor_sprite.png"); + background-repeat: no-repeat; + width: 16px; + height: 16px; +} +.sceditor-button-flash div { + background-position: 0px -712px; +} +.sceditor-button-youtube div { + background-position: 0px 0px; +} +.sceditor-button-link div { + background-position: 0px -16px; +} +.sceditor-button-unlink div { + background-position: 0px -32px; +} +.sceditor-button-underline div { + background-position: 0px -48px; +} +.sceditor-button-time div { + background-position: 0px -64px; +} +.sceditor-button-table div { + background-position: 0px -80px; +} +.sceditor-button-superscript div { + background-position: 0px -96px; +} +.sceditor-button-subscript div { + background-position: 0px -112px; +} +.sceditor-button-strike div { + background-position: 0px -128px; +} +.sceditor-button-source div { + background-position: 0px -144px; +} +.sceditor-button-size div { + background-position: 0px -160px; +} +.sceditor-button-rtl div { + background-position: 0px -176px; +} +.sceditor-button-right div { + background-position: 0px -192px; +} +.sceditor-button-removeformat div { + background-position: 0px -208px; +} +.sceditor-button-quote div { + background-position: 0px -224px; +} +.sceditor-button-print div { + background-position: 0px -240px; +} +.sceditor-button-pastetext div { + background-position: 0px -256px; +} +.sceditor-button-paste div { + background-position: 0px -272px; +} +.sceditor-button-outdent div { + background-position: 0px -288px; +} +.sceditor-button-orderedlist div { + background-position: 0px -304px; +} +.sceditor-button-maximize div { + background-position: 0px -320px; +} +.sceditor-button-ltr div { + background-position: 0px -336px; +} +.sceditor-button-left div { + background-position: 0px -352px; +} +.sceditor-button-justify div { + background-position: 0px -368px; +} +.sceditor-button-italic div { + background-position: 0px -384px; +} +.sceditor-button-indent div { + background-position: 0px -400px; +} +.sceditor-button-image div { + background-position: 0px -416px; +} +.sceditor-button-horizontalrule div { + background-position: 0px -432px; +} +.sceditor-button-format div { + background-position: 0px -448px; +} +.sceditor-button-font div { + background-position: 0px -464px; +} +.sceditor-button-emoticon div { + background-position: 0px -480px; +} +.sceditor-button-email div { + background-position: 0px -496px; +} +.sceditor-button-date div { + background-position: 0px -512px; +} +.sceditor-button-cut div { + background-position: 0px -528px; +} +.sceditor-button-copy div { + background-position: 0px -544px; +} +.sceditor-button-color div { + background-position: 0px -560px; +} +.sceditor-button-code div { + background-position: 0px -576px; +} +.sceditor-button-center div { + background-position: 0px -592px; +} +.sceditor-button-bulletlist div { + background-position: 0px -608px; +} +.sceditor-button-bold div { + background-position: 0px -624px; +} +div.sceditor-grip { + background-position: 0px -640px; + width: 10px; + height: 10px; +} +.rtl div.sceditor-grip { + background-position: 0px -650px; + width: 10px; + height: 10px; +} +/** + * SCEditor + * https://www.sceditor.com/ + * + * Copyright (C) 2011-12, Sam Clarke (samclarke.com) + * + * SCEditor is licensed under the MIT license: + * https://opensource.org/licenses/mit-license.php + */ +/*--------------------------------------------------- + LESS Elements 0.7 + --------------------------------------------------- + A set of useful LESS mixins + More info at: http://lesselements.com + ---------------------------------------------------*/ +.sceditor-container { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + position: relative; + background: #fff; + border: 1px solid #d9d9d9; + font-size: 13px; + font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; + color: #222; + line-height: 1; + font-weight: bold; + border-radius: 4px; + background-clip: padding-box; + min-width: 100%; + max-width: 100%; +} +.sceditor-container *, +.sceditor-container *::before, +.sceditor-container *::after { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} +.sceditor-container, +.sceditor-container div, +div.sceditor-dropdown, +div.sceditor-dropdown div { + padding: 0; + margin: 0; + z-index: 5; +} +.sceditor-container iframe, +.sceditor-container textarea { + line-height: normal; + border: 0; + outline: none; + font-size: 14px; + color: #111; + box-sizing: border-box; + padding: 0 5px; + margin: 0px; + resize: none; + background: #fff; + display: flex; + flex-basis: 175px; + flex-grow: 1; + min-width: 100%; + max-width: 100%; + height: 175px; + min-height: 1px; + max-height: 100%; +} +.sceditor-container iframe { + font-family: Verdana, Arial, Helvetica, sans-serif; +} +.sceditor-container textarea { + font-family: "DejaVu Sans Mono", Monaco, Consolas, monospace; +} +div.sceditor-dnd-cover { + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: rgba(255, 255, 255, 0.2); + border: 5px dashed #aaa; + z-index: 200; + font-size: 2em; + text-align: center; + color: #aaa; +} +div.sceditor-dnd-cover p { + position: relative; + top: 45%; + pointer-events: none; +} +div.sceditor-resize-cover { + position: absolute; + top: 0; + left: 0; + background: #000; + width: 100%; + height: 100%; + z-index: 10; + opacity: 0.3; +} +div.sceditor-grip { + overflow: hidden; + width: 10px; + height: 10px; + cursor: pointer; + position: absolute; + bottom: 0; + right: 0; + z-index: 3; + line-height: 0; +} +div.sceditor-grip.has-icon { + background-image: none; +} +.sceditor-maximize { + position: fixed; + top: 0; + left: 0; + height: 100% !important; + width: 100% !important; + border-radius: 0; + background-clip: padding-box; + z-index: 2000; +} +html.sceditor-maximize, +body.sceditor-maximize { + height: 100%; + width: 100%; + padding: 0; + margin: 0; + overflow: hidden; +} +.ie6.sceditor-maximize { + position: absolute; +} +.sceditor-maximize div.sceditor-grip { + display: none; +} +.sceditor-maximize div.sceditor-toolbar { + border-radius: 0; + background-clip: padding-box; +} +div.sceditor-smileyPopup, div.sceditor-dropdown { + border: 1px solid #ccc; + background: #fff; + color: #333; + z-index: 4000; + padding: 10px; + line-height: 1; + border-radius: 2px; + background-clip: padding-box; + box-shadow: 1px 2px 4px rgba(0, 0, 0, .2); + overflow-y: auto; +} + +div.sceditor-smileyPopup, .sceditor-smileyPopup { + width: auto; + position: absolute; + top: 0; + max-width:90%; + } +/*@media screen and (min-width: 1024px) { + div.sceditor-smileyPopup { + max-height: 50%; + width: 50%; + position: fixed; + background:aliceblue !important; + } + #sceditor-popup { + height: 100%; + } + #sceditor-popup-smiley { + height: 90%; + overflow: auto; + } +} +@media screen and (max-width: 1024px) { + div.sceditor-smileyPopup { + width: 90%; + position: absolute; + background:black !important; + } +}*/ +/** + * Dropdown styleing + */ +div.sceditor-dropdown { + position: absolute; + border: 1px solid #ccc; + background: #fff; + color: #333; + z-index: 4000; + padding: 10px; + line-height: 1; + border-radius: 2px; + background-clip: padding-box; + box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.2); +} +div.sceditor-dropdown a, +div.sceditor-dropdown a:link { + color: #333; +} +div.sceditor-dropdown form { + margin: 0; +} +div.sceditor-dropdown label { + display: block; + font-weight: bold; + color: #3c3c3c; + padding: 4px 0; +} +div.sceditor-dropdown input, +div.sceditor-dropdown textarea { + font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; + outline: 0; + padding: 4px; + border: 1px solid #ccc; + border-top-color: #888; + margin: 0 0 .75em; + border-radius: 1px; + background-clip: padding-box; +} +div.sceditor-dropdown textarea { + padding: 6px; +} +div.sceditor-dropdown input:focus, +div.sceditor-dropdown textarea:focus { + border-color: #aaa; + border-top-color: #666; + box-shadow: inset 0 1px 5px rgba(0, 0, 0, 0.1); +} +div.sceditor-dropdown .button { + font-weight: bold; + color: #444; + padding: 0 12px; + background: #ececec; + border: solid 1px #ccc; + border-radius: 2px; + background-clip: padding-box; + cursor: pointer; + margin: .3em 0 0; +} +div.sceditor-dropdown .button:hover { + background: #f3f3f3; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.15); +} +div.sceditor-font-picker, +div.sceditor-fontsize-picker, +div.sceditor-format { + padding: 6px 0; +} +div.sceditor-emoticons, +div.sceditor-more-emoticons, +div.sceditor-color-picker { + padding: 0; +} +.sceditor-pastetext textarea { + border: 1px solid #bbb; + width: 20em; +} +.sceditor-emoticons img, +.sceditor-more-emoticons img { + padding: 0; + cursor: pointer; + margin: 2px; +} +.sceditor-insertemoticon { + padding: 4px !important; +} + +.sceditor-insertemoticon > div, .sceditor-insertemoticon > center { + display: inline-block; + vertical-align: middle; +} +.sceditor-more { + border-top: 1px solid #bbb; + display: inline-block; + cursor: pointer; + font-weight: bold; + padding: 0 4px !important; + margin-top: 4px !important; +} +.sceditor-dropdown a:hover { + background: #eee; +} +.sceditor-fontsize-option, +.sceditor-font-option, +.sceditor-format a { + display: block; + padding: 7px 10px; + cursor: pointer; + text-decoration: none; + color: #222; +} +.sceditor-fontsize-option { + padding: 7px 13px; +} +.sceditor-color-column { + float: left; +} +.sceditor-color-option { + display: block; + border: 1px solid #fff; + height: 10px; + width: 10px; + overflow: hidden; + display: inline-block; + border: 1px solid #fff; +} +@media screen and (min-width: 1024px) { + .sceditor-color-option { + height: 24px; + width: 24px; + } + .sceditor-color-picker { + width: 131px; + } +} +@media screen and (max-width: 1024px) { + .sceditor-color-option { + height: 48px; + width: 48px; + } + .sceditor-color-picker { + width: 251px; + } +} +.sceditor-color-option:hover { + border: 1px solid #333; +} +/** + * Toolbar styleing + */ +div.sceditor-toolbar { + flex-shrink: 0; + overflow: hidden; + padding: 3px 5px 2px; + background: #f7f7f7; + border-bottom: 1px solid #c0c0c0; + line-height: 0; + text-align: left; + user-select: none; + border-radius: 3px 3px 0 0; + background-clip: padding-box; + margin: 0 0 5px; +} +div.sceditor-group { + display: inline-block; + background: #ddd; + margin: 1px 5px 1px 0; + padding: 1px; + border-bottom: 1px solid #aaa; + border-radius: 3px; + background-clip: padding-box; +} +.sceditor-button { + float: left; + cursor: pointer; + padding: 3px 5px; + width: 16px; + height: 20px; + border-radius: 3px; + background-clip: padding-box; +} +.sceditor-button:hover, +.sceditor-button:active, +.sceditor-button.active { + background: #fff; + box-shadow: inset 1px 1px 0 rgba(0, 0, 0, 0.3), inset -1px 0 rgba(0, 0, 0, 0.3), inset 0 -1px 0 rgba(0, 0, 0, 0.2); +} + +.sceditor-button:active { + background: #fff; + box-shadow: inset 1px 1px 0 rgba(0, 0, 0, 0.3), inset -1px 0 rgba(0, 0, 0, 0.3), inset 0 -1px 0 rgba(0, 0, 0, 0.2), inset 0 0 8px rgba(0, 0, 0, 0.3); +} +.sceditor-button.disabled:hover { + background: inherit; + cursor: default; + box-shadow: none; +} +.sceditor-button, +.sceditor-button div { + display: block; +} +.sceditor-button svg { + display: inline-block; + height: 16px; + width: 16px; + margin: 2px 0; + fill: #111; + pointer-events: none; + line-height: 1; +} +.sceditor-button.disabled svg { + fill: #888; +} +.sceditor-button div { + margin: 2px 0; + padding: 0; + overflow: hidden; + line-height: 0; + font-size: 0; + color: transparent; +} +.sceditor-button.has-icon div { + display: none; +} +.sceditor-button.disabled div { + opacity: 0.3; +} +.text .sceditor-button, +.text .sceditor-button div, +.sceditor-button.text, +.sceditor-button.text div, +.text-icon .sceditor-button, +.text-icon .sceditor-button div, +.sceditor-button.text-icon, +.sceditor-button.text-icon div { + display: inline-block; + width: auto; + line-height: 16px; + font-size: 1em; + color: inherit; + text-indent: 0; +} +.text-icon .sceditor-button.has-icon div, +.sceditor-button.has-icon div, +.text .sceditor-button div, +.sceditor-button.text div { + padding: 0 2px; + background: none; +} +.text .sceditor-button svg, +.sceditor-button.text svg { + display: none; +} +.text-icon .sceditor-button div, +.sceditor-button.text-icon div { + padding: 0 2px 0 20px; +} +.rtl div.sceditor-toolbar { + text-align: right; +} +.rtl .sceditor-button { + float: right; +} +.rtl div.sceditor-grip { + right: auto; + left: 0; +} + +/* SMF buttons styles */ +.sceditor-button-pre div { + background-position: 0 -696px; +} +.sceditor-button-floatleft div { + background-position: 0px -680px; +} +.sceditor-button-floatright div { + background-position: 0px -664px; +} +.sceditor-insertemoticon img, +.sceditor-smileyPopup img { + margin: 0; + border-left: var(--neutral-mid-color) 1px dotted; + padding: 0 0.3em; +} +.sceditor-insertemoticon img, +div.sceditor-dropdown img, +.sceditor-smileyPopup img { + cursor: pointer; +} diff --git a/css/responsive.css b/css/responsive.css new file mode 100644 index 0000000..e9502e5 --- /dev/null +++ b/css/responsive.css @@ -0,0 +1,996 @@ +/* Reprise du bazar en mode < 700, > 700-1000 < et >1000 +/* Modif Khaganat ; à retravailler */ + +/*Large screen */ +@media (min-width: 1000px) { + .khbb_nav { + /*padding: 0 10em;*/ + } +} + +/* Middle Screen */ +@media (min-width: 700px) and (max-width: 1000px) { + .lastpost { + width: 20%; + margin: 3px 0 0 5px; + } + #alerts .alert_time { + display: none; + } + #alerts .alert_inline_time { + display: block; + } +} +/* Little Screen */ +@media (max-width: 700px) { + + /* Menu */ + .khnav_sticky { + z-index: 10 !important; + } + .khbb_mobile_button { + display: flex; + justify-content: center; + align-items: center; + background-color: var(--color1); + color: var(--neutral-light-color); + padding: 0.3em; + padding-right: 0.5em; + } + .khbb_nav { + flex-direction: column; + } + .khbb_nav ul { + /*background: var(--neutral-light-color);*/ + width: auto; + } + .khbb_nav ul li { + width: auto; + padding: 0.1em 1em; + margin: 0; + } + .khbb_nav ul li a { + flex-direction: row; + justify-content: start; + } + .khbb_nav ul li a img { + height: 1.2em; + width: initial; + } + .khbb_subtitlemenu { + display: block; + visibility: visible; + position: relative; + padding: 0; + background-color: inherit; + color: inherit; + } + .khbb_nav ul li a span.amt, .khbb_nav ul li a span.error { + position: relative; + } + + /* Autres modifs maisons */ + .khbb_subtitle { + justify-content: center; + } + .khbb_identity { + max-width: initial; + } + .khbb_subtitle .news { + display: none !important; + } + /* Board */ + .board_stats, .cat_bar .lastpost { + display: none !important; + } + .khbb_children { + flex-wrap: wrap; + } + .khbb_children .lastpost { + display: flex; + flex-direction: column; + } + .boardindex_table .khbb_children .info { + width: calc(100% - 100px); + } + /*Messages */ + #forumposts .windowbg { + margin: 0.5em; + border-radius: 5px; + box-shadow: 0 -2px 2px rgba(0, 0, 0, 0.1); + border-top: none; + } + + .post_wrapper { + flex-direction: column; + } + .poster { + padding: 0.5em 0.5em 0 0.5em; + border-right: none; + } + /* Breadcrumb ; les flèches créent une marge... Mais changer le padding suffirait ?*/ + .navigate_section ul li::before, .navigate_section ul li::after { + } + .navigate_section ul li { + padding: .5em 0.2em .5em 1em; + } + /* page "recents" et autres affichages de ce genre */ + #recent .windowbg .recent_title { + flex-direction: column; + } + #alerts .windowbg { + flex-direction: column; + } + + + + /* Stuff de SMF rangé en mode plus simple */ + .lastpost { + margin: 0 0 0 20px; + } + .board_stats { + display: none; + } + #alerts .alert_time { + display: none; + } + #alerts .alert_inline_time { + display: block; + } + #profile_menu_top .textmenu, + #pm_menu_top .textmenu, + #alerts_menu_top .textmenu { + display: none; + } + #pm_menu_top .main_icons, + #alerts_menu_top .main_icons { + display: inline-block; + } + #member_list .ip, #member_list .last_active, #member_list .user_name { + display: none !important; + } +} + + +@media (min-width: 720px) and (max-width: 799px) { + #top_info .welcome { + display: none; + } + /* Calendar */ + #event_time_options { + width: 44%; + } + #event_title { + padding: 0; + } + #evtitle { + width: 98%; + } + .event_options_left, .event_options_right { + display: block; + max-width: unset; + width: unset; + } + #event_title input[type="text"] { + width: 100%; + } + #post_event #event_board select { + width: calc(100% - 90px); + max-width: unset; + } +} + +/* We have shared things... */ +@media screen and (max-width: 720px) { + /* Remove some content from the hooks table */ + #list_integration_hooks th#header_list_integration_hooks_function_name, #list_integration_hooks td.function_name, + #list_integration_hooks th#header_list_integration_hooks_remove, #list_integration_hooks td.remove { + display: none; + } + /* New Mobile Action/Mod Pop (Test) */ + .moderationbuttons_check { + display: none; + } + .moderationbuttons_mobile_check { + display: inline-block; + } + #mobile_action .button, #mobile_moderation .button, #mobile_action .top_menu { + width: 100%; + margin: 0; + border-radius: 0; + border-left: 0; + border-right: 0; + text-indent: 5px; + } + #mobile_action .button, #mobile_moderation .button { + line-height: 2.8em; + height: auto; + } + #mobile_action .notify_dropdown { + top: 0 !important; + left: 0 !important; + position: relative; + } + #mobile_action .top_menu { + padding: 0; + margin: 0 auto; + } + #mobile_action .notify_dropdown a { + border-bottom: 1px solid #999; + } + #mobile_action .notify_dropdown a:last-of-type { + border-bottom: none; + } + #mobile_action .notify_dropdown span { + display: none; + } + .mobile_buttons { + margin: 5px 0; + } + .mobile_buttons .button { + margin: 0; + } + .pagesection .buttonlist, #moderationbuttons { + display: none; + } + .mobile_buttons { + display: block; + } + + /* Stuff */ + #top_info { + padding: 5px; + } + .infolinks { + display: inline-block; + margin: 5px 7px 0 0; + } + #registration .field_icons { + float: left; + margin: 5px 0 0 3px; + } + dl.register_form dt span { + display: inline; + } + #quick_actions { + display: flex; + justify-content: flex-end; + } + #quick_actions > * { + flex: 0 1 auto; + margin: 0 5px 0 0; + max-width: 40%; + white-space: nowrap; + } + #quick_actions > .button.qaction { + flex: 0 0 auto; + margin: 0 !important; + } + + /* Menu */ + .postinfo .quickbuttons { + justify-content: end; + display: flex; + flex-wrap: wrap; + + } + .quickbuttons li:hover ul { + display: none; + } + + /* General */ + .action_home { + width: 100% !important; + } + #wrapper { + border-left: 0; + border-right: 0; + border-radius: 0; + } + #footer { + padding: 10px; + } + #top_section .inner_wrap, #wrapper, #header, #footer .inner_wrap { + width: 100%; + } + #upper_section, #inner_section, #content_section { + border-radius: 0; + } + #boardindex_table .stats { + display: none; + } + .login { + width: 100%; + } + #inner_wrap { + flex-flow: row wrap; + } + #inner_wrap .user, + #inner_wrap .news { + width: auto; + max-width: initial; + } + #languages_form { + padding-right: 10px; + } + + /* BoardIndex */ + .board_stats { + display: none; + } + .info { + width: calc(100% - 65px); + } + .lastpost { + width: 100%; + padding: 0; + min-height: 2em; + } + .up_contain .lastpost { + border-top: 1px solid #ddd; + min-height: initial; + } + .lastpost p { + margin: 5px; + } + span.postby { + display: inline-block; + } + /* Stats Center */ + #ic_recentposts { + margin: 0; + width: 100%; + } + #upshrink_stats p.inline, #upshrink_stats p.last { + padding: 5px; + } + + /* MessageIndex */ + #messageindex .board_icon, #messageindex .lastpost { + display: none; + } + #messageindex .info { + padding: 8px 10px; + } + .info_block { + display: block; + width: 95%; + } + .moderation a { + padding: 3px; + } + #topic_container .moderation .main_icons { + display: none; + } + /* Unread */ + #unread .board_icon, #unread .lastpost, #unreadreplies .board_icon, #unreadreplies .lastpost { + display: none; + } + #unread .info, #unreadreplies .info { + padding-left: 5px; + } + + /* Display (Topics) */ + .poster { + float: none; + width: auto; + position: relative; + } + .postarea { + margin: 0; + } + .inner { + padding: 1em 2px; + } + .moderatorbar { + margin: 0; + } + .keyinfo { + clear: both; + } + .keyinfo .postinfo { + font-weight: normal; + align-items: flex-start; + } + .keyinfo .postinfo .postinfo_link { + max-width: 55%; + } + .keyinfo .postinfo .quickbuttons { + max-width: 45%; + } + .keyinfo .postinfo .smalltext, + .keyinfo .page_number { + opacity: 0.6; + } + .keyinfo .postinfo a.smalltext:hover { + opacity: 1; + } + img.icon, #forumposts .catbg img { + display: none; + } + .poster h4 { + display: inline-block; + } + .user_info { + display: inline; + font-size: small; + } + .user_info li, + .custom_fields_above_member { + display: none; + } + .user_info li.title, + .user_info li.membergroup { + display: inline-block; + font-weight: normal; + color: var(--neutral-mid-color); + } + .user_info li::before { + content: "·"; + padding: 0 0.5ch 0 0ch; + } + .like_count, + .smflikebutton:last-child { + margin-bottom: 8px; + } + .button.mobile { + margin: 0 0 5px 0; + } + .pagelinks { + margin: 0; + z-index: inherit; + } + + /* Profile */ + #admin_content .content { + padding: 0; + } + #creator dt { + width: 33%; + } + #creator dd { + width: 65%; + } + #basicinfo, #detailedinfo { + width: 100%; + } + #basicinfo { + margin: 0 0 5px 0; /* For UX */ + } + /* Buddies & Ignore List */ + #edit_buddies .buddy_custom_fields { + display: none; + } + /* PersonalMessages */ + #personal_messages .pm_time, #personal_messages .pm_from_to { + display: none; + } + #personal_messages .pm_inline_time { + display: block; + } + /* Alerts Page */ + #alerts .alert_text, #alerts .alert_time, #alerts .alert_buttons { + display: block; + } + #alerts .alert_time { + float: left; + } + #alerts .alert_text { + margin: 11px 0 0; + } + #alerts .alert_buttons .quickbuttons { + margin: 0 0 11px; + display: block; + } + #alerts .alert_image { + width: 60px; + } + /* Post Screen */ + form#postmodify .roundframe, #post_event .roundframe { + padding: 5px; + } + #post_header input { + width: 100%; + } + #post_confirm_buttons .smalltext { + display: none; + } + ul.post_options { + padding: 0; + margin: 0; + } + ul.post_options li { + margin: 2px 5px 0 0; + width: 48%; + } + /* Search */ + #searchform .roundframe { + padding: 5px; + flex-direction: column; + } + #advanced_search dt { + text-align: left; + width: 100%; + float: left; + } + #advanced_search dd { + width: auto; + } + #advanced_search dl#search_options { + width: 100%; + } + input#searchfor, input#userspec { + width: 75%; + } + /* Hide me */ + #inner_wrap.hide_720, #inner_wrap time, #inner_wrap .news, + #search_form, #smflogo, #message_index_jump_to, .nextlinks, #display_jump_to, + #siteslogan, th.id_group, th.registered, th.posts, th.reg_group, th.reg_date, td.reg_group, td.reg_date, + td.id_group, td.registered, td.posts:not(.unique), td.statsbar.posts, + #approve_list .ip, #approve_list .date_registered, #group_members .date_registered, + #main_content_section .navigate_section, .time, + #header_custom_profile_fields_field_type, #header_custom_profile_fields_active, + #header_custom_profile_fields_placement, #custom_profile_fields .active, #custom_profile_fields .field_type, #custom_profile_fields .placement { + display: none !important; + } + /* Generic Lists */ + #topic_notification_list .last_post, #topic_notification_list .started_by, + #request_list .time_applied, #file_list .date, #ban_list .notes, #ban_list .reason, #ban_log .email, + #mail_queue .priority, #attachments .posted { + display: none; + } + + /* Admin */ + .admin_search { + float: none; + } + .table_grid.half_content { + width: 100%; + margin: 0; + padding: 0; + } + .table_grid select { + max-width: 85vw; + } + #private, #enclose { + width: 95%; + } + /* Edit Language */ + #language_list .character_set { + display: none; + } + /* Generic Classes for Customizations */ + .hide_720 { + display: none; + } + .block_720 { + display: block; + } + .inlineblock_720 { + display: inline-block; + } +} + +/* Tricky menu */ +@media (min-width: 561px) { + #mobile_user_menu.popup_container { + display: block !important; + } + + + div[id^="mobile_generic_menu_"].popup_container { + display: block !important; + } + #main_menu .popup_window_menu + #main_menu .popup_window, + #genericmenu .popup_window, + #adm_submenus .popup_window { + box-shadow: none; + border-width: 0; + background: none; + } +} +@media (max-width: 560px) { + /* This is general */ + #main_menu .popup_container, + #genericmenu .popup_container, + #adm_submenus .popup_container { + display: none; + z-index: 20; + width: auto; + background:var(--neutral-light-color); + /* position: fixed; + left: 0; + transform: translate(50%); + * Cause souci sur menu type profil (#genericmenu .popup_container), voir les effets de bords */ + + } + #main_menu .popup_heading, + #genericmenu .popup_heading, + #adm_submenus .popup_heading { + display: block; + } + #main_menu { + margin: 0; + } + .popup_window, + #main_menu .popup_window_menu + #main_menu .popup_window, + #genericmenu .popup_window, + #adm_submenus .popup_window { + top: 15%; + width: 95vw; + min-height: auto; + max-height: 90vh; + overflow-x: hidden; + overflow-y: scroll; + } + #adm_submenus { + padding: 0; + } + #adm_submenus .dropmenu li { + float: left; + margin: 0; + } + .generic_menu { + display: none; + } + #mobile_user_menu .dropmenu, + div[id^="mobile_generic_menu_"] .generic_menu, + .generic_menu > .dropmenu { + display: flex; + width: auto; + flex-direction: column; + } + a.mobile_user_menu, + a[class^="mobile_generic_menu_"] { + display: flex; + align-items: center; + margin: 0 0 4px 0; + justify-content: center; + } + a[class^="mobile_generic_menu_"] { + margin: 8px 0; + } + .menu_icon { + display: inline-block; + background: url(../images/icons/menu.svg) no-repeat; + height: 24px; + width: 24px; + } + .dropmenu li, .dropmenu li:hover, + .dropmenu li a, .dropmenu li a:hover, + .dropmenu li a.active, .dropmenu li a.active:hover, .dropmenu li:hover a.active, + .dropmenu li ul, .dropmenu li li, .dropmenu li li a { +/* Inutile ? règle souci de saut au survol quand commenté width: 100%; + padding: 0; + margin: 0; + border-left: 0; + border-right: 0;*/ + } + .dropmenu li a, .dropmenu li a:hover { + border-radius: 0; + padding: 5px 0 !important; + } + .dropmenu li li li a, + .dropmenu li li li a:hover { + padding: 5px 24px !important; + } + .dropmenu li a, .dropmenu li:hover a, + .dropmenu li a.active, .dropmenu li a.active:hover, + .dropmenu ul li a:hover, .dropmenu li li a:hover, + .dropmenu ul li li:hover, .dropmenu li ul, + .dropmenu li li:hover ul, .dropmenu li li ul { + border-left: 0; + border-right: 0; + } + .dropmenu ul li a { + width: auto !important; + } + .dropmenu li.subsections > a::after { + position: absolute; + padding: 5px 0; + right: 10px; + font: 83.33%/150% Arial, sans-serif; + content: "\25bc" !important; + } + .dropmenu > .subsections > a::before { + position: relative; + padding: 0 .5em; + } + .dropmenu li ul, + .dropmenu li li:hover ul, .dropmenu li li ul { + position: relative; + border-radius: 0; + left: 0; + box-shadow: none; + } + /* 3rd level menu tests */ + .dropmenu li ul ul { + margin: 0 !important; + } +} + +@media (min-width: 481px) and (max-width: 560px) { + /* Calendar */ + #event_time_options { + width: 40%; + } + #event_title, #event_board { + width: 100%; + } + #evtitle { + width: 98%; + } +} + +/* Entry level phones */ +@media (max-width: 480px) { + + .board_moderators { + display: none; + } + #top_info .welcome { + display: none; + } + #pm_menu, #alerts_menu, #profile_menu { + min-width: initial; + width: 25em; + max-width: calc(100vw - 17px); + } + #footer { + text-align: center; + } + #footer ul { + width: 100%; + float: none; + } + #footer li { + display: block; + float: none; + } + /* MessageIndex */ + #main_content_section .pagelinks { + display: block; + } + #main_content_section .pagesection { + margin: 5px 0; + padding: 0; + } + #topic_icons p { + display: block; + width: 100%; + } + /* some new stuff for far better UX */ + .mobile_subject { + position: relative; + } + fieldset { + max-width: 100%; + min-width: unset; + } + /* Register Page */ + #registration .button { + font-size: 0.67em; + } + dl.register_form, dl.register_form dt, dl.register_form dd { + float: none; + width: 100%; + } + /* Login Page */ + .login dt, .login dd { + float: none; + width: 100%; + text-align: left; + } + .login #ajax_loginuser, .login #ajax_loginpass, .login #loginuser, .login #loginpass, .login select { + width: 100%; + } + + /* Display (Topic View) */ + .subject_title input { + width: 90%; + } + #quickreply_options .roundframe { + padding: 8px 10px 12px 10px; + } + + /* Post Section */ + #post_header dd { + width: 55%; + } + #post_header dt { + width: 35%; + } + img#icons { + margin: 0 0 0 5px; + } + #quickreply_options #postmodify { + width: 100%; + } + /* Poll */ + #poll_options dl.options { + padding: 0; + } + #poll_options dl.options dt, + #poll_options dl.options dd, + dl.settings dt, dl.settings dd, + #creator .settings dt, #creator .settings dd, + div#report_form dl.settings dd, div#report_form dl.settings dt, + #tracking dt, #tracking dd, + #detailedinfo dt, #detailedinfo dd, + #advanced_search dt, #advanced_search dd { + width: 100%; + float: none; + } + #post_draft_options dl.settings dt, #post_draft_options dl.settings dd { + width: 50%; + float: left; + } + dl.settings dd textarea, #report_comment { + width: 100%; + } + .move_topic { + width: 100%; + } + .bbc_float { + max-width: 100% !important; + margin-left: 0.5em !important; + margin-right: 0.5em !important; + } + /* PersonalMessages */ + #personal_messages .pm_icon { + display: none; + } + #personal_messages div.labels { + clear: both; + } + /* Alerts page */ + #alerts .alert_image { + width: 40px; + padding-left: 6px; + } + #alerts .alert_image .avatar { + display: none; + } + #alerts .alert_image .avatar + .alert_icon { + position: static; + } + /* Buddies & Ignore List */ + #edit_buddies .buddy_email { + display: none; + } + /* Stats Center */ + .half_content { + width: 100%; + margin: 0; + padding: 0; + } + th.recentboard, th.recenttime, + td.recentboard, td.recenttime { + display: none; + } + .sceditor-container { + min-height: 375px; + } + + /* Memberlist */ + th.website_url, + td.website_url, td.reg_group, td.reg_date, td.post_num { + display: none; + } + #mlist .post_count { + width: 50px; + } + #mlist .post_count .generic_bar { + border: 0; + background: transparent; + color: inherit; + } + #mlist .post_count .generic_bar .bar { + background: transparent; + box-shadow: none; + } + #mlist_search dt { + width: 100%; + display: block; + padding: 0; + } + #mlist_search dd { + padding: 0; + margin: 0; + } + #mlist_search input[type="checkbox"] { + margin: 0 13px 3px 3px; + vertical-align: middle; + } + /* Moderation */ + .post_note input { + width: 75%; + } + .modbox .floatleft { + float: none; + } + #warning_list .reason, #moderation_log_list .position, #moderation_log_list .ip, #group_members .last_active, + #group_request_list .date, #group_lists .icons, #regular_membergroups_list .icons, #post_count_membergroups_list .icons, #watch_user_list .last_login { + display: none; + } + /* Admin */ + #live_news, #support_info { + width: 100%; + padding: 0; + margin: 0 0 5px 0; + } + fieldset.admin_group a { + width: 50%; + float: left; + margin: 0 0 5px 0; + } + + .error_info, #fatal_error { + width: 100% !important; + padding: 0 !important; + float: none; + } + + /* Calendar */ + .event_options_left, .event_options_right { + width: 100%; + } + #event_title, #event_board { + width: 100%; + } + #evtitle { + width: 98%; + } + + /* Menu tests */ + #header_news_lists_preview, tr[id^="list_news_lists_"] td:nth-child(even), + #header_smiley_set_list_default, #header_smiley_set_list_url, #header_smiley_set_list_check, + tr[id^="list_smiley_set_list_"] td:nth-child(odd), + #header_mail_queue_priority, + tr[id^="list_mail_queue_"] td:nth-child(odd), + #header_member_list_user_name, #header_member_list_ip, + #header_member_list_last_active, #header_member_list_posts { + display: none; + } + tr[id^="list_mail_queue_"] td:first-of-type, + tr[id^="list_mail_queue_"] td:last-of-type { + display: table-cell; + } + .msearch_details { + width: 100% !important; + float: none; + } + .msearch_details .righttext { + text-align: left; + } + .msearch_details input { + width: 90%; + } + .msearch_details input[type="checkbox"] { + width: 5%; + } + /* Generic Lists */ + #request_list .time_applied, + #track_user_list .date, #track_user_list .date2, #file_list .filesize, #file_list .downloads, + #ban_list .added, #ban_list .num_triggers, #ban_log .date, #mail_queue .age, #attachments .subject { + display: none; + } + /* Likes */ + #likes li .like_time { + display: none; + } + /* Generic Classes for Customizations */ + .hide_480 { + display: none; + } + .block_480 { + display: block; + } + .inlineblock_480 { + display: inline-block; + } +} + + diff --git a/css/rtl.css b/css/rtl.css new file mode 100644 index 0000000..142c324 --- /dev/null +++ b/css/rtl.css @@ -0,0 +1,687 @@ +/* Common classes to easy styling. +------------------------------------------------------- */ + +.floatright { + float: left; +} +.floatleft { + float: right; +} +.clear_left { + clear: right; +} +.clear_right { + clear: left; +} +.righttext { + text-align: left; +} +.lefttext { + text-align: right; +} +/* Styling for BBC tags */ +.bbc_list { + text-align: right; +} +/* A quote, perhaps from another post. */ +.bbc_standard_quote::before, .bbc_alternate_quote::before { + content: '\275E'; + margin-left: 0.25em; +} + +/* All the signatures used in the forum. If your forum users use Mozilla, Opera, or Safari, you might add max-height here ;). */ +.signature, .attachments, .custom_fields_above_signature { + clear: left; +} + +/* the page navigation area */ +.main_icons.move::before, .main_icons.next_page::before { + background-position: -31px -57px; +} +.main_icons.previous_page::before { + background-position: -5px -31px; +} + +/* Amounts */ +.amt { + margin-left: 0; + margin-right: 3px; +} + +/* Lists with settings use these a lot. +------------------------------------------------------- */ +dl.settings { + clear: left; +} +dl.settings dt { + float: right; + clear: both; +} +dl.settings dt.windowbg { + float: right; +} +dl.settings dd { + float: left; +} +dl.settings img { + margin: 0 0 0 10px; +} + +/* Styles for popup windows +------------------------------------------------------- */ +.popup_heading .hide_popup { + float: left; +} + +/* Styles for rounded headers. +------------------------------------------------------- */ + +h3.catbg .icon { + margin: -2px 0 0 5px; +} +.cat_bar .desc { + margin: -8px 13px 4px 0; +} + +/* Introduce New Title Bar */ +h3.titlebg, h4.titlebg, .titlebg, h3.subbg, h4.subbg, .subbg { + padding-right: 9px; + padding-left: 9px; +} + +/* Styles for the standard dropdown menus. +------------------------------------------------------- */ +#main_menu { + float: right; +} +#menu_nav { + padding: 0; +} + +/* Level 3 submenu wrapper positioning. */ +.dropmenu li ul ul { + margin: -2em 3.1em 0 0; +} +/* This is a small fix for dropmenu icons */ +.dropmenu .main_icons, #profile_menu .main_icons, .dropmenu img { + margin: 0 -4px 0 8px; +} + +/* Hiding Level 3 submenu off hover. */ +.dropmenu li:hover ul ul, .dropmenu li ul ul, .dropmenu li:hover ul ul ul, .dropmenu li ul ul ul { + right: -9999px; + left: unset; +} +/* Reposition as visible on hover. */ +.dropmenu li li:hover ul, .dropmenu li li ul { + right: 11em; +} + +/* Indicator for additional levels. Best in the anchor so it stays visible on hover. */ +.dropmenu li li.subsections > a::after { + left: 10px; + right: auto; + content: '\25c4'; +} + +/* the main title. */ +h1.forumtitle { + float: right; +} +/* float these items to the left */ +#siteslogan, img#smflogo { + float: left; +} +/* Tweak the SMF logo */ +img#smflogo { + margin-right: 1em; +} + +/* Styles for the general looks of the theme. +------------------------------------------------------- */ +.user { + padding-left: 0; + text-align: left; +} +#upper_section .news { + float: right; +} +.navigate_section .unread_links { + float: left; +} + +/* Profile drop it needs reverse on RTL */ +#profile_menu_top > img.avatar { + float: right; + margin: 2px 0 0 5px; +} +#profile_menu .profile_user_info { + margin: 3px 10px 5px 0; +} +#profile_menu .profile_user_avatar img { + margin: 5px 10px 0 0; +} +.profile_user_links li { + padding-right: 24px; + padding-left: 0; +} + +/* The framing graphics */ +#search_form { + text-align: left; +} + +/* The navigation list (i.e. linktree) */ +.navigate_section ul li { + float: right; +} + +.navigate_section ul li .dividers { + padding: 0 6px 0 2px; +} + +/* the posting icons */ +#postbuttons_upper ul li a span { + line-height: 19px; + padding: 0 6px 0 0; +} + +.mark_read { + float: left; +} + +/* Poll results */ +#poll_options dl.options { + padding: 1em 2em 1em 2.5em; + margin: 0 0 1em 1em; +} +#poll_options dl.options dt { + float: right; + clear: right; +} +#poll_options dl.options dd { + float: right; + text-align: left; +} + +/* poster and postarea + moderation area underneath */ +.poster { + float: right; +} +.postarea, .moderatorbar { + margin: 0 175px 0 0; +} +.keyinfo h5::after { + clear: left; +} +.moderatorbar { + clear: left; +} +/* poster details and list of items */ +.poster h4, .poster ul { + padding: 0; + margin: 0; +} + +/* The quick buttons */ +ul.quickbuttons { + float: left; + clear: left; +} +ul.quickbuttons li { + float: right; +} +.quickbuttons li:last-child, .quickbuttons li:last-child:hover { + border-radius: 4px 1px 1px 4px; + padding-bottom: 0; +} +.quickbuttons li:first-child, .quickbuttons li:first-child:hover { + border-radius: 1px 4px 4px 1px; + padding-bottom: 0; + line-height: 1.9em; +} +.quickbuttons li.quick_edit, .quickbuttons li.post_options { + line-height: 1.9em; + position: relative; +} +.quickbuttons li ul { + text-align: right; + right: unset; + left: -1px; +} +/* The buttonrow */ +.buttonrow .button:last-child { + border-radius: 0; + border-right: 0; +} +.buttonrow .button:first-child { + border-radius: 0; + border-right: 1px solid #ccc; +} + +.post_verification #verification_control { + margin: .3em 1em .3em 0; +} +.post { + clear: left; +} +#forumposts .modified { + float: right; +} +#forumposts .reportlinks { + margin-left: 1.5em; + text-align: left; + clear: left; +} + +#moderationbuttons_strip { + float: right; +} +#moderationbuttons_strip ul { + margin: 0 0.2em 0 0; + padding: 0 1em 0 0; +} +/* The jump to box */ +#display_jump_to { + text-align: left; +} +#display_jump_to select { + margin: 0 5px 0 0; +} + +/* mlist */ +#mlist .website_url { + width: 80px; +} + +/* Styles for edit post section +---------------------------------------------------- */ +#post_header dt { + float: right; +} +#post_header dd { + float: right; +} +ul.post_options { + margin: 0 1em 0 0; +} +ul.post_options li { + float: right; + margin: 0 2px; +} + +/* Styles for edit event section +---------------------------------------------------- */ +#post_event div.event_options { + float: left; +} +#post_event #event_main input { + margin: 0 0 1em 0; + float: right; +} +#post_event #event_main div.smalltext { + float: left; +} +#post_event ul.event_main li { + float: left; +} +#post_event ul.event_options { + padding: 0 .7em .7em 0; +} +#post_event #event_main select, #post_event ul.event_options li select, +#post_event ul.event_options li input[type="checkbox"] { + margin: 0 0 0 1em; +} + +/* Styles for edit poll section. +---------------------------------------------------- */ +#edit_poll fieldset input { + margin-right: 7em; +} +#edit_poll ul.poll_main li { + padding-right: 1em; +} +#edit_poll ul.poll_main input { + margin-right: 1em; +} +#edit_poll div.poll_options { + float: right; +} +#edit_poll ul.poll_main, dl.poll_options { + padding: 0 .7em 0 0; +} +#edit_poll dl.poll_options dt { + padding: 0 1em 0 0; +} +#edit_poll dl.poll_options dd input { + margin-right: 0; +} + +/* Styles for the personal messages section. +------------------------------------------------- */ +#personal_messages h3 span#author, #personal_messages h3 span#topic_title { + float: right; +} +#personal_messages h3 span#author { + margin: 0 0.5em 0 0; +} +#personal_messages h3 span#topic_title { + margin: 0 9em 0 0; +} +#personal_messages .labels { + padding: 0 0 0 1em; +} +#to_item_list_container div, #bcc_item_list_container div { + float: right; + margin: 0; +} + +/* Styles for the move topic section. */ +.move_topic { + text-align: right; +} + +/* Styles for the login areas. +------------------------------------------------------- */ +.login dt { + float: right; +} +.login dd { + float: right; + text-align: right; +} +.login h3 img { + margin: 0 0 0.5em; +} + +/* Additional profile fields */ +dl.register_form { + clear: left; +} + +dl.register_form dt { + float: right; +} + +/* Styles for maintenance mode. +------------------------------------------------------- */ +#maintenance_mode img.floatleft { + margin-left: 1em; +} +/* common for all admin sections */ +h3.titlebg img { + margin-left: 0.5em; +} +tr.titlebg td { + padding-right: 0.7em; +} +div#admin_menu { + padding-right: 0; +} +#admin_content { + clear: right; +} + +/* Styles for generic tables. +------------------------------------------------------- */ +#info_center .cat_bar, .table_grid tr.catbg th { + text-align: right; +} +.message_index_title { + margin-left: 40px; +} + +/* Styles for info boxes. +------------------------------------------------- */ +.errorbox, .noticebox, .infobox { + padding: 7px 35px 7px 10px; +} +.errorbox::before, .noticebox::before, .infobox::before { + left: 0; + right: 10px; +} +.errorbox p.alert { + margin: 0 0 0 4px; + float: right; +} +.errorbox, .noticebox, .infobox { + padding: 7px 35px 7px 10px; +} + +/* Styles for the profile section. +------------------------------------------------- */ +#basicinfo { + float: right; +} +#detailedinfo { + float: left; +} +#basicinfo .icon_fields li { + float: right; + margin-right: 0; + margin-left: 5px; +} +#avatar_server_stored div { + float: right; +} +#detailedinfo dt, #tracking dt { + float: right; +} +#userstatus .smalltext, .pm_icon { + margin: 0 5px 0 0 !important; +} +/* h3 HD Icons */ +h3.search_hd { + padding: 8px 45px 6px; + background-position: 99% 50%; +} +h3.profile_hd { + padding: 8px 50px 8px 0; + background-position: 99% 50%; +} + +/* Activity by time */ +#activitytime { + clear: right; +} +.activity_stats li { + float: right; +} +.activity_stats li span { + border-width: 1px 0 0 1px; +} +.activity_stats li.last span { + border-left: none; +} +.profile_pie { + background-image: url(../images/stats_pie_rtl.png); + float: right; + margin-right: 0; + margin-left: 1em; +} + +/* Most popular boards by posts and activity */ +#popularposts { + float: right; +} +#popularactivity { + float: left; +} + +/* View posts */ +.topic .time { + float: left; +} +.counter { + padding: 0.2em 0.2em 0.1em 0.5em; + float: right; +} +.topic .mod_icons { + text-align: left; + margin-right: 0; + margin-left: 1em; +} + +#ip_list li.header, #ip_list li.ip { + float: right; +} +#creator dt { + float: right; +} +#creator dd { + float: right; +} + +.ignoreboards ul { + margin: 0 1em 0 0; +} +.ignoreboards li { + float: right; +} + +#pick_theme { + float: right; +} +.infolinks { + min-width: 95%; + float: right; +} + +/* Styles for the statistics center. +------------------------------------------------- */ +.stats_icon { + margin: 2px 3px -1px 6px; +} +dl.stats dt { + float: right; +} +dl.stats dd { + margin: 0 2% 4px 0; +} +#stats tr.windowbg th.stats_month { + text-align: right; +} +.generic_bar .bar, .progress_bar .bar { + left: unset; + right: 0; +} +tr.windowbg th.stats_month, tr.windowbg td.stats_day { + text-align: right; +} +#stats tr.windowbg th.lefttext, #stats tr.titlebg th.lefttext { + text-align: right; +} + +/* Styles for the advanced search section. +------------------------------------------------- */ +#searchform fieldset { + text-align: right; +} +#advanced_search dt { + float: right; + text-align: left; +} +#advanced_search dd { + float: right; + margin: 0 0.5em 0 0; + text-align: right; +} +/* Boards picker */ +#searchform fieldset p { + text-align: right; +} + +.search_results_posts .buttons { + padding: 5px 0 0 1em; +} + +/* Styles for the help section. +------------------------------------------------- */ +#helpmain h3.section { + padding: 0 0.5em 0.5em 0; +} +/* put back the bullets please */ +#helpmain ul { + margin: 0 25px 0 0; + padding-left: 0; +} +#helpmain #messageindex { + clear: left; +} + +/* Styles for the admincenter (reverse admin.css). +------------------------------------------------- */ +/* common admin classes */ +#admin_content .button { + float: left; +} + +#manage_boards .button { + margin: 2px 6px 0px 6px; +} + +/* Styles for the package manager. +------------------------------------------------- */ +#package_list .tborder { + margin: .25em 26px .25em 0; +} +#package_list ol, #package_list ol li { + margin-left: 0; + margin-right: 50px; +} + +/* ManageBoards */ +#manage_boards ul { + overflow: hidden; +} +#manage_boards li { + overflow: hidden; +} +.move_links { + padding: 0 0 0 13px; +} + +span.search_weight { + text-align: left; +} + +/* Manage Bans */ +.ban_restriction { + margin: 0.2em 2.2em 0.2em 0; +} + +/* Themes */ +.is_directory { + padding-right: 18px; + padding-left: 0; +} +.is_directory span { + margin: -2px 0 0 3px; +} + +/* Styles for the moderation center. +------------------------------------------------- */ +ul.moderation_notes li { + padding: 4px 4px 4px 0; +} + +h3 .collapse { + float: left; +} + +.pages { + margin-left: 0; + margin-right: 7px; +} + +/* Styles for the calendar. +----------------------------- */ +#main_grid th.days, #main_grid td.days { + text-align: right; +} + +/* Code is a code do it LTR */ +code.bbc_code, pre.file_content { + text-align: left; + direction: ltr; +} \ No newline at end of file diff --git a/images/banniere.jpg b/images/banniere.jpg new file mode 100644 index 0000000000000000000000000000000000000000..283a9036a20ebd51810c438a5d4011d53e65726c GIT binary patch literal 159127 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 XM>E{RQ92A3a9L-d&m5h<{!jne(&&@U literal 0 HcmV?d00001 diff --git a/images/bbc/bbc_bg.png b/images/bbc/bbc_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..1a2aa76fe4c2ecc643dad959022895e7db9c5262 GIT binary patch literal 425 zcmV;a0apHrP)2$kAQ7C}@cG$`w?^Wm8 zwA<~*X^`jndc8&|7GgB%$#r&qaoK7q`qwO18=KBYqr3hwke*!Rr36hM^>4lb`Gg%S TO0in500000NkvXXu0mjfx9!9I literal 0 HcmV?d00001 diff --git a/images/bbc/bbc_hoverbg.png b/images/bbc/bbc_hoverbg.png new file mode 100644 index 0000000000000000000000000000000000000000..7d4fcfb05e8d1ff06d5d5f91a6e485a266fa0a25 GIT binary patch literal 583 zcmV-N0=WH&P)G7tw$#93EVR(|Szt8CJ_2cUDVtJE)ldF@ax}2`Tov*^5u)}+isq69gsJY9avBjXW z#d?savcl4Cgq@hGzM-_oqP57Qw#k&JyL5}BXn&cTuEC_Y%B8r>rn=3XuEMCg&8fT2 zs=Uviu*Ivs(5t@Dt-#Wtw8yW))vvBZOS#@Xt}+Uu^t)yUiIZ-t+#zS5?<&xW10gqpIo#MJ8W_MfoChMcvkztisX`0Voc zc#WmKd?zgc0004WQchCQPfAmu!?JJsG3$?sa!Php{o_p}ftn6g?0fR3eTLNmGZFu2h z?CH^DG@knid~RWUXhLPSBmRfthIfK>{%`!n+{~Sybm13aRH;NsUsJub@1n*KhHWV& zBHGYZ`U=k8T-2m7qJ33j+Na6frP;~sJH_7PLtpi4f@te5mpNVJcD=_l_v=mm;}=1e VDFa<0pP2vv002ovPDHLkV1oDrQ5OIJ literal 0 HcmV?d00001 diff --git a/images/bbc/index.php b/images/bbc/index.php new file mode 100644 index 0000000..2cf5d33 --- /dev/null +++ b/images/bbc/index.php @@ -0,0 +1,9 @@ + \ No newline at end of file diff --git a/images/bbc/spoiler.gif b/images/bbc/spoiler.gif new file mode 100644 index 0000000000000000000000000000000000000000..4397ee0798f117a74c6c30cb4b25fc63dfacaa72 GIT binary patch literal 99 zcmZ?wbhEHb6lV})n8*ME|G@yrQ2fcl$iTqFpaT*G$ulsSOzB^F`Yr!sCJ_#8{cAJl u%ZA1;Z=CvKj=Y;=#%oPAZ{y93hd)ib9(*!*V#$&l0--)y(~mMSSOWm$ULqd= literal 0 HcmV?d00001 diff --git a/images/blank.png b/images/blank.png new file mode 100644 index 0000000000000000000000000000000000000000..e32226bacc73dcad441bcdfa3c48a7219d533b61 GIT binary patch literal 81 zcmeAS@N?(olHy`uVBq!ia0vp^j35jm7|ip2ssJgbk|4ie28Oc9XDxs{E>9Q7kP61+ Y1dt2^V{s{?1dzqx>FVdQ&MBb@01+7ucmMzZ literal 0 HcmV?d00001 diff --git a/images/boardicons.png b/images/boardicons.png new file mode 100644 index 0000000000000000000000000000000000000000..d541fcda0053208b0470384acb33f5c6d78654c7 GIT binary patch literal 6493 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 + + + diff --git a/images/buddy_useroff.png b/images/buddy_useroff.png new file mode 100644 index 0000000000000000000000000000000000000000..943cbdf9363c68572eafda658126f55647ae15c9 GIT binary patch literal 296 zcmV+@0oVSCP)CO(0qO>}W_kc0>WI@!f?Tcb6pFVWd|Ve=gfOw10X-N3S<3n9>ddPd>%A_P)l80n155K~y-) zty4Qo>`)M%nXJ2;?D~iXfxS zV>^rmw;Q)_;xo`>NwV2zuJn%dmgIhSb~gZ(l-hhBOU(p8!JISfln5w`fLUk6DGAmr z^n-v>Y77t@lg#WhW*U5EEakovAf#P;+U}23^nyi61oo8OFWk2R8uSH!u*qw&!F?@& zh)e#Vf2_5xzY?wcNB*&Jt(ge0?Ol2I)S&%K|6Z_`OiYbT)Jb?926-c&-ou+P5Ue!; zgasnnYaed!iB+6J#i3%4V8VR}m&t3mKhACX#m7;1!5vWC_%>{l`k|(3!b4@ha>M*N zi)|^bP9@Lin(P8LY>^GxHeK_lJ!Ai<=^A7(0|pvTC20lKqzZ+>LbtB!a{Zw`&p96F zT+&m2aJ6%yvz#mEI+Di(K3l@&-F%0{O3uH30l_7U_>~A`5?Ex(^u3f2W1N-{6(Ufi zq^~47uLXX4f4p@WIwk|Y2Vy?&xG@Mh#w_uZcR{9Ga^QcgzxR5kp91tm^#A|>07*qo IM6N<$f`I%3jsO4v literal 0 HcmV?d00001 diff --git a/images/cake.png b/images/cake.png new file mode 100644 index 0000000000000000000000000000000000000000..24ded25b176db6b6a5cf69b212cd46b4eb4687d2 GIT binary patch literal 1729 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 literal 0 HcmV?d00001 diff --git a/images/curve.png b/images/curve.png new file mode 100644 index 0000000000000000000000000000000000000000..9a096ac5d1c4a185d1416ff86aa40d7b92203e19 GIT binary patch literal 235532 zcmXtf1yEaU({>U91a~d&TD-WsySvlk?hssydx4;Z0>z8FQz%-rP`tRi|2*$E|76Z2 z=j6;Jxp(i~y(BSeDza$E#K-^u08L&_N&^4@y}bkhFcIFKO7u zsFl-~@b}VUWVM^~uP-f6(M$!J>LZay=a_rL}&% zm1Zcr(uWesQq4A%MLDHb%S4)nZ-WazC+PA@H>B}iM$I~uqc0<>Kd|gb~ zV?&fPKzfu62g4E)Xn1&N6~uGgALloV1~7Ss>|C#mIO@zkO^>HoGs|np!$JNTM!YOT5%q+s)ppG%BL)zcadL_ zh;QT3Z77C9#8wc1xZD^vBI*#K5i}bSt~LoG@dLBj5dv8(NWVf=o{AUwcK*MANr$H` z=Um$>Vz(&Ui{CF|{-AwwTnYEY{?q2N{TrnXLm&c2MDFJ0qB_6|@-2F)7#>dK>!XIs zV|;hY$>o6R4o;-PwPuBo0PNA%!UgY?EYf3mto@=-?VZV!hp(&+Sh9)1UyBSza-ioy zU?81p`V}Qmc;jR!bm>>e$W^bbdC5)%`btFl!t$JlEe$xP=nscm|&Atyd^H+%$~u6GH8KdlLsM!r~gL(W^r# z?tq)ydnJ2Rv@dLojnU`pE##*s!Y6-$FE;7lY+Ojxc*aIbQY7AYGliRA4N&w&Q@!WV zgy9Tw3k@#_2LyB~p0S*|2PXuTnsN5fV@`6e)<*M2m+`XZU5dDdr_)B<<@$^lpkRx- z8GGG-b{{ntos1`38W(a6*JJRkTN$i!C?C)q;El; zeK%OiwQBiW?E~A2D~kgFb%`iX=J0Rl2o{R6QULe=9*eOHr*Bt~T;%lK0RR;2{|?~H zYS7c$MMMvIWog81Fg6+roKWL*9{@lBke3qI@>xDIwhh3YTL?NCZ*pKNj3D+q?UZA~ z7n2r)#|5ghoR#T|QD&o2{j7w>QXpFZwZzhjJoYt8BK{(E(ozOKuG~s`@mhH~+kE&8 z{uj{Ny_%Qjw!7j!dHHrwrfDcJYN<=(X~%wnbam5xJ%WAo=ryA6KE-X4gizMtUka! zQZyq+Lv872oFZ&MMR}2m*`R}j268!`LJ06*hrr3#TvAq#GvB>@59t^4nQ4t*Hr%@-~r$gxrY(~aFm zD*&Th@ikCs$gr2F{xyiPVPnF&X;Vbo^BG6w7^JPGPS2hFig$}NJzz(R{*@&pY3#58 z+Wp5oz1pmm)M)=S|5ScrxFKKF(@0x=hq89TZ7bj0bo(fN;T7eN69fDU-P#TN+VaY> zx;7b-sQdvNX2Nuin^PPm@C@;Tz9o=b%2AmJKqYlF*?$j#^Z|1RX@?mBiG{6B&6~k& zIw9Q(fbybPCX4}bW~M$P{md_R%JASU`0T^pX3NUoz3H@=;Gy#hxXM_j!3igv2(Nga zlbvW_E8Z2N6EETI*L@#E1@^NP?4FqG*n@KZfYYe)?Rbaa%v zhwSt!GIE`n{mi>||IS4^PbSkEEDIW~`O8^k`MOCc-xjYFGbFkIb#E*%1CFkKmzkx# zmr6(pIm9o1ERW~@h2{D0v*`S-?+L+Nf(S_v7RufuQOu_E0NN~@{drIOKjV1z1W-}} zYR=IoO*hy4(>kgxTR_9PWDY_Pk&#nthQJLnVmp=z*M>(Y{($-ulMi&i zQ_Z@|%i(ncr!b0B6oGt+V-u(Dd@qPkPENpe;c>Yoq;#6@_t~maB27f)FCX>@_b*$}?RBy;=Yv&eZNq zb^U|vkK#dxTqM*^&2kK~P76$VlZUK@`;|bLw$ZUBMhCs_)|Xl}fTwzxDAn^&UhSwiZ;u2RwUe%k$F_xrt?bh_+dNSgayIjWh5t+W@6cXH?Y!Vov3|AMK~ z_UB80$!^@lyEEGeOwN#Y`Z1nkanbtDnKN4fMA0}lL=kBdDd*~DUwVEekp=w(%(aBi zyS{ce84%9NN`+*SVfY(S?bysLtD{Z;*$+n;uY;JZW@@qgy@?NcqI;=EP_L6)bbwjA zn9uK~&ZTnVT)yHj-f8Sd5!-$=%eRy8tm7l!vT{R+lspKHljb{vu?33p2r_SkQP~Ud zo`K)xs5wQS={4{&pzFppE%}NX+C5wtZO1lRHA2u@POygK&`UfXu&ML4={+DfYni9%?K= zgd9BJhnlt~dCzbbrV&rnrH-uiXM8c=v<*|ZTB272FCbr>;>}jIrA|3=uC6-uTY8t? zf#CVq*>?4i_=9U&-X>8v8vR?=_c-SFmvw5c%xKM4jg@=5?jwMp;K!v?;pgzCug`gn z9zqK-;r6#f%2LK!!xFMcu3cGHFO`>GIq{I;&kEL00f`ktxnSr+J~{Hazx0y3kg@ne zoULR{3aXpY>v)WO2{og+U57W_J=rXebq!A;Y&Jqgd7qinYnH}4Pl8GS_hgVR{A*#y zPC(_(6>A%x6RPv+Yz%z{vjX9a_OQ%7Ep-P%ezK_)Ir!Otb9Mw1Sx`rQM56+o~K_cEiMynr# zcpK(2CdW6OjY2Z)N@#mE&+v*Q8ry!@MItN@C;=t|5ev|A_FfRC;Eu18k*lkKiRyq* zEIARxDUxeXTEJc*bs4Z~2;ZGXOC1UDR;i>p>ljf{7^o)U*Cu!JN@AM6raFuf z|D~C9oolpbyV;>ju5MGYUBgwKBA&l-3>sZJzxr~=e!tKDldc(iaz-FS(orClc;Kt= z&Vk=bA6d}FF}xL{uOjc=zz5FQj&W8M)giAo7{Y-k(^POd$#IdFh&EZ(GY)Q$vjnL| z9^rRu7ee~M<4E}YQ^5jSUeQ3Ziek>zkE@3dCI-7EXV0BlZlw3La0A;Z1P_2uiIy#a zO5bhnqJxf)^r}ggq=V-8CtlFgcaeHP7SmG;T9<)41u4)LL);Z}Ai>93B3_4Fe;KYIu6p3RtGJG*%k3daFpshybt{4B!tW=Vzg5P8~+RF)h5FRy_S zE3vSie1$~Y@DdKv{s1?y9d{T+%qwcn-4sNsDvIw}=-C33b9XF5VXh^39u18To(>J# zZEP-&h64i-6!I0%RzLUfro0{o`69aqm?=eP5;+p*(U+AGXUKE?``6a<|1lj(zP4}d2C8{7;FX=T zG*hvljA%&|=*9g0+j^Wh{1cjB+HU%LK z3zCNd{>)s9;eaQq8)VV=WWtf>^jd|D&(gNtCMM0$(PdBkjbv-tsOj6|UzIGhaPrQ- z_7982Tvd24etRT#&Ps$4-|2t~iq1uR^VVDy6}yW(XNIp^Wo1&ELK<{}4+P%Fx*8v} zm!`NX6qBR3Q`-jPitdKhi*gQRZ(60CoYMCE?Sv}Oz&NxwGv%5R)D~PV8l_+~e!D;L zq@9=({?5%O2b{hHEYH1A-apqL-WcCM{h&5FhF|bB7Ryt*zLLd2RgNWO3Pr?NXJ+X; z{a5~Pb|XCX>!-G25Y?U2M^em0|IONhwVtqIB)zE2bETfHxwZEC=P2v^(;I;W_wSb> zYCO>(7kFM0L*sBLl9;E~{9jj6F5Ns1Esz+VHkrP;@|41%Pyu2XiD4>YO5|IkXXHX2`zT>*fXew$ILF#{}3xpD><-{4Z)qi=J9mLy+e z>I##M_&%1*!J21(Eh>8xnqWrFMl>~CC%ABp!uK!u56>`N@f@CiHH~4F?tQRraFe61 zF_k7m8?*>Y)02>YRd5_!#t+-5s%RnimTiZqol z$r+*7R>9?PJu_AW8>?mxx)kVSnl-X*y(eT-7l8XHAFO9yYYvkw5@5NQPKGt9R9&Y8I|Qt=u)`L5BiJemnNy#0JIYlTum(t)QHh@vT<1Qrt zoo`=!?yT~^F;d8{hq4BzTwbZ<*x`GQj0M`N#IYYMzmkr-A~xrU!$oM*U;ceC_4W~_ z+Ig=>l!rA7GYINIZ_PdJnwWZGRZb@`A$;CE^v*{+f3F}^LV{-5lnUA*_sKqt%>n1n zw4QzOhcS8Ufs2Xu;}P*(FVi|OGm;C+G)+Q4nX?Na7;Fca+VV);a@wJ= zppxR^nHU`L*CE7hihfUreprnD^h^tmeTdCvg15L8>Y=o^e&B4f_s)G8y}qZ9476PI zE;R&RRLIgaKO9pEjl!$~*t;EY@|5hqvibU90z;g(89%;S0T*iO7Vqu%Z@9BFekeIT zb3AMziO`<&O{`Nne&UN>E|+P`BH9{VWz!Hm;P2ieUk{pk3DaobiV06`P*g|-qrk7I zvIsJ>1A`LQ-04XAkZfl)tg$|`eP7LKl<`gbH~uf*E+*1S!$LKjD(k4JS%v~Mg1*ab z*RzG-7)Q;w;}JeNXfo^S&-FS`9Ybq^5pyH=#oje6S6j`AFn6qnUAR^dwzWLA9 z^Q5CwzvdL0SFa~p8lh9{3TLQ(8O-KaiZ}q?#tRX{2muA!n;~cAyPLY zKO?UX39Q% zkd|(UO|^!q2~r_|jJ0*^;1d6T*8imEGsFwbu4FlS2lVdg>FCzI;Wo$9Ur%cZWOIR~ zHS4(V`CcKypIr&@YyTa6Kpk{nW+LFaUD2f^1pvZMXTMC=_V`r>y<-_-sZVlA9|nZet?PpIVEFOAqAL+c7QXn@CbluQfwe^^q{>HfgsqQT&IBHO zp{X})r$7Ri!7dars+2(tAm2ubGLTzbcvT9pqZa90u7c`|$AeVBRDo+a8WHwNo-n=J z=y*=-8zN-=HzNHm=P)ZRGL^cU+ix(bugXuXcov zPWp2`5K`sLudD$#a5>`41~)%eBoSw7G*vMOh)I z^xpnC`%}A4-AGs*y&S(*IK>}5K^&Y!`1JWWVF20dXaKld#aTQ}_KRC`)45Q9$$jW5 zmaK@v@GTd`-*L~yxBJ6itEU>~H==zxudy_ZsLg%kUwamhkS`3RAwP^BXsER&==BGPr7hYC2qfMzj$56+#$Y15^F>h5)q2WDH52=hx&8Wd8G=@pJ4FVXUt zEnKxa^hJU9B&pow`9{L;!u~x4w3;yLAccTj)h-3)=@k>T8BI3p{AbbwbBt9>DEmzc z|7bwjM)u@`_CF`JpNp0F|0uoPxzF>U+5j>)<+vd64r-Kw&dJ)$zPj_%t$PmlDH!Aq z+HAFa<^lqCYbk9X_pMbo{#4^9RjXr(X_h7j-loe*zf7S0?2>f&*sqp~>u;3f@JUL9nx9eF@ZrqUU zu+H+o;>;g@oq6=UpYU8kLrBI>ziher^c*2`EGBDhm zp zXuRf7bhe5N)BmFaN~z$aB4Ak;Y^W#WWsd?65dh3jItMzzENMvdB@2;{~?RSL1U6BW3B#X>Yn6-mWg|q4(Sae*<>Uz zU80AD{g$SPuhsH`d49ktP~f5uPah5Y|C;3HT7t=`1Fc&*iL!gT$%EXVMP}wyk{2EK zeHcne6!Tv;)k)LuuLiU+DQBLyo2~&vrvS z|Druu*An5gYv0?9nV?o3SISMLmUEcWg^R^7I4LI_71wf*Wq1+zM!8&eLQtHj{}Sn! z5>ct=4@cBz@AB4YJx7P$!`k5g8%fDxZZ2E)a!LD(n79o#+~rADLJ?j}C|^056^r_| zvc4yAarDqc5(3iaDx}1E6I5FTPOC6=meK{jZPhrz`!JA*{jB{XBC!<+r$=e)pX}TN zI}g?o_TqoeOrZWs>Jdy%`_cWQDc-Fn)+|A5Qt;Au0CvxjJ|*ucz?RBgSiI0!L!cYd z1tV~~9sSe^(?vnc$Hdq~-OL@9ph^nIO`Epn#l zd!@aLyKFgn5(;2Ypv-NsK^=hd?=q8NF1Z`n7%Fs8?sCEg#zZLdr)($}ihKUV~ zw-0NuW*HE0Xm+sIVZGcoudavozBASpyh&Q}ri4AycTbkdyz!Plso{jSbw+mT*9da@ z%Uw1z(ME6Gi?p6dLQh}s^Gei+ftZ6?1*OldpK%M2V*tUVaPzUn2Hqyg49YXUrr6CY zghwRWLFAn>VMq4%PEdSp`?F%*rz7K7ea#KEjV=)j4O7Hs7i$I}!bt0S0&zwHIi z2(oX7^9X>8v2ai?JEIe$^ z${Vc*vTxf$5?!B>d`*;J7WrnfmJCVcuB#h?YxX<=-&r22*V12rpNd2T<3u@7Exh7aBy(>`~j%6STZ_GeP?XwOPM-Pc$Ia77xKq- z3=uBXT|0Ek#o6x=?$C)^%CD;fiED{Z< z2a(Al9#>SN0RX}sR6bIpKA(S5Pi0<(?Fty(%)1BZ;6d^23P{}pNvdk6FP|*N`%~h@ zSrIHb|Dq2##lrD9IcrZO7?fAs)15nd$O^8axHhQ6CFgt^m3#}BDF3O?$sU>%t>}_J zjzMvq)9)YC(NgdtOy}?4nE$+uH{|p!Wn;Nd(saaOH8~|mYGF(0d;A&m2QgEdI0~+) zR8$U{Q`rCT6D~O-d!iIH6F6F9<S-E4& z8hz(AU9TrO9B77PE5wW6D-RsLK5mv1!+uUD-+C~TK4wUVjL5d{o_eMUw7F64VXyzg zL!!8AGOWK$OX9*>#{*Ir-`fITH$P1h%AcRuzY!|;9>Wb+h;1{yy3zEyqslMizpSm^ zD?K!o1@)6~kNA|ya)Qiz#OlyLY$EoLzRDEw6T4h%f<;3_E%VK>va5EJD>VuT?^M$< z0lBh?Flh|s-@iWVg|9g-R5}i;=i(!V8xOlEaXLG5VB+HLj=rnyO(3i$uBx5kSW(b3 z?^h3k%PDvd%OQ-Kw;NAvzhntDld^yG#_sgk0YS4GM7Sz-MzCl#B%ot|+o%Byrys`( zXj-#}wun3y=<{bbSl;uSGTIjRFQbK5)^={3%P0-_)d468EP%#yftZ{5$hnj6K8yuKXW|So!tbpJ2tMxtQ z>fO1P3hMn`+opN5g}|>5{OFC<^Co;jZ4NXP{aqZX1)P7&e*YbP|NDP12bUB8Go^Y* z{3!+aq!992eDn7S{4$QjFA)5f%{}y-U~g;(Vn$2AyjL|bXe4(sW~C#+f6-c8M5uz8 zbL*uqu277jpVO4=Kr3qhZ)FeJOy~u}S%m6Fg*FMjZN2?bgP-ryxmX8u3ovTrD;yqtPUUw= z@3bJU+hKKIQwntC=;16oR$p}ac{e+hwE_%oWd$h#XxOj9#c4RkUR@VIOHRy|<`25& z;=R@k9NLAptvsd8@I~>xmBtSpP?P2LcarRIr$iIvg6KG1^+hJg^XBcAfnaIOc&m(A z2&so1Z5Nn~q-oXwBFpg6wldC}U7~yQ&fhM+?WqOK+f$uKde=Y&=%CVjqPf!>Dsmlr%2*E z!nIb-4 znH3?J3XG+LC0Q|Vx>?VwI3OipjoM)4(U`&DImsR*M%S3JV>YH8!{GIx(c?$|yU{@l=@*nV!3H``Mf6lw2lnC3guM<9x`Qex13ckYR4L zR8z2Pfr{+5@2qyKN^=Q)32K(bF&gq*X19AMff-Jo_XR5kc}2oqGgmUVg|&sqW2y*G zxtG=f&7ge)XKivT2wmN(@jb<1{Lhzc&klzR(+EST-Y9bRbHA-~>o=3N#Qx!L!~Un? zcsd3Kk2pSO0HQEXhSAj#yEyxnoyPE(JAgA7-WfxjhUpCLvtp?r$E5y3*wm+5OjSEeJo)l7VnQn%0 zCvI6f)!pAF4h2_)mmmQTj8D!1uGC^rDsJ>bdctS1cO%Sax4atSzkutyqUxPhKw{d#jH*U+^JJyhYuqdd74Nv0fOC&*Q;ujpm<-^Uty7Nj-Dt8UXEd1oM z?_hw}kT`GRq6q4uPa-atptI?~U<9>9ala7=dJobFF*+&4*o_e^yIOW`IbBJJF5An zv((oGe8LFrSRre4X|_Hmd=ZFKtrwF_ZyNE_(Wwu7AR1%TZUH~B-4EWbP*U`PGsS{1 z{D!<@pAKfh+Pafi|MYAcNQ{?EVMj1Dx15~Urftv0&l|oqWI8x4OV|vbs*-fxO zOu#px6@J$a4+k++WZS>(5;Hch`Nc==c~IeE*eK+y|Hrmso9i`9iO?wt2bqJAPeH9T zsY(-DcDu9l2uugl2OZ)QN*qtIiC@vkbnb%Qs&ojH&@WA#kE?AteT5QFV%K%Hvs}XLZ;Tbq&hq_-2+CZvN&yyEVAC zpfzOumlEacM42JTgGaT8m5a+2IxFYg;q?4n-k4=r*YA80v{%@_WrvIo-oQK~4RUv= zZ~=vl_&Bwe5<_W>wm>vJU{teB+e7PNLPO%66ve-p*WHZyqmbhutPltVUf$^@T*tS^ ze@ezz(ip#b4BeA}4Ng^GMV+Wa$dDm2+FCTCHseFIM#Xrbcc~`P9K+nLD6u|mE9}IA zu08j%-)8rq_)iPo^YSN}X#hR^DO=jtV$?vqw9l%OAfTmDbbKygfV8mZ?g&_+xgMTc zO;5f>p~Ckm?J&V#u5br+%M3~u%)ch{M!v_(wS2x{=x3F43q?#6pQv#K?H;9%p~)a{ z?)kSZv-io#=o=IxQ1N&=qekL=Xxs^oA`>`rN#J{fUGrP!g-t#00HTsnZZ2bL_U> zTY|D1u~ffNc@v{(NvQHMpg!hlK-AM4{W;PL6A_V>mSSpMgVa-Q7tu^7CpR_Q9@w=8 zGg?xiTfZT&LwNyO=+MM2xW7rjV?OVLsozX_^5V3^{=Wy?JFJ@s4#FtjCc3NFcnaDP z$9{XngaTx$*5(;!3t>9fH%Tapg1i3YlUwS+{#b_T@{>|qO6Ilh_2oH6(0sM9yCx{B zWGhTvx^%H?*ywLF{b+u(u`eE+&oG)qhJ|O(*rUY0LVP_P?}@BJQM#{k8O9q1IOo|? zo&J_(|HtImTL^=-RqmA%OAc-PZY(RX16zI@8_Nn>119v>$zSbmNWt%GHu1fYX@Gtg zyQQ4hr|lr$kIT==;2pLGy}lC^iXy^-E=`b@$Hs#98-#9J!4lD{^Qgbn6BFAP;Oy&u zy(r(i1jIUjr#^fkuPBfZD{FLCN7@;=(OP(2@n7has4Ke*3gV~ua+r%d%|FTP)FW3a zwnno*oON`Ifi8TO^>WE&=!))|fMlIvLHl9()q$Ou2XmB7-iPcB-TBgXu)PU$^qx3L z=nZ_6wFE+Zgdf3F>L!=|Py9kLDv_R1O#J}i69Wu5zzrX@@ohhaTGpJ1o|i~-kN~}; zg8~(hFBSEC-^q7v0J_jYKn-{I4Rx9(rbWH^KPU(Xe(?2@d+sDJbb;N9Uk6v~N?aJ+ zR7V5BHagZJbVZGpvO6c+b+ z3v-iz7N2~@tfc^i=v-D1AV2hUXB~+j2N-*8h<-M$-Ec}e=D~iZX@VmJ^Th7cgAmWjTl<7cKZ1K?xiu$vKrLf%*spPF$TIcWh>e0CyQOo{m~ zpUa_~Pe1$xuB25ZAO4~*)f}4a6O>}%THNfOAIR>p!V|^ie8T6{>Y^^0XpQ(kD6p8rm16lXawm zoEsMqU60yh4o8Wd(4Lc^yBzmi$dy?Ylu3A=-Vk)}!;wIIoLbpLiJv~8biHh7sg<`VY~lbjql-CybzYvRf_t2^j&LNwuDVbYVM={ccPHQgj|JvlWgpg(Vf#~$)(5S5 zekm03zBl2Yu>Ax!J<)=Mo~bAS zD?QW71JN@Mmnp(~+{mSBp({!oYRI(Qa_I-sc@D6eHh0BZH*_@_4XGs~Bn=DN8n3wY zDy@_T3F3=WO3+F&pd%cx-hcxh|3ptNf2E4Oe7etj>syliF4sAfwNm@Pm@(eP@WW7( zk*l6OjR?iW5TFbbZTY$qUkjwZ{mpJEi(xHznQv{RBei{Q8`P;r&9>g_uIVsYXm0Eo*Gp*ave60rMssB|AD)JaVtJF$d8HA<#&0r60{&UIx8A* zPoUo%vGT~%RTp10&Xutx{cj2Fi_*_LWMWa4MV+$S?vQ>2CtU^Vg#~9t62qbE^m$db z4+F8NXSxRP00#L>M8KnS+4tnT>vIs?cYxtxH|i zk09jR&5N;|bqS)qu7mYTriN(Gz|%AC`)J^f6vsw z+e%licf%-PD=`=cNm{gZQt%REQn>ET?i{pQ3kpXZX}i4%)qnT#Dqm%nh1Fa~(pn!JwVQOn%Ao%E6>j<67n*k^g zD8<~{quOd|1$K9n1-Jn*v<+8z7%iesml$dlDZEfQeW)QFrNBJn|8Y4!kvL%7aU26i{IZ$9FWtH z2J&b+2SF2jIJbH%VY9T{wANc=Ye~9trplA{jxJ<|@s7g{K7Xd$$|urQ zci3^C8@)GgHt0^45eSDZ-@4=4`!&GvbUb;g51Q~fVPdk_-y+|~N(mmpMZmI3!32z`Kz+3N&BAXq zvpZk&&sn#fgX^yTRt9YTJ_4*gFC9Lztg}fB5FQ)kN*jF|Np%+&{}}DWk&8KK(A(b| zCJFL=tHl-X+`5oJX6urh)XA~jV<|E?NzjrjPvJx=u(;oBT_HpYYX0%a0TVO8+;Tj4 zMh<}e>sx9vQ^hvHnJ%&tuq{5{og{jtI-Wv}R3#!juJ57Z_B-@L@2rJSHowUlGxev~ z981!?2FY=cw4ET^xj7w!3^_GVEqPHj9Z?x(xEGCQ8=HRow7jT&%uxWkPI-wCGzs`Y zYU%pv+1PbPi9MQFdou8lx$;*%n>=56JN6@sJYCe)x4Ifl!SA0)=c-taRm#53070Hp z6&d2cLchsX>LYw;NM#$r{nenmpm>DYuQF=f-Li;e!_SeC&rD*QE5GDwvL$o&AcFas zQz;K7rmd0O;j|QDxM*MXYHbBF{cVlXj{mL5Q8x(vr?k5Hz1gY}l|0iAxo0 zHcxl9xi~5>h`=QR0i4r$bxb|}Bft8QA3I5E>q@g0P7!X{*-vEmUh6%gLdaurX#84_ zfqv!*4}rT=-pQ7c*xLSht0y@pWt9HT#mi0 zs!}1TW5YXLaj?pa?vKkeEaTXqCmPP|tKUyS=cd-^WeSixgcsz8SMYap$F;BM^Hbli znqJtItc39esQEAnU35VnR`eG|FJyZ1|F$Jy>ffnIOk5xFXE_~vA2;@uoy;;)?S%tVDZTzcKy)keie1QDH{C;y z_e}-_4x=2Yyn(sYukNG^)06iq6~X#`1ySf>xq|2Lbccwf-y$mZ4$9{aX$7!g`t&^I z5(Z{b#ohz(S7L(7BddHQy&rdjX;mn2#jV=5C=LpU7ubJr+-yd>dyl5uMfyEu_&c{$ zb1fg++XpnqLn zrkDXx;>L=@F6kJNZ&+^#EhRW1>nT6@0xXa;)-)*$3xs=pQ@vQVpJZ2J|7*d;MvYsXe6gfic@dI;Bp6v0cJWL%?Z|(FjxU-RqF&N|Edp8zm~G z)#oinB7cz4fcAq)PbOa+U!D7uWeNTArQ_CcG36)M9S!VsV9@>(4MCmPTI>bw6OPYK zO->2(vfaOx?8q%X=J%-67I0nyePd+OOf%Dl4Ph^_-AC3;j=gk8Ug4RmVUgv7ld8mV zXnIyc9X!b#Fedn1HJgP?;S0H>b8@|b9IK~MX|Rv=d8Q1uoI7o8%G)U!6X|ehpDW$A zl8+A+pngc3MWys~?*nqXD?{ncX%a`J1VaWeX(V`-_oRNy&JM!;fB}OgtyyJd7hg<2zwsOajJc&arY93 zf^w2F3OhhNG4YQn=J=LRL;pudlbl^}UTvFlDhnQJiJtgsX#Ux(m#{H}e?bj%v;YOp z@7C;NGl2#6tib|D={ZxDX#y{wpY(`&blY~@rbtFtuz{Qa7}A~gx+!-wKwnISU^caB zmw2Iga+d$i89P}_`%wy16|9bSY*{^L*(N~+M7~~)b2(cXc1)|it-=Z2;*%XaL`=or zu0CmQNK6HmM0QymRo;b-&pr7aQcKOUIPvAgDn3^B`Cj@hF>lFw$T%-VDfVUHY=1iVi9~yHV>8Zn1ttFF*#0C&4 zMl&<;7y&rwn=L+6QUG{qs_aBw4!O&v>lBD2WS%c!R|p0wk5sUVyeIRR+C);15|k@3 zFxDl+f-=}v)%(Uuvv5cb6?ZHL>X{3*5Y?{xoDHmvS@Jy`%9!}UadF58zsMn zf7}|y5I?iPj};z#*1+L;c*uFGp7c?EA}B7AH7-Kn)rZPnibz7tyj61E=Z5NP8zO=q zlDXhYf5*G#LdUlu#pY-_u$8|R7W>_}`&0}*ZSGjGOqNuOtE>Ao@NE4&(;dlU%B}sE z{#GSTpGRknkvL!9l_J~cNCctVqGR@%B=b{)6Id>iFg6^>jGY!Do;2O`{E8V375md< z?IPhp#>h_s4i8_VtAz-AqP+R@a65`mNGtqN{9CxZ4}SY+m@wljXH7im>sF0 zfH;r^k7NW8m684B667Mq38S}KwZ%}DWC8po&?c7?eW@9jV<(hgt=C4PJ}Hq)ZYPKtB>l58}W8XpeD0KE|DjJ z=j@mLMUxkbkCLGh2y7ilj)cmU$)mrv`}?^d~YI9U1~UDHPo;x^!v8O zX1Nzc)}8OVJD>Q?WQzu8vF7au2oA}Th!Kxll+}utLm_#r6R51*+tPnDN1)PG z=+d*1rPm7tEW+!i<8sPdn9i}jbry|iF!cBOeRj!SGNMr^r{s4bsqAqYxW-GB+n=Oo z66)Vks?XYHtlSkyk^X_JK(7*k!EVgcT0PwHyP}HQ-|}>R7*^V=k*<<_VPcbEQJF;+ zp#D_UZmGGG!wHBheH~d!ZdbjUDilDIrumsHolu_@A-&0F-swtAFfDeAXB_wa>Q|5G zG&Y(%{8$+a#U$}CDu8aeW zDG(W)$9RLL05?KqWW)EnyJvn*sS@t&c}zy&!#GdQ(gZQShuFoBw3hqy0(4EPd7FHoa87^5wYp#+Y`mRX4!nv zC?haPk$Dmvy|((x%S>Z*7D&S7CS|T6NY1qyWqkQ0bA;PT88*-46qz zHB_2BKZo%J;I52Z9w2XjlxXKf=s}HZVOexpJ5M{IPKH239z}j6pPr-OG)^UH{==FQ zA3K&KMFLTfAiCv~pR{ApOYMdyQBwf;Ez9^1zYzbA`iIoYkx5ExufurZ@|`K$Pj2^v z*sAcZia^oszT`nQ4CP?4jo9&@pL8eyMDjU@)nr66^iz2Ay{xPrG(ABYGjUKN@ zZl^O=wrofqk=P0{w|1j_1VV<&g4Vo+_Z1Z2gYRWK+Sg*R7C`ilxe@qaK+ztqfZ&eF zt9y7-&cs^Z;ndbut{vJZnIMYp%Z(V&!xna|#G5;efwUTIhVGaza|jl0pGrhPe8ShIW%$);m9Q@|Z>G~n zL2c6^1&78msr*5=ss_i38`8*4e%1+gDxh96`wX6^fz&fn#;cfHdyksd6Pl*ivx_Wf zg`S8#ZdUR^5|Q<`jFu2#ueD}Y#X940>rV)XP^PJfyYIS_O%)6Pa7e_0F#O_YKk2~Z2#s6y0y zW3tHL#Tam>uHEf1m6^^aQ;P@Os;qB*j|wcucb>bU+a$ve!3UBvow22WLu7-Mx7}w< zyRBa7tJ&xn9${+>mRvye-1!e3wf_$aLG`|lfI$1h1^0L?L(@>+exX)17!iP$G>!ZZ z(OiY3+nA$}Szr-+cd$=e=>o6-hph;2LsMxvTS(pa$!HRz*%tQ?9Z1JHe=m0pe_#cD zU%!p;xTrmR=9m0&5SeyMIt~?9W$?0BCf~n5@ICE*5&_cZ0reB$$k^#35Bvp%`XuB` zAQ29u5o4cRvmNb8hgwq`+ejbMReSI9EgT_w{jnpvkb)~1r?p}URyfv1?7#vnbBr%{ zg?>wGW+Zi7gU`wLq|}Mk;UY5l5wFnZs1>C zowKE&g$Av}O4)(8Yykj298`3BI*9tM?p25lq(G#$qzw z)Ym+*94*m^Uz*Si05FKYh?nq;_OlBVFX0(2&R4})d}Jxr`dvJQ5$XT;WLf-;1%bo< zS}M_dDKP-XxL_Pt=z6PgT;>Td)ikiQl$t;&%_kn-S3n0*zTaMF#sfdGKg;ymb~zw+7$xiZ%q1(avID*xhYggNQ z0BZ<>Fv~duV=+{NnOSS@fZSfKS1~1lCc)w>g@+_A{FTv$626-2D6;5$N?%1y=M>s zUP2Z6kNw``cA;t&_at=bRF8GIsfXNOANitI!_BUD%5bh(=Ob0FZK}sL+;K@?kP7n~GVxfhG z`yknv{rYsu{r64Jlj+bxqb+~MMHtYJvyZc^$QhLYP~~9;{<(Bi3hF$$4zYez-@70K zd`y1!6CvOa2JKyz^ zJVruw_Sn*xfu+vS3h!ezzTuOvYbEx;-=DqkFFN?O|X09L7vjZ59e#M|Yn(@zB_`|vY03ZNKL_t)f z{tv%kDJ>Cj3e89Zu0whXn&Z5t%B_1c{hc-bzlNaeeU>7HMA)ZC2IC_{+3Q4h#bmst z?R%-cZ@?r*BN&00<$PNL=w(*^S=r#3RVBP`Jm=?Pt^E7=yb+6x^EVT;!GQEBPi}Ud zz6qnhvVdYk)aDN-yoTF|r+bZ=1j`t_rx1v$etY4}uYzQr;utOOTR*ud1S60)CXRvy zHc@L#1_h;CbV~pLeUX8KIG%i=&pFgUWZ;1R_8=6&nk~1Ykq)!7VyV?gLW*@t)va*A zDV7cR1|bO4uDsqH1cap6w*vq^paEXv#0jVPP0(8afaVwiEi}67=hCtRe=nj`O#-OO z!(d2qz1LnS-1}64S{@xoMwuMhB0erG=y z@^+s^fC8uvoAKJluGom3&Vk`i$?Ay~TC^0m;wg0IlM)wWCEeg$SMqu6!C`S#@Epdx zmo;v8;ea?f7+5Hah*O98)3$iJMOft;Sm*(XMM z$sEek-NIcuKj3xW1O=s;)dG-$!#L@*hxfuFtgxlmjzAq$=ceBqpFe(uS{}NP=2xkn zMfq;UXf#E=z-61tWF`enn+pTI$a0Z(?Pm-CDx5fq$e794Pj!-B(MhSmC0 zy=wq~a8J&HD5n0pKC1+PDn%Ip3ci6pD=V_%Y{|ui2v7m1GJwt$F-kmZDcNb1xPjhs zjH%Lyj-)@?d)9eTp?f7LBMMYer7*|6m*b}p$TRDs=Ms3!)#H}U1}&f#dN{^M2Kx!f za~nC3UqIUA-}$|OJgc6&9Pl^E5DcawI*$|=pj|}oQ=YJ*r*J`h-*}wfLRiM|t{bor zE1d1i4)+{T6W!#F3!&AhC z$T_@TjxpUv6CGbxIYV#L5{}9hPLj8|*4n`Hfn+3JB*QcAh_T`=OWih&2ne(|ZOz%i zQe02^5e1?uf%RYkiQJxQm}G#yQi4G`9;JI!r6K9kTmW8M0B9P@+uy7mkGV9K9y4sk zFF0-8-t-yl!~yz8fR)T8FBxX<9wqa9^71v7h)cu%!`m3l4N6)oLs-ZWFM@ybkXM~` zkG-PjptUA7eF}T&5xUU$1sb3hFFvk*Vh$ENhE^y^zoXsFWm{PA0aiQh;is@1>on^UKP8FeKw#T{ zLNEmHa>J6f1O(b)afj(5x-#W(|LORfjJB1kW5Oovc2+B4Mmsd)o=Itq{fHG?1<#>B z&_5i>19l6F83EtzCK z2`g;kme6`gMY=t?+|x*h+3{zD0Tx)CQ^P`V9k(;)v|fP-ln!{|Kv&$t-E_laufhpY z+!eYL1Q0jq2?z*EY1beS0b2bP8-fvJD7(K42nhMY-W>qYfbL=vSgvtND5aEARU=d> z3XXtMz%QHC9m*WuJntb?rEm!#r6IB=@mn#)GP%P(ZWw1YOxV2!T4+#$PNQ|`+qMyn z=bP|}ZkGO0D0kExpFH8!IY6?ODKc94~NKAHp;v{A1 zSgrei?&GEB@iA{U$Fr7gOz~N`Hi`RLt;#S6$cB7Dl6l;8)I^e-0oPGrZbeuhX1~kx+LE>Hn z!>An=$0HQMhE|7~fCEQbm=9zhcdSSoZ@p6^08}Z8j;tKuXC-qZjEOzB$&v)suog*? zPeNvg1NYF5zC{X1%_{_bvBfOFb!uR>J z<^}pL{oV3%yCZ0av!tW>TRcHpl6e``X=D0w#@ZfFlUOp#*n6X#LoT<{7OiYPy3a5j z#c6uYP#V4P8gAJ3k^o%M?KrU(AHs;GVgwmXCTQ$&!|8ZB-TrQ^%LD|NeGsmRecL^+-xwZ=Q0I?)U4IyuT?f;O{2zws;Xql@MX9ykmA|yVHF?13c%UplHX9 z00F^U_KK48@6QhWMM>n1DEcPaL^T3Hl_J5onUqcJO80Im4(V3vFsTN%aEKonz3_am zG)b08yhqzx7q^^C`r`>w*L;v{AyahCk1u5Cfx?x4rrrn-*?7#QsO2q-=6K5U`Text zg!mq}-s6>Cg29$hZ#Q`hgZY-pI;_J&{^E^RGV_4vGhI!uShqG^jYyOyiyV82lbq2` zKPRFY>XQnV02)i3w%!fLVHf@r7aGfvw@DjA*}Z9gI^Z${05j=dR@t^!>G$SxJ#Lai zWR>>L#n&+d@A3U^S4SU=wEtXrCH;l25%-1~NgUax`{3+P7>8lp?)a7rAmHzwXrXxM zGm)#7AmjoDNjX{Xf#rWNMJ^YLTt89OPkoSnkenW{B5!0Pau|B&H7*%?Au24F$tL8~2mnQho}atFiMgiOwLp?`!?o&oMdGA_Lwa4;Na z$v9K&$USJsMJS~I3;BHBg6cm%&&MiH2&seY{w%G3Y$8=*(Um;03F`n{WI5KXJ@F7w z3MI%}&aZF`XK4rBhiHXB^0+t@0B{^}I+Q6c+Pq^ znsHx(4De^z5wDyFp6|&*GCbhsCKH`Y8(4aFn1~A?j->LyX6z;}SdWv(NT}h@JtF~B z#curNI#0{&vxaDNc2aL97km4l>)Z+xy=FK^*w9ejPd<^%;P11 zlaAlkRxQS6tfz(0TNkHGL-WblT2JP`LvyO{m` zajr;HcjN$>%pja5EAvn9i!AUB{6*iykxBrl@<0ceEbv##_zMg`C_P>+-&QOfJSG5D zNchNw3Nt-s#)^dEJ^v5scw~(~uisg~i1>al51a@Piurkk2kZd)`JTMqzbWU>UP%k3 zN$(iPBbu}$!Manipp)qebJuRCXlqQhjjY)Z87NDtINBnT4zcg6G>*(7ALtsLtALYO z&+WeZqr@Q+WE^ujU|>@E{A4xxM$_v`N36&9nlYEVx&E+G#{N)0fkAQi3nVLTkoznH zY~}Qi%FIj5h%X^;pQa_$BZBmW%S4^r;SPg{6Blw86ZW`w4a(y zmpO9IIS5FWC=w)zpdbRuhl(JIh?qd(ZuSTQio$Cks3-m<1Ee|@x!ffwg`Pg&z)-|G(KUkcjO38Ng z3qF(1CpM(XQV-*d)4x(EE*MJ1iza+;a{~mLUx0(x$;xB_aDaP4K=;HgXRm(e_Bhl_ z#JMIYSug>Thrmy-LnCLiJmd#s9Ob#j8JFA@eC8f#tARiFde`@8Eky;dUGoZ?$XcXt zeQXKJpaiwIzfaq!YDm$)VgUe~g(1kYKA_E1fI&CVwEhSD&p`G3B6}3=UptWJ`~puy zvTy4}jNra8Dmkn7^s0#^Ih*|hIcvX10}xap!>;#{RNs@3fF!(a9EZQL)%kk<0{9HG z95YKfunF@lpB%7et;bB8?Oqo!^%VFsC7b;&(Yz-jy43^|hbZvYE(!@pgMz?wSEg$ED_2E?xoh&nGCSbvpq(f|%*O$dm-=XH*V`=k*kmjdLh9c>=a z=bo2!0wI5gHp)4xhr)7se!AcNLS!&?`Be{B_PJ&51n2K;CAh6$B+*IpZ%2MdZ?u+X z-YhN{=N#b8Ex#yd{h4@UskGi{cPcQJm`p<@<8FtghF4{`LB&YPospxA5#wU|}jx*(de9<1h8H` z8toqExSAsHSEKX+e(iV+BmoSx92j7t6-WKaqHdp88Y$nVuW#B@N|%g%jtbnffKbk13~mT5NegJ238p2uQ${RSv!2X4Z585#QdO?(el<2(u_xeBf~9M zCKz{qCt5fF*>B~{pQD#6T+mj8fc$JN^w<{;13F=5QQrck^HafTDyFtIv(D1_ZI=Qz`!Vp=# zNfu@A(Du(Qg9kl|FE5<)ku9gm-|#L=(lRD6k_ z9eLa$XnaG7~It>h(W#&tts#BsvfQ5NNsCybh_7 zc1Qz)T5XxH{L3b09DL+m#A6HkOWzalK9=RQgBxfndCB?!fX_h8L&w}}z$HIeJ5a8$q{<>FWy(Oqb_ve*2wd#C-Ifur#r{j|o8Nhh`pmtO= zf2cllwh(CgS-m16`$*_Opg+-B_pi5Gl=K2?zvbNUvtEgSFZURuu}5FAU!1#(+@fN% zHF(3en@GT3jB@^fnjqAXwz6;8-js`-R!~_=2|lv98``0{RPEMCj(+78e~7pD{Pt%} z=s)YphT6WYZa^q~A(cu?rO)U?^E;;(VL85`D`^ezG2S)dOlf?KcTFwMl+OHt!T6KD zbG%aW9Tta+w%xTZU^W&x+7^2OEz!`78zQ|_M*!rpr9@50zupk-7!F|LM8>(s8z+*) z<71#@%X~$C_B(lz8oY9lu6Zy@b)BNm|Imy-UXBT-)4vVm00^|40D!^)q@M6(=RBoC zT7&kD=^Kor4ao!OFs(2Qy_rFm=||JIM_h_6)u7|%AqS&T1HcfyA>R*75~VzDaP3-qv$vLU z&hsWtPJi+Mj*!V0B@-1@7xC4x7dfmVc|_;&@$GFB7ha0M`trn0qK$rCad`-wd z$ByxG1PJxrSN)3i&Q5rHo$eJhoe@Y-?eW*H%(AZRlO&~=MDNoRVWs~J!y6bzdsF`B z`XxIY=!J1)p&G^tC6BUR?5&hPJ5`}biU{kmY$qC`HZ4eMz|oT&24>uqLEhefmps`~ z7*f*PcfolaVm8Y#O2guy^;>7)bCjZYGR6t!RVyqoql3}}``HoYO4u7XPvhBHOLLAs zak8BAvij@J?w?)2AHESx#L+_#{>D~krQ%J|29Fs|T-w6XBayx1=$UYMk=#1rx&fljtiJ(6>z{tto84Gsfc2K2^LrUT`Tp()(wo(vlU18! z7R0*Q@-_aFB_oyXk_J;}JTA>n4`)BICALWoo}|O{Kg;{ONq~?=kpZ%MfG3)0xm5_P z`W$Uv9RR-rHMKlc*KvuH`-H#}=1kD*IDuowIV&$*`yl}GTs?}`XQzaErBiRYjw_GA z@KjH9>c6imXxt>DycJd}hX^2)Ln*Rl97S`~r@blFRNn(kFrpGG3+xX4? zZJEXY0soXnnb$|@1FFLEi+=JGT=Jo;|L@xKFJT8epxDBDq6yWOEJjUu$dYBg3-wPwX zAeqeP_rB%~QC6q5Yu{X|NP~II?2aFhpd{jf}#$I9H+44WKgDqqy?b9lcp=YV0Y4GvU?j0I#axKA@01@C~o&tKE zd&~6#IPOZdtW&SZ{e5`lOEpRJq6NS#hX8y|-IsKRT515l-sg~Y0(bJv9_en;p6R1# zO97WK@o+1FZemR*0VWEq<`DrPEXO)!OTOBO#R--W6oKY=-u{18uVWMDnXVkuzVAY; zRNl;=jx?m>veXy=FhKJ@Q98$Y-Xq$|p`=vTHiBxSn)G$b7ubqeHX`%}>Y_UBPdzGp zpO^5g@yO*SR1g#Fu@ydJ8`w7I>-m?vUuaQB0%(%|<#9igtA}^=Y%BITuM|Fxmgt?@ z_Q^7+g(_0FgfB4x36F3BupvqW|5%xlT2oL~)mK_QwaE!!d zk_^vCM}k+c0$ajnIvP~mC56%q)5xPAa_%Q{CaM5{&lCO4Um;R1u?Dv74f@kOOfj^& zbq$Z8D!pR=FO;($=BR*3I1ZvHQbKo` zGG7S-b@t<2s#c)+UB$h_CnRQ~brMIS$R$z4O0>u0&Lh3j=)a#LNQC9mIL{>_-ZX&A z!=!(b6`k?8)HI1GjxL6rUVDZaSr=RVdXwo4oi|y|p2r$&amI&_M|D(`TBkk3uCjt@ z3z~dJ)2TyP#RcDG{%%)}|KM$?f3D3V)R(#%hFp1yZD;$OmkOSyl{CxQJMsqVqPh{O z0%8@&+ybzL?ZF{sMED}4f>3~clli^O>KU&3;;N%M2LLbmUoOmF?t!7KvimXj>N^pB z$KQ?}rFx@2YDs%;#96ex%BowbEP5%T<4<$M1Ws_zohD4LD^7lnN8mO6Qh#9ob`OoD<|slJeqCx zCqMuMT8=VKssSZuZQx*~A8DX**U1c>KvQ*JQC;^yoz+|i(C2Uw(+#P#gBD7wuJwZh z4&0=dloPC`?W;!dQYAWUd1FUz5g7M*vo*XmSBytEO-e%gB_(QNt#QwE!_{=0JO!Q8lb@2^Us?w)&EDm z9T|%sIZbcT|4G*pqhUv^@zrw`RCa_1cmx1Q7*bC9?4s_-30dcJA!~=-Zw`!{&DTeJ zM}P>kHY4lt!j0e%$=B1I6%Y_e970K$d{ZDV(F&UDI>8noUh*_gs{p`?*U-mM{(5-= zA!NmBE33+0Pn`eakN6OSjn7~H8XsbT(^BYLe2x!|^W&Za0F3Zhk613x57GAm4<@OO zRs_L<4$5Mz#%85KMFqsQkufW2&s znmO+f&0lh?mIx8o)JWBxh=MEs%$XRMk7cJj!uc^GqLTn`; zJ3`N(Jrzy=NSaTFEqiwC(COeqCm?y)`?})0I%O<*zNXTHbxm*6xDNrZ`K}kb_xkG%!4^gWu(9l~jKOtwu@CTxGClt}Du*8o zP2+ni^Vx}vfiQj%0Qjk@hPU2jY1)%z3Hsc?$KWhj85dc%apMVIE1pf!oQTjTf=g&z1fS#-{{tu4;NY4aZ z<^5zgv&%n{dG=SON0N#VkkJzzjg79JMptU%yjidgTBC{m|H{6HG}us`Hse)1XNZme z@?JZ_Wc0z?wxQL+*-4yZt%4tgk-jtJPxubNW&Ddt_Yw%2GIdezKj%7OBAVyKZ434| zj})4WDkyL0kn{;GFk^&LM5Wi-ak(Bl936^AqasR6!O7E+hI9-w^*}I!FvXGCZ?{+a zrKo#}07+Fwk^4RzAoQV@HC{+CZ+N&R%l}OZ zfRaGVc_Kgq$aw%>HSzF{q6mNh@XsUt&y}~-iBc^WwqB)lT4LU_uT%C;91m^ty4(#J z>9n!b`B>^h)l45A?}>A`i1CI!D1jmv>}-&=qb#g{s|EzTBah*iIroL|{|m87`8=e& zw1++o3f}q!b)u4{%|{eEgyqIRFXm_C*y@bu>J-ZwSc?HSE6f@@)|5GqU+6P~<=WF! zjTH0H&guom6-k&QE zFZJ8=svP=`w}G>|j=Tn_3#x>OKI?uS$^CPwpI3bp-d{x6=mqqi63qUdSE4z7i_8J! z4C64|m~whH)j}0%Ve&jSf_-8?T&^;cSe4YyElRO{%%0M=!(awfPAlB}Q*^;VTVl-$ zYzCX>NGg635eUQQj^nfzKUu!tyM+5Y?)^37vb;pU2adnUZwv8d@W73Guns#Mql%RKNaW^1c0AQfUqT4!+r>r2+_X)03ZNKL_t*f1ufCX@l&zcSdSg- zQqW?QMM-?>sD`t+z}_{)`mE>Mu#cr%D$|en#E^1zEOug%Va3HQ6hm(tUc1?bO~DV! zt%wSoev0<)J%s?@LqI9q18&WsaVYzEU*1Z*7EqQzGyB@g$JtRBGMdyri%8VBe^7Ok zX8@T?6zK)p+Wu&Z|8sOKUmo2s*fFJS3-5>>E@9*+qJanWHJ{bzV|2gIIb1|B(*^kkR5P9@VrE8o&DxlQW%l37N1!8G8v9&$R;RvG)Dy zaDQJaOZ$UgTYG~QWv`_F(DYr_0Poq;Dm+bd@rtA*rqfL7Z)vpWe>(50NX5mo)lTOUwoUyr6nN9)J}k+4Qjdk>1<` zn$So2{?vaBVWR=&tOn~~FIwSal%aFRW#>O(Kd^<$bCIXf7t_*Owpl|&h5 zdQ+R@qFfDf)KgVMADqqeqG7F$F(3s}<~pXiPP%O_+p}ILBhmy$A&3 zusGEoS52tuZJ?&knZXHF^?;Drf<0_d=vM5)A!SlX84N`~L%wTq_uikob$}P5OKcST zJ!N{w_wfssIhzzn#wfgQ{4TydcH@vTD5N-^KvQW^ax|48gkWuL)q6(kvkN{a0rZoe za_zASFevJ+5vq{#JN-hXkQ|b}5-3Fg=)dHLUoaWJVXEC^dO<}VaNq7U+^i_?Tv0)gOexqJ38jefKjnGs018W^I zrC)~v1tp~kIDx;zjw~JNUawv9QHT6#Yx0v%&+nd43Ll?t6+qI-eafnJJu#fykJ5R6fn+=KZM4p8?ttdIu`)1 z|2Ro}b@!W(^P0E?A^-v{2M4fb!qYiH3y-|}$vHKU0{!bzv+8t&q3^ukpYK7NC^?R% z2(WWkdUT!_MfThkB0n7Cl?9P)r6tlkmhyXkqir|5DzYW zW@GWSGpR@vA}9>cE00roO0zWFSCVRxWchs0Yp9M&6p}H8C7@VF#X8aM`;WV#7{k>E z6%gkF^n$EU(tCYRuvIKR&DNqM+scyDyEn_P*jc;8$uD*15(d2I+KRobXXt7+nQcg| z+P*kK5R50;bm~UsLK4^aps&bkeE0li{EwncFI{*ZO{k7EKXoB{o_(2I{+VIk5`nqf zShUc7xVNjk75UqML{WXd6FE>1H7F&aJB%=(lJced`zSiMVruM+HIK)78!v7mV&>p?`_q+Qf&v96q}Q?r zta`T|<#;4kE;Z2>L7u$slK&t0CnbNEzKFwR$KWz6K>#Y@JCsIoQ<1YzqcQ4+1aCB; z7z&%lpI?SVq&Q#6zZDy>Gdb$%$(s9RX(#pC|C}E;fe3&=%SnJDdq)ItlR8EF_Pc?W z%>;ne&w!riz(;%ed=Hr1NpJZ(9)MFPPx3Gs9rypjm2zr^dX$nOvF%vEqCy7~08GDH zgj%8@S!~CY%eabZ#&QGz|5Lx0a7%$009?Q(gZ(_``Mh;d?))BAh12xnF)L0JOfMc= zmnql`!Xf0+hqEUhJ+?BQ$-%!^_-^=2aBZ{+s!i41~r|IlQ_q=n)gykN(vgY>jpl@ zM}}Ef7UJ#)-HBc(1pw?hX2+DIPoG(*lKXwSB&tb*tgb^&0{hEbnOA4=kII_(6|MAx zalW5jNkRQ2R|vAUyOJ#4IsXP;Fb5x#@CIHmzjr)yqL6s@moN$6*e=)n6icw$ZY;eE ziAZKf^E?zmLFv)-7f=ZKsjO`&7GYIJsS3}bJKCFzpWcnW=xVxjq;uwd6qOwp%*zjK zB!GH8=dJwT9yb!_GhqoaA|4xAUE6L1mg2f|W>EvK;}*sm zN3cJ!UMU|w8D}v^dL`{u0KhV`xCb<@Z0#bz$tRd5W0vzw;RW~u+nrY>%slaJqGB(&JRN_@JxTD`cVTrR-fj$5#v*CvA6h;>kMO=B z=*o4W-5G}d#=%$LVpg^yCBE|(il&aCOaCaQ>Q{A$doKAiyzjXPE45xS0bxU`{w38o zjpmF`4$;VsEMOeFuD3j0b`b#rc|uTz)(zml_q?k7qPi*rfPIKn9xX5wZ((d&=LYj| z1=ra4;9t=fT}^|}L}3)(uzYo(3DS^`r=c}8eLk07! zV>6(Dp|ar*6=1)^HMzOMn0fwEKt%$g4p0p$GnYo8FZ;y@v5Y&;20l1pb1$-JSv@-GEi^ z^D~YEqrKk@jFBeZFjI5NXR3Ch8-ajom=2%>K(hrvS!Z_doZ7Rlk)KXI*PS~-?TA~s zdXs=8{3Tt$Kzd$cNh`<%hpG6fY4{Sr1puj3QrZ}~9xt$Wog0e`Lrc7k_BgNVw+Gam zxgiEFVTp*tG!tcdS*8M*ND;@RM_Q;XY`E0&G$Up#f^q`)RTpO@7m` z`0@}`!5d2R#}8v2qK&xP9ssb3RdsJK?#P)EXs@N~{@QFGi%qHAt}}p+S&S=|H6fyL z)N_akAn`bMKmK|B=V2LT4ZxT6$%9AK=Qt6dcYfoPSyTgl;>laPb$SA3*y3xXBMc$* zhvN*!U~Evk9gm|9su||rj0XUGMJqF_0{|m1$by4W0APUTz&Z7#-nNObhDD!*E zAc4?-`iU00J#9 z0i4_-1Omi>UkDt%hFa)wS-A$-?Ptw((GQ87c@v=Myw3g+tw8GzO-I%a%botD=9JIW z=!Ag4&=3jWIG`NIR4<|Av%?7wHpYMG|v z3@)&jP0P>_X@K-Pj4+@8Zf^mY@qhwUq1Y41SJ*J6A|I4yBkz`!d1N3?Qrvca; zfO2P?(-KTG^@|&X;Z#zJy;%~SP!f;R_W*7IWLDvt+rW#r1%R?90KnI~t(b3m;{?ze zR$IL~rLhZ(9Y2)XgzquI*#CTUoWn)bGzH-qykXy8?l(-rH->gsCZYjqQJ>WJ+>e91 zxD|w5l6!j(U^2dQjw@1`-DE}5S2eJrCpsEx-#mmpILyLA z_MjeW(u8F7xKXW`s?Up7R9*cgsxBn^rk^^9A;0=9JYcB-{(@weA|fK!>(z6T0%}(F zc}HzO+(aTXT8e>zv6XZfEz!_W?5Z>K|Ajbuc4uX}03xM&wiH~(Ri$6ZtC{Dgx&H57 z{!tH@zoSz>Nt9IdULxQIy^C;!N|%${A{nX5oQS%(ikr>@g$5!&@<}%mR{;PD;LEK2 z7K%m!lAVv_Zw(Vnl+RWd`4DcbeT^VN!d2%So&HLcz}^H1fItfn0)Dv8Pk<}XvX;Nz zm1t3&c8$T*+YiwXnVi9qtIqS>2}&>EkJcx5#yO#JG)dr4>Le^Y2K)m3@mHh($@+jj zbjnvmkh$b}=ZcyH)Al3#*iLpZJ+x&Fwt|(jO|P{c-(#UtAiNpdf!ge1&<6Sd1C90L z2-7h~xf#(Muc42WKVjqjJ&e?$)p`Mo5D1C(`pY`|k%V|}I9`@wZ)Db|b|syXF%pxV zGmAWhWmuyq;g?uZ)+8gS$`iDfqC@+yn52^cP`wwCNdM^{iVk~hVVn}j9!-2HnUbMxZjvQR(#8*{k@--m7#4{E77xnpS}tP*Cu*8^civWvO&JFZ5k) z4+VSNHTsaXn4 z9|t%f+Q;W$_X0KHc)a7FZ=|_~9TzrZEgQ;~hIGafnr7S(KUWHY-L&#(66ym0D~|f; z1F+0J)bN!6$SFH2u-h&mz;h%;z@I}bF;3{MX74sQfPfdOFB(t8jxmGntGc_;8L!e| z`z7j5@a|JMh~-q;c7$_Zo*a44A-f009uol`jth*H_kL~^7cmGuu9fe3_2WfKR2AmIj;M?vH_l)9cj^SaBN{s9;mPT&X#gi5Rm;&ILK zTFGv>i3CTFqCcP=9*G$FbDZjTReS$kfM3bl9_9SJ86W@x?LG$n*Lp1*#kU9?FrGv9z{%TdxwDomDx=t= zUD-s;RH{a-p|)s7=Je$_P5&5%TwY2=aKrfYxqj{erx5t-1+rH6M1Usbng?9<5=(-* z^=bz@$LiO6N}Py@0;_v~$pw_I-=z?oH`P3uA6*EjNd&--54rs+>+J7nfu80yJF3>F zXqB4qR{Yg~KAHpc^+w28-2<*H_8MpQ2W!pbl+7K_Q%5Qp{O_*c@IIcA9M@gM0Y%cu zpwu0e*mSltZBesctP@(<9<6OJ;W4Zy#5 z+()Si2AWH+hxK1XsE!U93u>H2A>^me9J`pEb#kPYoI&5wD`77$&dj=vPXGY*cq?qY zraaPS$m=lAcRnfJUfo=yLr-6h$F=Ee+U?ea_K^ z`(Y|(+YZ=e3046}EF0c3MosE$wzU=KQ|w znV;loc}iineh;tn7Qku&zelgTi*(*wbuq+K}cKu$f?4bwE^(D#}a3 zkGJ9;#UTPYM8I8o9gCIb9*6(?+ym9^w-2$(qmk$E1ezFb#@~V!U)XxrI*010DD_BMgqo;q7@zPCY{+2D@G-98CfjIn zzzh=_DOK?jdYB6yy@pO`WjcDU6ab(!8<+VUqce}{tnz+}ILY$>pSOiWe>I0XsAhH^ z?1wt2X2ziyEXH5SO`e&L-8huKquzJ8ge!(mOEyLwR1b3OeG?ZDZ?~8I2XVM$|Em1Q zu)s`5>|-E7!fVXPs)0W*xtZp?D!aK0h~5FHT`(}C+9M7WMM3;)--M4a*t8%n6%|m1dZdS`9wbK9 zuWGF-NfHi$s{ef`8iIs-oSc28| zs--_bbySiTB^^f?Lg;tL`*;#9jPox!uoP?TFP3VB6r`fMX$i`p1g%TCfZph0zI3uL zx}&|R{^^(hyS?*c74X+N|7#+79#B74cQpr<-rcoTt2^3s7k-1IO9M~2rxnaMf;}bUW^RJ z7-J8+`y6O_oB+@Z{5`FEE^^d_IRXOxlchuB>1QTzq&0?B09b@chVFAYyUr6&t_ouv zY!w?{p+d-y_N*7oFd;u{hC%2peUY-CWa?;2I$S?%dGf}Kw+;sJR3zC zo_Z@s9+04{$Dio=)uGgSlNjZ>@h5vHS8w%3Hvr_U@ZJV?n$Hpr;TSs~ypl~~>(c($ z;!iqBf15u&X+s@Ur`ooY%4cjtYIKX&U}axA=NGO>&r*fp1>1_y0D4ZEdUG@OVVP<0 z@#pS!V3p{s0iDPmcs)ORI&Z+eUTeu)yPM$N9|##KUW{D>{oUyx$v`l zQ4Xc3Ohyx2!WEWeUXNN-g}zBGN{vuQGAH-I4eShlZ0mk~#141-GmgGQ3I4BFe!lu$ zvcB=gldF_TbV!-N-w@;aTpdp)uY9Tm7=RPfNK{36sbq3vL?DcQcl5wij1HQzm*E+_ zo;sohkb+cJ&9oFdu{dn#%2oHuMNv4%OyKW~y7#mCIv(MI=saqF{ba9Qkr#T$4ROYg zc7EK1-Kk5S_#1_h-_Yvna6}-?&@&+p#Zkn#=G>bCqAN-#F`z!?T0aFM00J!!4|JiU zChK!Nz*&)CYDf4%D;IqN#9xEl3wfk?S7o9gq{t@yHEaIF6? zS2XP}&)B=$+&A2wXn-QP&-2zX+1|vXE7Td(h0*SAwmSTMQ+D+diskAr3JwFvzxjP6 z3`^JboA3t(F#ta)0kD96IVnNtk=k@C*SY)S>U>Q01Q6Ab5-A7@dkuuRq@T`OVurm0 zh6-9W#;)DxnzRX87+SWHG?=(UKXtaiPEx#gOdzv%0{stTA z)K)g&ddbVGlLLh5=Aeby|;gWr07?%^sERT&@JE zAfkSAYC8#XH$z>#>!$_Njqv5|(d_m+R#v(v^;|zfl>Pk3NdCfhPyQ5gP|m)N*; zJsiBOF5YPGM6)F$ZCEu=WLf7gUhffepd712{|nEjV`WhEU8x3U1Rq-XI3n9@F#F(Q z5nAcfvyHviP;xzEcsO>1P~6k?K8+fMLUo}tfY!Oxp%=YLfs`sHV>|p(=xTPK0Z_wOu2&!=i9*I`)yJhDLzOzKYb=NQ?PXH$Stb29mj2Kcq zJUw5P=Ddenteo8ht#<53e(vOR483vTD$yu>&gq~@12_#`o7dIq6IOEfgPRUIDg?{7 z-V{oodjnDrMQG9D^M*2(i+o{AA7RmjlnI(I)v@r0p#s&MeI=}i>$DJUm?eqqlIkG( z!oam^A8k`ww)9JdC#9ZqmD_I(<3>5U^%nS7$ZlR`qa= zz@9CRz7Ux)#>+nL-N;Yy88AcyW;M#MjKoh%vwJ4NTcw~&xFZ9Zk^M{&)DV=Her6O= zJ-OeTWnxQ0XdYzt>Y%lojxE0E8KrUVNU11dbu*Q*^{h`xQ||@DC&$kJ4<($pOi6J@ zgMYGW<;*$7kp%wF3*d$+X^*!bEn3X2%sZZ3<;WewY+G>6A)VL!*{z$AIuKfl6dy;8 z!aao?nKkHadBuOF@4%B|xN8{{+=icN6VMZZ@Mc+wPW9#SK~;lD29Ot^od?~<*p54q zk_~<1&8f(X)kEXis)pBagGg6HnJL)Y~#0gML75Dm)mefbtJcXl`yeQSA)Pv1LFrbB^XZ;||82y8Tbn zDL1t%jl=iv)AA<^-)xd0XH7MVhso=yDoMX3sh<~j-GBcJ_ipv<+$bzPHu8i?Fe~~e zTQNWgrlJ$V3bQ@wMQMHM!Wg8j>~-~zEm8;eO0XH!*}adafX~g`DYS6*!N2i!*l`Vv z1tIHU-iWR3N+dERkne}x)g>XTiS}_C8G${O(-x3I$tkM+iN7FaF=tGHOx{?|WG~e` zJzArf`Br1nq3Df$wC8v?Eoo4je)-F1q&Y69IAWIu{^u?L0NRdlw#CYN_R+q^G`cG; ztT;hTYHXHfoOUrN7p46`@(yy386Nivf_0l_+Z(Z2e8U*53#IqGC>;JcvgY2D26F=p zCn1v^>j}ni9Ulk=q?qZ!bS;S#e=`61Xul&2R`OdbNfkw*4|C87{L&DwVQolY3FMwp z!tJ=`Z0*9ni!*Jhygc?)y*XZxa)#5{SEq7|5i;INS@SQ9V)JX=ETeFok;k+y>HcR- zBMd9)sI;o(Un(lQFTM9K-?^cn_VdD-aG|EtXpYK=)htFzG7#t(9)}$|F8bv@dGpW= z{w2puAMYXB~vm5ZwSyjd8vre++aDAeu+YPDQiCH7fJTCdid%yX* zaA$aYGQJ+W2F1{yk^{72=;iWUqlvV-CXVV3W4wdU_Q*$i;oc$PEohfUs;Py=5y$r? zxgsk{#w4*E@HLPLe%pqt4UO*AY$+GOKBR8?>Si9qUK*I26E#K+;$>J1cwDe14I_xY zR?Ms11zT?AQI)%mv@BMs<5#4j&AY>z=yy4)?asU5@*^TvC*4ivxWS3pQ=RIP_uaHQ zGEddQTj|ayaqSEs(V(eP!yZSw9EfrWs8x!Pl3-CKsfk(?lCWG0mLq&|!)PFrk8ViX z0tCb#-9C(pb113^4~jo&b2bR?m<9s^XTyfAB<<3hnSfX6b1~%!m`5J(9`eZ;Ik|o0 zwy=`TCi=iU6$h)oW~6?bd3{sZVJ>_& zNc?h0F`)a>C~1KE#;PR{vH8ybB=wWT|8p#kSxc3ZBhi}s$!44g31Pmqj)(mp!Qx}% zO1Y$94)Gqxmm)VLZNl0WOxF^#s7(7M_g*O7ah?bPnEb#oj32>y)(PaeXM!Jpm@QQT zJI(e$Y7T!p1a86)N|y|8*~B!KBoUr6VP@`|Rr82ub=D*4f!&#Li&8;9Jvjijq!Q(t zwP=~Km}B=dC=){!3%y;;cWrl%pj5l!NcWXb0Uj4uQiv7F3)l6ykX@&krEj6R-0(X= z%qL#tAVqdKea8AptL9s8DONstp-HXz*9}T2hjUkMPp$L_lomuBEjmqvGsm0)@zbpVkkl@CkvHws|w-zV~g@eO1Vdtg%SlG!=mBUM~r z9TA%qbLycEuJjA`6X)cVpcv|uUyy7IN=eSnV!=H3E}xbZAXG#&JUA{jEF?Oke04nn zzf33u)X(rGhSh~;b=WsRC_MWc&PSJv@17hmozc5Dvn{F%7 z3cT+WGKv%#rt1hhlzywUdlV7t+si9*zc$|>BNBK!N9hjVx$f33G2hz9tV75!d{-#Q z$uJM2d<_^4Fg*`|6FpkIwAF*e_Z-?>&s``?Yx<^+)If1XMUU^D@DT-ZDrAS<3}}~0 z**QQTn~`?3Yr0LK*KD7Eq|lBE6)GAq;2>9PC)f1lKeO^0_-qkaIlrP9t4AEy&NCu#b1fcAJj?FPzCYrTNoXwf2`6*R zWW7e^4d>@IIJu|fnw%ist2S+Pyczrql?E^24{6{;LIyw(N&8b<(%LK4OJpRUP z)dr#5TqzBG-#2(GknEGW{m9oi+Xo41c*cV*ngAQK-CSBC%#J{EQe0=mcbag}?}#gJ z@SdN54980$Mkf}l?mDQ<_^`|t#OoA?3zJ4a;+yy~$7JsX9fJ_q=#{Sm0qs+xx%oC* zZ8UKj`h65QWn8>?EYV`6ls*=d+QhQ-7yJ2Plqj$J_I>Jv_z1ZW%db{b30^pdtJDZ5 zFXOaWt__tXC`55Nj7Pn$sdD!WY+!NDGI{iy!!!L@VDXah7clHX=XsX3i`x>DrA_%wq?=6R&@jb`< zALgRlPpaq0BNV3zen6+~ML}-v&jU%AaBfv{%w@qH>%kq>(y_aNA9)CRd58Le#I&Es zcUum=RQ+gGDz6!`I|9rrIjN9NBDfhmHTx8&$R5*P^dLvj_upop`7&WnVt80y7MPM< zc*7Vx1S-$HcvOA%;6%gWp&tJjcJ7=z&gIeE*MS%mkLV{1(=l$D6f0MUn8uyCtJqc* zmv)`lGkDR(Ddwa9y`(&>@cbkA_V9$hHfseI@yKsaoA$^j&mk>vR=#Cq$gRRKJkOH4 zcJX|HMmm>ku>@|*RPo+gZ%m!A7Z_^gYJf$FgFc1zWy;~aCZyc`W*TX*m>!s{@Y;IA zSQeTwH;{yLCPpE8RAu2%gD-Y?)iSzT;M|2=L!W&QUFFd%%*&RzB@a`mDVEQm zrZ(hqq4r&}amdh3~b_UQCGcp;N_p`mr%xE>Z^HT`JI&T##BC@-l^iEmdyI?%+)Vc9} zBD{x8Rs+X43M4Slw%m1K9|3CAobf)RThVm6<2GBTp&&OJXT|lwl~8rl)c{5Vz7Xii zO-_`^>(oxW)o*qp`gFy!;~>aKy}gx|S=dL8`G zScLiVt|GW}Nng$Hm+T}`Hic7gebC>LZ4E*ctGiLHNf2e86VR5SyYYP$7}o?vm1(?J z9B-ik`GzNd=1r3!E#y*Egu&(aiem<+h)R zjYdyO+WIio8U*;({~@z6^XS+i!XMpGV-*MiR@iw@Q6M)j&mf7uz>Xnn-a}hxy%zcq zxkt@g)q%&C-lm*>J+l3|7{y7I#nt;UNOqDXP$ul!gyGBkLI1?|RixLMT&IFJSZ?)V zmJ(*PG|2U>TxuA{obo*|H$cR-WS`rKg}%E*6kz1;eBKZause+(i1&;#4FaI9<>^|i zQk4b>wfO7Wp@)y9=h>WuBbCsZewCf~-nTa3Z;1)sP4vS_+B%I%KJt+qTelz834(n- zVfx(p{=@ba_#d1f!kju^ce0arY^Qd%#}4IpZR2bD0)L>Q*k`M0QVW(uTfOo*7oiQ2 zn0A{QuIPe9lb5B<=ZfN}J}=V#7WRNsBGUtRc0G-Ffjj47rzH7BudiS`j8MPe)Q8y` z=|xFk3S=sImv$sYkLmI&v3R%%=>)VQ@}hgEYd$rJ^5%Y1Qm@0HE0C4lOGrJNQ>Z6- z?&(v2y=mJdz+Z?%0K67{u5xm_;luVsC+StJ6fYQG&Rs+BQ>G_$k)lsQIB(=+J-mA2 zt&-tm7hsyVVPCfc%6Uk8A_C0P2%lG!n^LTuyK;Ovs&{zkOprui0%mn^f!|n|mS-|@ z@$aYM6o_emk8Z!cs(Md+=gnDw zU=mCS^5lz{AA9lI{X*sUlQ2nXjN&V0s#dCv`;_(rH1fyaO}?wLf=WB7ujAd<$#E^8 z$Ay5e2r)7WDlr(?2iVI740uIs4_h-rSgFIKqCnetm4=2bD7jPAxuEqv#N5~_2|yhN z;}4w;xW?8ue3)*z#_f5w48Rfx*!_~ff+P3{xg1qjYxst=N9{Q z_}S>Y0xVhatyaO|XBu#CojG=j>O%5xwbV@pCpg3<+2I5es=+tPem|-5B=IccoaGsQ z1($~i1JuOzBsh;L9RUysg^6D!6@uT3QejZUM8d)V02--&t$zI=Qk>3g_J>i?s}$Ir z&3QR9yI&uhD8OU8@N9S}n;onimcL&=(@CYyC#9@mV;7DSe)?XvyCpJdjaNo3Z#`PS z8lB#w>_?}Hpzb#^g@<8Tk?;}L_7upvgohi@2DM(&ayW8%YSFLs{V>wmAmhuf)PGx`dL}tLyU=%K;SjLO^LfIbUq|Y% z9BLBsxRFXuZ#%?6zT;hHYcE!CYKi=^jq!($hKcJ0r}c1DJAv}>@bC7k9j&(iK4DLS zvz>Evy94A@8VJ&PKX_;`5!a+b)oW=m$o{VmL1u&=SzTz`i;k3sjqVjpL`cesh4G!# z_Z-!|OzPd!`h3 z$vC7=F&xGc$PDz|he|fQvs;)gcf+H|Yrb*Qa=#bB6ipv@LB5RZ5q?{vJTLP{b4u2jYH=0A6m9OqAB3mkngD0mM>gAeUrOR%3R1S`TZ zJGsrn?linr9xWTE+#mGs(Ero%`B4Bvvi(;NIi_^~1z2KLzxx|di(Mu&y(GNgO=s~9 z*-I5TYQ*qRsrw%O(yI@B3|~4<3&YWg_D=;DmChB2oTB5@Xt?K|Y*$pm5MeZCF`k(t z?q6#C^P!~BQlGjn1hO_*(ysn_8CNzv-k4LF63N?TI^Do%ZFsf}DJ&xGlpvw#Aobb( zr)61o3r@be*-YN|na5}G_BeRtR>XuK;-h8T5X(4wUrBrcMs%$Tzt!=e3OGjV-u@!) zowJw<@+Xo+*YpJ6q-a z%!gpFs6C}2{^xjUd<})sBV-xP0W08zk}1#gO3>+Ed{xPrL%h=ZKANBbI~+PV2LnMS zAESsX5+9f#3q`X&Mkis4h~oqfk9xga0o}^}HB>(2=-2q(i`Nj}i&b}hv7jC#3sN@-I=+oK%N%Vb?vNh<#TL4S$ML6QK5Rzm^pV-l@!bzF zK^i&uUy@ApW+MSifNANUw*U44u7BUsWIq0kfK`J}IgW4#0iJO(&Yd@Hb{6t9opbT(wE9;8)Z1BDF;2{O`J83RoUe(qZH-$zSYL2h=#=h%X?YL; z73krge>{4*BH=Q=T5Cj4IWMJ|(Gl5}*spT7B8Mld`)xSOHosBzs93>FKVeB~8ajIA zDgPB#U|6K!;Ui{?Uy}!zY^Olc0S+SVK~ukZj0fzUL0Xr_GB~>i@=sEls(9YxYKaIK zTZ$Qaz$qw-Wdt|@dStsEa=Y)fKRxa7*^&#(VS5j&g7$O(#m!r7TPW(W;bhZmW>VW^s1gZ_(WKb2BM#pP%ZJ#1eonpP z!S(>Z$|^p%W7tqLCy`3T8_OoU25Y7yp0VfjR-%Y>zv%9j+K8i>M>b-kO2~z4x>rSzH zRCm@e{G>q*2`yRu967zAFK;aNN^oRL-;}0AA)kzr_Bw!1K^sA|nxRx%9shnLhrujp zO?h(Qs(})ug$l?yqDNg(QYwlIQ@`cRAJ}B+Z;-X%Pw2ddeuzoT0;~SQ?JRawp#k7W zRv2KCi*kyuhwFuG`}OlRg$wEH$zc(Lc|mts9I2%(5-kLfBJwh-m_8)eTm;gNSqXGC z#a5_fWE+{7YTZzkq0$VgVvm6XB*G~9IX){h&u#XOVQw<@S zQ%C0w>0Ip<(ZjsTt3f}xg1MT;pMb^l33)ERp&jw(vLd`tfxgIzh&O;JkJv^m&f4vj zn)Qd`2HDPWwhy8GYeaRhMKlKA}+rrwbmz@w1m*n&qk6{E0_kJdAQtO zOfA!jFM0?)`Sc+w-YqiPz64WXl!a+EUipB}y70L~#$FaB)_O>`w5>I@`(NkTqo-ME z^88nHMY0m*Jdv+jlJ_f0+V|_bl`!2*dNOiu7)zMy5~Q4=<;voH5@r8NgO$u!zPzM4 z2_k&e!!cjXer1Yj)DA0Sfao#d=0ya|%#J&f(ENmg!_r;CbdT->Z-*8@t5fme^K!;F zq3)|)zjDW934(t3&>E}Tu59DI+@{2kCtA!X{I zk?J#O2ZKxWAl;xi5RR~8twG!wM03UMoMYPB7;wpajh(Ed0`7~%oTu@uw(5=8EB`XI z4bEx%KTJe{*ixA2FmiUCl5H;*7G~v$OXyuQvGOU3G)h^5nB1^i-@$kM?Bv4+<~7?i zZe470L*6$Kog94!JSzD%L@U-R%LUjk(&SOfoNu@7I(MIW+4ur|6)poaKa+%5hgX#| zi+xYG<6PBr#pRqFR2ZH)=!RuX=qoWL7?tJj8lVdy0iqyB-?7yqWUxGsRI(@L65ipX zZP{kC=F`2?KU{u?L;d!Qc{pqJY_bAa<3&*f>>hPQO!12>j131&W%h~O98<2Qo65v-0Z0l9Zx|rkcLqiQxkK;*3kaT@m8u}#rM?! z0VVjmPZ9S}uK^Pc;PQ|HV4qRr-YdWdBQ=;gzoCh^-?x%R6F)dmUqn-=u#QslHHp5q z@_6J)Mvc-tD|9L?XB*qtod9O_4~Nh;%Ns!CaLBiEAd4%(%;Pf_GGx@dhj*G`M9dI+ z5>4cVfa=8eS5>vte&pv3>rXzlIgo<%HBek8c2KUO6DV&R9JQs7SvcYrmQpbGirCT4O6Wj ziX1cj#*9Vijvt0thsW1p0GmC!5Vd*J->*dkucBN%5Ic+arJ-x_ak-?)Ry4E*e)LOX z$goeoB7IyEnz^-Mv#sOvuCj7p*FUzK%X8TWrW7LohrwG;qk@FXOiMGEbg1J?q2!9X zTFlmKuPtywBlv=o8N>M8jE4$fJ3X=`kaU$#eXTVkrfl%h<{o2GS>l+q$*5BV(9?U; z{ z*gb3gNOZ=1XEPNG<6JjqSmgRS#q-_i5V4Ig0H%O56Q2}Cc-52K`-~^FS<0;Nmn*kF zz&+IT+sS?BRfkGP9Y!2ULLmRcog;ko@Co=>2BzMFj2*%-QW-3*?|HHriMXw@F={Vm zSk?_MYTipuNM60k`-awzuW7L_-cixU#Wm1nFYi5aj8)HXz{rE}P;pHC@k}#_RK3lB zE;NwKB$iPSk(G(l-Rf}*CumE*Fh#4Y`4e-Buc&&fNA4(1?Y-BE3Z@7kfzTM*Y>rTx zms4h`P_q+e=3kimIKJdONPL{|hJHe7&B0aUL$;YT1ZDeaiQz4~UmO>-tlh6{Oydlf9hxKY5`sa(_#q4jGI-I{9^KNBirn~s?=hg1K3_d~1!)t-Yb&GkKz!S!gEEmAu zCxm&!21g=j?IPB8#W*^aRTkIQJ}MQ}&n8)}Y#A43)M1_VFQFRrDmqyBky zYq>q2OT@vxiF>f0=#&h6@%-gIU0C<+OR}%riYD7~3!pYHECtDfVtsBes*l{CuGXRZ zZF6unAz-Bp-bJf-RQa$S-ma9snjFXk)UO$~`u(okBK`GGh+N#w;Ytit$TOR8hwX+0 z{w$Dsg+7nAx5doR2x{mN)yoQY+(UPM5Y${M5&x%9g?zazoWvjMZ)Pq~3liD-wT@>z zmi#(xITzD{r0zqqy(6mK0)B9y4;f@AQ(bINRQQf2VVfGRDIg2 zz3a1t2moT&G?-h3UP`>9nvLYxXHjovI*Xu2Iau|Tvh`gr7n=hA*B6K*z9>GOy_zC} zh6dA#e%eXhDXY|j3~9AuMoJqHpj6oJNMdb6-B^B{EniIu}Q5#pQVz? zZrDlBP=T0F{D-bXeaw%MdF^^~u+t4F4}*a~7G)MDQ2)r?utgOM*#k>@nqn={R9JHY zN4$NLdie%t=#Wbn9r^a+MF*x`oaZv@UX!XNi{RY9l!6pdEqt``?ym6qV}R2< zHMc4hWM*OE-N^fr*FL>w{VGhHG`vYqv8`x0)rRz=ceppL6_rR|S^3?6dXI`;x@O_< zcSnSckEt5@*w%EzkBB$Zd*#JCrz9gARQ!AP)6=@3aow)BF zdSU=8WKj$K7iPFF{1Qx59sbV?fD1l*odf+AR-^Qz?PnQ0EjS=2d2<*T)j=jGwZAV8 zQD$o!Q6Mis$BDK+iBz0>!jkQ5fIg?-^oEmJ8yOAC4WsU$vS~9nB+^gV&n{34s&3@T z+pQr}LDN&JB(=1p!eM`1Uef_s^>?|UJ96orq9nk zjq<2Oip~2GXy5&#x*kGi{N_IfBH7~e9JurU^2^?EQ2K>A85y)OC3=tgIIZ+o?9yFG z(dd3~b_nx3{k2Ulsd!qfIcj1HB2ik&^ny~tux3;{LjE$ydura~a1D8=TP)&)|2UIe zzewGM*S&Xv8V98Olu$7m*MA;}JVL`Cl^SGyk@_)&|9W)G&xGE+5}E7{=6^k`ava*? z7u}W3`7mygih~PeqU2;I7IzHulbYUFVEFfQVk#fwK%Qp1vq!@=*=y7ND@z1buhmDJ z!AdyM5{Ln6+qUEiO9U~F$MkYJ-J5^Dej`SqHK;yz88_Tg=#%VCTSds#lbK8RKW9dk z71jp3foprIJ9NHVlC9SU61F<6(>}n|aE4*Ls(yWgZgpwlB65}4^a)Awu!Q(Hlq9r! z;ZnusK>ZZ+pZVjcl+!yw{$z0ci^7iCe>kQ++f`>0!5F!W@W8X zs(xN3vgJbI{Aw-Ol>Fl<@DpZEoHiWF#9a?T?8F z(}_%mCi>zUwAh)AKnc_$TR~9im|=3a9Y`(KVq48VWvBqn*)V{(c-BAGKNtO5H)^t0 zc9_f!rord_kepr4;5e{MjcuRvhA)!gE-s`1r7RnMF==F?wF= zh^m^;vGk$SH@n*AWK}}%Ut&zVuaT}jFX4L0APCi#N#z?|Ib{KawW>0V7NE)Nd&E+@w7qckO;erkeW^@R`kZ zl7%OL_>*ZEPgmBDkcTbF<16PULj?WUi#Z@G@#$<9^0KFUqp)L$z*M!K8}d>{0&2An z28W5~%)f~(m9&TMtEgRl@tj00i>7@cOtroaWn63sKA@D^@MGrk06OyfQX#4PRz0%= zW~jIV>Z$YBJ*(>aUh+Y&6jv~4)$pW@E`eaZrz!tfSZo948K^7J{@ML)z=BYu!$ZyU z@CR|I&j=#EVRnZW&d@;$JHm&U{CfTz8TQO-fwWeF;V8sdh`<&Lg|^Ets!hA&+|not zAid~v%!Y-Z>JMRf5=W3_(&vcA4530a>0h~OBC@>yS%%#4rd?$W=?2I~?1wnb+`&~3 zOSWpX)#gCbmBoe+K7jg&5dNHKoyM&BnIRY})p+w3gZ}s7o`)kSpd!?OiMEUkhY&kp zkYSpA7@KFEZSC@tW&ZTy^X}g`?)E*w(CHr?y3wP0(eyw~2>XM!bPaX$^D!P)>R=>X zPJHk6JFf>)b@l2(zLU(~GhEHYu3sN?7bkeJ6MyuI4{h?#%?))r;)=X+P|T~$)}cM2|Uu$W&WW;FUWgdyoQ@r3;0%Z<+WmwO#3x2>Fg)c*9SbMjE?pa9+Dv zM|<(-_=XsnrHq3*PZLbJJcn>=8M%;UnVk*}I%`E%mjod=_?Tf^AF}Jt)8#>?atOa$ zqXN`REfuvk+99JZ67CGeoQx>BS2B=pxS`&~Dkf`9Y94~29={;Rq!fh)z{ zy%N3DzL!wNgTYI`zy<5HS{4X@T=ls%$!g<*mGe=GvM_s@Mb=$E?Y>+-)t65`ttIAX z0?fm#I>_98#G5&~<43L(fc$$$n(5xIQAU=lefkzQzn=CW4ZZ9 zLUk=qioj%ZUyub8Pbqw2d1(1`%wFrCV;zNJ7e(Icf}}NVY7tMbFSiNC@R_O4GA$T- z-Rx@P2wXn)B`AE=X>Hs-O939R=&-MpjZBM4^-msiniP<8DEBdJ42m=!9=7gOs-1CY zfZ17eMUd=@9j#(wS$*KXl)6$h+~)t*USDG6l(Fsj+a4}Di=n^&n!C$Y2kzUX!HU!H zQvp~){Fn)hBNH0<;2`JL^zV2zhiHda{3Wc9md`=j0K5k8UL}PLY1Y~b>6hh)<%r!EP7P(ci}}(N z8-?!g{ok42X0%fZ9l@to?T*G~2y5swnk(6_?|mm5VkztL)o*2DTw^bp*jcj-m-PCa4md({bZ z_-bzxQDoMPl;<L=t*M;O%lo`~Ov0kla{+I>%FbQ#_lWhVpm+H%wO!1pEEFk zDzn2~hU?g{fSLoe9W=i!30)3HjMWj}RW3zbXPwI!a++471J0p7?-o=BX?tKkviC3>P8x}IKE7|<~%Ui-4nTW9Fp3gc&kI{5! z3%MofDn?!ue^3na*oF~NJ*>Q;8AT8oLSa^R8GJI!3jxcxT}S|(-|rT2ywel zwGUP~wki^JvzQ*~?>LYAbtaG8p;hP<8-KM~xySj*)v`#7q#UKyMTMId*iIh?r2VA( zfSUN6LZr4-o2FhMy}m6jV*%;dOqdgmEm+^8Z@o{kSrI9Ls1x`#b`y^)R(hE11$297 zqd#VEozb>hcaKIJ`Bukl?pIG~?a*2RRAF$}!D62k_tA>(_n*+b@jYXBrn^`OGvBC4 zFnVi$7dW5`R6j=VqM$fzTck`s1m}j-qi>B-Z|0+q6%^I-Stne$w)z10qL13#)i}P! zvLm3;$QODW${8QMZ~=BdkkmH|R_RdlASqIf#J;k+Y;n_H4 z1%jion^%xz%n2Gk8IP){+9FQUnVc7Ol&GVjgBTz8PHduT;{QKEYSt}#6~eVWDdD{ z_9;wTf|QEd>`x!;qt4E^`{4V=2L7^T>)ijXZnUpvJ?2-~2msw2wYJk(+alOQByaaq zHZYuyW|O;wKdZm+IY)}uEuM32!Et;Z{Nkqm8H+M(K%kmwcAN)IE-)) zIeVq7g(bNqAojbh9~*;eWy~_UYo{2wB4w=td@%cFm>hKi-CWYRl@*$Ddw(7mr+jGXP|E}m57nja$a2&9=n(~i@XXXgq(E} z)N(F7=4^!jrdiaL#&sV`>rt)jUjnKd%)y)=+q-@=u~Lp=xP((FbU4GhDW0=TWBNJx zmR9&U%!8~FpUhbH>TO%)fKN#C_+7?=hMTKGmhl#)E9~S&x;DJvbhWU8T(pX0xA0{x zEwlhVAm>mJ*tKiJQ@DL}!(Es$(KE*&K~e4Zw(kqsYo|V44|wE&;}guLTn*(j7hWJ0 z4rqo`FRnH;z#IdSWk9FWzm!>`GKULDb=^6sT*CXO&~Yf^h|Ugy&O3M2iSpcgYC{q) z+tbT48(Dzm3V4p?B_{+i2D^E+F+_RcV8zIR6Rjxg^>Kt;7BkjYz?<6A^F$0{)q+b z_U_<#9Gsc6X=bi~c@V4dTOE9;m1vF|E<%(X_VF&l_qA?DZFDe*tU{t2+z@EBH(Fr{ zzfl7+$Q%4WVPfz)N)9n^N4?;c;f$e2}c zk6}?@P^8cD3Xf??uPY?F<4r7?qw@Ta!l`y2KLPdt%36=wpQ~`=_0@ukOxvYcabK;6 zvF-ac7(qjoMK_+m2Bb-{vy>|#{!(T;1k2cr!TmLNxs?T^eHPz}7VjY#@T&i@mWozS zyQ!{avxn0WqR2nWMp-TnwF@xD6CBhrlIaEVX!Uq$7t;yQc5~h`o0}%@2guGy*!xv- z+xGd5df%qYhyd|>7+-xNRH$?ho(E6|a}3CSF5hQGAI~azUCCqqk-4U6ZHKb>iqBrq zv57%vWX{HrC%oCzX!e-YZk~#~(q1@&wAb!F$MddE89v2*i$-(kpaZfR^=vLF-dWG_ zIJ5Kl$_yKi?THVbx-yy7Q|)h@*JNIUh-@Sa(9hs&DAZCrXGVcYg~r?c=W1QyPwEr3 z(bSwc{@0~bQ`INIQ*HCG;b}+>`jf4qMN|Z|vlsxOVtTdu)HK}CS_D0+hCj3DjyIw2 zHG5ZkTvIa3;3cM=wvtP;>95p8x{wklBVK>6PHP@#hM8X7u%r5pvC4a4({7Rv8`^3N zP)nY-wsxSu5Gk<^{~H0Su}MD|ou{f+IDDA14HACH!_(+?V~gz49cW~0nAQ9kb!AIa z?+^a+#>)42cXZVe+!{eWgPFf}3oKlUOC!0B9XQBCmKoO9WViL+8a=06PNN zG=c=i7Q6*VDZ$&WEI6ygA>o&|AZG#&B4t%}XBz%2)f+$awae4xh@n=d0Zvtjevbu- zeNu>$K4zjIS0t#XB(h(LAUP1+#1!adZe^pF>n*QrLrVNxepEZKr4E@5Oo;A3Uf{2v zz_$6x2ZfklGaOiCpNy3WXVfASrmk#nK8e*gP(#9y?rgHmPs~UNy+}B}3Gk+PNKut* z3FReo?pu^zix|0rmfgi@&gD!SsO`boTX{i)5j2`)!vg&Q! zL@xp;e1UEwHMkDtw^XztTTV#$F#3ZP3M=n;Fk~Th-@tkE$I(P+=mq*~S!1(hm&Bj` z!&~2$;^Tusj4+irugu{t~oO5X%qTF!m{nu`?&tC5wJ8d~wp#L@5hAi5Qc5w0I_LB+~lPXRLBXH^|L zsQF4-ddc6YM*?6Ha3>XY-7Y!C5uY|;07!}k^*a^=Bw2h$*y}-?%Fl7ftGHST5-*jd z1vr*Z*FS%3Y+t{ZZtGv zTglF$r(!tnI9AG^1rFtsOu4U2V2Ru16O66xfXaPZQOFMR|2??+x7BOP90|wyzW3iG zA_HtR?B}f^mFJi4;J(eE_+hY}i>Es+u2v0kBO%=+bYQ&|78};99sS`k;b$Ov!oorg zQq&AQc-4O`lO7sWUlf#_T#Qivbd@WO!Z^c6zjFCcPTj;gi$X{ zu^Az1-hUKRgakyH77pAGpvQzC`ZA=S=}T5aV^%@;032*X5pwaiwRlC85Z_{cf79qa zok5UV!qG16kaS(JjUlZBTyY|1S0Hu=UAK_#rFVx@$iTQOomyj|o|vknNBCgvUeMIl zn$k2tBIhxsG|oOSp9Yo11X7%lC3jz)42= z-XK_=;CC<_bUY9~y|Qj0kv4OHpUh~Q^%zl|@EbgULVQz;$zhcN&nd|iFuVZfIf5Y@ zL+AHRFE01^;*D{L$6RMd_vC9cP->eOMx6Bg>J>6a$bHTD)lZg5M~GgQ6R!?gve?JR z_bYQs_4gWAtQEse$Hy)8?Pwu&vxdTN>_$@Q%&%-+zM_)o;33G%bYoOQq5d_#d7lv) zFCGx)Y8V80y-HyA zS>B&(i7^g*AOK=?D7P|a^+8FlWn@{7QEmsgAgoIAV1jNnjAx!b~$dZT^qz@+;dwA-7Qh`tx?N>6g@Xw_{YGCc@Vl zC{FjR`s21L?nBM*C;4T5ct~+*!O6e17J?pOz&i7Svz+5~pjSF3pfdHnfQKtVCefEd z4G@tsG1nRueEC_jbpL1N>BzAx2smXL(JgLjo?^e>HOB(zS$Vvu?eqvj?<|8ylqM1t zXesc#tN-3is-)QS*){+0uIAsp_Clu)(PG-3N2oHZekX+Cv7-%8y(XcQDw)v(SnKIG zJ3h95+fg$=dtPbc{Aat-8f{9`>~%bZ1qdbH(Yi9x=mEk#R?=bHK}z)hUYT0rjfHR- zW>Q&LY!nstc%ep#>4BJV=~7Y=@pi&qGIc88f9hvCa58O#1Z2>r%4!VH)*p}h zC(A^Jy@C1utyb^QtB7JnPDdCKY7#vmWf>ZoI)sQna2L1>sCJn5jBy@)Hc$x~TRGYn zcd7$bJ0V=<$9^oI|DA=NKK0ld+2K&dM_Uoz*Zprp0v=MWSoLYC^s1}<6jnix2Kp&h zDNc5x{doYg%Vf%fJk^$4OhdtGE|zb7-AkAVXa-!}ypb|#|zV5fiKGY{6VLn3=R%Pc-gWvVy7g?S16!D1q-K#??S0TnLJt@yl2HkqCY(u7O z)&n@qAM%V?LpD5E7_Q3L0skgf>S!??7YCwT2U0Dt0S%Ngd^BB(8B|`mchgKFwHqB( z2{=DxPx$`58+A=@V}=29t^{JG_BF7mOZ+ERX}-rQ*RFN-8*h{hg2vK)L;WB)44W}fP{8P9WS!qk@`+wx#pk*XN2p@>emX$zl)$pljet7} ze3i4bUP?ej`AdpT{WXdk7vGBM=F86J+bkspC%!$7zzBCmi2Ux-&;53pg^d-apQdN2 zzMD-Cw&U9DaoI;wZrXFc5?MG`(j$EjD+8PKOom0824=m=jF931yEANefXR45Iem!W z-rT;Hm*Mc!hf~jTD)XAYEYElA%ydihpcQD#%{=(+%7Rl$1)dq~@=amS z>nLO>xwmIVLl=`qs(}dplK^XlymOm&qle)<4X!vY#7WYu?pQyxzjex%5MgE>SJHJs zcrh=>cj(~5h6ar%tZ~x?c&J3{_QA+Vg0-CJ@?aCGOik!y+Jy{(0%>gG;3r5mo=c}r zJpUg#Bo6+;*K@@H>|sv+T-JaXDTJXr9E?_ea`M_9bh68u+Xeg)Ks+%YMX#Nq z`22IsqhZ@R(85dPi-y!6LJj=Ui&Ln)J8tS}QTP3JSx2U1qKKoLzs4IALu8TH;B(2R zO(CFX-HOR!9N7GEFarBXeYOxG;?-u0z5@KkN>(6h-xPK^Nj+ciouDMVNhzHBG8XSxhnfgSULZTw--8~n$<5$S1-U1(Mx-{#Uar+%n zlC9Y^PrR|}kA|j(+T)HK`vISLtw}Jj7m~A0yf@6UukL@bUWp*rBY!S#fFzY&eXVn6 zi26y8q|z)&TN#OwR+}Z8!a{HgFC)lkPZ*b=i|DK0l8LAmTQ?Jxr-q~z8b@FMdNH2y zQnqrtp&*{D0DW2SG~D1k%$lrcMfbB{ucXyi_J?xEDXU{>s2(>94wKzl{r7YsEOo^# zewxiGrB!0)IbYr*NkiIq%Go4}I5dwbY;>6&Czo*8r`8X)X8;0~tr1=>!%|*yucIOve$adG_gXX9b8ykiWdKyO?#J(#u zWC;ixmGlb>kYu6{0{m8Tf&z#W&k0UJ={T$EwA(_1wHvSV;NFd(6wYCYgH9Y&n}(Fw z51tlWk1v>2wN7rPPRN=BPQ~*;1^T4_H;pCf|r!oCmpQ0pi_TO!Ji?#Is za{-)4a-iySk2PDnGJ?8_4hWoaJ)na4Ac>AeV?ajcqc{C( zQQFE$$9VTps(H3I4hddy6pA`l0KiU_3$#^p@*O>BRkpeQngksnVi-0sC@b^xAE7Xe z#}df~Y!eieZuya*Bz!vS5=MkReQCQ+IDC*4Lcd9{nkUni8-6~X0?lAAnsC?NdoE2@ zsh+EfD~uj3#8&5{9={dRoN9Nd0dPF&@-ao}fr~OiZEaujt7g^3>)x&rZgCL6bgUm} z-yW`T#VMlOMfaZqB;}3e5eR(0JQUDkm(_S}!5K&i4k8rklDK~h&?@GAi?{9T)feMR z$s{T#yGZg4(m_NlUbtoLmYkvzh$pM_mQZ`(V@Yb+o=oQaavu&y^`SW?lj$2MES*jGIJcgC4g^nHGVBVNAf_w>q_ zC!Gpo1X-GuQMWDSl>m=LFV1KA8&b!-I#E?GW$+` zZi{1n$12zFSNszj-BRl^zmjk45J+0QM+l}spGLd=h+`;!nEB7n1OUBYt3p1qTVO%Z zlC!A9gTHRMnIFgz=UJjdHDL+bjLmthSw-!cV_I0tYSG`=zYvmYqAJV&j`NBx;TvrHmm|cui8;kJ ztB~jX#|1g;{d(bcwsIunbr`4QeG4;&aQee~kBT*1)_q+PJj;F%U?rpXHH?45jNxVd z%2pRWew!=n&<&9%X(0D+7-XHOn_0lNK6J9(6S}M!J?p1@{v|rzhQhs-Y8N)%2x6d~ zv!)td()Tau7L(40h$@8f6W>O^Lc;!niX$|jq0rr@rSxQnPJqe~jZWV1SKOoHHVsq1 zy++SWnrU#5PlL)O^0PHdIUfY5KP{*_rJhv4?Iy$yx`t3DS} zks2utRM$Ee2+xJN)%oDK46H83^HBy5fOmOi%7TL=nC}W)bm1e2JU%;a*oFXo`romL zDPuD}{|~-+nqqJ?g8F!6v5=1*7EyxsYES$Hz3*5Dx<YUgN(0ad|bS z0GxXY?{V%AQJ&8HE3$x}c##CLud5K8htFn){59A7Q3}}WZQZnfqlP| ze(T>uBr8pLQpgz9g>RcHVT;&pajie=oiwjjVG4#dMf=imuo!~Q=?of5kS z!mD>|RaU~c-JNBYC)ihcByF*l2=TzRIj5I8$x8P*GUJBT=De?y`7L4ShTBhw0BSH| zoh92+LfQ*(3RJew3~2wvJj;D*-4$MO7{8@6iZU_q zfstHlHT5Rp$~Qcccb<6>d`kBr6fIX7+$1q^gD=_nEzHqBL4T=&5qD$2K{!pEePDIM zM#VC8ex9FqoJBs_Z$r!lB+6_F(8P^Z+6KV18j#cA0h*RI>TB?>e`qYTW6837DspQn zRZt!YX?6`>y7DV*6*F#l5g00@g2Ej~|7uF1&C8I6AI5_&X%U!dMKS2L{W$js+xhLF zIxyq!d6MH!K502pP3gExr?*hRZEF{6EQ4Ck?KdUXe74}Zhvp23qW@^okXA>2>Op z1@Qg!im44l@iWF&cc22Y^0wbf)X#}JBAIjiw)-$tkU)&qWk`(|QxhF#Vme>ZH90zT z2a^#LlzB}gtfu7ArfWF2^tu~H$X zGP+L3-uZEFEDR>Ze`O?}N9;#v8>Y^xa?#ldjb(p@9c$>_VhPK|jZp%;mQhl0P=(y# zO$`ZDXIz>Fn6kq{@7lzPx`2rzyN9mqEXS;6lt)}kFb7+h90utTd9ay>1} z4DUC6B`MT>b>Pae8SvONk)BX3afe-$ zaN|P%lhtmy!{jTpCADY`Lv2mkXy9wGm&F&jk#kWg05k9C3cAic#aZ4t5j3lk`@5fy z9ZfK3WDf_xAHwyf-4;A#)Kcy3KEAKw4N*8!%A+i%oCr7jRog@R4ao*v4>6=}4MeD> zqIetg$$)^WVwO6mV?tAF@PMfwS|}L^nA8V@({JeHkyTEXt#pY$VE$JME^tOYNxc?+ z+$9O4{i5t(6#TW}dhgndOWBl2=^#~ZM1y|Idr~6)IE`2Q0`so+R51jlFja(YDb&86 zB<`}}WYc&qWPhb@M*Xuck9aP6K8#gS6L>OB zwr3OY>~@RgPdnN553OgFk2XE>7Ws9LHlyRUt7B7E{%yZ0;peF^O;~Hsi$EUYUkP6$ zAme0$pMT@FmI!t_jp$?@))#n{lI%YlOJmWGDv~fMKlSCrE}8NRrxD{|{C#8;2TCg= zE{p(%wONDvRkAk*xYS`~+k)WJE$^7xm8j{aO5xlF$8tkl96eb1BdblcM#+v#0^Du) zFYXTtk^M?mY}#T9T$q{E-BJ;@tw&Q(FPDV5Sfztw9`CKoh`a1?npOfX4Hj$%v>XOg zV|4~L5kCtPm%v}tWd2PO^`pm%9(g85n)CMiy$MTy)BG8W9L5zkj!bm=h?L`ub2WSM zGk#i3GP3cW?@HsQ$pf9Y=k0Nl>Z6h*FBpk)>$^!yMTHX|xs69uOQJ03q%MEkc0#dz`g z|2QTh8tE%A8=aLysM@2`1h%}C3!NC?vESi(W`dM#I8H>cP+q8*ZNH#Z6Cz_QAOJ2hhGC-rMWFoo@5?gKU|=+_cxFgBZL0DcP{pftJd^}0`a1ke+CyE zZzO|5SGgi{%*6K#q)p30%DE^sQ0<3y1G-n0iCFzJh@B-!E~ohF#Vg}2Z>~?zWs1&7Y+%R3t*0{B5Xg=O4XVSDE-i`T%rj8MGRCqr%`sP#u8eMGG&3_#N(bJ< zQy(XP?;KW?1&!Xy_@q~M779UbH25F$PlTz@i89cM$f8naXs8Msc=9H4vQ|p&$z`9* zBj09e*I?dlYevBs*20|O(q%N`9StBHwJ(pno%H%44)Mdaj*a*y*#%oT(FW5U*Z2NCxuk_(>M$6A$LbX)zQs~n0?q3L{qc*t8! zI^Dwcp%>QF?m|VPvn7l~0SGXpID$FHK)=|m`hcakO?Bv_`CbLhtCJT0JTNwbv`A4iV*h!%P?mlu(F6(=#+)79E{_%F9$zzu%1btZg&Me-6)rz<*9keG?3LY^hIC{{R8SifHOtd4@mp+xPDF zPX$MCSd6-iYJ$4O=PhvRFzR)7d9{btn)`Uam!(x-?CCOuIs5Iq*Q!jRv1p3JW*Be-TQqF398M=^c1(Ae$R?{}++W`)PvPKMYm997JLy=d`Tk)qhc27TPT@LVW($Ql0CudCOpe}m|bG-`*1c5)I#iyfAGPD z=M9GTuzC-YBYYouN2R{2CGELM+22wt%X_3B0&SsqC1*>lcTCuE;bk<)O3TPX?lyEI z<`otq*2pZ|3@^j;I4w!z%0-dT5h&$Sz+Dhb(wFTH%nAFl$X*gcb6dDj(8>W}$ z^kbqzmUlBn-LJhLp|o+mg%#rdZV!Lz%o`qY7lzY3{-ov610NFb8i!^YJQFzZv$*nM zxW0^B`hN$!tJ|Z~ zNvijh27~+rj^p6pR5S~;tA=5#8J!NeNLPbrvy@3}}BAr3vA`s6ZuCsKBfib7u`t8DKaYeH`< zjq<>c(qL@6y>7#l-Lz#+Q4cqm$WdlE{1AeWZ!$IAu#BU;)i~V)>tN_+-g8wtr! z;6_o4qLJX#qeti0zN_0aC~u1o_J)h}0;33GDH#f4ZI^qu^?pDpFKw9^6X`%M?R40P zu_)$04*iH1ho5$k<%NQUtnDoQWr#UUzjfhYLz6(4JLSO&-S&ZRB_X}cv(_J-E$HNc zJ0V!GoRt512=x9MdLtZvBzEv#Vox!RaDNg|VRV-zXj-Cl1G@#_bLgjh;nqrL^FM48 z@`pr@Bj;m)`SQn-5!CcS5Ox(LGKC__PU1V**7^R`CW1D_5d|u!2k=FzAB7}7^Dl5V zLg^5UwHAdpuG~en?UAGBkyGKX$MrIXYg~ecWO|parQj!KMOgWAGE06t;H$pZC-(^L zkkm&LI)8r4nF@_5xR|G4FFB*yK_N>oQYX7_?y0RCC28=pd^{q&5G8Kv(3z(aCT&=q zPzDYD(wC^A_ar|HLIqEik;CvzL%UPWp|#MYLHDaw>OoL^=)G@W%)`wc^%)OX_%8L+ z(YK2br;zAp%>!$XmtUE__rK#zvM_Y;3~Kn)RTQd@?~X5V{bbEEgZ7ToQK`76A)?XN zq(Uwd*q$^g`*4_k3%&&Fo)2D(;`K25B!kyE>md{(49kJP93m+$NT>z^HZ%1v#oW$4 zQrdNgm6HC+b6NXSq)G;z2-``R26f`0&n6`Wl=gpqjkUaA{}W)&SqGR(d5^*s?{Qs# zPG%o^H(aJ`h7dVOVw4BaL)D>9j4(HmV|8m`Rsnu=DhHobRv~dn_@7o|X&)N5ZL`~V zRZgxgXk37aM;15KAC35Kw#nmVV5L1 zC^nV#*fb*K4uvBKz-7^n4#@{HUW^Te9xPA)z8N~_Q+Rs-=)om|69qN2(7O?VWV^TQ z9RAy#y|*K#e@AOi6T3+F18OZjS);A!ym#Tb{s`teElL6%`b(r0?OjoZ%esm4Ljm}Q zaq{7QpsIkr>t$NnHNWLlHb?`&SmUwQ>>6lHqeS2v12nH4 z@QGbtOs~o0iw_M<_=8Zf2dN!moi=IsD~DSo07i$RwWgYUwGOHmj@CUfx7X^`)W)|B z9*|#^Ma;DkhXa1FWqz|soPtbc+CH-kr2bx{7}DpV~OZcf)E7*Qe5v){o{jc3;}Z->#pmiwd~Q zAC2@r0l=)>l4f|QrA7f;ywL@brte3X=%SAjWkK*MHwr61;NghXW1R#MDMZPLxw-^>B;ib?s{#6+PJ;Fh~4GkX*2^pIGuSxD^1W*YvBD44hwU}3` zWB6Ej4Bi+*8?RXSIXTh%YHt*5u!~WV{p8`vovD;64pLG7jQj_4mAfNc zrFctBWK+P8L9s(${n;C<}du_v!shh`fFoPE{E} zsU0(rt_8$GSB&6ph!<9E!`PAc3TL%xeNYp&0ckgw?mNB>EA`@$lZPrvIcQ?gT3DDM z-OJ`cMQ=(pj`tU5A1JVR=6naDL>Eh?TbY!4*8ZTgc&n49e#xRKVZFGdc@s@W?#@1m z){9&~YkdSFPZv>e?w~8zYX`I>A|UCL&kq_e9iNg|3?P+BXpne@y!(rj@b-|g^yC>n zZ&IyJsiau`)s;~Y?-$dI|8eMRK-{Oi1FE27F$=8wJ^wWIB8Dc!zyWux@vS%g85)Li zz2^Q)Dx9I{n_2o16^fp6>E(7hDJh50>FLL*%n&^-O@xz`oY@ z12Zl_F#tl`Kgp}hbh4gH5ztb&}3 zfU*b@sGdp)dkSG*6C_3_71F)ob8sX4_ia4t`Sd;T2==QD!R$O4X7=wm74%5JytOex zK;tr(*NbR8Xi#IEm-fTxWxAp&k1ua0ld}sarse0G+7mIEd>!w6yoQq4!f1cuP_SY( zUGdHss#Pk<+Hvj&S&s{MUk#1G_-RH%)4O0hn_)&})Ebf5u4(fyKmdJZyP z#|%OEH*3bxCsDKqq>8@jWE0QmLm(B0FRF{|{4K98BUJ0``;cI>TsQWIkA|r*e1ku6 z^LQ%`()hvtSg4&SRLI-=#hkeZ1dD%XkrBRsb1(4(_N-JJu>V&+xPs1U$hDCK*8ubV zR%@MA7jFyt%v+`bzwd6F*BwPSvLD0|@?nfz*O}CxtC2+eva;W;5qoZhA*>pg)3Zrm zF+3U#y}y#8#UQl;=*Pd!4L|X}?wO(kILv0^Y^bNAxm7SqZJKjvtefp-Fz98i+1oy5 z)V|oho=TGWg?4Sv66IMV!QTiQR@}<>#>S3}EbinyX zzP5A;X<;c-fDKK7gfn_U8ic8*){oK=AfubD*H3C0C#wFQ8WS%^HGuY~;1yw&tNJqdTDyF)GU*r4fb)0h(314gOP# zE7exOL>hsT0+Anm86T0N0mDwQP&fTYI!?fbGfjc zHc!hkgxNCFk`hb1SqC2yaYNDZV@Q)R<1 z`>)SSlPI-#GR4{fWSg*p7VqAPV2i!`5xvF zM-=3Oc=LaeV0R1tFKK15*u{FD+L;JYx9+2qy?{>i#HUa0=wW14E|)U%w&phA$D{xX+uV@OFSxATN;~$EhnioC7_M0F1D`F#*q6kak zB$vBJr51c@qIVi-9XD`?IIAk3fq!rt6q=>}vgU*2XCC6iG*k0Gp5`M?+1!?hMAV>8 z>Lk7#W6AXYO064xr@nv(oIn1>wyY8qkN*9Ay9!rzY>$_d3QPM{%6b!uil3KpA4O3M z?o-_8i|-n^ZC1JX`|CF+9w0^r#zaknMRBe5ZNnk?kBn%tvY>q%a=*mc7{)+qwzZ$0 zR|47sMSbCQ3toTBD&1nllMZ=~YT6)d&cBkMhCqr4mtzU?(12vF)_tY7i&e^7_P+^U z*Ac$e3sQ2MfWT!)MZn0P>xFISVxj|hCfY3YHJ5F<~=e4Et~gTtWUg`q-j zqmmPP)O^J4mG>zUk(GDhw!st zL`(85VNy5V17Q4stjKGd-VAt+Lykc_74~pO&Z4d2`6;L;0YM^89X@jKbXE$9#x<^` zO6NBf@UN*5v4t@B?^0jDrBZRuZPxGoFNpDGG~y-$-wdpG+}{u7azbHjOMw=YgbklD zbn>sosl-V~pZigiE9T#qd!Kg2pc@X1xdFt?SrOln$e(*6QPWESuM@dJjK+!13mDf- zA~whe?R#QFg}jSnt3dpOf@dqdydlelMW3=k-pZd-ITPZ!|3k79nbP$60ujkWYipbd z@k(0!S~mIhkC*h_f$N_D>3@=(h{Z!b;WacM{jQ=~4xO~ody&meh;1anqG=oYTjFP-M5V59WxXA1jT z0U2125O^_sOCb~z_r6a@BottDnsWeDGRtA9Xz&2Ep+7Yh^N~l(^R&dLuEYQm{>Vb( zYpzK2Lklaf`xj^j76@^2CHN9e=z(3QOt1K$h|=VgJxFc;44i4p4T)1*n*-;V!>*=BN>q})%sgB4 z%f=31+v;8_F~lhP-)3yXNQBy6D^UU7N8U{ZpZbtcOKT;@|H)}zv+HCvYl^+oXEs;- z+tPmg*Z%@}Y^@k;i6TmNf~>eiQ78mUm}GL`NH&>zz zgY66O;0~_B=PJk~w@Dx&MNN+3v*Y0xM0QGGDYFMFT4+C{IZ`hnXT>>S}V~iS8x>{>Z+O@nm=z8_|Y| zDKWqdK?D@{(wPj>LkNyXyYUP!pvQp_6@;*N#@I{FCvvBc05K%tcUm|bJ{e3FAm>}?mGP|Mvvea#o{EtQ$#k;#;$03ay52G{!dqLvmgFE z8r~^qyX|^}E=)D)0&GsvK79=%PKDgxu*W`eS-JeS&CnM~T-mYw*L(7n4Tg-!Dpw?e zFfzZN0Otzo-5r;{Ev%`x;s;~Xi@b?Cxzt2iZr( z4}cZwCeHz>^|iZe^+u6U!q*mWY~~Z5?O5~pu!2G(lYrW@{swsGzggA<M>f*OBZWJUQKB1pILjKC8ZhRVMcYRN+Eywsfb zibRW#GFXu+N`Azghe@6|&E1IwsKuAy0p!nQDE?PTQ65DqUnUU2#wE4{7Xi!(Pa!m* zH2}xZg9bgyuEa@=AL#R67K&m0Eg9^rP^TO`q$k8w+p-$VDfdHXjI7I6E+9s8MXE6Q zCKTXT_5mFLY5i68WW3xwTcaQ0 zYZcT)cqI5#-ZBP5{#`?aU~3CxGy~D?_kET73m@jURGq*1aN zbwJ*UDjN|gLL+O_J6$%>ahpq_ADuneV-`VU>@CV`HaU9-10as=i$nHhO2$(H z#|j?At4tK?l6WP?_#ekK_p{c<^Ree))ToEX2r~6f)UEYu%^#DF!j{3G5S~5ZJ3qxR zxJUznl_1L22apy`R0sx%Bn;nwM|ak5Da4tSqY=A|LofTfy$Jc%%!1v>RZs@ZzUYNkIq^YH zPjTn-Bp}_bIZ%QP-hII5!M{aMcj1M{P7Kggh=X$Yq0#dpTvX?qGt~hGYwYu_VEQ_zm4R21*rE=Dg7ul>FuD+wJysSQix^ zNu}&Qhz2aadL^vBOkO7$Z_7iDWwb+!sPVRI5wFBOa~(5$9TrWiEN_K8YV_yYDW&3( z5Wi=E(II8L9Ge-N(ab})2MlXb#c$3n@WIRO%p`p#O_7aHoCgXWa@bL^IjTMH*2z-y z_%~w&u93&qE3rli4R)?0w)KIV=Oh=h0)h2rgX(vd7>VH9EcPT}N#p*@m+Jvz$SLN)Hv-`u&ypiy34n-UANC zsbYYJkdGtxL~@G00~iA_zs!<<)v;*7Wo(jZcP!wP|lf{@9_;|vCL(dX?&!mt0Ki}ac>Z-O*ZYh!f1jsg@( z$B}@)h%ZGeT^|cBH!7W<@}{OlfM6g#RTGn7YQ|OSP0J=dcD%qd<-vBrhtRk3V_ zka3Mi>2;k_Oi6Jf{RmMLfUVnAiVE~T^RA8ZTGXMhbM7gmMr3HnES3*{sf7t$o}HXrYsTB$+%uUjPDoq1nv9woj+p>@xKC{^zr(1;}G<_vUe}Asi!NQ1F?G9+S z0|LYkqt+xvwOiwoJpRdfnwPnRn~=ZK(Zq5qly#%Et{u+^&btM z|E|=qjb8bHT?Lfgb64_L>ZOMPMbscY(N1N934aUf|e+(WF5~R zHUW;K_@#Z)qlc*zHK91Rlz~Rx@i;~-&`&?$b)tX~i2=(ui1j;)FaAnwb9rHP)8ZkP zw@+g>aHzkANR3)JzW5syjw@DRthd zy#vQ8L}~}=zZ7&b|9nr(SsFe|z=yqJp9@%rj2{TWc{^WBHXu>6JK>_h|pcyv!}S1BDN4 zPSHVG%U)HavIX_8nzzGZgGrol**4@?GL4rZ=I&u#xhAN<-6jcC2=xAtz_9i9oQ@6@ ze4>S+4o4DnqJu^hY&FFsL>&9hJ~g(dk9u3&(UUj&{gO|be5T@Z^vmoM+3Aqe>|(&% zq2+)=9^roC)Kz@5_L@NlxcaziWDy9^l64p##CACR+b)9I>H6?wH7ENT%DGSSnY)mp zgYDA|0c>Ip3l)bXL89O6n-IaKCtu%=QREZfKy+T1x`A}ZZ$>Y|_kP=x&1exy%$-g+ zM?wmySC0HF#z2ty-Ug~kl-uTM;!RN^_*IOD;l_L~G=t=Di0zgh)2=L3?57*A?7dAsX4xqIR?{!*ZF%`Rp@zQ%{T!d)YFD z?^DLfgCAkF&;nmAm;DuMVkcD;2?=(bqP zkuu*|^j&O~&wuNDh?-0HhNK2DSP(=$`_zGmD{2~MGZo6(F+zOhsLnw$UW{r7k1*)4 z1UZnUUHHSzAdK1a*NIO6q{_#v@!k#h7OygQJYl9g#uTMj;8W60E=y2p}WZzbvnTe zT_uUbmoVdjZ|~aBfC_jjCr=Ox7UG~B-FQ;&U%-S{Moy^yKDdj9Sp&59eu;R zMo*#?JW)pH^3_a@S-j}byRi4(CFe*#d;Z*VKq+w%&~s_N(PYFkZ!-qL%^=@}V(4L= zKKr27HRhi4%!_Ne_IY6q`R7v?^+TS>F*eF-`4Lz7Uwtg8B>ySX+I{M`s(;ys_(e()g zXRu}{K!nxu}N|^d&Hy`C*Y6fjA?s^lwloJ2kL9geB0} zGjnbT>k&_V-7q!qrvYO#l?7u)K}D^xgy*d0$^I7}Sz5m8fS2Rm>>82pBXzmJ)4hW` z7SP8~*x`2QBWH5)(F~lq)Q2lc9jm$#a7z0W5G8pif)X>bwt2|jApi&J2F{>Y5XMY&d zKq(jAnAgpSgze~A=+Ao%*fc^-Pq_(u?ir(B@_6WT^i}l38CgXC#cNX4x^ujSP(&9< z-_vG+09X#ZZ)zGOu1IAuna4>j4EwJe#t?-=v)!IZugKC@R9^;yPcFT<>Moxd3bKzM zsF&S_$J{aXlt00FGgDX%SL@Wf=HJ(YlaPf*N%9Ej5>)eSiNMswgvMVvksz9f5QHrP)unE2?hoWs&5F*2@#wi*Kw9>!1!SeFY){ONb%vT4D}LHs8B za0;-k=UT>ItETmik}P`|P^LtQ{6Z4oP(6P2LkSx-2~Z#4?gT?e(UV7GJn&>KBROTG z_QVOiM=)UZRSx50CMN#&@+Rx6F7I}356$6%d@A%7dpaCFMxE-uS>uWF*Z}zOcU8x& zs=E5?F)MfL?-Fo0br{3EN5|Uh4+)^>qN3=DXCF93EwciXX;1-)@1vVVk4BqEhSkMI{XIlDY zVQ&#VSk!ecKNYCedD;pO4-c9_@=Rp#ew-IYoGs=MZnBu7*%RVNFKf+H&{c+e(gyf; zt1dL?AX8^Hv)tA93)O@sdWl!<$*irSs}1HY7o)e&$%_N_h~ ziEsb`HRN-xq;s;K1frh4-$}x^_vtRdiRznEpjVdjAggoweGHuJsNuQ}WJB?U)fH`K zrFN6hN25(6i~iU#YQr*RW#8BjCoCKr&lqDU45~}PBgfY)KN)Ge0AWusFg9f&BaVS~ z=X}9@5gh1_F(OoRikI?laj)~hWVk4oYO3-=;h6Lzn12$cG9un)C24ZJdfJ7&Rk7I? zv!+rSCZ!j`c5USMUnu|e%nDo3o|t*Xf27zaIQaSybQ55W!M^4)(|-3>_ug%`UL&|U zQi)2wO617;^#_!$CVTx9gPjCUKWh$JFNjgQ?Ebs)W!TUoCsbl6cKMZV*uBlqXVx=M z$nSV6?^TruJDz2`{lh!=H*!6Zda34gN()m=t8I1+w31ZkzjKG?(e&A)K zffKEU!SQQoiHLNcq~@o_p9Zubp^+-|O4pvo8Eu}I8Cy1sJkD5hv)mtlBm1B)N>=gm z5l4}R=HU1rHnJZhKDHXGG@oXcLi+a^Kfgv2?S^g z$E$fy35}h8a*x5yYNe{J_-hPK|RZ>Oz`}6TX9d(=7 z#u10W1oJ=D ziWA3_y*F*I;lMNrAf6_FTy2yp9-g{Gdx$ZS0fS8GPX5rrmW0G^uLwvFxP9rj4mC5*4uSm{xlG+EiY^nyfEEmQrxYW9K^EA}G>s z5;xp&NwHjng|?A=UQ;_4oI95cu)kD{bDZ%WSKo(#kx7$5@%>l8C);t?Vi=}&UCkRD z-hm_kdvzp~DD1I9P+#cG(FD18aaL$~BKa2iQSlO5RrGbahi5#*wV+RT&e@<}X{O?~ zxV`6NvZwHhET-MRNDbM4_JFn9m2ynkJ!)E%+0W;|+)KPP!+*vP@6oCI+k>zErG_BqjZ%+ArU!#&-U}wRu5FF4@T8 zdpO|2)hCJeeS%j~Wj47@>=Cx2SP6)9Ce(p062k}rB?fc((fEa-=vG#HpEdVgIkyz% zwCMGe8czwV_X z-I6q%3JBHQmU-pQaR#-m87)Ym{4F04A}6O#octq}U5ipZjgCpjl5|7t>!p$_-<$Vp zdK!;itl-dz+Y67S_4O+qF<$P6?kxNwUDz}AUSNkx4K|4br`KYu8{oG-g2h6*sGg~Z zb=t`q-b`qP`?ibhaX%9MT>CM)!d*#C{evK?sLJ+dCwGguht+ThD1}F~O;ls=24%Q?XT}O^=N=B;h;fLfeOKeM1i;(tj!m ze;~S)t3Z;%qJU+TmN(sk-q{r%-^Fz6cK^!N&$Kg#-|#*7^nPxqQu(5w7huvTE!cV+&4aw2e1|kuQVNaAI4*@4y=iTAC)tbqBner!{H_3{B5;X#3~860Q~bf z3E>@)8;7)+WiN^Bb-#}frRkxzAI@2+5!H-JKF-6Nmc*S-R+60970MD>*l7JaIZQ4f zXSk2bfD@{;jMJvEgW5cpWg`A>;xPI#Nhay)i}JvZcAPBP9o z;UQi5=r=|}fs*+;R@?jRR?s-;y?WmxlJX)+xh?9YYp8VBK`U%^Y6o6O2}{uDyP~V& z%R-oQ{J$86{LVR%WuGY~jlq~oHGJ=#OCeTqQDcs~unHc!wYzI(5USjb#larq)l(>o zfDnfcUFn#x%zkGL6h#k06U*r%mhv|YD{2CBrxy96T&LwE9QvMU6OFdiIf{sp2Y7M% zEwr8dcE%4cf(*84-ifk~9sfMyNc1`crCKOBCLOzupsFS7Tw-Ao(&x; zwh54#TfgNzNo(SsUTLgYVy444my_D!G3NjV9f#5Pyr* zX_961R5-10SiIUWxBBN@^B8`VV0vvsfbD*lI-|mW%OcwiPTxhy{n$(d&)Hz@40u;# z-W0jzrQp-$&deXHjFX4JA2s(|cJ-?F-(@s0>OhLlNdA^M}7=2Mg<-#IkLo1APYX)Kt<9 zU0kwBzyhX+7&`&ivK&v*WgQ004Ga=4BzSmlI=nsHCS0S)K=+1AusP7m;qGc_)&BVI7+E+izk zHWJ|7I)|SklRnKl0oA0c^zG%obSW(4$MN5VZA8ogjgrM8f7UWUNP)S*l8AA7rk@;7c z6e)NDMt?Dn?=}fEAIm_#rh@3Ro#-Il7~5I2-0m5U{{sg>_`WpQ8dD<~z3>{1&~yL+ zA#WOUA0WV0VvgQIfYnyjpM)VzqmE6dVe}!rOvu+lQ{wzf_8Cx35 zO#kX$NPiiG2o*92Mq_|()`7c69DEwnF~{)Nb8)zWYhs_kjW~@Hch|pVn@L zK=_mN>{8G`Lp~CRp#>UfqAq`ex~Qo+oG>9rE2Dmj-*6MGaIUOKf`bGnu1`PmaVd_)^G9o|Qkqyr)-mHN9-fs_lnW*g(g7t8fmn zw4J5`4Wq4WN6Qbuhh(ZSChbFE51Hv%fB$r;A)S)_aZ8KPmLz#i-6S#`ph(7fxm*{w zWR|Ylao%}Xo5DKUg|#noht1{r<8iSMuIe=}be|}k&sqAwN(NWl%VzQbsH^%C&GB;- z&hxI$)?|9`;^$N#VUr6B3D&xjUQY*N=rDYzLnorjqj=eZylgb=M0DQ@9 z%WY)CL|dts!3GiYRbBBDKKGusVLE5NP#R({+fu-N|9j&<6AKJeo-?2V$_O8(Z9y~C z(~!8%2uD@*mYZjwf`G1KgZ!V9 z@7v}NV3_~oq5ELEqVTgkf`V}7d&a!Y3|ZDQ^h3}1A4zszUfxeB zvEwRWD=6@n1AfNdeJ-G$iRJjiVyKyl7HFtmaC-<+kxqZnB_kYFR3D^m$8nq!R|F*@ z9G%k}k8FTfG0;PIQjIBiMc3+}&3Qk`^?{W{Q;NTRjh@Tf3`G*LH-?~SY2DJ)AaC=f1g08Zxc$|vRm8yaSk zKGz&t`S&EsInhGl+<~(@2nq=r=E{F@A$Z(GfJ=Jrq)ov{AvtpdJxCW@4^~@51=O$} zs6Lq-Mt4%)IF+ox9F_l_EKCB>PO;qcR?3*aCq3~D8E$+L-(iF>I3)yXs1Qg?VJ-cK zzU}oU(ULgz_PA{FCz_D384tWI%|wV0*zHIhDQWEBL9b}7py(!`n>(;&|;he zd*;>{lD{8ukNC`A?;MDJnit4Jt_Q5W;FJOQ?R%IR`lwgd|BB1_G0OKj0REY>^E2}& z4D6p(Xoh~7mwHB^C!W=a*HSP8<8?nCeHCU{P)#s`f+CJifes!xY750DSZvzY@CU@< zy0pW82#hdcwwA&RI{alOocV&a6-wT}EJ8<~>p?#Ll5--58|kLce;zC@)o!>Ex_X6# zfU8NX3uvd<5l?Ocz}<>tW0V8qM*`4Lw3NCBy+ePY8^z2D%@Il8m)`bmf~(|BVfG!7 z}8RATjQ=4Ue zgpSlFYVCxRCg*m7o77dQorqHCu*rcMWb(=R>>%flYqCIw{u0&-Yc!oge=~g8<995> zTCsWQmgt73g^-N4Xo9-JwCqUKKxN`>wvsLcp4ibne;^@6F~&g#ENKzX&jkhku5N__ zj}VaCwHTS)F+MYMEXd_L+BN@x8-c^vS|h)n3HS>+k1`1>7Vwv6>5oA&Qt1)Tcd!cU ztw*Z1!y0V1sw*WR0XLldKefv_1x1RGibi-!{eDsccH@xAR{kwa#%$xx4(%}ulRX#i8iCRX zAg>u%WswY`MhN`z*ek*^&$K6|7L=%mx_i;7E$kjcx zuCAof0y6E2->;C#!5-GizN6*{nd{h~*x#j3Bd3}GY~rm_>E7YYEKE-r8N30XHkE|lEd;09?#{v3Lt^t1*A;CM(wUfO0Md^H_FIjr5bjAO^ z70^29W{H2Q5uHe9+ICgwOkO38y@qc6)ZYJBkN^+uGju&oFg9#|1ieW|p?i7?semlq zjQz+9_#KFVg6=IY>Tyu2Cko4&^7TleTv8Y1l_B>9jmS~D&`@Z9Os|Y^VXpAY%kK%W z!iG(%!?=p;QiR_tSdSgH`4v*J0|#uS%9vq*k+#yj22be71nDLM;7iWh{(%)XI$w1W z$w;LObxr6W*kbvw!a_0-J+$v$J&JW$=skN|cHaJQD7Sd8I>H%T5-p|n<8v%A?QJv? zZ(@Wl^iX}&K@HVYx4(D(I|uo9(LQqhG8d~gadSO9?D?fCncSD}Rc!`?}cAN}r>s%Ifj92(b35F(;nr zha->7l@^8Bl@&Xh`X^M+S&;yG#`khLa|j8hL+L{Ep@y%LH1eOi(zRwdg+v;yj;1we zylHofhU6kysB8OgZ-zdw_PRRSokm2f(VxErARWLZ*>iDLUf^odzmh-R@8DCZPVfaP z(yEqEYtAO)NpsyVhpwUqmI^*-m%Vd)cbgwzJr4nE0<9HKIZiwiJZ zjZk3O7v2i0K7aWx@eu*h9H5)4FM{lI44p@piC2PkXh3SICZ=rwkc6SaKzqMdL3x<1 zAQMP=FKl_5R-;2Qjt)ML%LF8Ulc`^dIX*yT?aso@YQpy$Xri*ShM*uSCz z`U-(RD@O%u%Y_3G5QFoGm39VbF$-UtXV;go66-BnD$hk*G*M4V4#evirX6t68~yQ| z=2*h+oZr{RAJ}3Gt}qwBV1s2!rFNtu$_m$w(a6FcYjoLAm|;PTdg|Ske^EvR$s;{T z6#l^;TTrDdh{ZLjb-243P6;xsE217bYt6JvQn=AE_)|$1gzNJxg zgYDzWp@jpucvMN;6yA@xn6=u~Bjp^6dLnlDJ)qE`ca`YTyLeExRBQ}eN0`a9qP&Lb9ewY%{XT_=_Dn*uE~s7Af=C*TT80P-9? z7BFD095VL&G9An45^e{g723Uf{qq`T*uJl@j07UdOgHPoX=WR<+8g zm4E*VO6_rU(a23<`>UYy4$;%;^v{fUM^vGoV6pX^3h&XgxJ=*jUQB<$YFm#oL+NoU z8V2-w!+F23Lfg4}-dRcQSm#*;+Jo+Qy~6(H=(Cg1|KG65TC4IN#NwLd>3bD3F-iCL z$(r~CZ|R;p(FvW*}13ry0mXh^8i5 zVL&FjO@;&sm&jqJ{90kd3ZXK#W50E1`3=~HWxg9%JzYRQi{n2kt}eitr(L!q586NC z0e=^hKjsrLqUc!Q`NLJ5;3fdvtwa$3c7Z3OFo4uFX@qq`9}mmE(NZ7!nUz+zG7Jw7 zSSU3(58C0@D+5ZjfGdG61N;XyjtbwCH7@MXGuo4WY8C4AlKv;1GzlFVD|4(|c4Xzx z)OD+{*_m}7|HU*ua=Na8QjJ}J~#|JjK&imo>gjF?0!5Q8TD za#dvjo#hxw3LPb-j?`nj^3T+3@-gYBd+y&KX;a$Ix~Za?en*d)-f6M~p(u^%VjEHo z7H#u0ojCwnuT1}xmM>H4=yB_S>+}D=5=-DjyGE$U&l5d{qPJ>!Y6p4~{-)TbmvIZp z=%pFr;0TXHluFeF#X(`CLOE5s2cAcGk^BLR%jG@` zc)k5O1O}nP0BUx5k^!__ATP{>9&dQOd}a!+;ilBrYaRNdtHyTSg662N>Y4fp0^kRm zn9cxr_dZX?NRM9UUm&I6Pbyn(;{vXT@Ax&vVVn{_4?2hxq|+lFhj9oe#6clz?;}nZ znj)J_h8Y$bqpnxT{w-kc6xQ`ze@N*bdZm7nUg7t$BatO>BnqpR$map3oG3icJw|i% ziWIbe+*<(Ltr$1Q|0b^!oV^EYhr^RAY)duZiG z6#h?%1qPh=lqU28{4TV6R5%~22AtqDSRL8bd*k4_pa{gb`u+2z6tp_AvB ztwRguaI^Mq5msogT)sHxpVTb^u12&_R&@wg*)NAsMN%CWjp}j`sV+b>@iOodCgprJ z$%!MQ=hzPhA;G_p1N3>ozoZgDEQiyPkrAkHqc10SQGYRJtrnZqOh zy<87jS0&e&4r zfPe&$M6Y+ZyiVuQ8yP2t?I5p{mVWh?5r*8xFy<@y`5a(E1=(lW)&Ym|b8>yuE0lX) z|LgOYGo@82h(bVj9}!@I6)RLTk$^;c%KJrxqbmAl%YL8FRw6IxuvA)ru4t=1b+bAB z4V$dBDqSJf@unf7-Bh$eWA)3oS0MuinxR<@6HN3)bpkx0!#eRfY{U}Zpx-kYfLxNz zmr4oQr~=BXyx%$gkYagoHPl@x(Z?c!SrK16qJTquVWzA<EY^;n*eaPVg&s7P3T6lwY!ey)H_9MGM+S7Bc4MbaDjhuOUCq|fL;j!5JYLHU=(Rf z0@Op}Vx)6YOVj6VHKZHqBD|Y13meG|VN%vK0C5;o;EBxMq>J<^bFCKRV1gN!g;hcX zx$I&6_pEG!)jJ0&%=4U_0VTGYfWDC9$^wk6ssUj1ud9S3Z*L=ysNnTKW&GcxPI~mP z?Rhl!cdId9wd&?h1`!wSTrLPNmjs+U;#`2>n6*A0-j*SCb&wz-1vSYGOi(2zPsTEQ zqB?TJUpB6cI_BKHwT~Ex7PdKLwPxx&sYOK3&khRoTl!0OuNDoYCg_{}af?66N*we^ zJH1UfNVaR|o|{C6&|a31>J9K0-6s0^52fc2Yuna(HUWW8)wLXXbI4-Ol1u5)>Yu&e zPZGd0sq53GZ|q=cM{Rdr=3Ch1G^O*oz}lT)+*qMkAqD`W)nc zgBa(4kXc1Q4nU}jfTfW0jN)>X3PZFVR%~<2`rSL91taaDj>2`^lA3uh0{|6L>dS}) zect|rBQW-aj?5JUNC&h~KX=Q9OIYqRe{&T?;S1Aq^*=!))KT?Jo{1~CCN1`vgw|-R zo^4S2uaLmHtJaw~{)0 zga%}a2R%?Je;}Dp3qT|B>#&W|GJ4vot^OkM#Z7hR1RWVjx{+3;?PBw9pC{eUOis9BcylHuJDKeJ>&mMN*4H{ zYEf*&;>jKRm3@5raF&R^fR;&zYR2z zAe16wMIZVH-lBE2pA!(MaFgVfL;G{^>eN51q;y3ERHJ0WC?8jOazuf7yoF@iOS2s- zaX@?{z(zFqQ@i|vj?^WIx~oU8VgiPd#)fAJ2t1JtG(uZ|_NVix+W36Om3RGNvMlHC zCFe&uQRp%O^QZ`vd-LFR+@@NOTQnRkvtN4p7otY2=hB^TGH)>ilPy2ho=8GTkoxSc zuW=PSh3Jf*odY*!WR@U%9#*olT=^x=fhW_B^9UGM=Nk^8=dguG$a@szd;jkN{tRTH zm39jJ;DdeA-7q+rA%LHfYwc3#3j4*c(1C`dyl)SB9eMZCDvs|g4Q0x=!_@Ff}6 zYWG>DiMowPa#r}I$^d|IQchAw$;fzbx!lVMmq-TCCiw$@#RLFrewWz+d&CHFu9pRl z7~%LGiX%eg^1|D*AA@~3nmMHZ0@xr*t-Z|#TQML2lmdk!D|7dxI^HErE{dv5 zpwgsaj`x#3lWv+ywVxid<0nebDk; zM8KaE^>Y<=4{ub_*cGL~>7k9+L)KrVWnGn)IpY#RdWE0ma>rdMq$j9o39cUi6U_9G zV8uX8wE2~7L9UWr+6Grz)26hqwPhu5IsnCkZ+S%-AmWtadSvD4ig>&U zCv=vz7y90jM$=7(xGu>gigfj^{7;B;J8@r5jRxpt*;;c5?Mg>jhgBazJ|um;Z~W0d zr@tjx|I5n)vXXNab$_$;!^LEi_s-J=^g!kZgP$W;$aY7Org?PVG=@v>$%R$;wuV#q<-1tZKO8vX?Wf)p|Z zHrVJU@&gPs8CwGdg^PA%2ZLF35 z9Kdy7Xn&s1DizX@fe?=l7?0@enT<3^z%8kd*BGQDlV*5~K{59V7nI${?N+Aaq7gce$Kk^G^@>$;XF z#^YJEQonv9C!|H1A(LOFM~3wT?*6z9CSw>N(m z4rMNXeh7@n7LNxlMi_!Mp;x~{O;qu;9I6N}=!ADOPC3k5CvhP|>URqgBs$#dbJRyI z|D`{EkhdRr<14po+t70Z@1yyG&mJfj#GWXq1c3`Iy@u%E)cOUHRt#bjJ(x_FGX!0Nht@ zO9cUe7)vA2!&a;Evt%abtI}_F#87;zi9bJ!EGK`cF5dK{_30+#d!1I(j&!E+)6Q{Z z3z^|H_3yT__mJ&9r$sFuviW|3D0Btjm8ZKL00k)i z!4KMHmniDvO;gQgeeogs0(d>=dr9{Hxhu<&#Y|yXW%Wqj{<(Laj3>=~-&sNEDq1Ql ze84Wu!@s7m76!aP#;F36H7G-mNxS`9lYXR%Z}N(f`Rmbr=g;Dj)X%#C`CAko$`>^KR+aMPZq(~*WFUf43(xt_~I z&FxI09+C_qb8~d*~Yf?6D&3dmLE>~ zp|hsdt?#f5Ypqi&)IkKorC&0Wa2glIU;QsagoHQ96x=|fG)#90R@g94=#2=}6t1SP zL|3%ed~xHayP^Imujahh0S56UapYNUZ-_$s$C3+1c{?JDeUuOR~AUe$IlMmdCPTV9@$_kUFK=Tjj9HT{IOWpN4@ zGsOO8oWZ4Z3^|FXP~9IZ8ZgE+Dz9D3-4Z|)%7f$9CU*pYyFH5LqNBo18Wyb#Fg);; z6#XOq{bMQ*BwE?HE6(oEx}FJG=|sBH+Nt(x@&y^B`RClpA_kVc+!T5S@MK;8u!t@_ zXPlI-6!7{fs(}4kP)8gt+K(q)&-Dr&biFc1ohS`0mFokqsshWtaDjt#p4Q45_(Ey& z0=fvXnX$x3PHBF-xPktUek5)WSw_pDjrE&qVZs>FST}sXH?Cu^=GBXVvgayjS;$8n z@uPIS1!Vw?83_CJ|0|!9ITKQL@3HllKb^HsNFwokX z^_Yo?x|ZkT&O$&8k0pze`23I}k^ zHlx%rq#}bJ(HfDCOd6+Mi~;DT>6kDM{qdY;;I)6y4o%gmw|_z@_>;=n<7D!xbR{@S zp`CHn|7Ocg5>jXx-`^021lx_EM%aj5W6!dFOfkqmcM0>h{31us`NR0Eu=D zXtN0b$wZ$q#CK02RZ)?wwe_VV>D%I`p%d^9c}@5%b%x+gc6j$+H;4fo3cD46&~-H4 z+^_L%48v4g!?I)OPgo~i^y`E`_+yat4QWYyJvtrTL|2t;$#C%c zo<|o|*W^vufW^A8$KOT>N+Z#F*g+n5;DFRQU>#n@|IC4PC(tvvBvtT!op|HA_b2P$ zWDo$7Lcm&BfX7+k&nM(R46U+ScVCEoSmhnJhoCAdkn5(@{D~|=&>lk!(_5#)3M=Ld zy>JUj(ny^L)KDW3v(ON=Raev3!2&Cd7A#Ofg+S_yA?T&u9akQG(OJ{!>fj;<{tEpC zZX|%CeEp2SOsAS$#YvpE%`M*;LFY`DdBT;$J4s&|HUB;!NTG@?OY@Ps6xB0a7&0%c_A_Q7e@_#U78>b88+|Ga(E8y z{crxffuo;rZr^i`Df9+T;X+#I@b0LA%6`J?ci{o8U`{?BKq zBd)l7T1f%?1?->4T@IKb#XJBQ&6yzhTLA8!kIw&h+-Cnhokmw%8`XNAd_tbr963uE z&(Fx3%MEd6Z7nEjz0kWjKFmk}I+A{8Y2M%kEGDysk5bZzfXnKq#NfcI@CC?ix>GC->M^S>>;0$Guo)jC&*w@i=<|pp*3i2*SR|7}rOD+OS<$&=)Od3Ipym(OeR=&TPmbu2-I`1%oxJ@v5_%hfrtoGP zv6QZrS_F=uVKAHjF5L~aFy5Bg(GycJQoZ!{PVyn?>pkkv005QnD=)`_!+b#>tzJ8n zyOn2Y*XM5s9p(jIQbX$8j@~yuYv~qoe^589Bh|e=-?lIZ_;+`1$7wX4Mss0vS}(Lg z6CpKChZA(YZEn~xv?NXd5S4|d6Z!nd$|g_ppT`{tlNbi^aW8Z`_j3ib%S!8hj9$W3 z>ALR`;tOvwM|zf?#bs%q-+Xcgm&5~pl~5HG)G%+&d!PII<0VYXp4#w#^jB=OTFR~^ zUC~w@lXL(P2v;r1{25)*PCYoWBTnIh*wL>k;&GE6^jZfs)MT)<8lU5PbDvrha|i%g zsJHzX#pqA@IJ2rUFv>ZC^;u5r<=%HDHe#1$N^Jw;aYLG0dM$k6P3D>3#&`_%YQDRA zo}UL$f?G(Ee)b=YtGFTdDt!(6am?~xjWIZmbJox*ix7rj52UouJKlsf{*)oVP)L|D zB9atr3CX=K69%zesmiE;GTPACl$`T#G5$|LIx=m$LJq?ZKI&^p-@$-v@!P-@ct9&O z%IJtxWLR!jNrxwNs?m2=!UI}ia(ZqgL9d*n=o)d(+(IF_2>^F1fkZ%o9r$A6xU(GL zVwc^$m=gg?`<2CTJ2(=oEd6>0U{H7-(R4Wd)^ev#X{^M0`j_V_^v82#m1z|9rq7#y zXfl8p$ZC(_|B?Kkiz+R1#&};+(8vH+2|M9iL5djW+u%odIpQyIn&;x+# zeusP=7OBIpSr~GtmjO^$d$KU0$p^pmCG9sp^j1b5L@Pv>Mr0A+0&|?Y#lE@+Z zPv1o+d%y0I+XKas7IGr@L01D(IDazD9$66j`G}y(g+~K ztts$;7G3FfhwE=3k;Z#yk%kNmR*yv}2_o$*zXLGAVJ|w12;lAYmdigFTPMH({6v5O z*_fnWjv<(wJ)&heVsT9>>zj?y7@&PIZXroPFU{HOr&;M*SUzR zxK2Gid!ZEkiLd#8@PiMGmOI~+{4Pw!hnVJN+48)@ z`#C2(2)1LtCAdZ{ltZYnFS8sPp^i4@`rTy6e98Uk$C3>DO5AAJj2Xz-qGH7F?k+2a{#pvM2iXK)@@ z(i;y=L^!JW-}x~%@AFeuGDBANlPKr&GL3Q*0Pa>C0pKH=fD8M)1zqVXE)HBtC4_kW zMmQ_P%oS#tqvha$GtS?ekZ3gK(^|f_g&)XqkE8>+$*H2H#q<|*RMSQz9G%6dLK1Ku zn^nzjf5&j-;2fB6j|!6u78!7ka{mAKUVwf>|FcFs6-l~~8k*lPR3aXTS67dJiM&c) zCJEVBX*Qj1{-Eh;vX{K?@y;PI`jp5EiDC@c8$+RM! zJIW6KL!JLGix6PSIfvlm5&`;0Bi}4yMP4Qjkxb&nxq}}m8%GY{XO>&kbBLLu?l;E$ zSbD-tdIsk}S{`A+0{-@KkpUwBqsRcY-;HZj3ysOx_#d(dD|MeAsfK6JQs|oIIG?P> zW>Fu~kFLRHn?9rs8HACV4RNFJI{=W{&YzQ8M$TaZmpwN_f8`MX_vxoMJTX^#iLS*~ z+nRDZ@+TI0R{Xa)dg2-NmfJbG4TPCULAt84ZYjb^RUsm43w}kAwQ|{b{D6;iIR0rkFXW+Ll}9-{1sZEk!t3hE|4JM5`7N>1XQOTQ3>Tp zc2)xiqN)`dsShQ6jb-@VqN|#-1psrM%lUmkcs2gEhE;El6F4V&1dB+-{!-BkW1Nn+ z0h{cnPU3?2UPuaFM|4)?b9HeWDYTt$TZABx>@skY`Vl>DB1zir_X%D?AKl2KbrFs# z>gGuYWk6N$pw}Wqx4!;5^D{SiE&BaJPW&<2gYpW0akYN)VY zlF$l`d@F4oi9fI<^{-(m=#7r00)KKOrnci?TGV zLWD@Wsh8snE~lgK>!^gX-o3XiLK0H5|7_S5DM&Y$ZtwyE;qP(hC}-;rW-y45Naw@} zGvveF-0g`V7+jsO^#ug}u4X-V1C%0tUoJ3Inp{uMx!&PAG6sW)-cXyCqr=TN8*ZnQ z=qhWK+S&G>p2ucYv!n{n4Z7kzo=QI#wLG%q9IXB!uad@^lV@V+MXIqisalt&A=LJ1 zrEjHy(tNY3(ZU?yf6&F}i!K}i_o#u=6W^j3N6;a3viNS8gabHEPwE`5qvhrb#=uV4@jSjiG5~O#bE4xbw~!rD{IEx1I@~* zpfBEbprHNckW7t{T#sLdl3c-dPtD#Y_=oNln*@G_4cIA4rMox~DrQ))iFCj={3|vo z^&ZaA%Tfn#Gk(Wc9-klo)w#SDGzSPPCj#^6IM02AZ!D+6e#o&(-dj7hE%d&HyD$%r#AeSjzg5GRm2dep+;9a znWzx!Kl%6eXo-fZH}7n}3;d;Loy+Zg{oe;2HI3uD!ymrHW~r}`paQ|91wLjo&u^4gf_8UcC$a_t&>SrwRhj+f-0NK$7hvct9h( zmYE1Y_-J}xI|UzjX|~;nKr&K|o16au5fc5%Q*bWt-0DiK+z!$1B!KSr1OUJS-=Fh6 zQK)E&9bi|1tD6uglIC)i0hb+j8bdc($JF{8{_sT;dYeontu>=B#xh+&Bg%_j<*E=b zB&duDFXvB0xcZq#bSRZSrCI;kfaPuufQHM+67q`nz|mp(>j(Eei%MVg#oTU{F#Rla zvNOH3k$Pq62dI!nGq6B7gZ`u&Ih?f-iAcs|^?sooIpV!~?aKTClj5oX`U1+eLZX37 zJSrv_AFv)2)wn|;vB_H5QaFFI`h_|E4?6U}kamLSU${IUDJ_#n&qqjpTr9 z1Ve6;KS4k!T4r78Z9*dc^{KMqQ~UY6$C$T-|T5*M-6f6b5KC#_jzn>k|5!YY=GygF&Y&qGGzSxE!vk9UWgEkN z?*lkyty#4*R${$zT-bcGfg@|U<3O%UOA?cXR|!8P-++VycBSBxJt zx&;-~xPwvXgjS_0tQ-vh2&Bu9igfFlaxdW`t{R?c>kSoD^b%H~G3u1^S(a#jUkMVz zh5opN__WJIFTxK#ny~n02t$x}!umOR`$-g)5vPv&ztpqug53CwMVF6DwlUXe_Bj^OpQYEmZ(|}EE-cR)Ab60i9tRJu<2br5 z0%xTFh1--msEq#P?$zc2xu`$h*3%e zAS!>r=g>dgGJrG%AsOq2Jw;-%&F9NaW;8)vVN3co1`!}20zC}Rb^HQ@&`q=FdT+dk zaoWs_)o}|+bdhd1!VpZxn71Ps%`@xtsEBVc(^EVei@xZrK6hQsutzdGBt>Bt4%ui( zd3=MFmipnT@PiLIYyAmdA==Zrr-ws-1fWq`<#V*YXjfI9vrqTs0my`yv-I?270{iyM5J-{DCZ&5JLXrpZi%AgWs_^ zt3}`cAp+qZ(wSQ*ix72K;xTx^ldLlhVaP)?4&kKn)z%{*fZ!4tf$FH_G2wg){NbzW zmwFnTushW_xB&zRn5SxcH!?)}02-)JjXsMIl-5p3=m{OP!Wm;MDxsX`?t_c->Ot=N zijgoN+xASEzDPofq0ZAyPzmMyyZ_h-1VC5Yw!#ts?kxcB_5=Vs68&)Qan225znE7vhUeVS}3JupKt#qv5|ACT{jYihC;mVwS6nd`*>5ZX3nD3=os_K zMrwufq|~u4s?g%7f)QTa{wZeV_zG-Ko^*X>0d`kcY?X#Wb0Pp(b>LmSufuu0GU5TC zFVY3Z?Ole`e{qy9@%o9rLYElhyZl)|{VS&Pw##-@;dpS%`El;=^8E6M?GLLTT_uQ^ zNfRUU2j;x~DRI_#|PnMwZ`^AwwaAieRdy4v+77=kI;y_yALEB+NH1ntkO$C89S z_)q++)cepvgBQghR6;qj%h1IRxWW)j#u!`YTt5ST@FC}{Ut$$DSdNqnwx7=n&}PWa zM`8{Bw*FJW53}*L*}q;toW@15L4XF&prv}~^#MpnCe)hoGCQM(2$3En?J*MlJ#?pA zbNm5*q{IbW5pM?m0s?|Sx`x^R^$@NOx&1OsFw-8I@yI|H-J*Lt2l$(rqHBT~;Tjz_ zV~_b*otI!lHqG#O3s0e%`pxSvD)W=&N5xw~?%ii2b{TGW4u=2%U8VM@j!K$?msi{c z{>F1m|3iX=736J{L#XEE_Gk&IN^+R!0LMY>oaC?eN+C_}9(|M-}gBySCf~{)ftQ?U*+_)!Pz&0{~Q~1j$G-9P4!1Rlkze+(`i4 ztposlr6Jl64KOGLND7}%=?bVDP&^>H(<^hlKU0a^Ayc0Wq72}``b-Ps9kFv$3Q$8b!;M`qOP2@}k;v^oe^aYKsm zz5y$&n6FC1Gia%bNv?yT=&fmZg}FruRZ)RtXYIymT#}~wZN@R2mDc(-#2H)?$M|)I zKYYnq>oRo5)9PgjFX9s7r5(Qeu@(Q?Hij7yj6gCVyA~#3nCJJW-$D;`P>WZm006#6 zpu@O)jTrAGJKjY-bWhJ3(j2ka9-#j54*cK)n}tUN+=#@Y^-nxZ8dXxCl1`+U8~^LfXem2{b9CwOHc5skZh z@~6NPIx;WW=1vtSg<`b|VI0yRIxr^)2Ct&4=S1QDXt+G`C0;qNtUPb&bx+Ya-bfwHnl|6ZzqkD4w%wf&yo5_f0`Dx z)hKjW+^tv=QQVa*8(P$%#FO!E7U7JXFMGH*%u9rEjt43FgUwk zi_Z~_dDdrY{DM9BPwEtSF$azac>zCf3j%lEa@1dMcw(;g64v5t&lh&5qYpZ&nJV6P#&^fB;n;-lyxQ%Mt>EXb=!?_u9&I!54}S30ZdD@$f#lij z&+!W0G0tjs6j7LK3aIxSzQ<~du4*{?V64IXbQSc*7{l&oPGbXhSX-8lLnwmCCx&fz zfqz`i9(0Eg_f)=W&q`-WNVuDU$0zKu@|q3s29LhJvtcb$Pz zR9pBvvn`umAPK#M-g`%?AP+%MKtw@B!NyZT#Y!?8M12@8QWFFm0a@k)%Y>8ZaGLqRpWQ3SAjs(fTiI8jyjX;4fVbL zFN*AP!;QwqO-RFePpvBB;Dn1Uw*2OOJ`yCn?#e(Ss+iw7+z0z{)ZU}@^5W}8Q_PfC z^t9-A58-&$f{{mHfyKDubQ%mW(9Y}^eA^kM`00NIBLISwV5>ZY^%KP@=VaDDP2ydLiti(j9&ja#5Q?PcV+^6p0{ z7wYQ{u$UoN?`Td?GH?;L`IN74LVzbff=C+hKIffRy~81@c@dy~CBcp>FXzALKB)tR zSngYIV`JEq{K@^6VHwht7SUaB6DBFEt*vMX)v~ty<9z_NF1qf@x;|t-^{HMx!2^J# z?>$cstDo~Fms{Dt`3N*J!bkhf;-9PSTdHcEr*ic+p<(W!YhPwd*&2^0?nMeAv+ou#?Kwqt2IXl2=e~hW0Pti_t z9aN`TIaVZNk{R0;6&$y?0Dy@IhiR(w6%YdC!Hal2WYBsuR$#3sDRB@0ARP~32ljbJ zMmNGyoMaD2)J0Py8Gb(hB)-F2p~rqN*x^Tg)%_^G^_I6So(=coR?B;vpT<O4Igi6u6xE;eoe&5)!;Qhpc z>rxki>;V8c%@|JNtTHuX0}>D?y_orQVE#YXuTei|ZF|YqXkzKG93ceL`Ha@euFOEomXK<2WvB@nR8 zO8^9cex)V^L?NxZLz+3SB-7*6$MnH&f8{_8REWLGR=I9!@)Av^9;WYi@f={)^>IUV z%X{70O1>WvvB7le6(OMTvt6P(b%F~tt`;IdFYxmh`16YDrEnboG6MdZ;}sRbBO)?1 zc7$G{8?CP{1qR|ycS@ZPu?U}7Iv;-j3bhM**SF5la&B=my@UYom8VzATW;k52}$1n z^=IVT3EVHdK|+jN#>nqhf<$7-C#I?IFG8qqiS)zdg3 z1+QS1b3@&Au;4s1nciS8u=iXyB&{G2tgHVj$hDV}eFJju^)dl5$g^Ln`xOFyQUQOc zfWLe(z%=}uHURC>+;HUVBL$x>Qyq5!IKIoGivvP6kx{5$cy^GIF$ld(9S-K=ZOoQD zZDLU!-81S;@W2QIV(>MLFaU^x0R}Kc!2k*A^aLbG>>Q?{6Iz=rr+-Ihv^LsKJm~$2 zDR@3Nr2l((1mmr<*FKN4NLQMN<)I*n`@r7XJNjQvm>Xvd{bj z{-SO;K(Grya9mD6g^~@Pzg3sHMaCG90rSrxB%4lyEOJyu*B$HvP`TG}S+#4@dmJCC zM6eN#n>*A)e{>^@;|O-+ARBLVvX}6Y(m4DR3dJ!~^`q}lABr=weS=kw6Q_^4?qXV{ ztoF^V3E*$FZ=ECHe(U~*E~i|jaxLrBuQ~}XA)qNM{TbkO`&-qX+ugv=b+5T^xni#e z(fo{?d8?|cLiHtyZDUGKz2Rq2g<|oS z`&pWUnIZMJzk(?kZ?qqIQFC4UaG2d~y%7yihd#>t9@Wu3@4vlUvpMW%_mUddQE!Tk z-1X_R1>aXyM;EpW6zO#;<@yrHuWq|j+P0)RyEh0wFS`E@7@lFhb0cb@n$#-iBb-6H zax~lo2@=j>BI=>0^kHTjSYe^pJR8syNro9||KefX5jyCv0|J1`%W+TE_qh=Ga^}m& z^G(Bf&z7opU<0<<-|u`s@?lpJ!iU2R56iUdfE6JW>HHQJm}!rz3PKS=H``mI8sbe~ zAFGRcsA-o6AZ3_=PiYa^MkQ4fA{eerowr-Z2IOC%rO$dVud5F8cK0TdcOWwNr-@nEMD$UrvM zOHW9jNWCnp|NdO3!4HrKD695=K?30F1Ty}%X)3M53!5@VS(5kRKuKyS?XcdrdLC?e zh}>E0namctBAR642u`pW1`~ZucbOmD8sgiq`d$55bl;@Yu`Q(|FLJN~?)Pr<6X>%b z5l|}m@mHUwl68P#*m}v zh~arJcRPVrXe?Q>U%*PtwboeGQ~-QL?O_8Y0(9CZZt8(vdDi({gw^~xZST16i;ioH z8!~F#c?;U0sp0Fi>+lI)i0JXlA!Hzny%(Y&8j*CbeL6N_r+anclXw-M<^UBz>b@=P z)(cKJSrgMTWFd#$VeNxo@L{y;}f@~*QRh2KOF;SA2Xx7S#UXha(F z&&`1uChFjf_17Q6Ib^s-*LTAXho@)EOUQ%WT{GcpL?OcT{;`LVi#%7GT76ItHN%Tb z!S?_FAOJ~3K~$gn=>q}4PY#eU38nx9M@1Tb0RM5yGDo*A&iyf@j2%WlfxKQKAPD>`Ie?K%UQfhnPei<``|9ucdtF+`_f1Nc z`er@}8H3nj>7|0Ru4fbQwCBT^@1+{FF=X`WJN^8fl)$b__YSCyZDAf4ONzz^_=*h* zm*_3J)%@G$bk+R%>DUUdO8`80@+a)7pxTLLa!`Ks$j_xF9?DDZ!C4pH^_fz#{Obk& z<#ylYJ^y-vKd*m1=Qtigr>A{=4#wPyhU z;3fLH;C__ikHPyKMH@GM`eVG*x5D!%>hr00R+BmNt`6x>)<;+{)$!gG0CfaFQO^2> z_i7?b1(@l=j{gU@Ka4u4A^k6F(FNeY;12KaUjY7+_xZO$Q)9Q2&*3xtFS6VBDX_zV zZpJ4u9#3Z8H}X5|#C}g?{D09DNrtRbu_fy#BEjdJR3M&QaZ`LnwPw_*ddaHq%ZNvu zvH8)$_fabOo2Jt*^B@kS+zdB^A;ok zf}uD6*k0b0GLuuN_O1TfFMvn z#ey{ft}GzK%N6DsD2_bv2m}6(7rlz73~e&9ltiV4qeX{XaEdyRock?K;0)e1Y(xzJ zqxAv_5n-iUuDOPi5&Mt*_3m*S4OJ?ifTMT$vU*2Ai=<=@UK$tUKo?P+C|q?+y?o0D_|e4*pKMv_Kkeajt2m3{~bh%w2b|czD=(N|wHq`h|>J z-JqNuN`C>pPQxN};N;+%s1%N^zt2k$2~hg=M$gg^Q}(V{0>Ok`0I(ilT`>eVdg@or zz&`+hc)@uC1^zk*$!sWl*>SMlqnLpyQoGDw=oV^X9<^%=c48kJW?HRGW&7>nUBU`x zC{w3{$8!WYjvzlokZoda*Ov{4;W#1{ckEh>$1KdLdxAcuyDVci+^BM><&uHF?xLjf zRU-d^%Fm@H7<8VG*ChnDk{weL0SuAdkSp19<~hvdn+V|Lq!Y2B?B(n|qbB28beB40 zPr;j5qpXkk7g?xgSd~5$NmQG{?dzxs6lY*0Bn8(l+Z4JH7CsBPIQBH@whOd#2GlnhzfOm!Sth1{Ok66)tz7zpb zz}tD}?8NJ}=bA_uRmi*s_@`)q|LvHX^VHxUa2Dz8bL$(}f#0H!%{uJ+IcYYs73PxFh;I#vH;)2K%t({ z?EI^r*EF5$iW51aH&uzJkHi~0K>{E+D$>wh+)SD;4YN4cG!r=b<-8-JH{?_Ad4l5# zC$>^b2lTZe^z09I&fTcqD(X#f#ytm@>Lb>Wf`9OXq2U>Is4K_t@Q48J`scluxt|Y1 ze`#p`Av}y3p7&$g;Xcg503{xYh^PBJ_314n8)~FK$zs{B&H*j|Bpdz5JY@@X-fw{V zhlu^na$L4XvsePUx)0ZSo4%!!CiB5$jA2teGpbHx32dzW)1E1Gn!X5G{3p-QtAT$| z6iNpaEBN&UTEjqhsCH!o{=E4Sg!=PB+{t?!o4`KFnRVkbjKmX4 zil>~dT2#jpe8wglZe)GfD^6ph)ocL%$vyp_Z|Pp@7&h?Nkt!m9Q*EBNW5@zrH=4)? z**8GtML=Bi|1&s;X66VMg68=T^-98GwnGVxI6(s_A$;r)cHaPA6N$uWW6Dd}^4baS zdB_SYP4YBgi`WnDgVj>#33|yD(cm6DfqP874?RD}`)RM(d*u#fN!oIxe8J7L6_Ai_&jGlxqE@ch4I)pc>Y zHF%#NANUu(D)3+(?LaJ|>0bL&1)m>>Z^wk`^T(Nt+cDgFX#Jmf5Yt_$!@D3Kc1$)N zgcTt;>#D1g8yWNPyZy!X!x0KA#X3i$HmV!?oVyV?y#4ym73 zd_6G%;OA~sh$2UHc99a-A_)=z!BLTbk-s66IvKz6&bie%2sZz|U*R3#;0O#b$T}Sf z!T z?Rbh(9GH#9QybIPowCx9{o#JG?^?XZRypIFzkzo!TlpsZVGszw89GB>hBRICP4V;i z3#fJEgm%Di&x47Fa0phMV{Eygp3CG7rs7*3D$;d zUd02j<-`rjhXYPLEbW2?X1u0+?C0+m-Cq^N(8(MbxyWOQ<_35NvvX(nd>fD8t}ras z%KurMQB6YGuVT#O$#s>HL*<8?n>iei5T>hGLm1-eM&v)taa+L-`E%IGiT>EuVE$4F+P0e zeQFA3%-DZMp93W_=sJpZuE&ptH%`@Mr_s^*ZqrrB#%5->Z1G<39vo!DOv{jgY>cJP z&>Rh@ztaK$XpLV520JAvFO?Cn2Hd7Fm4=$foc9HS=K8 z5F=l*pWJUJY^Ge=VvYN28^&OWam<-HcpdS0*7^2@l&}3Mh)0)vPq+Kn9QJe0e{Xt? zEOa=u{qN1u6CI>G&aWzdUeWC^wLMc8olB;MaD{*KLn^}2I&bW?_rroC%2aDSdy{?c z`J(nfszMz-55`JJM<#pF{0m#pwkd<7W>GsbN2br&hcv818k~V!KQ16jitalcq4acq2e{y7=Zz;Z1bxFyf1DTi`8?z!u%u*t{8$Oc>R@gy{oIy7Om)q*jG+Zvv=7w z7^6g0jiOlmW0-l;ffT&17$d{kAY9{~R{IAw99=zAVqceHXm!Xvf4h7;7@{^;yuQjz z=MJUb?g#3e(u+b$KcL&qYd2*BxE(;Yf52WS_cp!HK}w*1toJSNq5R1xFL}^i_!oQG zRPzH^jU4t+#C|kK1FUqdq}F6Kb>925@Aa>{TKg3a_^vd-ueUuUcb(e&To>{czCLVR z;9m&j5>SQayHDXQ{OB1U_W`D3vSWVhYRJYW%h0W-RStNOUb!B9q;Xj(WT9rp4yVJ} zi|j*p&l)$=HriwUaMuR3KqH!vs{;OdtIP-NxcmG3Z0t97GAC`=Zu*U8S$1xH4L{*M z<7>zJ0RTpznaXYu&fssWVRa(D!k+Bzqrz|=dz7x>uc0S8NXS?q0RHMCri^3fRk`S- zAP1X6zgT<+wqTcHk2KNkG{(`ll?i5;*?qL*p^X5Fr^lM zm2CJPi`;M5PQ-UuwmNP zz8*!rKGZ1{$$|O3n&-fY6oCNPYOYg4b;L_y+4HajtDKYTwYWe4Z2n4RuakWPO^rTd zxE>QT5+_tcGc+)4Jl!6XFgCR1it1c@Yk-77N(00oQo1jVyZ*!U&@ z;4?@i1Ap)QGXVi3dLGFF|ACcE+^8dIxb{O$Ebt;vRC358q==Wgk`g2Uf};WrZceeN zh?1WQwZeu{%2&vB$w5F9$o={N{%cvD`_{UH@hnY|W@V0&Tu3+nu(OI1$woS!>3Ce4 zNJ}j1{%Oaiu~Du%O*T*zA`Cmu*Ttg%zUS>Y2zMgX1~?@^0GlEJM&#RYX?CP+0t3&x zUXf#K^KF>5goQMMSZL}(nGIkw9L+nufID#${g(3?-A2vKt+y{Md474JpTSW{ldH{^v$cvV;w08$6VmC?3&21B*W$om1jKab*p?9yf>fNuStOc6(T3+eEt__eQ=8EiToTU3*?(|)*o*J$0h*qHs9v~&n}RE z>qt|a*sB+V1VC_HPRC0QkO+W)i4*mOt!Qnxt`y*3%I6*&>UB(=DbzUokjw_Nhn$mJ z&0>#(xmTMHQ7;$~gV!&pekRj&y54kn=g$SleZnEiQuG;G-68*+=gF%HpbmKx0wQo6 z?iAnmI;v4Wo zKy+Q{1dFD~pPC4e)b^el!xOS&t&O!|Q?iYtr=T@WHP$;h3?nd5vSl{G5cHGAW$yAm zf%AyBr*@o)m+-jzhJ;@9BRvw4`gI!tK`3(pOhC^`SOk`zQWAqmeC8g8FWE9rQrw-m zh8CNu9f}fO&wUtUj5yH~zq4!YPj#M&{!~?ZGxOS#fsv-VI8Q%w^r)swfr1cNFoykx zwrD0HLp?95wrA>GYjqnmp1siI@~b|VY`7Q6_A2e4gcTu_tUQ43Xm1#I?n^v_`^__V zg%o`M2LQlECL$tD(;lda>r~$afI5YNF$_Qt)2sXT;1N8Z`~G#;;1*2I8a-kmOfcYYb`VoBF?8*! z7tj$cjSrn*$VEQlP1O(vE6%tkU=$w8oITEoaD-A_2kDL^L94du}q)a9;T?;w(<$jOTdV^Ei(z106-_! zx8QzOaezPbZD&Q@8Fb6Ftz>;hqAnh(0{v%GJy(@KM1m9}m<&m9MbhsbKRd?0>DPg3T7Nqi#de9=e`t89fIY3k;E9r(9I6SU2$Z*U{(g zoTB9U(AeD8g=sU7MIZ2)gtgqtwX@L;9`9w^vP`*AA`k$z2o1J|-UT#Xwh(@IK> zQ05#cz?lW}t0=`^3jwG1bB?1OD1k?U?g!lBhr|xSns@iW8IT|WxR(-<5jt_{BQV2+ zPOO3VCqBXVp6e4C8;W}z@h$Gh9(G8X8oHReQh0ciANQz$H4iw*0-{Q2xAYNYTstK~ zCW3jqXuY(@@Vxu`A4LYTS-fR1dZL3N{@fcFhhe5uM?XhjbTOo!ZCJA1VGKPmI(Jw9 zZ;%H&1{)1nh>t>F`2Bh$pbCx5EBKx#*}rw~Vv! z4qIGR8vcSzWGl_Wn!yAk#wZ&Rizw;OoK;{p zw+oF>&$#~3!>ajB_Whm-A|Cb1vETDg+<7n2u4w#>6n(^<`hFGOMhOcN0Krii9EKnP zP^kzR7R+__Zyp5(K;uB!`~%3ki{_OUc*r^pr%u2xbQB>V1X4;j?;?i3)bk!J23WD= z(dH+h(MwqAC5EmvB0whr-~+JvCIDa*j>Lopzpqz-r{J`r$6=PI_pl6;uZHx<*pwIjkAxAd=E*eE&Z4$ zVF!KnK?S$O0q)WPR(W1i4Ya<{=+VOh>T;``n`v7Xl!F?!eDj>aes3 zgAEUbJ-u*R$-rM^H(^5-a@Y*(%~*%c&Wy(Wumk&C^=r?E11^?fc^NT?l;-DFM>{k( z{kqqM7HDL?ZU1MGKxm-Uf)Pf%?)sMlc$0Om^FV>WtdqDC6EJGK;)aLa9@+pdxRr0B zUV#-B!|{{70RXY=mE!ZQ(O)V0h=3pg5FA$&@Z=eaQjgNs5|AtByq9+VgG7LTz{C5w zph!%hMKJZYA1d{ZbfD|Wc4_5O6p2x4g2LZW5Zhyeiz@oN(cb% zPMH??H$Z>q)aLV9Ro2OIs+ELlh^L?2c`!f%kVO0Fck@R(pTP#qGxyuo0um&|vY90V z1TIihIDnz>c`1QSi{2eX(T-x#@oYBRnVmVRKKfD@!yTC~(F3^67;(HRe!$!2&$lft z82~AqlqzA7H0YEAy%AIby{;GVsv}4Ysq745vp&6z(FhDO4m^GsD=|B?+NwDmd#jD8 z%ZCH0QXaNpkLRgKHzs3-ePO#Q2!Vyhc*5~JJ`2rWbmGF-J<0w7voZsu!uFBH*AaL9 zsr8-6K9@FSN#}Vr>rx1C%a*{?8@Z#Kz)aPgXCDq{N00n3oN&9BR@nn142Z*fQy2M_kySOMe6bxX!bpw1j4`20(CBWJjTlfxW-&HW=R^_`J?am&;pDz&|+rBS=VH z0Q@qy~@e?*Z6x9C84&oHRm1lLnO6z&B9jfRu)Djqa_+k z6{C9O;zuq>yf!Z&1QC;%wFL=8( zB>O(j+uvSI=uFe;FZ=6vDX&F-S+IeO;UDk%L@k-zJ~nI8JB&cH2r=VKIJi`V8U_ z9X4^1x{YPw^raSmo}?~vDhCOG;Hba=)L+0)Wqm&04kNE!2d}uGTtOXu*-rvSG;e~C z>#MfdnNC1lY9I>V4r;mW^q2C!%WPf9rTd;{{(1AP?ozi6O0Y9ETCuTemceK6%YWURqIR*_|?~Og~nzw zxn!VADa9RH##k1sW~YudsR=Rb_SKO9fI*s_>13Km@0xDg|1zeckG6Om5BO_BvN>(T zxWK_rIacc%4PcW?o;UA$R27#aPO(DuJct0lFm;6|H@r4zqV=pd*Iz)Cc#GUgn%AD_ zU}%yiVGj-|*6<@(iZ!0(Drp4-KpoXQYUlq#3P5A5!g|lERUSba(v^*tNF2e6$X4G^ zQUOziv)+^a6cj%RC5^v89Dh|kZ?bPfz*|gD{hWFBEIF{pDOVSoYaXf#@&VbpEkWx)co^l{dhg5!W#M1^$P zdg1lJmT=hNaQ~RN7il=3J!}IwXCTEq_ z_p`+aQ$~f?rsBjAbjtr#KJOP11zE_!+fqGLM?7_R&I15E%I0h2F$Z~=OV-_>b|u>$$ow;!phJ{x-fBY9dkkIPXaSz-xHj zH{cSsl`Jbc;Sox*;J#!IktB2cKHmM5_Wl%s9!&8~1VALOykeFj0*{9)sANJw9SLyJ zj{iAixaQXn$8H?RsXg#8sv^#O$H5tBh&o}b{urV{E+DuP25XmK!q2?EXW>@Sw(8CYXC z7GedfW4?u+r6I--4h|6jEch1C%MOIf{r6cuYI*)w?Rv7}sNwOG3;ZJjgb@-~Ip7ci zP!SM?K8NkH&2w2jXSsakz~2;w3Req6uAtAYvJNdEGr)itJP!{Pq~k@HVL}r7%=`av zgkqpl8@b5CZ_<&VjW1D8advWx01Hi~9-(J{J;)wr$8&28`;jq>+|Q^b8X2z5>WP-vrSy!v8}qQlJu=#iR*nDwAOJ~3K~(V- zbVeIP*7;?qhN?8uQ8X{RuwPjbxfpZsvn#vKa>OBu9(Km#4%}qgx4*Eqgj6z-qyes+ z2ot~Uh^%it=_UqrMwIZ@RcQ$T-L;L91@HB)V-fMh1NssN@E3kQUG=#E(TFs?e_}QO zU+okP?yNRX($TLFRS1NYaEAkj}5wF-_ej7;zp9AEJ2O#uiJ z0Ksut9e4FiS&tvYxX)I+CmVeQXO=dGJ;k1!nHa)%TG1c$r?BiTv zb2fD-e5Lp%3`8t>9Vd}O#Y{R^5v?TkMiSna2yaJd2L<$eybfAi#T zt~|R^BT~wmNRZ2U9xK?o=E-?!9nh-?C{GI1Zhu6}@8bP;lHMW#lkd(!tAF);Rc#W8aD1q7>u!qwljr>{w3p$nPP+ z0ET;T25GE^xh93t@sQYc|DZ4KmP}a(`~&zJKqOxp`4*-i34p&)ZaICI9a``fny046B~8%FBlYvmq6qL&DO zPQWh*xUR~m2%x{~m|JTnP~b0faD%$W1g{vUK?D2?0r@#(IOo^<0tOiAsIxlUaI>$h zqhW-RMmss(8N6e9@pa{`;h?|@i@E#$bmSsGuSS;wLW=rvhznV*SAqmUa8y7?RHP^Z z1^n8S0eS-WNR#rKuwGc9%(vV`8|h_}V|Q-Z-d}|QVu3pDMIq@YaGHH>XbCC^vl~i% z$>ewyKn8%$LEvAW&m-VDH3*x^rqf< z;mN7GNTRmOL1WaHtXX66CZ<`w+(-mWv*6!UC;)mAp#z5JdIngLj!c$iX@;HHuRI^Q z1l3TLp0bDFF-)*Lu_GCS(c9SR*hpAl#w7Qr1;6u8@$2Mv`QY`VS4ugL0wO>|q^SLA z9#NoIUzYj-2e^(|$%I6pdQ+J5U#PECJN?Aj$(L-1Lbx&S%(YP9L1WVq*x^*VMx`PH zY0fIOx4{9YXH)FG$b;QAqS^siV3ua)Z$cx~je6sUxdrEwRQN`L9ZuK0I=6s8l5D?V zWj4@zs_RVV5CJK{Hh{rVksMQQ8yRJkve41A>uqR=y13U9g{|0)$4qUd`O+|pbM*v) zK+8Ib0$yKQ(f=z;|7M-P>u)Uvy$0fnX`5I^`Tho8Hd@Z679VcUM6o`1HzgplxA=axGWzb>nB- zL?3O}e9JMf8vug?PP`@cEFb_@cnOB$>q%#Ox^k0mfBif^Q)zXlyru+Zhjjm5S=lF9 z9|0h7iu@IZ@EZ)8*L>KO=VERKfiQ?9Y{0h6xi{a65QIpdUq=w0BGR(9ofjWOKm)G!R@rycm%PC zip=@`Q2;=!JNm+PcnVSgyzMEc6|Tb|0T3J&NTF*KfcJCOhuK{F8~s7cDaDkuw~r@J znP8XtoHK+vzhF(9sKM1N{9;2OKUpAQjD{sOXx%JJ6Ms2oSDQTgkvo zSp1hm)H6Rr;LB>1Stz{T_Q)xvydJr7$SV)X!zLgCNFTA}qX=8E`4zUG$cLR-caJLFUdawKm+_!;emp&=CxRfe=@$kGXw@0*x%Av7$E^@hx*ywW~)-OOa&u|EU!c>)D3P5mFq``BfNM?=M07Z`dmfgq} zIF@wHp$LqjF8TN4GXS7?-v(dD&c6{&6m!*M%CGF0JFcc|7$D_XPcEyWT*LM|m$z6_ z@U6d8hJi-}a1@@5|=!bT`u2sAp}w);3NS2 z+??bTfn3X1#`;ya)l%mmlc+6PfJN7?7~n6ELrt4l-h7Kf-&x7PUtJuJJO2<63xVpZ z(iRWZ`~A{ZotG=8e1fO9)Tsg76RBQR?eEm75u((R3KQAmr(I*0s9Qlr^`k_@lDgd= zsjBrC)&L*__To_9dtEyL0DF(F!!_s-eqG8?rMV!*QI>erG^D<Z`eb4p?L#SzH{b;!0a=u*a1BAkAe(pec z!SP4+`tv~oAUG=G&=_9nJ*lhZi?usc0vlgSAPcy$OLCqC%V!fk>su~Cdm5&^7GuLU z*4{I&>Lj)vis%07U8p5VhIdZX(??+Fc9bud!z}nco`WU=`j=esUm-vvI7&9yr4DJ= zD~FevxDn;xiz0KlJEejhYcKFp%Qp#tSxP07PtNt|t)8uZ?>$a6?;5}vVDYLeeK1wO zYOj2Xa+8?=z(GI=h~`&BnA!B{nU1+dV>9 zvmxleToQsqWM{!CGO3AFmN>_ydOyiRuIHmF=Mf64p-Ser0DxQBhvj{pWxl z$cNpzu+FE5M7X8u4hNzT9y)N<34iTJFa;nuE`y=b8~V@7$>JI2K-=^ceNQ>c+Bn~6 zb%#`oHklvX@~Oa)fIbJV%y+&ou>(-%JFZu|V-pJUE6^dEa)v8zHbrJM(6sDq<}U?wN@!GQ!UDf zSVV=yY#WPQlyJ-=%7 zne5-ZYv!LbpSta|sEC|Mj#B;mzvQo;vR$J2m#@(EBkLn%)URB5mP=kwOfKL1DKkAP zSB&R#$=0>(+mG;<7!t{A2}C3VV{54^YNMLvi)|9ue#9Z#Jnq1Bv_j+P4&N+64J3r# zvvv|rBQ5{gwstTuJS2UGB-Dzj_oW*#h_ps;tPOy%brcUPtmeggT9v$xd3rRM0uUUR zR3Ydt{=);(Iu(rGs-dFeg%JdP5(Mgb@VgjKc^izd8QimM-o71ir`0L!+Bnb2*hX~Qki}w9Jn5KkQ_27L>m-5b%VBTb} zJL7x)m~XwO$?ZC;M7Z#5!&?i!|_dS7-!j2&vp+=m#8%#z%$m4^Tnm zQ)D-&WId}pqD=Pvs(T2C-b)p6#gzO;35ED++L`v^DD{);P0|)KF^24JtA@3h4Zrn&Hsy^KUqWs1POrPxSR(561C$I z?%)Ud>hJJ(C;L)6h?mO&wF!t5o&9QqL_p=z3*;wLFYNQo`+q9u`?3Jw2IzS4LicqO z0RaPi-tVv%*&mL-+TDZ3sE3uV>U5m`GCg(VE3Co>w#_<{Rb%7wC-rTCYUt*Ev`!}H zywC|?^vbbKr(=An!T%kvb;nFyfsfWC$Z;Jk`}KUZ(bI`v?n1X^V$ z1Of#9W&WC~&+c%EgK~aOmuz0-lJ$3)5ga<#LBP*XAg_{5A8~ilID>T8>DtF(fPsE- z{iFi^Dk8x9s+9bCQTx6eI?$W8rMy}fj_T3r8cE4m;w+Sm(#H8Wx{3l7W>=% zZ|#OOiMklu9@#4Z_$eiSE+htcj)l(u`R2Xk zJA@o;Hmo?=g8rsWh7%`8v2LubvwG7StP^XcSi=WV@t;!9M`4IFFN9h2Jk)Y+^L<-> z@0gc0;1KDfluINRSF3)Iean}>L>kmN`h~}-LU+CI)sBBE&pxq#nKN%|-#>5~=U6lI zC^}2)LJs`{jKvLxq%)!v8=fBG=pXfQn$#QU)Q9CX%1lmqfM4P~S5b`yjvdiFSJivX zMikGEaJql+o_oM4XF7=x@OHAH&)z_=?lkj2zUQmV+QiC&`?cxw6L`;A_+Bud7ma8{ z7`{K#16jy%Ni}+4J+@_!88#KI&^SDC@y#&9L^JKT7YFWz>!7e3g;MytiU!C#;Brr` zvL6C3s)n-e>{IuanuD>D<{G+Z z}q{RBEZ1`FdD!w2S&t{IU!J91Va$`mug-#J8&Ys!2|RpAOwo8V<7HyW;8y| z9$>O7qFzHZqXyDV`4g!-HIb&~oJJz5&`j5LY%F^$Z&Kg>1VRM98C%>D*AQMz0Q9M3 ze?%y6dWi?W{W0Iat9v6u=eif!35X)U)cxDlc0?+f2x98oZuR@Z9bMJB;t~NWyW?F4 zN`QV9&yI+Q=G2nqilzGYyS&epV^?{EK$+Lp;oYz79|6b%{@&l=tuxL#WDJc^&st~A zok&6*>)`bxu@e7eEWP_Dti|R`Hs(QeK#Rx&->ricA=13eMjU;nc;(6kw{j@#1PDZf zlqvAQqx>EIB`gTD+`V&iae!Y`-M`>^v;;zNJDU=00~j2a!|~Va7{imNOte?+ooV<@ zx+%o5W&&=+Kx8?;^=wrJ=6}%dRzpi^k#*wlUvdmopnZVhConC#&${TX{3mV|dzZ~& z3q$XsK~&wqj_wu^3H}yakt^o&6#^tts4)DTAGwmxUyuMO(Q)U8S}JcUX?brBtVO*k z)^y9hI(P)nD<4F+#R{xrCoK1ngMJEmYjum_>x8kuUj6PHE_BS819jYO>buE;!^TYq zP5#M+AH-Q-jPs1Cwv9!xwyxoI_hCJ@v3!dK%jk3CoRiJ5mF;FV%xka!%avzBtJ24G zS4h3T|L{F;rA^Ti=|6uXxhhLq@ zX^T@ho0r{v0tmz!n=;^r$NgQEoiM{F4Y1ckEmVuz`|&gm0l*^!H0v@L0T3LQ5EwEJ zQ>;-qUcn+G9WXe~&QN|(42~9UZ=f+WOlp(Wh;j+W{U@COfQceQrq?i$zd%&;eRdO@ zq@0W%&P-_P$&Mb%j+8t)~ATT#dze z8c$)Ma-Xs$clqFnYzZRs>-5_pT}xTk!%M&A$T2Jas;NFM7uQF6*Ix;__)%H_ zcnv=rZb@&T3`N)c9{uC#0G1h}jxD5)WHtS=d!5EHxgRM?tGNH*9oVET=k({2F2m=B zIVW2X2nL*N!Tx0~S6q`^JiwAX!{cs28*HLu&Y=ase<)|3WWl`XBq+$n(bJqAPfcV& zX{)8nK{>3A3houn9-5Vr*3FxOgPsQ*Q1Xy>G<6k ziyKUB4<;ZHRcKV++ekna8kxu0an?kdC9CX>`o1~(On1bb`g@#67k)~MYN#R~3U~g! z*C|SIQFW8io%*2HZx9eaP}TI{%6Y1Q81XkEr^rs3V5AQAFVF~e!-g&&g#$R6yQx%6z#DHuR(k1+&RSPjS1jWEJMwrbf9wD;K%b!nb! zFWpJ4%#UwvM0+t8Yj*Wwcd@7J37uoG1+SX0N8^aF(=5jMSA$JxkH;{giG?=MOCjI= zD(@0F`hDkh2mj6tF(;E0&t^vhmR+Ju!)F0)%R7;S>sr$>;dDnA>4=vC2KGdPjVU@0{%# z+Rk#y3nT&gnpb6?r!!v3Zcr)rYZz&}c1L{74qR2_|Gv!5Z%>%9-Q}6Vr z3J5KZ{q&y4-*v~kZ<#~*5SJL*gq@DXt-Iqa(mfLswxBWUnbY?^fjv0rc&M2P1{iUj z(iM>ilWJ$pMSHZc)><=*Lws@M&ii>0;0}dVI&to6v_PW>{BYsp>*x?RVEg&A_pL(} z#F#VoDu_pH$mA{CVTMWSpY;k1Fwlnlu!8f<^bO=SJN%-Zf3IB)5&*$*IY$b|VN`uy z~u&X7GOAa&;J%tI7PoZ_OXxHzwYKqtLbiPYuvs+x@;Vo%1)S7y8D7ohmPZ@ z6n#$f=~2tIn~t(xEXDCy`(ErJ*2J~E<}I`niwv96XHXBCZyvL6Cnn=gWm4!-+=9;m zFa4%=NRl}~KUpQ`vOa)Yf+jhHP}k~)GJ4`us_tNT7VjuaqQ5~hUQ-M)NAMp^z$>01 z8e;4SYm;~6+5=K9wYPk~TU)1$iG1TrV}EouLyJ_2uX}5ui`OYj{T5 zn#MTC$pRvP2k-^NsU-Ub^r9UjQIRyJw`M>^m$xfbANZ*!^a3BRz9`Z!PhqC}c+GI; zW_9hGJ3fU3bj3>L4@{)dM*GPVAP_)%u#l}#K8tF{mb0`x^!}3O(Yxk1_J=~ogT|UC zyC4Qpc-3t~6C}}1_TA`?o1HV7Y{g&r+Whp+78*JCpuW9x*D&0ReTJE*e<@i`xa*&1 zNA(V=WcwIsu|PGz_YxJn$OXLwfciOec5HbO9Fi(`Uz)BV0_I|Y`}W#funcS5bK_l* zAYmO8v_vDrUD?|)9wSU`4!?yy=we7s>ka@I#u$=NTk4d%2TQTW-6)B2fLHKj2-X#@Lq+v`lR57LjELY8U^*jVNWx;Qa!qbf2mR31H1NPC z7+}D4text4b9Vj}^1YrFUU!sIMm+G=6*o0VTjl>1%sRj8zwe+5Vhl?%o&^JAKN(}N zA4i-+8-0mdsAkMK(G^)Z?>QM`!C@R%ltvxU3Qes2H!Oe&M(lR}!jWSYQLXkfyz{9h zdK9!r^O*3rI{*N}3qJlxZHJl4AJG7RrT9GZ0l(U>2@(LoaT$gt4LEs3Ta!Jk$GhyJ`BayA=oP=-ANy89IWOq<1rh({#Gtbj_aV zk{y%FweugSgQhnJuA(^PhO?*NB4CyQrz7ze{${nU zHJBUZ`lC@CH3Kuv-UHu;UbEvQA_!9a(|bNr9%9hmUA^9qYz14V%nKcbYE+e;anGl! zNH;Cs!`tc9TMSK9Y)WrL(503)xs1Pmh1vzLf1p!uXm>POI;&!TtBXQ=X`cCqZBy_R z?lXRWIs!+rk|x-rP!F{z%yk-j=wr|EgiO|i4RkDOzMOSn!yS({n@KSgW$b*+djYhN zW|@^e(QGig+ab03gFrB2CvX%eVK#TeZX8g)4|xk`*sq?rxL))p$>xOZ-{4)O0<=H{ zgap8!s~Y{$h972FoYXX`Y4M74RI4%e9v*{ENluQVSjtg|>UpH~V1E2vGwX5t7 zp8rK2y+?MXaATJv9}%$A*yRW?9ROHd|GBYt>;~6A zwI^XSc1h`3XYeKaNO>n>FZ&h~+|m8=@d}=lPMo`m7Sb%^KPP74L(DMrI>XB`))@&P ze1Ex#x3c~n`N|{&H2T7SLNOhgY>J@)CSk1c=CeOxDEdizGiPY@#}te=d~$jqfe?x_ zGJA_1$-RD1JOE$;o9dO5|KTyy)MIxejykMYD_;NrAOJ~3K~#9!RehP=%%)_e-7*$+ zP>nV^-$N)uX`qsYC+HTV2qc6e1k;r5u)~SzhQbsMH)s8& zZ~?9vCX7+WArw|ha<>8i+=H$F4?*z01qbF82Wo`?PE*}oXWKyG&Oa|CzG%L3kcW87 z&3GEGydf}^g$Psd?*|5Kn`oMa4KHJhxxsG9Kd(@&GAjkX80M)9d|Zc zgjz^6w9e{^r*L2B1IvC!2edGz9-UYma6)Gd1nw(uUC6!(A_#K$Ny2^{ao4Lm3XzDA zT4pDr36jj%_YMG{0qs}m8M*-c@w4~$yP$1oiMHAJ}U0D29;Sd0v9e&NL+TJTc0w6dpBaje=)~ghO-#c&q0{^mhq{_QLv|PcS zuK>9DO|;0R`+r&ApWa#!de?>Sc7>Ok2q@#4=KIcLXPJr?Cg+(iYP@2diNunv>Nr8LN@)IZ$OeTg+CuU#VRUA7X}K z+S!FFy^+FM|2heRfQf)hELTDzytG{ot`I^X0KIz*r&u%dTlf#|m9Ed6AkZI0>*Ng1 zv7yGb8ac0uSj=~QNWg&*td;RKAq0P4keez6@^c(10FD5R6(sxpQ!>!e$Q8dx*<<*h z>r}ma*;9DM6;|(aMB*$nnI~Zjb7P*gmRgY^Y}jwJN=X0!KVq?GVbu?@7l+x@&{T9q z8|jA3rRa%{(zEAP1OXGY$5VgKeU2(%&nxnFQE2}z9AKdlU*H@vSc2s^Y9fI~IDf;B zSmMs8_BI~I9i|TtKjb~$1QV`f4Ur2wZkKK-IM1n)^)#=DA1N@xfKF^C-0)zX^dbPD zJFQd!JQeWQM4E|+Rh>oew8e691Sga~q7L8&+?(BP)NUAI#OvsW$rx`zNhb1K;4+>~%v&pcgt>SFD{~GQq^t%PbYQVrX>k zd&!uK1?RWjHwc~4Iuy$|_MO|^f!F0hMF{YS0!;*fT5lznOa$=fUqWyM$7LTZMIaz$ z1^nf*0amP(jwGw>ZLDODBU?s5SvPSIXn*iP0XOG9y@rMJ%9{tW=>q~4<+-b`SMhiUVkQq3bDZI$Pv?x_K;nlzr#y*mAu-{o*yGf$9fdJ0!v9T*rZt zLcdsFUpj&skkg#Hdz{YWc#a9@bKWbLV9?(AT(--R-=+=5V}yjPTX83Dk|^tbbVMtv z;rJh-5lN$!Xw1U5N_u2F!FnSBP}04AbOLX=eDx&v_idc}(<@&U-ChJ}ANA^eAODX; zI6dHLhFC=5|Lk37U{pode$L&N9tZ@2^xk_f(mPV5BZyQLLB)b7CD}v~5fM?Ozkmvg zNEMV`1nIqnn$RJ%1k$(N`F@ZDa(5?lcT@S?`Lo%Qd+*GgIdh(8PMK-Ft$LkY#Vr=E z@1Fj9W%)L4R&CyioJxISfAY`IXqfcFJV~PN5WvNwrK}VIVy^ zGBaDij>Uc1cUy{CFR6S@%aYDw5tLY^eMQy~y_0X%U&wq|&BTC~16f_Xn!KptRTj<= zzvR{3>>51dP2Dy+c^|>6CQR}9=YsDg^u>Eg+v+8-D(I9jxz!J7f_{m$n!blw_}TnP z>Bj6Lw6OvGyby#Y2^HJ^1uZnx0Ci!3g>9DZAsHsj)(p&8Z)BiH2!sI4f(d5KmVVCM zej&7v)Y==*U`ziy5uso=K1^jlRc76P?!>Gp3eya0BRs-m)}XpF@~bO7Q%-o-;(PKB0{D9yv>ZzG#Gi${2aOSoAP_ zg>l;Iw_3AdY*BpeUJqz5t=Td1*!5r&LMf5m{3+z*`kKlnS zuxW+^06vtJCvi$ZFLU;%;EeSG;{mv|6J9o%ZH)7N&5X`yDgF4^NNez;-sfTyB+)LA zrV%`GQ@i@+C6tGZXnM?iDSu)_D>GZjcEx?%X9|s^I=e!e>A1FnjudLuvX9{2iMuh&N4Z^NzZCjjU=Dn*D7;) zFvYY9JOI+2Ua+x_yeVU^`du~O_uw%q(%$^NKD6(rC2M2bfudqeXjJYXQ$mU73*1{qiAB$AMX zv6@PFgeNRcn*;)(IU5EoG$@y*R~9=4XsYEyuzxCJ-x10M-pMdwthO62VOzeI3unU< z9;hLIq4>SvB>XuKtNVB)8+^Y-2^7_Aj46h>_$_f}vljRW!@RIVk=#(31ko<^LFImD z*Kc7`5M0GA%eTeaV-iN^51#7_0uVs?91|Q$`QwHVGqgctpNMs1@dq}=c#T?sBqTGP z&s})JgDkPejDfk#JJIKb0th}=J}2W0VWrTfUGtgbDgk( zI)JE}(GAU*2;eH@tR6>WCi|!IcXqL!N`oMelrdC$a?dNn`kr! z(ZTqwG?Oap_gs1zPuNszLa|@vv#eaws+Xrr)#!?6@4a?J5&M9xG}o^_pZ3#A&FfK1 z@Gh=s-n%!O1!1WzI)5eH#eU7iTMapYnPm*HdF!25pIhXb{_GzV2DE4$D4BnwfG`sg zZ5)8fOIoH3VIYu^-qS3JUco+KQ*54rTBc={EZxiQ#TrB+Kl>6UtdsI5N?1j2Xgl0p z2w*Z=Ac`YrY4>Hnvh$`zwfEA8G+Z+}#uHK4uQf&1P2X=JA&}dEKh!xr0&oZyI3_fN z1mcTI1PB0snmne(oKpZj@ECpYEOy`*OP31M*is%9l8-^%ypT{TX|v{~G#;n)_A% z{gz`n0kK0YA^xYXC-4^a*Ot1QAHWq|`)ij|zHfwn=%T@cr_cKUkLV)Kc#YUy1a+ut zl24;jcmqAn?^b;Y3o%9iLwG1hU-Ae5MfQFQQ@pp!_RkLDl-xI8Us{OI4FkjbAq4O0 zn?*d$?a+*-!3rz-Np+xw77frH^-*2g5?cVZsj@uYyFKnAMxO6+4=vC&!PeY}Dk!J% zjz5mq(L)<`t273qhtBuL;I#SNhJDs@h5RuKOU=W}y@oTmB=_+jhcYNm^AZYS1p4aN zUY@Dwx12Gd#r44A*%74r^Di+sIe+6lD2^gh<+#^igN(z{;grYXCEMiy;pYg~!YC+t z$1~i*U3q-Ib7+W~)au3|FfeqIK7Q&EVVj=5|8|6cpr3ZYR?$zMK7FoLLwWt9%Uv-I z^B*^O`w2e9TluceFPSNI6OFOhgTwK*&g0+*AI+Yaflq;dTr2Y?9pa{+#c zb9M>8xd{Mw%gY;mUIEnEZ8+sMgN)N(r<42{)fu=>H=b)#R*$2gd?DA6&uT&=r+~l8 zlSv}y=2g8sFov?$-Ng=51GJ-C=D9S8WZmPd$>@eQ)GetBS;?x4jtEB=HcVdWYhk0= z4a<;nA5b?cp<8R3@v+|b(vNn( zPX+#|_i2JUn%J0FdJ6+|y>G;`$@tE6rNXQ13U090UOK7=KY6}&8kS&{Wk>Nv*n+*b zK7mV+3=jMO4F65Y{Od;eA;v_eDek-M8y=6$nb-Gw-o zm(1EDOhJs`*=tKQ)Gohy3v;kMxo_P+VS|mGm3~c`#R7tP;1IB2kil?;F5wll((es# zi(NQq{-HuUjK)CEfITw=#D~fzI#949ChX^%@XC{L#&W0IE@$@-Ws})P%iEOC!{k2u!q%3@9gcqX~w$k55x>kkp+@>i)dQ2sov~g(;YqB3Fm7 z%JwAaL&pX_HZEjYh zDE88C+I6?~qc{?DjV>3Vi*!|2?V5q@Wj9PO*PM<}yl=f+{4sW6nYR3m8l3Ag!TQUh zTr48sZ}(oUYipQeBEardL40uaNM75=oO~XaLv_;RlX_AauirKUJu%+_LCZ0)ML9L> zh&kn}(eb=d2!b)o`eup4c)-55>WX)ujkHid`oeFxi)wTu!87G|e{t5!Gx@5AS4}Ny zY(QtW)}|}`3KHow8yKg5{e;+YMGbg5srFc zZ$X%;RKo9VFXC%_A|LnNgdS+8!NV|>KramWP$#iqo3dz+W}1T0qwph)hKTc@!3SQL zDVK#OJTOK!vTfLB`>Q|zeTKJnA76bMyY5TLj@Q+5`syVVqCUyMGJNBKlb|X%XS?Lr z6G13Q(dM@>7|pet?!SqpSZ&!+VguWV-R4h%qF{g?_2nO^0!m3q@kh`Vt+jvLj>9Jy zX_y~=A4O4^S|mKJzS2V8lJP#mBa-Yq%tZTZh(aGIKbKGxL6TQocNm~YuS>GK-ZP#i_{r6LZa6pHFQpZ_l9 z`}OJdgecbzH#r}#N{@^Cw`x1yO#rxCo&=o6O#XjfBLa*${QNmI9zp}x=pS91lQhGy=7@n6VQ(bgYc!snWd+Rrs>HH|_+9q)ULiFg=B3&GJI4^`m&ZAQ zKQ-UqX(9mpyx988<|2_5z>Iftt9G4m45-W+4r#yRJg?J40OQC*2nV1WQIX2fS+gEn z*+F@UR|)viHnz>XFFwK7wlW2W!w4|En zAni&RkIih4t#kenm`t6MKdbv1c43*vy3_3uhya|oT;uAQQ3y8wQqdP}*$!KL!2y^= zWp$&rFW`#vCB&eyA_i;YDG4R$$E4!;2ZwD-1LB!CYQ#@z*NiHo zoOC+jZ!E%>h6CYVG!l(9jiX1RDiSePdlyMCp{+Cwo-kmHY~&EG&z^f14%&V$5Xp|= zocyi-Z{&#^z9-jR1OW747cd?p^*t_xJbiMuJLUhzArg2lS=-a3Gt=#owTY6pi3kA^ zFeZ*&Vt*1|5-&+DV>iGAGhWd=o%iuHHs#v@#{igdLI51>ixcp+_l508@hV0?UN>w5 zr(d#y=zwE=&(k}+5FhUPmh6ZDPk2zf%Jhn zI&<-QqR#=kOFwxOKKK#41z)SK^m?fn;tb=DtmLc@!Nw~D{DPSOtRgIxz((yjs$Lf% z*(*=n7;Ij0Lu2~4q$rbR2Vg@e2#+{MP0i6{l$Lrn`C}5CPa{ ztFD;;XZgz2oIJJ;PtWrGF&zsnaixEzzBpo&11yknL5}u4&01klQd0fL zR0o~4!|qLF^RdE`P~4CDfv^OFu@F-XUC-S@VHBj2rU1_R3C2XsG?lK{fi5D5K1(v; z5dhef1kYp+kejS{F97~d?>{`EPo#J4fv*iR4&yRPp_nw{$!Yw7P38p^N24Q}>n2B5 zRLGCfF;Vs0^Vwj-W@?BP_{-F*=3{Ka9@EfD`QQg{X^iO|0KfxLQcNKsV03Q%gA=Nw z%$35zFc`1;e)~r#X5fD@7e?R094vo)Zg>e4LV%`G%r-ngjMY*o5`OTJswRE~D{Snl z;Sd1EZfWPB2ny+1-fjZ`h-N=>^aC%+BXbPwGkdU*bK5=2p=I1bG(Q}Ag z!qdKItyrifuu4~YgvPYZ{1?8XhtjG?AIR0^6-oWtwW6`qRCg!hO&U(MwRwI>JI zJ8YSGRt+7^p+WlhPfv2Z@v4@e(2RlnvkOx(#A&x(JCXACM8@-_*6>oBj7fE_2`AT` zC}co6POcJSnGGos5*8f5uQu5s*FykQ8p-C5rQ8dW{HY}XxbmZzPYR)6 z>fpQjw=gz`9gd6d^8=GuorImODo`Tb@w&0c2PN?ml`u_&5#L)|l?a3e8sx`g){~7k zjjc@h8{2INXhGwsrQg~Wb28SG0M6hqkKsrD#TphFH@44hRu;DSVqHqnH2PToaby6F zBV4}gD`Na{~vY7y^0RFVo@84pv#iL|zJVq?*s!OC#FjD7t zJq|PRhOXkxc*tOgriYL~2!IjeFj6<-x*p>&QitnP5sDuyL(3M!4U9{EP(2!}G23Is z$s5!Qz)G~jS%k}X{G;$Mj@kV46-F;~&?3r=P1s`_Snx0kqX3mO>7IrV*y7l~IBI*4 zzb;9L@a?xQTmbl4#=xJc1pd6FvRRh=TB&Elpn-%2@^TbJekzspFLvU9WlhOO_#gf- zy;Y+&hNF*R{^=7OJq^44@mnlOY}o7}HejdOuSy(Rqp_}e#8?>duJ`QC35tI5fN+R_ z*yPy{5=C`YBdVnU|BH@+KR4Fj$RP~X0)JypDO@)J;BM~r;t>Y9+(c#F$jBP8KDO5i zd?D46t{Oa!R6%PLq)y4fs0bVT-fJ~Z<02cbEf1i!ctgl>##B_!F?Hi4+Cby<9nOFa zWsA(LYJ$|5qC8sf`y(Z< zz0>vxRUzoMM9!hwq|-)3@-}iOa}4n0N(6w_8eqa$UbXXJbn<&=34u^`<0+J1PH0QE zts@>l;}Kn<&JiKVt3XyQ;7`*Z>_>Jexn46c3oC6}TD2O5(z_a;2cMxenn?2!0`LZ2 zl{!87nz~U5j}`}&WdQ|5ifUrfn8)@bwM2jj5Q%bb2=u!sMwjti`;`P4Cuf6F?o$D! z6in|>17Dv%!q|LvG%l{s53Cxikhq}Lmk6Q~(#iNvD8v4??G3zwmef${8ao@O(Vguy zjG}SW($DzoBgeojt=SPE)RW5iez!7|-GXnzw2o`oOlT~_i|v3fd}y*Q8VA|(q(${M z;Q>vMPQ|}Q1!46Wx?w$+SX+l}He(>zW5i;o_6qr8n&Hg33IKqBv~f}-@q2E*+o7qZ z@uPD{f{D$R`lVcVBUWR!N8b}W;f3l61KYpJDzXlV171#`qSQoC{1&>zDv0uvJQcl`lVF)!)wCcrezPc$`+LJd^Xe)wQJ7GbK-s~h_wAAG58 za{aVN`2uqiXSckDzp>jitnvj+!G}I|H!njgG}86GQZi!#M3fv4YCY`)`wKV8qVdvTky$>>;C z#d?YiFF`r8=Ug2>p^@}mLWDd=UT*rno(JuvC)&q1^lTrCwH_>?m+ngMdv4k?H*Xo9 zb|;;@m^(WlLQ80bp3ZUVm-B#YPKP)M`={(DvB7MC`Mny|s0}sN8Ll>_!Bk!M&7}@B zmF8;$?=)be*mkqI$`Qok4=p0q0#u&i&H<35)vZ>kF95I!ih1GBUlY`kw#69m5CzC&PLX@IDD6oTamL%S*+@_Kj1c65U*hQI zcTo@3q<2{DM2U zFMs9V7yZ%26Ma5s0$egh_(fPYpQR9XMSQ3X%{03ZNKL_t(sQhwTJpyNw0k%0FB`3x&-np2-i zcclo=m@TBzz{+8T$xE`sI5F^cAp#*B15c#^ncarDusoS^gEgWx8j-=|i(t%>WBsQh z32oRw?~?31BTI+U9Z&`((88L!kDSdUkaac(0~~L(uEzT3xJw>qJ@U$JipGmOzL~8b zuM#l9$&*>iqH$H78$sZapjO{dsB`k`AlctF+-5K9`%nbU_wKwgQE`KwIE4*5L>g%l z&6Hk_8^fxyO$h_L|3&BMd++7zI%nLkOdHrQ2oa!G{IIbp8+ zqoLy{zdpUb2O04V{+IMg(`7h=i&noPUt=aF_!Qey5{*zx z`@{A390Pn=ZO$E|U|$B;{>Yl9^vp75Y(EG+7&z~hC;WET%jG23ZUVsF+$|3_61hSP z44Eu*?ad;^WN(N|)hWX8&S9tjFK3AWu8XPK`t5?}cDg*9F>B{V)F1ozG=ysCreAE& z{MZD`?-kn14OlPJ!P-%H8$lRl>o0*ec~sax#7RRN9K*&=9@tp+yLmv3vgnSs)Gf)M zT2TSrfXl}@*WtukGFM#=vwNdf30S%1Z9a{MJWxihr^vJwR6y(M)!6|D3EC2U$T31S{k`IOBCj3>rvOj@`#b z?6O7`T!0`H)QvEOJ_YzvMN~prI-S@b7Fcl@2QU_2m^)NH&8A|WxpmnHk`PD%CSQ!h zNd3Zy>i~cWT-SZ0W1y-Q=)*}s3xNlKtH6)z;Ud!eTmp&n8l3iTA7i-Z`+L(TXHMJI z+1D8Zd8czAWb))cP5vYfz~_WqsU^&v1^&F4|4iHCZUVsF-0cNyDiyucz+dIYk<|v4 zCa87rI(*j3`R;1;$~wkrpR~m{lN;c0;VT*&(JoSXn6bB1kMI5aCyxw z4-?V6x}2i{9KcDA?<*p*D8xy*2~|m8WK-k1c=JyB83*_~8*<`0F>(j@F+_V0#Q-d~ z%kB-_#eEFXR$&Fvz+9t3J^BzMr1Os^VLM>&^7~(HPU|zMlSd&jYIJ(O)61VRV?d|W zkG$#yqyXj&9H0`yA>?>fc$C+Z9TROz!i($(44O#q=!Qpnu`SqZX;XF+qA=PJ7AJ9DZsga6j-i>R^MgnD8{_mtE*wE))RL}7w@Z1h zrOp9+r-8mv-S4xiT&&tq7rWdM#L)vBBGitk;dzJ%lKQFjkYLVM*Wv9eN+2KRc;6x3 z?>Hy_2z6193bOu#Lj<`A0C#h@{}KTpGW1;q{+UhkWpoW-3JorvL9N_Sd4O2tf|=FH zQ;eCrj;n^C>iNkjL)z%r;8hxY%tc~~8zN!nBFn0ztS4KOjVL6(^~4JFLP!k z&Z7eBq5F+3Wv9(ARX)WQu@e^0N>6A6)z&42f6Fn{c*KA)m&aeF-0@B@xbHcHfE~b8 z0%C!IqE=sto|7vVYC}@^0B$38vHm_c@d{eeiumFJ;BU+r_^S>H5V)%HVs}9liuW}o z9vo-UY(j#y^J;WQTj^@tX?lkmcplvc7RBqji@UH-XS{NuW zIMrqy&tW~2)x?=7q{+@B!F@&z%IfR!{$PCLq>wt5hZHJjc5N*C|8cs^-Brx?c`5N`#c<1%&2e@7FgI5Lp?k|jBR(p zSJ4(tyt?nUDz2w=;Ws)a)RbinRfjm_IeklvF~FfsnS=Dc~#7%Aie<$UR%aE&`SG6(e zM#n%Gp==~uVs2RLGG0PqjIw=1BdE6i_IVGSKsc*zsLA@WA54+83t&CwY2qGKqYf0L zn|yJbz%VqbG}v-_qc&y?WO#Mu!7;qK>&sb#*y!XuhN_%j2;@#Jp^*0fERYRM9MtI_ zHXkeGE&g+HjGdKFdqhi9q{@CpmTYlS9+-1_NjNW*u|Z3O<``h@Txt*-$Ue4Oi&kSD zFw`=pq!0B*M@bX+DIKM+y}N7}=lD5gwb{p6F6qqa& zo%GzwbW=;Lh=7~gc@fzMnVc8Zzsss>F~*#cdzbeK(K=^DMZjOjw^pEks+l5 z{IK-zB?-rI&RnVbc*G$=j`MvDS8>bYUosJe5Fnk7If6tavu0jrAwj|w+Jc^F@AGio zt(52DBsENZpIY@n`6>!E$u;{z*xVif?)D!B;MxBFYX8q}W0%Lu$CD$P9hUx;KKJ

    Q6*8MG+5PUlUI6% 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

    Cw=L-(eF6@(2! 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

    A)U6kiv^aR(In&x=!6xMaRNp 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