commit e4e438ba8921adafd945e829b912d7b432d0da0b Author: snow flurry <snow@datagirl.xyz> Date: Wed Feb 26 21:14:55 2025 -0800 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..08792a0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +out/ +packages/ +# I'd like to find a way to share the Blender file for the F9 key, but it's +# full of random system memory I'd rather not share. +3d/ diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..eb00dac --- /dev/null +++ b/Makefile @@ -0,0 +1,4 @@ +PKGDIR := $(PWD)/out + +packages: + make PKGDIR=$(PKGDIR) -C $(PWD)/plugin diff --git a/README.md b/README.md new file mode 100644 index 0000000..5ec2703 --- /dev/null +++ b/README.md @@ -0,0 +1,14 @@ +# Custom assets for F9 + +To build them all: + +``` +make packages +``` + +Output will be in `packages/`. + +# License + +BSD-2-Clause for the code portions. Not sure on the custom graphics yet. + diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000..defe475 Binary files /dev/null and b/favicon.ico differ diff --git a/plugin/Makefile b/plugin/Makefile new file mode 100644 index 0000000..536d339 --- /dev/null +++ b/plugin/Makefile @@ -0,0 +1,26 @@ +MODS := \ + f9_buttons \ + f9_emotes \ + f9_theme + +PKGDIR := $(PWD)/../packages + +.PHONY: $(MODS) all + +all: $(MODS) + +$(MODS): $(PKGDIR) + @echo '#' + @echo '# Building $@' + @echo '#' + @make PKGDIR=$(PKGDIR) -C $@ + +$(PKGDIR): + @mkdir $(PKGDIR) + +CLEAN_MODS := $(patsubst %,clean_%,$(MODS)) +.PHONY: clean $(CLEAN_MODS) +clean: $(CLEAN_MODS) + +$(CLEAN_MODS): + @make PKGDIR=$(PKGDIR) -C $(patsubst clean_%,%,$@) clean diff --git a/plugin/f9_buttons/Makefile b/plugin/f9_buttons/Makefile new file mode 100644 index 0000000..be3bd30 --- /dev/null +++ b/plugin/f9_buttons/Makefile @@ -0,0 +1,3 @@ +PROJECT := f9_buttons + +include ../plugin.mk diff --git a/plugin/f9_buttons/src/f9_buttons.php b/plugin/f9_buttons/src/f9_buttons.php new file mode 100644 index 0000000..fb47efb --- /dev/null +++ b/plugin/f9_buttons/src/f9_buttons.php @@ -0,0 +1,58 @@ +<?php + +/* + * F9 Menu Buttons + * @version 1.0 + * + * blah blah MIT or whatever idc + */ + +if (!defined('SMF')) + die('nice try, dodongo'); + +function hook_f9_buttons(&$buttons) +{ + global $context, $scripturl; + $search_idx = 0; + foreach (array_keys($buttons) as $key) { + $search_idx++; + if ($key == 'search') { + break; + } + } + $new_buttons = array( + 'profile' => array( + 'title' => 'Profile', + 'href' => $scripturl . '?action=profile;u=' . $context['user']['id'], + 'show' => !empty($context['user']['is_logged']), + 'sub_buttons' => array( + ), + ), + 'ucp' => array( + 'title' => 'Settings', + 'href' => $scripturl . '?action=profile;area=account;u=' . $context['user']['id'], + 'show' => !empty($context['user']['is_logged']), + 'sub_buttons' => array( + ), + ), + ); + + if ($context['allow_pm']) { + $new_buttons[] = array( + 'title' => 'Messages', + 'href' => $scripturl . '?action=pm', + 'show' => !empty($context['user']['is_logged']), + 'sub_buttons' => array( + ), + 'amt' => $context['user']['unread_messages'], + ); + } + + $buttons = array_merge( + array_slice($buttons, 0, $search_idx, true), + $new_buttons, + array_slice($buttons, $search_idx, null, true), + ); +} + +?> diff --git a/plugin/f9_buttons/src/package-info.xml b/plugin/f9_buttons/src/package-info.xml new file mode 100644 index 0000000..979a46b --- /dev/null +++ b/plugin/f9_buttons/src/package-info.xml @@ -0,0 +1,19 @@ +<?xml version="1.0"?> +<!DOCTYPE package-info SYSTEM "http://www.simplemachines.org/xml/package-info"> +<package-info xmlns="http://www.simplemachines.org/xml/package-info" xmlns:smf="http://www.simplemachines.org/"> + <id>@hl-flurry:f9-buttons</id> + <name>F9 Nav Buttons</name> + <version>1.0</version> + <type>modification</type> + + <install for="2.1.* - 2.1.99"> + <readme parsebbc="true">readme.txt</readme> + <require-file name="f9_buttons.php" destination="$sourcedir" /> + <hook hook="integrate_menu_buttons" function="hook_f9_buttons" file="$sourcedir/f9_buttons.php" /> + </install> + + <uninstall for="2.1.* - 2.1.99"> + <remove-file name="$sourcedir/f9_buttons.php" /> + <hook hook="integrate_menu_buttons" function="hook_f9_buttons" file="$sourcedir/f9_buttons.php" reverse="true" /> + </uninstall> +</package-info> diff --git a/plugin/f9_buttons/src/readme.txt b/plugin/f9_buttons/src/readme.txt new file mode 100644 index 0000000..f20ca78 --- /dev/null +++ b/plugin/f9_buttons/src/readme.txt @@ -0,0 +1,3 @@ +[size=x-large][b]Nav Buttons for F9[/b][/size] + +This adds the "Profile" and "Account" buttons to the navbar. diff --git a/plugin/f9_emotes/.gitignore b/plugin/f9_emotes/.gitignore new file mode 100644 index 0000000..4149a34 --- /dev/null +++ b/plugin/f9_emotes/.gitignore @@ -0,0 +1,2 @@ +out +f9_emotes.tar.gz diff --git a/plugin/f9_emotes/Makefile b/plugin/f9_emotes/Makefile new file mode 100644 index 0000000..d74bfd0 --- /dev/null +++ b/plugin/f9_emotes/Makefile @@ -0,0 +1,49 @@ +# "My name is OZYMANDIAS, King of Kings: +# Look on my Makefiles, ye Mighty, and despair!" +# No thing beside remains. Round the decay +# Of that collossal wreck, boundless and bare +# The lone and level sands stretch far away. + +# Jokes aside: If you're looking to add emoticons, you're probably looking for +# the file named SMILEYS. + +STAGEDIR := out +EMOTEDIR := $(STAGEDIR)/Smileys/f9 +SRCDIR := src +PKGDIR := $(PWD) + +GIFNAMES := $(shell sed '/^\(#\|$$\)/d' SMILEYS | awk '{print $$2}') +OUTGIFS := $(patsubst %,$(EMOTEDIR)/%.gif,$(GIFNAMES)) +COMMA := , +EMOTELIST := $(patsubst %,"%"$(COMMA)\n,$(GIFNAMES)) + +MISC_SRCS := $(wildcard $(SRCDIR)/*) +MISC_OUT := $(patsubst $(SRCDIR)/%,$(STAGEDIR)/%,$(MISC_SRCS)) + +PROJECT := f9_emotes + +include ../plugin.mk + +pre-package: $(OUTGIFS) $(MISC_OUT) + +$(STAGEDIR)/%.php: $(SRCDIR)/%.php + @echo $< '=>' $@ + @sed 's/@@SMILEYS@@/\n $(EMOTELIST)/' $< > $@ + +$(STAGEDIR)/%: $(SRCDIR)/% + @echo $< '=>' $@ + @cp $< $@ + +$(EMOTEDIR)/%.gif : SRC = $(shell grep -E '\b$*$$' SMILEYS | awk '{print $$1}').gif +$(EMOTEDIR)/%.gif: out/Smileys/f9 + @echo ' +' $(SRC) + @cp $(SRC) $@ + + +$(EMOTEDIR): + mkdir -p $@ + +.PHONY: clean +clean: + rm -fr $(STAGEDIR) + rm -f f9_emotes.tar.gz diff --git a/plugin/f9_emotes/README.md b/plugin/f9_emotes/README.md new file mode 100644 index 0000000..789fb29 --- /dev/null +++ b/plugin/f9_emotes/README.md @@ -0,0 +1,24 @@ +# F9 Emoticon Pack + +## Packaging + +Run `gmake` (or `make`, for Linux users). The package should be at `f9_emotes.tar.gz`. + +## Emote Sources + +- `phpbb/`: phpBB 2.x emotes, created by [Tom Beddard] +- `msn/`: MSN Messenger emotes +- `eggbug/`: Eggbug emotes, created by [Caius Nocturne] + +## Adding new emotes + +Put them somewhere and add them to `SMILEYS`, like so: + +``` +my_emotes/smile my_smile +``` + +Currently, all emotes are expected to be GIFs. This is probably a bad idea, but works best with the existing emotes. + +[Tom Beddard]: https://sub.blue +[Caius Nocturne]: https://nocturne.works diff --git a/plugin/f9_emotes/SMILEYS b/plugin/f9_emotes/SMILEYS new file mode 100644 index 0000000..48f4fe2 --- /dev/null +++ b/plugin/f9_emotes/SMILEYS @@ -0,0 +1,51 @@ +# Lines starting with '#' are ignored. +# First column is the source path (relative to this file), second +# column is the filename in the emoticon pack. + +# Icons from phpBB2 +phpbb/icon_arrow arrow +phpbb/icon_biggrin grin +phpbb/icon_confused undecided +phpbb/icon_cool cool +phpbb/icon_cry cry +phpbb/icon_eek eek +phpbb/icon_evil evil +phpbb/icon_exclaim exclaim +phpbb/icon_idea idea +phpbb/icon_lol laugh +phpbb/icon_mad angry +phpbb/icon_mrgreen mrgreen +phpbb/icon_neutral neutral +phpbb/icon_question question +phpbb/icon_razz tongue +phpbb/icon_redface embarrassed +phpbb/icon_rolleyes rolleyes +phpbb/icon_sad sad +phpbb/icon_smile smiley +phpbb/icon_surprised shocked +phpbb/icon_twisted twisted +phpbb/icon_wink wink + +# Icons from MSN +msn/omg omg +msn/turtle msnturt +msn/xbox xbox + +# Eggbug +eggbug/eggbug_asleep eggbug_asleep +eggbug/eggbug eggbug +eggbug/eggbug_devious eggbug_devious +eggbug/eggbug_heart_sob eggbug_heart_sob +eggbug/eggbug_uwu eggbug_uwu +eggbug/eggbug_wink eggbug_wink +eggbug/eggbug_pensive eggbug_pensive +eggbug/eggbug_shocked eggbug_shocked +eggbug/eggbug_tuesday eggbug_tuesday +eggbug/eggbug_nervous eggbug_nervous + +# Random emotes +misc/imcold imcold +eggbug/eggbug_smile_hearts eggbug_smile_hearts +eggbug/eggbug_relieved eggbug_relieved +eggbug/eggbug_sob eggbug_sob +eggbug/eggbug_pleading eggbug_pleading diff --git a/plugin/f9_emotes/eggbug/eggbug.gif b/plugin/f9_emotes/eggbug/eggbug.gif new file mode 100644 index 0000000..5c85ec6 Binary files /dev/null and b/plugin/f9_emotes/eggbug/eggbug.gif differ diff --git a/plugin/f9_emotes/eggbug/eggbug_asleep.gif b/plugin/f9_emotes/eggbug/eggbug_asleep.gif new file mode 100644 index 0000000..3ddc305 Binary files /dev/null and b/plugin/f9_emotes/eggbug/eggbug_asleep.gif differ diff --git a/plugin/f9_emotes/eggbug/eggbug_devious.gif b/plugin/f9_emotes/eggbug/eggbug_devious.gif new file mode 100644 index 0000000..0990dd1 Binary files /dev/null and b/plugin/f9_emotes/eggbug/eggbug_devious.gif differ diff --git a/plugin/f9_emotes/eggbug/eggbug_heart_sob.gif b/plugin/f9_emotes/eggbug/eggbug_heart_sob.gif new file mode 100644 index 0000000..8325335 Binary files /dev/null and b/plugin/f9_emotes/eggbug/eggbug_heart_sob.gif differ diff --git a/plugin/f9_emotes/eggbug/eggbug_nervous.gif b/plugin/f9_emotes/eggbug/eggbug_nervous.gif new file mode 100644 index 0000000..93e20b9 Binary files /dev/null and b/plugin/f9_emotes/eggbug/eggbug_nervous.gif differ diff --git a/plugin/f9_emotes/eggbug/eggbug_pensive.gif b/plugin/f9_emotes/eggbug/eggbug_pensive.gif new file mode 100644 index 0000000..43c74d6 Binary files /dev/null and b/plugin/f9_emotes/eggbug/eggbug_pensive.gif differ diff --git a/plugin/f9_emotes/eggbug/eggbug_pleading.gif b/plugin/f9_emotes/eggbug/eggbug_pleading.gif new file mode 100644 index 0000000..534d260 Binary files /dev/null and b/plugin/f9_emotes/eggbug/eggbug_pleading.gif differ diff --git a/plugin/f9_emotes/eggbug/eggbug_relieved.gif b/plugin/f9_emotes/eggbug/eggbug_relieved.gif new file mode 100644 index 0000000..59e3264 Binary files /dev/null and b/plugin/f9_emotes/eggbug/eggbug_relieved.gif differ diff --git a/plugin/f9_emotes/eggbug/eggbug_shocked.gif b/plugin/f9_emotes/eggbug/eggbug_shocked.gif new file mode 100644 index 0000000..994798e Binary files /dev/null and b/plugin/f9_emotes/eggbug/eggbug_shocked.gif differ diff --git a/plugin/f9_emotes/eggbug/eggbug_smile_hearts.gif b/plugin/f9_emotes/eggbug/eggbug_smile_hearts.gif new file mode 100644 index 0000000..e7a10ca Binary files /dev/null and b/plugin/f9_emotes/eggbug/eggbug_smile_hearts.gif differ diff --git a/plugin/f9_emotes/eggbug/eggbug_sob.gif b/plugin/f9_emotes/eggbug/eggbug_sob.gif new file mode 100644 index 0000000..28f9f46 Binary files /dev/null and b/plugin/f9_emotes/eggbug/eggbug_sob.gif differ diff --git a/plugin/f9_emotes/eggbug/eggbug_tuesday.gif b/plugin/f9_emotes/eggbug/eggbug_tuesday.gif new file mode 100644 index 0000000..7ade920 Binary files /dev/null and b/plugin/f9_emotes/eggbug/eggbug_tuesday.gif differ diff --git a/plugin/f9_emotes/eggbug/eggbug_uwu.gif b/plugin/f9_emotes/eggbug/eggbug_uwu.gif new file mode 100644 index 0000000..c98ba90 Binary files /dev/null and b/plugin/f9_emotes/eggbug/eggbug_uwu.gif differ diff --git a/plugin/f9_emotes/eggbug/eggbug_wink.gif b/plugin/f9_emotes/eggbug/eggbug_wink.gif new file mode 100644 index 0000000..be17aca Binary files /dev/null and b/plugin/f9_emotes/eggbug/eggbug_wink.gif differ diff --git a/plugin/f9_emotes/misc/imcold.gif b/plugin/f9_emotes/misc/imcold.gif new file mode 100644 index 0000000..4bb4ba2 Binary files /dev/null and b/plugin/f9_emotes/misc/imcold.gif differ diff --git a/plugin/f9_emotes/msn/omg.gif b/plugin/f9_emotes/msn/omg.gif new file mode 100644 index 0000000..9f37515 Binary files /dev/null and b/plugin/f9_emotes/msn/omg.gif differ diff --git a/plugin/f9_emotes/msn/turtle.gif b/plugin/f9_emotes/msn/turtle.gif new file mode 100644 index 0000000..f00606f Binary files /dev/null and b/plugin/f9_emotes/msn/turtle.gif differ diff --git a/plugin/f9_emotes/msn/xbox.gif b/plugin/f9_emotes/msn/xbox.gif new file mode 100644 index 0000000..e71c15c Binary files /dev/null and b/plugin/f9_emotes/msn/xbox.gif differ diff --git a/plugin/f9_emotes/phpbb/icon_arrow.gif b/plugin/f9_emotes/phpbb/icon_arrow.gif new file mode 100755 index 0000000..2880055 Binary files /dev/null and b/plugin/f9_emotes/phpbb/icon_arrow.gif differ diff --git a/plugin/f9_emotes/phpbb/icon_biggrin.gif b/plugin/f9_emotes/phpbb/icon_biggrin.gif new file mode 100755 index 0000000..d352772 Binary files /dev/null and b/plugin/f9_emotes/phpbb/icon_biggrin.gif differ diff --git a/plugin/f9_emotes/phpbb/icon_confused.gif b/plugin/f9_emotes/phpbb/icon_confused.gif new file mode 100755 index 0000000..0c49e06 Binary files /dev/null and b/plugin/f9_emotes/phpbb/icon_confused.gif differ diff --git a/plugin/f9_emotes/phpbb/icon_cool.gif b/plugin/f9_emotes/phpbb/icon_cool.gif new file mode 100755 index 0000000..cead030 Binary files /dev/null and b/plugin/f9_emotes/phpbb/icon_cool.gif differ diff --git a/plugin/f9_emotes/phpbb/icon_cry.gif b/plugin/f9_emotes/phpbb/icon_cry.gif new file mode 100755 index 0000000..7d54b1f Binary files /dev/null and b/plugin/f9_emotes/phpbb/icon_cry.gif differ diff --git a/plugin/f9_emotes/phpbb/icon_eek.gif b/plugin/f9_emotes/phpbb/icon_eek.gif new file mode 100755 index 0000000..5d39781 Binary files /dev/null and b/plugin/f9_emotes/phpbb/icon_eek.gif differ diff --git a/plugin/f9_emotes/phpbb/icon_evil.gif b/plugin/f9_emotes/phpbb/icon_evil.gif new file mode 100755 index 0000000..ab1aa8e Binary files /dev/null and b/plugin/f9_emotes/phpbb/icon_evil.gif differ diff --git a/plugin/f9_emotes/phpbb/icon_exclaim.gif b/plugin/f9_emotes/phpbb/icon_exclaim.gif new file mode 100755 index 0000000..6e50e2e Binary files /dev/null and b/plugin/f9_emotes/phpbb/icon_exclaim.gif differ diff --git a/plugin/f9_emotes/phpbb/icon_frown.gif b/plugin/f9_emotes/phpbb/icon_frown.gif new file mode 100755 index 0000000..d2ac78c Binary files /dev/null and b/plugin/f9_emotes/phpbb/icon_frown.gif differ diff --git a/plugin/f9_emotes/phpbb/icon_idea.gif b/plugin/f9_emotes/phpbb/icon_idea.gif new file mode 100755 index 0000000..a40ae0d Binary files /dev/null and b/plugin/f9_emotes/phpbb/icon_idea.gif differ diff --git a/plugin/f9_emotes/phpbb/icon_lol.gif b/plugin/f9_emotes/phpbb/icon_lol.gif new file mode 100755 index 0000000..374ba15 Binary files /dev/null and b/plugin/f9_emotes/phpbb/icon_lol.gif differ diff --git a/plugin/f9_emotes/phpbb/icon_mad.gif b/plugin/f9_emotes/phpbb/icon_mad.gif new file mode 100755 index 0000000..1f6c3c2 Binary files /dev/null and b/plugin/f9_emotes/phpbb/icon_mad.gif differ diff --git a/plugin/f9_emotes/phpbb/icon_mrgreen.gif b/plugin/f9_emotes/phpbb/icon_mrgreen.gif new file mode 100755 index 0000000..b54cd0f Binary files /dev/null and b/plugin/f9_emotes/phpbb/icon_mrgreen.gif differ diff --git a/plugin/f9_emotes/phpbb/icon_neutral.gif b/plugin/f9_emotes/phpbb/icon_neutral.gif new file mode 100755 index 0000000..4f31156 Binary files /dev/null and b/plugin/f9_emotes/phpbb/icon_neutral.gif differ diff --git a/plugin/f9_emotes/phpbb/icon_question.gif b/plugin/f9_emotes/phpbb/icon_question.gif new file mode 100755 index 0000000..9d07226 Binary files /dev/null and b/plugin/f9_emotes/phpbb/icon_question.gif differ diff --git a/plugin/f9_emotes/phpbb/icon_razz.gif b/plugin/f9_emotes/phpbb/icon_razz.gif new file mode 100755 index 0000000..29da2a2 Binary files /dev/null and b/plugin/f9_emotes/phpbb/icon_razz.gif differ diff --git a/plugin/f9_emotes/phpbb/icon_redface.gif b/plugin/f9_emotes/phpbb/icon_redface.gif new file mode 100755 index 0000000..ad76283 Binary files /dev/null and b/plugin/f9_emotes/phpbb/icon_redface.gif differ diff --git a/plugin/f9_emotes/phpbb/icon_rolleyes.gif b/plugin/f9_emotes/phpbb/icon_rolleyes.gif new file mode 100755 index 0000000..d7f5f2f Binary files /dev/null and b/plugin/f9_emotes/phpbb/icon_rolleyes.gif differ diff --git a/plugin/f9_emotes/phpbb/icon_sad.gif b/plugin/f9_emotes/phpbb/icon_sad.gif new file mode 100755 index 0000000..d2ac78c Binary files /dev/null and b/plugin/f9_emotes/phpbb/icon_sad.gif differ diff --git a/plugin/f9_emotes/phpbb/icon_smile.gif b/plugin/f9_emotes/phpbb/icon_smile.gif new file mode 100755 index 0000000..7b1f6d3 Binary files /dev/null and b/plugin/f9_emotes/phpbb/icon_smile.gif differ diff --git a/plugin/f9_emotes/phpbb/icon_surprised.gif b/plugin/f9_emotes/phpbb/icon_surprised.gif new file mode 100755 index 0000000..cb21424 Binary files /dev/null and b/plugin/f9_emotes/phpbb/icon_surprised.gif differ diff --git a/plugin/f9_emotes/phpbb/icon_twisted.gif b/plugin/f9_emotes/phpbb/icon_twisted.gif new file mode 100755 index 0000000..502fe24 Binary files /dev/null and b/plugin/f9_emotes/phpbb/icon_twisted.gif differ diff --git a/plugin/f9_emotes/phpbb/icon_wink.gif b/plugin/f9_emotes/phpbb/icon_wink.gif new file mode 100755 index 0000000..d148288 Binary files /dev/null and b/plugin/f9_emotes/phpbb/icon_wink.gif differ diff --git a/plugin/f9_emotes/src/install.php b/plugin/f9_emotes/src/install.php new file mode 100644 index 0000000..ce67cc2 --- /dev/null +++ b/plugin/f9_emotes/src/install.php @@ -0,0 +1,56 @@ +<?php + +if (file_exists(dirname(__FILE__) . '/SSI.php') && !defined('SMF')) + require_once(dirname(__FILE__) . '/SSI.php'); +elseif(!defined('SMF')) + die('<b>Error:</b> Cannot install - please verify that you put this file in the same place as SMF\'s index.php and SSI.php files.'); + +if ((SMF == 'SSI') && !$user_info['is_admin']) + die('Admin privileges required.'); + +global $modSettings, $sourcedir; +$smileyName = 'F9'; +$smileySet = 'f9'; + +$smiley_sets_known = $modSettings['smiley_sets_known'] . ",$smileySet"; + +$temp = explode(PHP_EOL, $modSettings['smiley_sets_names']); +$temp[] = $smileyName; +$temp = implode(PHP_EOL, $temp); +$smiley_sets_names = $temp; + +updateSettings( + array( + 'smiley_sets_known' => $smiley_sets_known, + 'smiley_sets_names' => $smiley_sets_names, + 'smiley_sets_default' => $smileySet, + ) +); + +/* +$smileys = [@@SMILEYS@@]; + +$i = 0; +foreach ($smileys as $smiley) { + $i++; + $smcFunc['db_insert']('replace', + '{db_prefix}smiley_files', + array( + 'id_smiley' => 'int', 'smiley_set' => 'string-48', 'filename' => 'string-48', + ), + array( + "$i", $smileySet, $smiley . '.gif', + ), + array('id_smiley', 'smiley_set') + ); +} +*/ + +require_once($sourcedir . '/ManageSmileys.php'); + +ImportSmileys($smileySet); + +if (SMF == 'SSI') + echo 'Database changes are complete! Please wait ...'; + +?> diff --git a/plugin/f9_emotes/src/package-info.xml b/plugin/f9_emotes/src/package-info.xml new file mode 100644 index 0000000..e993345 --- /dev/null +++ b/plugin/f9_emotes/src/package-info.xml @@ -0,0 +1,20 @@ +<?xml version="1.0"?> +<!DOCTYPE package-info SYSTEM "http://www.simplemachines.org/xml/package-info"> +<package-info> + <id>@hl-flurry:emoticons</id> + <name>F9 Emoticon Pack</name> + <version>1.0</version> + <type>modification</type> + + <install for="2.1.* - 2.1.99"> + <readme parsebbc="true">readme.txt</readme> + <require-dir name="Smileys/f9" destination="$smileysdir" /> + <code>install.php</code> + <redirect url="?action=admin;area=smileys;sa=editsets" timeout="1000" /> + </install> + + <uninstall for="2.1.* - 2.1.99"> + <remove-dir name="$smileysdir/f9" /> + <code>uninstall.php</code> + </uninstall> +</package-info> diff --git a/plugin/f9_emotes/src/readme.txt b/plugin/f9_emotes/src/readme.txt new file mode 100644 index 0000000..274bef9 --- /dev/null +++ b/plugin/f9_emotes/src/readme.txt @@ -0,0 +1,3 @@ +[size=x-large][b]Emoticon Pack for F9[/b][/size] + +This adds the custom F9 emoticon pack to SMF. diff --git a/plugin/f9_emotes/src/uninstall.php b/plugin/f9_emotes/src/uninstall.php new file mode 100644 index 0000000..c814b3b --- /dev/null +++ b/plugin/f9_emotes/src/uninstall.php @@ -0,0 +1,46 @@ +<?php + +if (file_exists(dirname(__FILE__) . '/SSI.php') && !defined('SMF')) + require_once(dirname(__FILE__) . '/SSI.php'); +elseif(!defined('SMF')) + die('<b>Error:</b> Cannot install - please verify that you put this file in the same place as SMF\'s index.php and SSI.php files.'); + +if ((SMF == 'SSI') && !$user_info['is_admin']) + die('Admin privileges required.'); + +global $modSettings; +$smileyName = 'F9'; +$smileySet = 'f9'; + +$temp = explode(',', $modSettings['smiley_sets_known']); +foreach ($temp as $tm => $name) + if ($name == $smileySet) unset($temp[$tm]); +$temp = implode(',', $temp); +$smiley_sets_known = $temp; + +$temp = explode(PHP_EOL, $modSettings['smiley_sets_names']); +foreach ($temp as $tm => $name) + if ($name == $smileyName) unset($temp[$tm]); +$temp = implode(PHP_EOL, $temp); +$smiley_sets_names = $temp; + +updateSettings( + array( + 'smiley_sets_known' => $smiley_sets_known, + 'smiley_sets_names' => $smiley_sets_names, + 'smiley_sets_default' => explode(',', $smiley_sets_known)[0], + ) +); + +$smcFunc['db_query']('', ' + DELETE FROM {db_prefix}smiley_files + WHERE smiley_set = {string:set}', + array( + 'set' => $smileySet, + ) +); + +if (SMF == 'SSI') + echo 'Database changes are complete! Please wait...'; + +?> diff --git a/plugin/f9_theme/.gitignore b/plugin/f9_theme/.gitignore new file mode 100644 index 0000000..f684f38 --- /dev/null +++ b/plugin/f9_theme/.gitignore @@ -0,0 +1 @@ +src/scripts/minified_* diff --git a/plugin/f9_theme/Makefile b/plugin/f9_theme/Makefile new file mode 100644 index 0000000..b60a7a3 --- /dev/null +++ b/plugin/f9_theme/Makefile @@ -0,0 +1,9 @@ +PKGDIR := $(PWD) +SRCDIR := src + +all: $(PKGDIR)/f9_theme.tar.gz + +$(PKGDIR)/f9_theme.tar.gz: + tar -czf $@ -C src . + +clean: diff --git a/plugin/f9_theme/src/MessageIndex.template.php b/plugin/f9_theme/src/MessageIndex.template.php new file mode 100644 index 0000000..729a632 --- /dev/null +++ b/plugin/f9_theme/src/MessageIndex.template.php @@ -0,0 +1,578 @@ +<?php +/** + * Simple Machines Forum (SMF) + * + * @package SMF + * @author Simple Machines https://www.simplemachines.org + * @copyright 2022 Simple Machines and individual contributors + * @license https://www.simplemachines.org/about/smf/license.php BSD + * + * @version 2.1.2 + */ + +/** + * The main messageindex. + */ +function template_main() +{ + global $context, $settings, $options, $scripturl, $modSettings, $txt; + + echo '<div id="display_head" class="information"> + <h2 class="display_title">', $context['name'], '</h2>'; + + if (isset($context['description']) && $context['description'] != '') + echo ' + <p>', $context['description'], '</p>'; + + if (!empty($context['moderators'])) + echo ' + <p>', count($context['moderators']) === 1 ? $txt['moderator'] : $txt['moderators'], ': ', implode(', ', $context['link_moderators']), '.</p>'; + + if (!empty($settings['display_who_viewing'])) + { + echo ' + <p>'; + + // 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'], ' + </p>'; + } + + echo ' + </div>'; + + if (!empty($context['boards']) && (!empty($options['show_children']) || $context['start'] == 0)) + { + echo ' + <div id="board_', $context['current_board'], '_childboards" class="boardindex_table main_container"> + <div class="cat_bar"> + <h3 class="catbg">', $txt['sub_boards'], '</h3> + </div>'; + + foreach ($context['boards'] as $board) + { + echo ' + <div id="board_', $board['id'], '" class="up_contain ', (!empty($board['css_class']) ? $board['css_class'] : ''), '"> + <div class="board_icon"> + ', function_exists('template_bi_' . $board['type'] . '_icon') ? call_user_func('template_bi_' . $board['type'] . '_icon', $board) : template_bi_board_icon($board), ' + </div> + <div class="info"> + ', function_exists('template_bi_' . $board['type'] . '_info') ? call_user_func('template_bi_' . $board['type'] . '_info', $board) : template_bi_board_info($board), ' + </div><!-- .info -->'; + + // Show some basic information about the number of posts, etc. + echo ' + <div class="board_stats"> + ', function_exists('template_bi_' . $board['type'] . '_stats') ? call_user_func('template_bi_' . $board['type'] . '_stats', $board) : template_bi_board_stats($board), ' + </div>'; + + // Show the last post if there is one. + echo ' + <div class="lastpost"> + ', function_exists('template_bi_' . $board['type'] . '_lastpost') ? call_user_func('template_bi_' . $board['type'] . '_lastpost', $board) : template_bi_board_lastpost($board), ' + </div>'; + + // 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 ' + </div><!-- #board_[id] -->'; + } + + echo ' + </div><!-- #board_[current_board]_childboards -->'; + } + + // Let them know why their message became unapproved. + if ($context['becomesUnapproved']) + echo ' + <div class="noticebox"> + ', $txt['post_becomes_unapproved'], ' + </div>'; + + // If this person can approve items and we have some awaiting approval tell them. + if (!empty($context['unapproved_posts_message'])) + echo ' + <div class="noticebox"> + ', $context['unapproved_posts_message'], ' + </div>'; + + if (!$context['no_topic_listing']) + { + echo ' + <div class="pagesection"> + ', $context['menu_separator'], ' + <div class="pagelinks floatleft"> + <a href="#bot" class="button">', $txt['go_down'], '</a> + ', $context['page_index'], ' + </div> + ', template_button_strip($context['normal_buttons'], 'right'); + + // Mobile action buttons (top) + if (!empty($context['normal_buttons'])) + echo ' + <div class="mobile_buttons floatright"> + <a class="button mobile_act">', $txt['mobile_action'], '</a> + </div>'; + + echo ' + </div>'; + + // If Quick Moderation is enabled start the form. + if (!empty($context['can_quick_mod']) && $options['display_quick_mod'] > 0 && !empty($context['topics'])) + echo ' + <form action="', $scripturl, '?action=quickmod;board=', $context['current_board'], '.', $context['start'], '" method="post" accept-charset="', $context['character_set'], '" class="clear" name="quickModForm" id="quickModForm">'; + + echo ' + <div id="messageindex">'; + + echo ' + <div class="title_bar" id="topic_header">'; + + // Are there actually any topics to show? + if (!empty($context['topics'])) + { + echo ' + <div class="board_icon"></div> + <div class="info">', $context['topics_headers']['subject'], ' / ', $context['topics_headers']['starter'], '</div> + <div class="board_stats centertext">', $context['topics_headers']['replies'], ' / ', $context['topics_headers']['views'], '</div> + <div class="lastpost">', $context['topics_headers']['last_post'], '</div>'; + + // Show a "select all" box for quick moderation? + if (!empty($context['can_quick_mod']) && $options['display_quick_mod'] == 1) + echo ' + <div class="moderation"> + <input type="checkbox" onclick="invertAll(this, this.form, \'topics[]\');"> + </div>'; + + // If it's on in "image" mode, don't show anything but the column. + elseif (!empty($context['can_quick_mod'])) + echo ' + <div class="moderation"></div>'; + } + + // No topics... just say, "sorry bub". + else + echo ' + <h3 class="titlebg">', $txt['topic_alert_none'], '</h3>'; + + echo ' + </div><!-- #topic_header -->'; + + // Contain the topic list + echo ' + <div id="topic_container">'; + + $mutedTopics = 0; + + foreach ($context['topics'] as $topic) + { + // Hack to handle muted threads in CSS + if (!empty($topic['topic_muted'])) { + if (isset($_REQUEST['showmuted'])) { + $topic['css_class'] .= ' mutedShow'; + } else { + $topic['css_class'] .= ' muted'; + $mutedTopics++; + } + } + echo ' + <div class="', $topic['css_class'], '"> + <div class="board_icon"> + <img src="', $topic['first_post']['icon_url'], '" alt=""> + ', $topic['is_posted_in'] ? '<span class="main_icons profile_sm"></span>' : '', ' + </div> + <div class="info', !empty($context['can_quick_mod']) ? '' : ' info_block', '"> + <div ', (!empty($topic['quick_mod']['modify']) ? 'id="topic_' . $topic['first_post']['id'] . '" ondblclick="oQuickModifyTopic.modify_topic(\'' . $topic['id'] . '\', \'' . $topic['first_post']['id'] . '\');"' : ''), '>'; + + // Now we handle the icons + echo ' + <div class="icons floatright">'; + + if ($topic['is_watched']) + echo ' + <span class="main_icons watch" title="', $txt['watching_this_topic'], '"></span>'; + + if ($topic['is_locked']) + echo ' + <span class="main_icons lock"></span>'; + + if ($topic['is_sticky']) + echo ' + <span class="main_icons sticky"></span>'; + + if ($topic['is_redirect']) + echo ' + <span class="main_icons move"></span>'; + + if ($topic['is_poll']) + echo ' + <span class="main_icons poll"></span>'; + + echo ' + </div>'; + + echo ' + <div class="message_index_title"> + ', $topic['new'] && $context['user']['is_logged'] ? '<a href="' . $topic['new_href'] . '" id="newicon' . $topic['first_post']['id'] . '" class="new_posts">' . $txt['new'] . '</a>' : '', ' + <span class="preview', $topic['is_sticky'] ? ' bold_text' : '', '" title="', $topic[(empty($modSettings['message_index_preview_first']) ? 'last_post' : 'first_post')]['preview'], '"> + <span id="msg_', $topic['first_post']['id'], '">', $topic['first_post']['link'], (!$topic['approved'] ? ' <em>(' . $txt['awaiting_approval'] . ')</em>' : ''), '</span> + </span> + </div> + <p class="floatleft"> + ', $txt['started_by'], ' ', $topic['first_post']['member']['link'], ' + </p> + ', !empty($topic['pages']) ? '<span id="pages' . $topic['first_post']['id'] . '" class="topic_pages">' . $topic['pages'] . '</span>' : '', ' + </div><!-- #topic_[first_post][id] --> + </div><!-- .info --> + <div class="board_stats centertext"> + <p>', $txt['replies'], ': ', $topic['replies'], '<br>', $txt['views'], ': ', $topic['views'], '</p> + </div> + <div class="lastpost"> + <p>', sprintf($txt['last_post_topic'], '<a href="' . $topic['last_post']['href'] . '">' . $topic['last_post']['time'] . '</a>', $topic['last_post']['member']['link']), '</p> + </div>'; + + // Show the quick moderation options? + if (!empty($context['can_quick_mod'])) + { + echo ' + <div class="moderation">'; + + if ($options['display_quick_mod'] == 1) + echo ' + <input type="checkbox" name="topics[]" value="', $topic['id'], '">'; + else + { + // Check permissions on each and show only the ones they are allowed to use. + if ($topic['quick_mod']['remove']) + echo '<a href="', $scripturl, '?action=quickmod;board=', $context['current_board'], '.', $context['start'], ';actions%5B', $topic['id'], '%5D=remove;', $context['session_var'], '=', $context['session_id'], '" class="you_sure"><span class="main_icons delete" title="', $txt['remove_topic'], '"></span></a>'; + + if ($topic['quick_mod']['lock']) + echo '<a href="', $scripturl, '?action=quickmod;board=', $context['current_board'], '.', $context['start'], ';actions%5B', $topic['id'], '%5D=lock;', $context['session_var'], '=', $context['session_id'], '" class="you_sure"><span class="main_icons lock" title="', $topic['is_locked'] ? $txt['set_unlock'] : $txt['set_lock'], '"></span></a>'; + + if ($topic['quick_mod']['lock'] || $topic['quick_mod']['remove']) + echo '<br>'; + + if ($topic['quick_mod']['sticky']) + echo '<a href="', $scripturl, '?action=quickmod;board=', $context['current_board'], '.', $context['start'], ';actions%5B', $topic['id'], '%5D=sticky;', $context['session_var'], '=', $context['session_id'], '" class="you_sure"><span class="main_icons sticky" title="', $topic['is_sticky'] ? $txt['set_nonsticky'] : $txt['set_sticky'], '"></span></a>'; + + if ($topic['quick_mod']['move']) + echo '<a href="', $scripturl, '?action=movetopic;current_board=', $context['current_board'], ';board=', $context['current_board'], '.', $context['start'], ';topic=', $topic['id'], '.0"><span class="main_icons move" title="', $txt['move_topic'], '"></span></a>'; + } + echo ' + </div><!-- .moderation -->'; + } + echo ' + </div><!-- $topic[css_class] -->'; + } + echo ' + </div><!-- #topic_container -->'; + + if ($mutedTopics > 0) { + echo ' + <div class="roadblock_notice"> + <p>'; + if (isset($_REQUEST['showmuted'])) { + echo $mutedTopics, ' muted topics are shown. <a href="', $scripturl, '?board=', $context['current_board'], '.', $context['start'], '">Click here to hide them.</a>'; + } else { + echo $mutedTopics, ' muted topics were hidden from the page. <a href="', $scripturl, '?board=', $context['current_board'], '.', $context['start'], ';showmuted">Click here to show them.</a>'; + } + echo ' + </p> + </div>'; + } + + if (!empty($context['can_quick_mod']) && $options['display_quick_mod'] == 1 && !empty($context['topics'])) + { + echo ' + <div class="righttext" id="quick_actions"> + <select class="qaction" name="qaction"', $context['can_move'] ? ' onchange="this.form.move_to.disabled = (this.options[this.selectedIndex].value != \'move\');"' : '', '> + <option value="">--------</option>'; + + foreach ($context['qmod_actions'] as $qmod_action) + if ($context['can_' . $qmod_action]) + echo ' + <option value="' . $qmod_action . '">' . $txt['quick_mod_' . $qmod_action] . '</option>'; + + echo ' + </select>'; + + // Show a list of boards they can move the topic to. + if ($context['can_move']) + echo ' + <span id="quick_mod_jump_to"></span>'; + + echo ' + <input type="submit" value="', $txt['quick_mod_go'], '" onclick="return document.forms.quickModForm.qaction.value != \'\' && confirm(\'', $txt['quickmod_confirm'], '\');" class="button qaction"> + </div><!-- #quick_actions -->'; + } + + echo ' + </div><!-- #messageindex -->'; + + // Finish off the form - again. + if (!empty($context['can_quick_mod']) && $options['display_quick_mod'] > 0 && !empty($context['topics'])) + echo ' + <input type="hidden" name="' . $context['session_var'] . '" value="' . $context['session_id'] . '"> + </form>'; + + echo ' + <div class="pagesection"> + ', template_button_strip($context['normal_buttons'], 'right'), ' + ', $context['menu_separator'], ' + <div class="pagelinks floatleft"> + <a href="#main_content_section" class="button" id="bot">', $txt['go_up'], '</a> + ', $context['page_index'], ' + </div>'; + + // Mobile action buttons (bottom) + if (!empty($context['normal_buttons'])) + echo ' + <div class="mobile_buttons floatright"> + <a class="button mobile_act">', $txt['mobile_action'], '</a> + </div>'; + + echo ' + </div>'; + } + + // Show breadcrumbs at the bottom too. + theme_linktree(); + + if (!empty($context['can_quick_mod']) && $options['display_quick_mod'] == 1 && !empty($context['topics']) && $context['can_move']) + echo ' + <script> + if (typeof(window.XMLHttpRequest) != "undefined") + aJumpTo[aJumpTo.length] = new JumpTo({ + sContainerId: "quick_mod_jump_to", + sClassName: "qaction", + sJumpToTemplate: "%dropdown_list%", + iCurBoardId: ', $context['current_board'], ', + iCurBoardChildLevel: ', $context['jump_to']['child_level'], ', + sCurBoardName: "', $context['jump_to']['board_name'], '", + sBoardChildLevelIndicator: "==", + sBoardPrefix: "=> ", + sCatSeparator: "-----------------------------", + sCatPrefix: "", + bNoRedirect: true, + bDisabled: true, + sCustomName: "move_to" + }); + </script>'; + + // Javascript for inline editing. + echo ' + <script> + var oQuickModifyTopic = new QuickModifyTopic({ + aHidePrefixes: Array("lockicon", "stickyicon", "pages", "newicon"), + bMouseOnDiv: false, + }); + </script>'; + + template_topic_legend(); + + // Lets pop the... + echo ' + <div id="mobile_action" class="popup_container"> + <div class="popup_window description"> + <div class="popup_heading">', $txt['mobile_action'], ' + <a href="javascript:void(0);" class="main_icons hide_popup"></a> + </div> + ', template_button_strip($context['normal_buttons']), ' + </div> + </div>'; +} + +/** + * Outputs the board icon for a standard board. + * + * @param array $board Current board information. + */ +function template_bi_board_icon($board) +{ + global $context, $scripturl; + + echo ' + <a href="', ($context['user']['is_guest'] ? $board['href'] : $scripturl . '?action=unread;board=' . $board['id'] . '.0;children'), '" class="board_', $board['board_class'], '"', !empty($board['board_tooltip']) ? ' title="' . $board['board_tooltip'] . '"' : '', '></a>'; +} + +/** + * Outputs the board icon for a redirect. + * + * @param array $board Current board information. + */ +function template_bi_redirect_icon($board) +{ + global $context, $scripturl; + + echo ' + <a href="', $board['href'], '" class="board_', $board['board_class'], '"', !empty($board['board_tooltip']) ? ' title="' . $board['board_tooltip'] . '"' : '', '></a>'; +} + +/** + * 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 ' + <a class="subject mobile_subject" href="', $board['href'], '" id="b', $board['id'], '"> + ', $board['name'], ' + </a>'; + + // Has it outstanding posts for approval? + if ($board['can_approve_posts'] && ($board['unapproved_posts'] || $board['unapproved_topics'])) + echo ' + <a href="', $scripturl, '?action=moderate;area=postmod;sa=', ($board['unapproved_topics'] > 0 ? 'topics' : 'posts'), ';brd=', $board['id'], ';', $context['session_var'], '=', $context['session_id'], '" title="', sprintf($txt['unapproved_posts'], $board['unapproved_topics'], $board['unapproved_posts']), '" class="moderation_link amt">!</a>'; + + echo ' + <div class="board_description">', $board['description'], '</div>'; + + // 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 ' + <p class="moderators">', count($board['link_moderators']) === 1 ? $txt['moderator'] : $txt['moderators'], ': ', implode(', ', $board['link_moderators']), '</p>'; +} + +/** + * Outputs the board stats for a standard board. + * + * @param array $board Current board information. + */ +function template_bi_board_stats($board) +{ + global $txt; + + echo ' + <p> + ', $txt['posts'], ': ', comma_format($board['posts']), '<br>', $txt['board_topics'], ': ', comma_format($board['topics']), ' + </p>'; +} + +/** + * Outputs the board stats for a redirect. + * + * @param array $board Current board information. + */ +function template_bi_redirect_stats($board) +{ + global $txt; + + echo ' + <p> + ', $txt['redirects'], ': ', comma_format($board['posts']), ' + </p>'; +} + +/** + * 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 ' + <p>', $board['last_post']['last_post_message'], '</p>'; +} + +/** + * 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'] ? '<a href="' . $scripturl . '?action=unread;board=' . $child['id'] . '" title="' . $txt['new_posts'] . ' (' . $txt['board_topics'] . ': ' . comma_format($child['topics']) . ', ' . $txt['posts'] . ': ' . comma_format($child['posts']) . ')" class="new_posts">' . $txt['new'] . '</a> ' : '') . '<a href="' . $child['href'] . '" ' . ($child['new'] ? 'class="board_new_posts" ' : '') . 'title="' . ($child['new'] ? $txt['new_posts'] : $txt['old_posts']) . ' (' . $txt['board_topics'] . ': ' . comma_format($child['topics']) . ', ' . $txt['posts'] . ': ' . comma_format($child['posts']) . ')">' . $child['name'] . '</a>'; + else + $child['link'] = '<a href="' . $child['href'] . '" title="' . comma_format($child['posts']) . ' ' . $txt['redirects'] . ' - ' . $child['short_description'] . '">' . $child['name'] . '</a>'; + + // Has it posts awaiting approval? + if ($child['can_approve_posts'] && ($child['unapproved_posts'] || $child['unapproved_topics'])) + $child['link'] .= ' <a href="' . $scripturl . '?action=moderate;area=postmod;sa=' . ($child['unapproved_topics'] > 0 ? 'topics' : 'posts') . ';brd=' . $child['id'] . ';' . $context['session_var'] . '=' . $context['session_id'] . '" title="' . sprintf($txt['unapproved_posts'], $child['unapproved_topics'], $child['unapproved_posts']) . '" class="moderation_link amt">!</a>'; + + $children[] = $child['new'] ? '<span class="strong">' . $child['link'] . '</span>' : '<span>' . $child['link'] . '</span>'; + } + + echo ' + <div id="board_', $board['id'], '_children" class="children"> + <p><strong id="child_list_', $board['id'], '">', $txt['sub_boards'], '</strong>', implode(' ', $children), '</p> + </div>'; + } +} + +/** + * Shows a legend for topic icons. + */ +function template_topic_legend() +{ + global $context, $settings, $txt, $modSettings; + + echo ' + <div class="tborder" id="topic_icons"> + <div class="information"> + <p id="message_index_jump_to"></p>'; + + if (empty($context['no_topic_listing'])) + echo ' + <p class="floatleft">', !empty($modSettings['enableParticipation']) && $context['user']['is_logged'] ? ' + <span class="main_icons profile_sm"></span> ' . $txt['participation_caption'] . '<br>' : '', ' + ' . ($modSettings['pollMode'] == '1' ? '<span class="main_icons poll"></span> ' . $txt['poll'] . '<br>' : '') . ' + <span class="main_icons move"></span> ' . $txt['moved_topic'] . '<br> + </p> + <p> + <span class="main_icons lock"></span> ' . $txt['locked_topic'] . '<br> + <span class="main_icons sticky"></span> ' . $txt['sticky_topic'] . '<br> + <span class="main_icons watch"></span> ' . $txt['watching_topic'] . '<br> + </p>'; + + if (!empty($context['jump_to'])) + echo ' + <script> + if (typeof(window.XMLHttpRequest) != "undefined") + aJumpTo[aJumpTo.length] = new JumpTo({ + sContainerId: "message_index_jump_to", + sJumpToTemplate: "<label class=\"smalltext jump_to\" for=\"%select_id%\">', $context['jump_to']['label'], '<" + "/label> %dropdown_list%", + iCurBoardId: ', $context['current_board'], ', + iCurBoardChildLevel: ', $context['jump_to']['child_level'], ', + sCurBoardName: "', $context['jump_to']['board_name'], '", + sBoardChildLevelIndicator: "==", + sBoardPrefix: "=> ", + sCatSeparator: "-----------------------------", + sCatPrefix: "", + sGoButtonLabel: "', $txt['quick_mod_go'], '" + }); + </script>'; + + echo ' + </div><!-- .information --> + </div><!-- #topic_icons -->'; +} + +?> diff --git a/plugin/f9_theme/src/Settings.template.php b/plugin/f9_theme/src/Settings.template.php new file mode 100644 index 0000000..7a3074f --- /dev/null +++ b/plugin/f9_theme/src/Settings.template.php @@ -0,0 +1,252 @@ +<?php +/** + * Simple Machines Forum (SMF) + * + * @package SMF + * @author Simple Machines https://www.simplemachines.org + * @copyright 2022 Simple Machines and individual contributors + * @license https://www.simplemachines.org/about/smf/license.php BSD + * + * @version 2.1.0 + */ + +/** + * This pseudo-template defines all the theme options + */ +function template_options() +{ + global $context, $txt, $modSettings; + + $context['theme_options'] = array( + 'Display Options', + array( + 'id' => 'dark_light', + 'label' => 'Whether to use Light or Dark mode', + 'options' => array( + 0 => 'Use Device Settings', + 1 => 'Light', + 2 => 'Dark', + + ), + 'default' => 0, + ), + $txt['theme_opt_display'], + array( + 'id' => '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', + ), + ); +} + +?> diff --git a/plugin/f9_theme/src/css/adaptive_colors.css b/plugin/f9_theme/src/css/adaptive_colors.css new file mode 100644 index 0000000..b3bb3d2 --- /dev/null +++ b/plugin/f9_theme/src/css/adaptive_colors.css @@ -0,0 +1 @@ +@import url("../css/dark_colors.css") (prefers-color-scheme: dark); diff --git a/plugin/f9_theme/src/css/admin.css b/plugin/f9_theme/src/css/admin.css new file mode 100644 index 0000000..fcf3459 --- /dev/null +++ b/plugin/f9_theme/src/css/admin.css @@ -0,0 +1,609 @@ +/* Start with most common */ +.action_admin .generic_list { + overflow: auto; +} +#admin_content .windowbg { + margin: 10px 0 10px 0; + box-shadow: none; +} +#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; +} +.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: var(--menubar-background); + border: 1px solid var(--tertiary-border); + 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 */ +#modcenter, #agreement, #reserved { + display: block; + width: 100%; +} +/* 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/plugin/f9_theme/src/css/calendar.css b/plugin/f9_theme/src/css/calendar.css new file mode 100644 index 0000000..63d1148 --- /dev/null +++ b/plugin/f9_theme/src/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/plugin/f9_theme/src/css/calendar.rtl.css b/plugin/f9_theme/src/css/calendar.rtl.css new file mode 100644 index 0000000..2622398 --- /dev/null +++ b/plugin/f9_theme/src/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/plugin/f9_theme/src/css/colors.css b/plugin/f9_theme/src/css/colors.css new file mode 100644 index 0000000..618d59d --- /dev/null +++ b/plugin/f9_theme/src/css/colors.css @@ -0,0 +1,171 @@ +:root { + /* normal body text */ + --body-background-rgb: 236, 231, 242; + --body-background: rgb(var(--body-background-rgb)); + --body-text-rgb: 34, 34, 34; + --body-text: rgb(var(--body-text-rgb)); + --body-shadow-rgb: 255, 255, 255; + --bold-mid-text: #333; + --bold-body-text: #444; + --link-text: #346; + --link-text-hover: var(--link-text); + --header-text: #555; + + /* + * Header image + * Not technically a color, but mode-dependant. + */ + --header-image: url('../images/header_light.png'); + + /* + * ui elements + */ + + --main-background: #fff; + --main-bg-to: #f1f3f5; + --secondary-background: #f7f7f7; + --dropdown-bg-to: #e2e9f3; + + --tooltip-background: #ddd; + --tooltip-hover-background: #888; + --tooltip-hover-text: #eee; + + --main-border: #b8b8b8; + --secondary-border: #666; + --tertiary-border: #ddd; + + --selection-bg: #99d4ff; + --title-bar-text: #fff; + --separator: #fff; + --new-post-background: linear-gradient(#f97b00,#884d00); + + /* breadcrumb nav */ + --bc-bg-from: #7e5ba6; + --bc-bg-to: #68478d; + --bc-text: #fff; + --bc-border: var(--secondary-border); + --bc-separator: var(--bc-text); + + /* misc boxes */ + --roundframe-background: #f8f8f8; + --roundframe-border: var(--tertiary-border); + + /* top bars */ + --nav-bg-from: #eef; + --nav-bg-mid: #fafaff; + --nav-bg-to: var(--main-background); + + /* "badges" in menus; e.g. `Messages (5)` */ + --badge-background: #6d90ad; + --badge-text: #fff; + --menu-badge-background: rgba(0, 0, 0, 0.2); + + /* drop-down menus */ + --dropmenu-bold-text: #333; + --dropmenu-text-hover: #fff; + --dropmenu-background-hover: #597b9f; + --dropmenu-border-hover: #4a6b8c; + + --menu-notify-border: #ddd; + --menu-notify-background-hover: #eee; + + --menubar-background: #eee; + + /* input colors */ + --input-background: var(--main-background); + --input-text: var(--body-text); + --input-border: #bbb; + --input-disabled-background: #eee; + --input-disabled-text: #999; + --input-disabled-border: #b6b6b6; + --input-border-hover: #82a2bc; + --input-border-focus: #7fb0d8; + --input-valid: #f5fff0; + --input-invalid: #fff0f0; + + /* highlighted (not selected!) text */ + --highlight-color: #ff7200; + + /* pagination */ + --current-page-text: #b46100; + + /* post borders */ + --post-ew-border: #7f7f7f; + + /* buttons */ + --btn-background: #ececec; + --btn-text: var(--body-text); + --btn-shadow-rgb: 221, 221, 221; + --btn-shadow-alt: #ddd; + --btn-ns-border: #ddd; + --btn-left-border: #bbb; + --btn-right-border: #aaa; + --btn-hover-border: #6af; + + --btn-active-background: #557ea0; + --btn-active-text: #fff; + --btn-active-border: #558080; + + --btn-active-hover-text: #ffc187; + --btn-active-hover-bg-to: #557ea0; + --btn-active-hover-bg-from: #406482; + + /* callouts */ + --callout-error-bg: #ffeeee; + --callout-notice-bg: #fff6ca; + --callout-info-bg: #ccffcc; + + --table-even: #f0f4f7; + --table-odd: #fdfdfd; + --table-hover: #e2eef8; + --table-locked: #e7eaef; + --table-important: #cfdce8; + --table-important-locked: #e8d8cf; + --table-highlight: #ffffe0; + + /* TODO: progress bars */ + + /* + * editor + * For the most part, we try to follow the general UI colors. There + * are a few special elements though. + */ + --editor-btngrp-background: #ddd; + --editor-btn-fill: #111; + --editor-btn-disabled-fill: #888; + --editor-btn-invert: 0.0; + + /* + * bbcode + */ + /* post quote */ + --quote-ns-border: #d6dfe2; + --quote-ew-border: #aaa; + --quote-cite-separator: rgba(0, 0, 0, 0.1); + --quote-background: #e0e6f6; + --quote-alt-background: #ebf4f8; + /* this one applies to both quote and code blocks */ + --quote-header-text: #666; + /* code block */ + --code-background: #f3f3f3; + --code-top-border: #bbb; + --code-bottom-border: #aaa; + --code-ew-border: #dfdfdf; + /* bbcode link */ + --bbcode-link: #a8b6cf; + + /* warning levels */ + --warn-moderate-text: #ffa500; + --warn-watch-text: green; /* ??? */ + --moderation-link-background: #f59e00; /* ??? */ + + /* user colors */ + --user-birthday-text: #920ac4; + --user-event-text: #078907; + --user-holiday-text: #025dff; + + + /* ajax notification bar */ + --notify-bar-background: var(--main-background); + --notify-bar-color: #f96f00; +} diff --git a/plugin/f9_theme/src/css/dark_colors.css b/plugin/f9_theme/src/css/dark_colors.css new file mode 100644 index 0000000..a9f79c0 --- /dev/null +++ b/plugin/f9_theme/src/css/dark_colors.css @@ -0,0 +1,66 @@ +:root { + --body-background-rgb: 51, 39, 65; + --body-text-rgb: 238, 238, 238; + --body-shadow-rgb: 0, 0, 0; + --bold-mid-text: #ddd; + --bold-body-text: #ccc; + --link-text: #9bd; + --header-text: #bbb; + + --header-image: url('../images/header_dark.png'); + + --main-background: #222; + --main-bg-to: #1a1a1a; + --secondary-background: #2a2a2a; + --dropdown-bg-to: #1a1a1a; + + --tooltip-background: #333; + --tooltip-hover-background: #aaa; + --tooltip-hover-text: #222; + + --code-background: #111; + + --menubar-background: #333; + + --main-border: #8b8b8b; + --tertiary-border: #444; + + --roundframe-background: #2a2a2a; + --roundframe-border: #3a3a3a; + + --nav-bg-from: #2a2a2f; + --nav-bg-mid: #25252a; + + --table-even: #2a2c2f; + --table-odd: #333; + --table-hover: #556; + --table-locked: #222; + --table-important: #555; + --table-important-locked: #4a4a4a; + --table-highlight: #443; + + --btn-ns-border: #666; + --btn-left-border: #444; + --btn-right-border: #333; + --btn-hover-border: #479; + --btn-shadow-rgb: 30, 30, 30; + --btn-shadow-alt: #333; + + --btn-active-background: #346; + + --editor-btngrp-background: #444; + --editor-btn-fill: #fff; + --editor-btn-disabled-fill: #777; + --editor-btn-invert: 1.0; + --editor-btn-selected: #666; + + --quote-background: #202a3f; + --quote-alt-background: #2b3438; + + --callout-error-bg: #422; + --callout-notice-bg: #442; + --callout-info-bg: #242; + + --input-valid: #242; + --input-invalid: #422; +} diff --git a/plugin/f9_theme/src/css/index.css b/plugin/f9_theme/src/css/index.css new file mode 100644 index 0000000..2eb587a --- /dev/null +++ b/plugin/f9_theme/src/css/index.css @@ -0,0 +1,4239 @@ +/* You can find detailed information at https://wiki.simplemachines.org/smf/Curve2_CSS +/* Index */ +html { + background-color: var(--body-background); + scroll-padding-top: 3rem; +} +body { + font: 83.33%/150% "Helvetica", "Verdana", "Nimbus Sans L", Arial, "Liberation Sans", sans-serif; + color: var(--body-text); + display: flex; + flex-direction: column; + min-height: 100vh; +} +::selection { + text-shadow: none; + background: var(--selection-bg); + 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, button, select, textarea { + color: var(--input-text); + font: 83.33%/150% "Helvetica", "Verdana", "Nimbus Sans L", Arial, "Liberation Sans", sans-serif; + background: var(--input-background); + outline: none; + border: 1px solid var(--input-border); + 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, button:hover, select:hover { + outline: none; + border-color: var(--input-border-hover); +} +textarea:hover { + background: var(--input-background); +} +input:focus, textarea:focus, button:focus, select:focus { + outline: none; + border-color: var(--input-border-focus); + background: var(--input-background); +} +input, button, select { + padding: 0 0.4em; + height: 2em; + line-height: 2em; +} +select { + padding: 0.22em 0.2em; /* selects don't apply line-height */ +} +/* 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%; +} +/* This is a specific issue on Ubuntu - Chrome */ +#chrome input { + font-family: "Helvetica", "Verdana", Arial, "Liberation Sans", sans-serif; +} +/* The following is necessary */ +textarea { + font-size: 1em; +} + +/* 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(--tertiary-border); + border-radius: 3px; +} +fieldset legend { + font-weight: bold; + color: var(--header-text); + 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: var(--bold-body-text); +} +.cat_bar strong { + color: var(--title-bar-text); +} +em, .em { + font-style: italic; +} +/* Default <strong> color on these tags */ +h1, h2, h3, h4, h5, h6 { + font-size: 1em; + color: var(--bold-body-text); +} +/* 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 { + background: var(--input-disabled-background); + color: var(--input-disabled-text); + border-color: var(--input-disabled-border); + opacity: 0.8; + cursor: default; +} +/* Standard horizontal rule.. ([hr], etc.) */ +hr { + border: none; + margin: 12px 0; + height: 2px; + background: var(--separator); + box-shadow: 0 1px 0 #bbb inset; +} +/* This is about links */ +a, a:visited { + color: var(--link-text); + text-decoration: none; +} +a:hover { + text-decoration: underline; + cursor: pointer; +} + +/* 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(--new-post-background); + color: var(--title-bar-text); + font: 9px/15px verdana, sans-serif; + border-radius: 2px; + opacity: 0.8; +} +a.new_posts:visited { + color: var(--title-bar-text); +} +.new_posts:hover, .new_posts:focus { + text-decoration: 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; +} +h3.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 0 8px 0; + padding: 6px 10px; + font-size: 0.85rem; + border: 1px solid var(--quote-ns-border); + border-left: 2px solid var(--quote-ew-border); + border-right: 2px solid var(--quote-ew-border); +} +blockquote cite { + display: block; + border-bottom: 1px solid var(--quote-cite-separator); + font-size: 0.9em; + margin-bottom: 3px; +} +blockquote cite::before { + color: var(--quote-ew-border); + font-size: 22px; + font-style: normal; + content: "\275D"; + margin-right: 3px; + vertical-align: middle; +} +.bbc_standard_quote { + background-color: var(--quote-background); +} +.bbc_alternate_quote { + background-color: var(--quote-alt-background); +} + +/* A code block - maybe PHP ;). */ +.bbc_code { + display: block; + font-size: 0.78rem; + background: var(--code-background); + border: 1px solid var(--code-ew-border); + border-top: 2px solid var(--code-top-border); + border-bottom: 3px solid var(--code-bottom-border); + 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: var(--quote-header-text); + 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 var(--bbcode-link); +} +.bbc_link:hover { + text-decoration: none; + border-bottom: 1px solid var(--link-text-hover); +} +.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 { + 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; + border: 1px solid #c5c5c5; + border-radius: 3px; + box-shadow: 0 1px 2px rgba(0, 0, 0, .2), + 0 1px 1px #fff inset, + 0 -5px 4px rgba(0,0,0,.1) inset; + transition: background-color 0.25s; +} +.toggle_down::before { + background-position: 0 -17px; +} + +.toggle_up:hover:before, .toggle_down:hover: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 { + opacity: 1; +} + +/* Highlighted text - such as search results. */ +.highlight { + font-weight: bold; + color: var(--highlight-color) !important; + font-size: 1.1em; + background-color: inherit; +} + +/* the page navigation area */ +.pagesection { + padding: 2px 0; + overflow: hidden; + clear: both; +} +.pagesection .pagelinks { + display: inline-block; + float: left; +} +.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; + color: var(--current-page-text); + font-family: verdana, sans-serif; + 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; + padding: 1px 0; +} + +/* Calendar colors for birthdays, events and holidays */ +.birthday { + color: var(--user-birthday-text); +} + +.event { + color: var(--user-event-text); +} + +.holiday > span { + color: var(--user-holiday-text); +} +/* Events that are currently selected on the calendar. Won't see it much, probably. */ +.sel_event { + font-weight: bold; +} + +.warn_moderate { + color: var(--warn-moderate-text); +} + +.warn_watch, .success { + color: var(--warn-watch-text); +} + +a.moderation_link, a.moderation_link:visited { + font-weight: bold; + padding: 0px 8px; + background: var(--moderation-link-background); +} +/* AJAX notification bar +------------------------------------------------------- */ +#ajax_in_progress { + background: var(--notify-bar-background); + border-bottom: 4px solid var(--notify-bar-color); + color: var(--notify-bar-color); + 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; + text-decoration: underline; + 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; +} +.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 var(--post-ew-border); + border-right: 1px solid var(--post-ew-border); +} + +/* Styles used by the auto suggest control. +------------------------------------------------------- */ +.auto_suggest_div { + position: absolute; + visibility: hidden; + border-radius: 3px; + outline: none !important; + border: 1px solid var(--main-border); + z-index: 100; +} +.auto_suggest_item { + background: var(--tooltip-background); + padding: 1px 4px; +} +.auto_suggest_item_hover { + background: var(--tooltip-hover-background); + cursor: pointer; + color: var(--tooltip-hover-text); + padding: 1px 4px; +} + +/* Styles for the standard dropdown menus. +------------------------------------------------------- */ +.dropmenu, #top_info { + position: relative; + display: flex; +} +/* Level 1 button background. */ +.dropmenu > li, #top_info > li { + display: inline-block; + margin: 0 2px 0 1px; + font-size: 0.9em; + line-height: 1.9em; +} + +/* Allow for splitting buttons to left/right */ +.dropmenu > li.button_separator { + margin-left: auto; +} + +/* 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: 0 5px; + /* TODO: where is this used? */ + color: var(--badge-text); + background: var(--badge-background); + border-radius: 8px; +} +.dropmenu li .active .amt, #top_info li .active .amt { + background: var(--menu-badge-background); + color: inherit; +} +#top_info .top_menu.visible { + display: block; +} +/* Needed for new PM notifications. */ +.dropmenu li strong { + color: var(--dropmenu-bold-text); +} + +.dropmenu li a, #top_info > li > a { + padding: 0 7px 0 7px; + display: block; + border: 1px solid transparent; + border-radius: 4px; +} +/* Level 1 active button. */ +.dropmenu a.active, #top_info a.active { + font-weight: bold; +} + +/* Level 1 hover effects. */ +.dropmenu > li:hover > a, .dropmenu > li > a:focus, +#top_info > li:hover > a, #top_info > li > a:focus, #top_info > li > a.open { + background: var(--dropmenu-background-hover); + border: 1px solid var(--dropmenu-border-hover); + color: var(--dropmenu-text-hover); + cursor: pointer; + text-decoration: none; + box-shadow: 0 4px 4px rgba(255, 255, 255, 0.1) inset; + text-shadow: 0 0 2px #000; +} +/* Level 1 active button. */ +.dropmenu li a.active:hover, .dropmenu li:hover a.active { +} + +a.mobile_user_menu, +a[class^="mobile_generic_menu_"] { + display: none; +} + +#main_menu { + padding: 4px; + background: var(--nav-bg-mid); + background-image: linear-gradient(to bottom, var(--nav-bg-mid) 0%, var(--nav-bg-to) 90%); +} + +/* User information. */ +#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(--menu-notify-border); +} +.unread_notify { + border-bottom: 1px solid var(--menu-notify-border); +} +.no_unread { + margin-top: 5px; + text-align: center; +} +.unread_notify:hover { + background: var(--menu-notify-background-hover); + text-decoration: 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. */ +.dropmenu li ul, .top_menu { + z-index: 90; + position: absolute; + display: none; + min-width: 18.2em; + padding: 0.5em; + font-weight: normal; + border: solid 1px var(--btn-right-border); + border-left: solid 1px var(--btn-left-border); + border-top: solid 1px var(--btn-ns-border); + border-radius: 4px; + box-shadow: 3px 3px 4px rgba(0, 0, 0, 0.3); + background: var(--main-background); +} +/* Level 2 link background. */ +.dropmenu li li { + margin: 0; + padding: 0; + width: 17em; + font-size: 1em; + border-radius: 3px; + border: 1px solid transparent; +} +/* Necessary to allow highlighting of 1st level while hovering over submenu. */ +.dropmenu li:hover li a, .dropmenu li li a { + background: none; + padding: 0 9px; + color: var(--link-text-hover); + border: none; + line-height: 2.2em; +} + +.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%; +} +/* Level 3 submenu wrapper positioning. */ +.dropmenu li ul ul { + margin: -2em 0 0 15.3em; +} +/* 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 { + border: none; +} + +.dropmenu li li:hover > a, .dropmenu li li a:focus, .dropmenu li li a:hover { + color: var(--bold-body-text); + text-decoration: none; + border: 1px solid var(--tertiary-border); + border-top: 1px solid var(--tertiary-border); +} +/* Reposition Level 2 submenu as visible on hover. */ +.dropmenu li:hover ul { + display: block; +} +/* 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: -14px; +} +.dropmenu li li.subsections > a::after { + position: absolute; + padding: 5px 0; + right: 10px; + font: 83.33%/150% Arial, sans-serif; + 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. +------------------------------------------------------- */ +.buttonlist, .buttonrow, .pagelinks { + z-index: 100; + padding: 5px 0 5px 0; +} +.button, .quickbuttons > li > a, .inline_mod_check { + display: inline-block; + padding: 1px 10px; + color: var(--btn-text); + 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(--btn-ns-border) var(--btn-left-border) var(--btn-right-border) var(--btn-ns-border); + border-radius: 5px; + box-shadow: 1px 1px 1px rgba(var(--btn-shadow-rgb), 0.57); + box-sizing: border-box; + vertical-align: middle; +} +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(--link-text); +} +.button:hover, .button:focus, +.quickbuttons > li:hover > a, .quickbuttons > li > a:focus { + color: var(--btn-text-hover); + border-color: var(--btn-right-border) var(--btn-ns-border) var(--btn-ns-border) var(--btn-left-border); + box-shadow: -1px -1px 2px rgba(var(--btn-shadow-rgb), 0.7), -1px -2px 4px var(--btn-shadow-alt) inset; + text-decoration: none; +} +.button:hover, .button:focus { + color: #af6700; +} +/* the active one */ +.button.active { + background: var(--btn-active-background); + color: var(--btn-active-text); + font-weight: bold; + border: 1px solid var(--btn-active-border); + text-shadow: 0 0 1px #000; +} +.button.active:hover, .button.active:focus { + color: var(--btn-active-hover-text); + background: var(--btn-active-hover-bg-to); + background-image: linear-gradient(to bottom, var(--btn-active-hover-bg-from) 0%, var(--btn-active-hover-bg-to) 70%); + box-shadow: 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; + background: var(--main-background); + /* TODO: better color */ + border: 1px solid var(--main-border); + box-shadow: 0 2px 3px rgba(0, 0, 0, 0.14); + border-radius: 7px; +} + +/* Set maximum width limit for content */ +#top_section .inner_wrap, #wrapper, #header, #footer .inner_wrap { + max-width: 900px; + margin: 0 auto; + width: 90%; +} + +.notice { + font-weight: bold; +} + +#languages_form, #search_form { + padding: 5px 0; +} +#languages_form { + margin: 0 0 0 10px; +} +/* The logo and slogan. */ +#header { + margin: 0 auto; + padding: 0; + display: flex; + align-items: flex-end; +} + +/* Remove the "padding" from the bottom */ +#header a img { + display: block; + content: var(--header-image); + height: 100px; +} + +/* The main title. */ +h1.forumtitle { + font-size: 1.8em; + font-family: "Tahoma", sans-serif; + padding: 22px 12px 6px 10px; + font-weight: normal; + flex: 1 1 auto; +} +h1.forumtitle a { + color: #a85400; + text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.3); +} + +/* 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; +} +#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 rgba(var(--body-text-rgb), 0.5); + margin-bottom: 0px; + border-radius: 6px 6px 0 0; + background: var(--nav-bg-mid); + background-image: linear-gradient(to bottom, var(--nav-bg-from) 0%, var(--nav-bg-mid) 90%); + padding: 8px 8px 4px; +} +.user { + padding: 0 4px 4px 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; +} +/* The login form. */ +#guest_form { + overflow: hidden; + font-size: 0.9em; + margin-left: -2px; +} +/* News section. */ +#inner_wrap .news { + padding: 0 0 4px 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) */ +.navigate_section { + padding: 3px 0 0 0; + float: left; + width: 100%; +} +#main_content_section .navigate_section { + margin: 4px 0 0 0; + padding: 0; +} +.navigate_section ul { + margin: 0; + padding: 2px 10px; + font-size: 0.9em; + overflow: hidden; + border: 1px solid var(--bc-border); + border-radius: 2px; + background-color: var(--bc-bg-to); + background-image: linear-gradient(to bottom, var(--bc-bg-from) 0%, var(--bc-bg-to) 95%); + box-shadow: 0 -2px 2px rgba(0, 0, 0, 0.08); +} +.navigate_section ul li { + float: left; + padding-bottom: 3px; + line-height: 1.1em; + color: var(--bc-text); +} +.navigate_section ul li a, .navigate_section ul li em { + padding: 4px 0 4px; + margin-top: -4px; + display: inline-block; + color: var(--bc-text); +} +.navigate_section ul li span { + display: inline-block; + margin-top: 8px; +} +.navigate_section ul li .dividers { + color: var(--bc-separator); + font: 83.33%/150% Arial, sans-serif; + padding: 0 2px 0 6px; +} +.navigate_section ul li .board_moderators a { + padding: 4px 0; +} + +.navigate_section a:hover span { + text-decoration: underline; +} + +/* The content section */ +#content_section { + margin: 0 auto; + clear: both; +} +#main_content_section { + padding: 5px 12px 16px 12px; +} +#main_content_section::after { + content: ""; + display: block; + clear: both; +} +/* Footer is now full-width by default. */ +/* The footer with copyright links etc. */ +#footer { + margin: 0 0 4em 0; + padding: 10px 0; + flex: none; +} +#footer li, #footer p, #footer a { + font-size: 0.9em; + color: var(--body-text); +} +#footer li.copyright { + display: block; + font-family: Verdana, sans-serif; /* Copyright must be Verdana! */ +} + +/* The posting icons */ +#postbuttons_upper ul li a span { + line-height: 19px; + padding: 0 0 0 6px; +} +.mark_read { + margin: -5px 0 16px 0; + float: right; +} +.mark_read .buttonlist { + margin: 0; + padding: 0; +} + +.fix_rtl_names { + display: inline-block; +} + +/* The quick buttons */ +.quickbuttons { + margin: 0 0 5px; + clear: right; + float: right; + text-align: right; +} +#recent .quickbuttons { + margin: 0; +} +.quickbuttons > li { + float: left; +} +.quickbuttons > li > a, .inline_mod_check { + display: block; + height: auto; + padding: 0 4px; + color: var(--btn-text); + line-height: 1.375rem; + border-radius: 0; +} +.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(--main-background); + font-weight: normal; + text-align: left; + /* TODO: huh? */ + 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; + float: right; + font-size: 1em; +} +#topic_icons #message_index_jump_to { + padding: 0; + float: right; +} + +/* 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; +} + +/* 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; +} +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(--main-background); + color: var(--body-text); + margin-left: 5ex; + border: 1px solid var(--body-text); +} +.valid_input { + background: var(--input-valid); +} +.invalid_input { + background: var(--input-invalid); +} + +/* 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; +} +#credits p { + font-style: italic; +} + +.errorfile_table { + background: #f0f4f7; + 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 { + margin: 5px 0; + padding: 4px; + border-radius: 5px; + background-color: var(--menubar-background); +} +/* 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/bell.png); + background-size: 16px; +} +/* Load better icons for higher resolution screens */ +@media + screen and (-webkit-min-device-pixel-ratio: 1.66), + screen and (min-resolution: 160dpi) { + .main_icons::before { + background-image: url(../images/icons/main_icons_sprite_hd.png); + } + .main_icons.alerts::before { + background-image: url(../images/icons/bell_hd.png); + } +} + +/* 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-position: -161px -135px; +} +.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; + filter: invert(var(--editor-btn-invert)); +} +.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: var(--callout-error-bg); + border-top: 2px solid #c34; + border-bottom: 2px solid #c34; +} +.errorbox h3 { + 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: var(--body-text); + background: var(--callout-notice-bg); + border-top: 1px solid #ffd324; + border-bottom: 1px solid #ffd324; +} +.infobox { + color: var(--body-text); + background: var(--callout-info-bg); + 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 var(--main-border); + background: var(--main-background); + min-height: 16px; + line-height: 1.4em; + border-radius: 2px; + position: relative; + overflow: hidden; + color: rgba(var(--body-text-rgb), 0.6); +} +.generic_bar span, .progress_bar span { + position: relative; + z-index: 2; + text-shadow: 1px 1px rgba(var(--body-shadow-rgb), .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; +} + +img.xmpp_pfbtn, img.matrix_pfbtn { + width: 16px; + height: 16px; +} + +img.matrix_pfbtn { + filter: invert(var(--editor-btn-invert)); +} + +#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 solid var(--main-border); +} +#detailedinfo dt, #tracking dt { + width: 35%; + margin: 0 0 3px 0; + font-weight: bold; + color: var(--bold-body-text); +} +#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 var(--secondary-border); + 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; +} +.counter + .topic_details { + margin-left: 25px; +} +.list_posts { + border-top: 1px solid var(--tertiary-border); + box-shadow: 0 1px 0 var(--main-background) inset; + padding-top: 1em; + margin-top: 1em; + margin-bottom: 1em; + clear: both; + -webkit-hyphens: auto; + -ms-hyphens: auto; + hyphens: auto; + overflow-wrap: break-word; +} +.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 var(--main-border); + display: block; + margin-bottom: 0.5em; +} +.boardslist a:hover { + text-decoration: none; + border-bottom: 1px solid var(--link-text-hover); +} +.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 h3 span#author, #personal_messages h3 span#topic_title { + float: left; +} +#personal_messages h3 span#author { + margin: 0 0 0 6px; +} +#personal_messages h3 span#topic_title { + margin: 0 0 0 9em; +} +#personal_messages div.labels { + padding: 0 12px 0 0; +} +#personal_messages .capacity_bar { + background: #f0f4f7; + 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: var(--bold-mid-text); + 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 .alert_inline_time { + display: none; +} +#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; +} +#searchform .roundframe { + border-radius: 0; + margin: 0; + padding: 32px; +} +#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(--tertiary-border); + border-radius: 7px; + 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: var(--bold-mid-text); + background: var(--main-background); + border: 1px solid var(--main-border); + 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(--body-background-rgb, 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; + box-shadow: 0 3px 6px rgba(0, 0, 0, 0.5); + border: 1px solid var(--secondary-border); + border-radius: 7px 7px 3px 3px; + margin: 0 auto; + padding: 0; +} +.popup_window { + top: 15%; + width: 480px; + padding: 0 6px 6px 6px; +} +.popup_heading { + padding: 10px 8px; + color: #bf6900; +} +.popup_content { + color: var(--bold-body-text); + line-height: 1.6em; + max-height: 30em; + overflow: auto; + padding: 10px 8px; + border: 1px solid var(--main-border); + border-bottom: 1px solid var(--tertiary-border); + 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: #f0f4f7; + margin: 12px 0 0 0; + padding: 12px 16px; + border: 1px solid var(--tertiary-border); + border-radius: 6px; + box-shadow: 0 -2px 2px rgba(0, 0, 0, 0.1); + overflow: auto; +} +/* Here comes the glory... */ +.windowbg:nth-of-type(even), .bg.even { + background: var(--table-even); +} +.windowbg:nth-of-type(odd), .bg.odd { + background: var(--table-odd); +} + +/* Highlight the target item */ +.windowbg:target { + background: var(--table-highlight); +} + +/* Add some hover on table rows */ +tr.windowbg:hover { + background: var(--table-hover); +} + +/* Special treatment for #forumposts area */ +#forumposts .windowbg, #forumposts .approvebg, #forumposts .approvebg2, #pmFolder .windowbg { + overflow: visible; +} +/* Nobody wants locked topics to stand out much. */ +.windowbg.locked { + background: var(--table-locked); + opacity: 0.8; +} +/* Sticky topics get a different background */ +.windowbg.sticky { + background: var(--table-important); +} +/* Locked AND sticky are a bit more technical */ +.windowbg.sticky.locked { + background: var(--table-important-locked); +} +.windowbg.muted { + display: none !important; +} +.windowbg.mutedShow { + opacity: 0.5; +} +/* 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; +} + +/* Colors for background of posts requiring approval */ +.approvebg { + color: var(--body-text); + background: #ffeaea; +} +.approvebg2 { + color: var(--body-text); + background: #fff2f2; +} + +div#manage_boards dl dd textarea[name=desc] { + margin-top: 1px; +} + +.bold_text { + font-weight: bold; +} + +/* Profile > This needed for responsive (get rid of <br>) */ +.infolinks { + display: 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) { + margin-bottom: 15px; +} +h3 .collapse { + float: right; + margin: 4px 4px 0 0; +} +.board_icon a { + background: url(../images/boardicons.png) no-repeat 0 0 / 90px; + display: inline-block; + width: 45px; + height: 45px; +} +.board_icon a.board_on2 { + background-position: -45px 0; +} +.board_icon a.board_off { + background-position: 0 -45px; +} +.board_icon a.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; +} +.boardindex_table .info { + width: calc(55% - 80px); +} +.boardindex_table .board_stats { + padding: 13px 10px 10px; +} +.boardindex_table .board_stats p { + border-left: 1px solid var(--tertiary-border); + border-right: 1px solid var(--tertiary-border); +} +.info { + overflow: hidden; + overflow-wrap: break-word; + padding: 5px 5px 5px 0; + flex-grow: 1; +} +.info .subject { + font-weight: 600; + font-size: 1.1em; + color: #a85400; +} +.board_stats { + width: 15%; + font-size: 0.9em; + margin: 0 0 0 auto; + text-align: center; +} +.lastpost { + width: 30%; + font-size: 0.9em; + padding-top: 3px; +} +.board_icon, .info, .board_stats, .lastpost { + display: inline-block; + align-self: center; +} +.main_container { + margin-bottom: 20px; +} +.up_contain { + overflow: hidden; + border: 1px solid var(--tertiary-border); + margin: 0 0 3px 0; + display: flex; + flex-wrap: wrap; +} +/* Child boards */ +.children { + border-top: 1px solid var(--tertiary-border); + padding: 5px; + width: 100%; +} +.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(--tertiary-border); +} +#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-radius: 6px 6px 0 0; + border-bottom: none; + box-shadow: none; +} +#description_board h3, #description_board div { + display: inline-block; +} +#description_board h3::after { + content: " - "; +} +/* Topic list */ +#topic_header { + margin: 0; + border-radius: 0; + display: flex; +} +#topic_header div { + font-weight: bold; + font-size: 1em; + padding: 0; +} +#topic_header input { + margin-top: 5px !important; +} +#topic_container .windowbg { + border: 1px solid rgba(0, 0, 0, 0.13); + border-top: none; + display: flex; + box-shadow: none; + border-radius: 0; + padding: 0; + margin: 0; + overflow: hidden; +} +#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; +} +/* Quick moderation selects and submit */ +#quick_actions { + margin: 6px 0; +} +/* Notice that appears when topics were muted */ +.roadblock_notice { + margin: 8px 0; + background-color: var(--secondary-background); + padding: 4px 8px; + border-radius: 4px; + border: 1px solid var(--secondary-border); +} +/* Icons and jump to */ +#topic_icons::before { + display: block; + height: 8px; + clear: both; + content: ""; +} +#topic_icons .information { + font-size: .9em; + border-radius: 4px; +} +#topic_icons p { + padding: 0 12px 0 4px; + line-height: 2em; +} +/* 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; +} +#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::after { + content: ""; + display: block; + clear: both; +} +/* poster details and list of items */ +.poster { + float: left; + /* Don't set this in em.It will eat too much space if people need to set large text sizes. */ + width: 160px; + -webkit-hyphens: auto; + -ms-hyphens: auto; + hyphens: auto; + word-wrap: break-word; /* IE fallback */ + overflow-wrap: break-word; +} +.poster h4 { + font-size: 1.2em; +} +.poster h4, .poster h4 a, .poster li:hover h4 a, .poster h4 a:hover .poster li h4 a, .poster h4 a:focus { + margin: 0; + padding: 0; + color: #c06002; +} + +.poster .profile .profile_icons li, .poster .im_icons li { + display: table-cell; + padding-right: 5px; +} + +/* The visible stuff below the avatar. */ +.user_info > li { + margin: 3px 0 0 0; +} +.poster li.membergroup { + font-weight: bold; +} +/* @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, .moderatorbar { + margin: 0 0 0 175px; +} +.postarea div.flow_hidden { + width: 100%; +} +.moderatorbar { + clear: right; +} +.messageicon { + display: inline-block; +} +.messageicon img, #iconList img { + vertical-align: middle; +} +.keyinfo .postinfo { + padding: 1px 0 5px 0; + line-height: 1.5em; + font-size: 0.9em; + font-weight: bold; + display: flex; + flex-flow: row wrap; + justify-content: space-between; + align-items: center; +} +.keyinfo .postinfo::after, .under_message::after { + content: ""; + clear: right; + display: block; +} +.keyinfo .postinfo a, .keyinfo .postinfo a strong { + color: #ad6825; +} +.keyinfo .postinfo .spacer { + flex: 1 1 auto; +} +.keyinfo .postinfo .modified { + color: var(--bold-mid-text); + 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: var(--bold-mid-text); + font-weight: bold; +} +.subject_hidden a { + display: none; +} +.page_number { + color: #ad6825; + font-weight: bold; + padding: 4px 0 0 4px; + line-height: 1.5em; +} +.inner { + padding: 7px 8px 2px 2px; + margin: 0; + border-top: 1px solid var(--main-border); + box-shadow: 0 1px 0 var(--main-background) 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; +} +/* 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: 12px 0 0 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; + border-radius: 0 0 4px 4px; +} +#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: 12px 0 3px 0; + border-top: 1px solid var(--main-border); + box-shadow: 0 1px 0 var(--main-background) inset; + line-height: 1.4em; + font-size: 0.9em; +} +.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 { + float: left; +} +#moderationbuttons_strip { + float: left; + 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: #bd5336; + border-bottom: 1px solid #777; + padding: 0; + border-radius: 6px 6px 0 0; + box-shadow: 0 16px 20px rgba(255, 255, 255, 0.15) inset; + text-shadow: -1px -1px 1px rgba(0, 0, 0, 0.2); +} +.cat_bar.collapsed, +.cat_bar.cat_bar_round { + border-radius: 6px; +} +.cat_bar h3 { + padding: 8px 12px 6px 12px; +} +/* Styles for rounded headers. */ +.cat_bar .desc { + color: #fff; + font-size: 12px; + line-height: 1.5em; + font-weight: normal; + margin: -8px 0 4px 8px; +} +.cat_bar .desc a { + color: #fff; + font-weight: 600; +} +h3.catbg { + overflow: hidden; + font-size: 1.1em; + font-family: "Tahoma", sans-serif; +} +h3.catbg, h3.catbg a, h3.catbg a:hover { + color: #fff; +} +h3.catbg a:hover { + text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.4); + text-decoration: none; +} +h3.catbg .main_icons::before, h3.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; +} +/* Roundframe */ +.roundframe { + margin: 10px 0 0 0; + padding: 12px 16px; + background: var(--roundframe-background); + border: 1px solid var(--roundframe-border); + border-radius: 7px; + box-shadow: 0 -2px 2px rgba(0, 0, 0, 0.1); + overflow: auto; +} +/* TitleBar & SubBar */ +.title_bar { + border: 1px solid var(--tertiary-border); + background: #bd5336; + color: #ddd; + border-radius: 6px 6px 2px 2px; + background-image: linear-gradient(to bottom, #c77a65 0%, #bd5336 90%); + margin: 5px 0 0 0; +} +#messageindex > .title_bar, +tr.title_bar { + background-image: linear-gradient(to bottom,#8c4c3c 0%,#a05c4b 90%); +} +.sub_bar { + border-bottom: 1px solid var(--tertiary-border); + text-shadow: none; + background: none; + box-shadow: 0 -1px 0 #999 inset; + clear: both; +} +h3.titlebg, h4.titlebg, .titlebg, h3.subbg, h4.subbg, .subbg { + background: none; + color: var(--header-text); + font-family: "Tahoma", sans-serif; + font-weight: bold; + overflow: hidden; + padding: 6px 12px 5px 12px; + text-shadow: none; +} +.titlebg a, .subbg a { + background: none; + color: var(--header-text); + text-decoration: none; +} +.title_bar a { + color: #fff; +} +.title_bar + .windowbg, .title_bar + .roundframe { + margin-top: -1px; + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +/* Other */ +/* Information */ +.information { + background: var(--roundframe-background); + overflow: auto; + padding-bottom: .5em; + border: 1px solid var(--roundframe-border); + border-top: none; + border-radius: 0 0 7px 7px; + margin: 0 0 10px 0; + 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(--tertiary-border); +} +.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(--main-background); + border: 1px solid var(--tertiary-border); + 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: #fff; +} +.atwho-view .cur small { + color: #fff; +} +.atwho-view strong { + color: #3366ff; +} +.atwho-view .cur strong { + color: #fff; + 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(--tertiary-border); + 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 */ +h3.profile_hd::before { + vertical-align: middle; +} +h3.profile_hd::before, +.main_icons.profile_hd::before { + content: ""; + background: url(../images/icons/profile_hd.png) no-repeat; + height: 24px; + width: 24px; + display: inline-block; +} +.main_icons.profile_sm::before { + background: url(../images/icons/profile_sm.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 */ +.dropmenu li ul, .top_menu, .dropmenu li li:hover, .button, +.dropmenu li li:hover > a, .dropmenu li li a:focus, .dropmenu li li a:hover, +#top_section, .quickbuttons > li, +.quickbuttons li ul, .quickbuttons li ul li a:hover, .quickbuttons ul li a:focus, +.inline_mod_check, .popup_window, .post_options ul, +.post_options ul a:hover, .post_options ul a:focus, .notify_dropdown a:hover, .notify_dropdown a:focus { + background: var(--main-background); /* fallback for some browsers */ + /* background-image: linear-gradient(var(--main-background) 0%, var(--dropdown-bg-to) 70%); */ + background-image: linear-gradient(var(--dropdown-bg-to) 0%, var(--main-background) 70%); +} + +#inner_section { + background: none; +} + +/* Well some of them has different gradient effect on hover */ +.button:hover, #search_form .button:hover, .quickbuttons li:hover { + background: var(--main-background); /* fallback for some browsers */ + background-image: linear-gradient(var(--main-background) 0%, var(--dropdown-bg-to) 70%); + border-color: var(--btn-hover-border); +} +/* If it fits I sits... */ +.popup_content, .up_contain { + background: var(--main-background); + background-image: linear-gradient(to bottom, var(--main-background) 0%, var(--main-bg-to) 95%); +} + +/* 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(--tertiary-border); +} +.notify_dropdown span { + font-size: 0.9em; +} + +/* Some new stuff */ +#display_head { + clear: both; + margin: -7px 0 15px 0; +} +#display_head p { + color: #959595; +} +#display_head span { + margin: -4px 0 0 0; +} +.display_title { + font-weight: normal; + font-size: 26px; + margin-bottom: 0.25em; + line-height: 1.05em; + overflow-wrap: break-word; +} + +#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; +} +.blue { + color: blue; +} +.green { + color: green; +} + +/* 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: #f0f4f7; +} +.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; +} + +/* The verification image expects to always be on a white background */ +#verification_image_register { + background-color: #fff; +} + +/* 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(--tertiary-border); + 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; +} + +/* attempt to contain the emoticons */ +img.smiley, .sceditor-insertemoticon img, +#sceditor-popup-smiley img +{ + image-rendering: -webkit-optimize-contrast; + image-rendering: crisp-edges; + max-height: 1.35em; +} diff --git a/plugin/f9_theme/src/css/jquery.sceditor.adaptive.css b/plugin/f9_theme/src/css/jquery.sceditor.adaptive.css new file mode 100644 index 0000000..96c156c --- /dev/null +++ b/plugin/f9_theme/src/css/jquery.sceditor.adaptive.css @@ -0,0 +1,3 @@ +@import url("../css/colors.css"); +@import url("../css/dark_colors.css") (prefers-color-scheme: dark); +@import url("../css/jquery.sceditor.default.css"); diff --git a/plugin/f9_theme/src/css/jquery.sceditor.dark.css b/plugin/f9_theme/src/css/jquery.sceditor.dark.css new file mode 100644 index 0000000..a99005a --- /dev/null +++ b/plugin/f9_theme/src/css/jquery.sceditor.dark.css @@ -0,0 +1,3 @@ +@import url("../css/colors.css"); +@import url("../css/dark_colors.css"); +@import url("../css/jquery.sceditor.default.css"); diff --git a/plugin/f9_theme/src/css/jquery.sceditor.default.css b/plugin/f9_theme/src/css/jquery.sceditor.default.css new file mode 100644 index 0000000..b32703c --- /dev/null +++ b/plugin/f9_theme/src/css/jquery.sceditor.default.css @@ -0,0 +1,152 @@ +/*! SCEditor | (C) 2011-2013, Sam Clarke | sceditor.com/license */ +html, p, code::before, div, table { + margin: 0; + padding: 0; + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 14px; + color: var(--body-text); + line-height: 1.25; + overflow: visible; +} +html { + height: 100%; +} +.ios { + /* Needed for iOS scrolling bug fix */ + overflow: auto; + -webkit-overflow-scrolling: touch; +} +.ios body { + /* Needed for iOS scrolling bug fix */ + position: relative; + overflow: auto; +} +body { + /* Needed to make sure body covers the whole editor and that + long lines don't cause horizontal scrolling */ + min-height: 100%; + word-wrap: break-word; + margin: 0 5px; + padding: 0; +} + +ul, ol { + margin-top: 0; + margin-bottom: 0; + padding-top: 0; + padding-bottom: 0; +} + +table, td { + border: 1px dotted var(--body-text); + empty-cells: show; + min-width: 0.5ch; +} + +code::before { + position: absolute; + content: 'Code:'; + top: -1.35em; + left: 0; +} +code[data-title]::before { + content: 'Code: (' attr(data-title) ')'; +} +code { + margin-top: 1.5em; + position: relative; + background: var(--code-background); + border: 1px solid var(--code-ew-border); + white-space: pre; + padding: .25em; + display: block; +} +.ie6 code, .ie7 code { + margin-top: 0; +} +code::before, code { + display: block; + text-align: left; +} + +blockquote { + margin: 0 0 8px 0; + padding: 6px 10px; + font-size: small; + border: 1px solid var(--quote-ns-border); + border-left: 2px solid var(--quote-ew-border); + border-right: 2px solid var(--quote-ew-border); + background-color: var(--quote-background); +} +blockquote cite { + display: block; + border-bottom: 1px solid var(--quote-cite-separator); + font-size: 0.9em; + margin-bottom: 0.5em; +} + +blockquote cite::before { + color: var(--body-text); + font-size: 22px; + font-style: normal; + content: '\275D'; + margin-right: 5px; + vertical-align: middle; +} +blockquote cite + br, +blockquote br:last-child { + display: none; +} + +h1, h2, h3, h4, h5, h6 { + padding: 0; + margin: 0; +} + +/* Make sure images stay within bounds */ +img { + max-width: 100%; +} + +img[data-sceditor-emoticon] { + max-height: 1.35em; +} + +/* Responsive Youtube embed */ +.videocontainer { + max-width: 560px; +} +.videocontainer div { + position: relative; + padding-bottom: 56.25%; +} +.videocontainer iframe { + position: absolute; + top: 0; + left: 0; + width: 100% !important; + height: 100% !important; +} + +.floatleft, .floatright { + max-width: 45%; + border: 1px dashed var(--separator); + padding: 1px; + min-height: 1em; +} +.floatleft { + float: left; + clear: left; + margin: 0 1em 1em 0; +} +.floatright { + float: right; + clear: right; + margin: 0 0 1em 1em; +} +@media (max-width: 480px) { + .floatleft, .floatright { + max-width: 100% !important; + margin: 0 0.5em 1em !important; + } +} diff --git a/plugin/f9_theme/src/css/jquery.sceditor.light.css b/plugin/f9_theme/src/css/jquery.sceditor.light.css new file mode 100644 index 0000000..ab36f28 --- /dev/null +++ b/plugin/f9_theme/src/css/jquery.sceditor.light.css @@ -0,0 +1,2 @@ +@import url("../css/colors.css"); +@import url("../css/jquery.sceditor.default.css"); diff --git a/plugin/f9_theme/src/css/jquery.sceditor.theme.css b/plugin/f9_theme/src/css/jquery.sceditor.theme.css new file mode 100644 index 0000000..7377a93 --- /dev/null +++ b/plugin/f9_theme/src/css/jquery.sceditor.theme.css @@ -0,0 +1,81 @@ +.sceditor-container { + color: var(--body-text); + background: var(--main-background); + border-color: var(--tertiary-border); +} + +.sceditor-container iframe, +.sceditor-container textarea { + color: var(--body-text); + background: var(--main-background); +} + +div.sceditor-dnd-cover { + background: rgba(var(--body-background-rgb), 0.2); + border-color: var(--main-border); +} + +div.sceditor-smileyPopup, div.sceditor-dropdown { + border-color: var(--tertiary-border); + background: var(--main-background); + color: var(--body-text); +} + +div.sceditor-dropdown a, +div.sceditor-dropdown a:link { + color: var(--bold-body-text); +} + +div.sceditor-dropdown .button { + background: var(--main-background); + color: var(--bold-body-text); + border-color: var(--btn-left-border); +} + +div.sceditor-dropdown .button:hover { + background: var(--btn-background); +} + +.sceditor-fontsize-option, +.sceditor-font-option, +.sceditor-format a { + color: var(--body-text); +} + +.sceditor-color-option { + border-color: var(--separator); +} + + +div.sceditor-toolbar { + background: var(--secondary-background); + border-color: var(--tertiary-border); +} + +div.sceditor-group { + background: var(--editor-btngrp-background); + border-color: var(--btn-left-border); +} + +.sceditor-button svg { + fill: var(--editor-btn-fill); +} + +.sceditor-button.disabled svg { + fill: var(--editor-btn-disabled-fill); +} + +.sceditor-button:hover, .sceditor-button:active, +.sceditor-button.active { + background: var(--editor-btn-selected); +} + +.sceditor-button-bold div, .sceditor-button-italic div, +.sceditor-button-underline div, .sceditor-button-strike div, +.sceditor-button-superscript div, .sceditor-button-subscript div, +.sceditor-button-pre div, .sceditor-button-left div, .sceditor-button-center div, +.sceditor-button-right div, .sceditor-button-justify div, +.sceditor-button-floatleft div, .sceditor-button-floatright div, +.sceditor-button-bulletlist div, .sceditor-button-orderedlist div, .sceditor-button-horizontalrule div { + filter: invert(var(--editor-btn-invert)); +} diff --git a/plugin/f9_theme/src/css/responsive.css b/plugin/f9_theme/src/css/responsive.css new file mode 100644 index 0000000..82a9141 --- /dev/null +++ b/plugin/f9_theme/src/css/responsive.css @@ -0,0 +1,895 @@ +/* Some very big stuff? Dunno... */ +@media (min-width: 856px) and (max-width: 1024px) { + .boardindex_table .info { + width: calc(45% - 80px); + } + .lastpost { + /* width: 20%; */ + margin: 3px 0 3px 5px; + } + #alerts .alert_time { + display: none; + } + #alerts .alert_inline_time { + display: block; + } +} + +/* Still not enough data or people to test this... */ +/* This needs more data and this range is probably for iPad Air (alike) tablets... */ +@media (min-width: 721px) and (max-width: 855px) { + .lastpost { + margin: 0 0 0 20px; + } + .board_stats { + display: none; + } + #alerts .alert_time { + display: none; + } + #alerts .alert_inline_time { + display: block; + } +} + +@media (max-width: 855px) { + #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; + } + #mobile_user_menu .menu_nav { + display: flex; + } + #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; + flex-wrap: wrap; + } + #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 */ + .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%; + } + #header { + margin-top: 0; + border: 0; + } + #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; + display: block; + 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 { + padding-top: 5px; + margin-top: 5px; + clear: both; + } + .keyinfo .postinfo { + font-weight: normal; + } + .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; + } + .user_info li, + .custom_fields_above_member { + display: none; + } + .user_info li.title, + .user_info li.membergroup { + display: inline-block; + font-weight: normal; + } + .user_info li::before { + content: "·"; + padding: 0 1ch 0 0.5ch; + } + .like_count, + .smflikebutton:last-child { + margin-bottom: 8px; + } + .button.mobile { + margin: 0 0 5px 0; + } + .pagelinks { + margin: 0; + } + + /* 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; + } + #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, + #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; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 5; + } + #main_menu .popup_heading, + #genericmenu .popup_heading, + #adm_submenus .popup_heading { + display: block; + } + #main_menu { + margin: 0; + background: none; + } + #inner_wrap { + margin-bottom: 12px; + } + .popup_window, + #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; + background: none; + } + .dropmenu { + display: block; + } + #mobile_user_menu .dropmenu, + div[id^="mobile_generic_menu_"] .generic_menu { + display: block; + } + a.mobile_user_menu, + a[class^="mobile_generic_menu_"] { + display: flex; + align-items: center; + margin: 0 0 4px 0; + } + a[class^="mobile_generic_menu_"] { + margin: 8px 0; + } + li.button_separator { + height: 0; + border-top: 1px solid rgba(var(--body-text-rgb), 0.5); + margin: 0.5em auto !important; + display: block; + } + .menu_icon { + display: inline-block; + background-color: var(--editor-btn-fill); + -webkit-mask-image: url(../images/icons/menu.svg); + mask-image: url(../images/icons/menu.svg); + 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 { + width: 100%; + padding: 0; + margin: 0; + border-left: 0; + border-right: 0; + } + .dropmenu li a, .dropmenu li a:hover { + text-indent: 10px; + 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 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) { + h1.forumtitle a, h1.forumtitle { + padding: 5px 0 0 4px; + max-width: 300px; + margin: 10px 0; + } + .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; + } +} + +/* iPhone Tests */ +@media (max-width: 320px) { + +} diff --git a/plugin/f9_theme/src/css/rtl.css b/plugin/f9_theme/src/css/rtl.css new file mode 100644 index 0000000..142c324 --- /dev/null +++ b/plugin/f9_theme/src/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/plugin/f9_theme/src/hooks.php b/plugin/f9_theme/src/hooks.php new file mode 100644 index 0000000..1be016b --- /dev/null +++ b/plugin/f9_theme/src/hooks.php @@ -0,0 +1,21 @@ +<?php + +// defines what css variant the wysiwyg editor should get (light, adaptive, dark) +function f9_hook_sceditor(&$sce_options) { + global $options, $settings, $context; + + // determine the sceditor css variant to pull in + $variant = 'light'; + if (!array_key_exists('dark_light', $options) || $options['dark_light'] == 0) { + $variant = 'adaptive'; + } else if ($options['dark_light'] == 2) { + $variant = 'dark'; + } + + // only override if the variant exists + if (file_exists($settings['theme_dir'] . "/css/jquery.sceditor.$variant.css")) { + $sce_options['style'] = $settings['theme_url'] . "/css/jquery.sceditor.$variant.css" . $context['browser_cache']; + } +} + +?> diff --git a/plugin/f9_theme/src/images/bbc/bbc_bg.png b/plugin/f9_theme/src/images/bbc/bbc_bg.png new file mode 100644 index 0000000..1a2aa76 Binary files /dev/null and b/plugin/f9_theme/src/images/bbc/bbc_bg.png differ diff --git a/plugin/f9_theme/src/images/bbc/bbc_hoverbg.png b/plugin/f9_theme/src/images/bbc/bbc_hoverbg.png new file mode 100644 index 0000000..7d4fcfb Binary files /dev/null and b/plugin/f9_theme/src/images/bbc/bbc_hoverbg.png differ diff --git a/plugin/f9_theme/src/images/bbc/index.php b/plugin/f9_theme/src/images/bbc/index.php new file mode 100644 index 0000000..2cf5d33 --- /dev/null +++ b/plugin/f9_theme/src/images/bbc/index.php @@ -0,0 +1,9 @@ +<?php + +// Try to handle it with the upper level index.php. (it should know what to do.) +if (file_exists(dirname(dirname(__FILE__)) . '/index.php')) + include(dirname(dirname(__FILE__)) . '/index.php'); +else + exit; + +?> \ No newline at end of file diff --git a/plugin/f9_theme/src/images/blank.png b/plugin/f9_theme/src/images/blank.png new file mode 100644 index 0000000..e32226b Binary files /dev/null and b/plugin/f9_theme/src/images/blank.png differ diff --git a/plugin/f9_theme/src/images/boardicons.png b/plugin/f9_theme/src/images/boardicons.png new file mode 100644 index 0000000..d541fcd Binary files /dev/null and b/plugin/f9_theme/src/images/boardicons.png differ diff --git a/plugin/f9_theme/src/images/buddy_useroff.png b/plugin/f9_theme/src/images/buddy_useroff.png new file mode 100644 index 0000000..943cbdf Binary files /dev/null and b/plugin/f9_theme/src/images/buddy_useroff.png differ diff --git a/plugin/f9_theme/src/images/buddy_useron.png b/plugin/f9_theme/src/images/buddy_useron.png new file mode 100644 index 0000000..de14afa Binary files /dev/null and b/plugin/f9_theme/src/images/buddy_useron.png differ diff --git a/plugin/f9_theme/src/images/cake.png b/plugin/f9_theme/src/images/cake.png new file mode 100644 index 0000000..24ded25 Binary files /dev/null and b/plugin/f9_theme/src/images/cake.png differ diff --git a/plugin/f9_theme/src/images/construction.png b/plugin/f9_theme/src/images/construction.png new file mode 100644 index 0000000..48ea489 Binary files /dev/null and b/plugin/f9_theme/src/images/construction.png differ diff --git a/plugin/f9_theme/src/images/generic_attach.png b/plugin/f9_theme/src/images/generic_attach.png new file mode 100644 index 0000000..0f7f32d Binary files /dev/null and b/plugin/f9_theme/src/images/generic_attach.png differ diff --git a/plugin/f9_theme/src/images/header.png b/plugin/f9_theme/src/images/header.png new file mode 100644 index 0000000..d2797b0 Binary files /dev/null and b/plugin/f9_theme/src/images/header.png differ diff --git a/plugin/f9_theme/src/images/header_dark.png b/plugin/f9_theme/src/images/header_dark.png new file mode 100644 index 0000000..2400587 Binary files /dev/null and b/plugin/f9_theme/src/images/header_dark.png differ diff --git a/plugin/f9_theme/src/images/header_light.png b/plugin/f9_theme/src/images/header_light.png new file mode 100644 index 0000000..f9e5a87 Binary files /dev/null and b/plugin/f9_theme/src/images/header_light.png differ diff --git a/plugin/f9_theme/src/images/helptopics.png b/plugin/f9_theme/src/images/helptopics.png new file mode 100644 index 0000000..40a90b8 Binary files /dev/null and b/plugin/f9_theme/src/images/helptopics.png differ diff --git a/plugin/f9_theme/src/images/helptopics_hd.png b/plugin/f9_theme/src/images/helptopics_hd.png new file mode 100644 index 0000000..fb76bf3 Binary files /dev/null and b/plugin/f9_theme/src/images/helptopics_hd.png differ diff --git a/plugin/f9_theme/src/images/icons/admin_sprite.png b/plugin/f9_theme/src/images/icons/admin_sprite.png new file mode 100644 index 0000000..84bb112 Binary files /dev/null and b/plugin/f9_theme/src/images/icons/admin_sprite.png differ diff --git a/plugin/f9_theme/src/images/icons/bell.png b/plugin/f9_theme/src/images/icons/bell.png new file mode 100644 index 0000000..bede044 Binary files /dev/null and b/plugin/f9_theme/src/images/icons/bell.png differ diff --git a/plugin/f9_theme/src/images/icons/bell_hd.png b/plugin/f9_theme/src/images/icons/bell_hd.png new file mode 100644 index 0000000..010d9ee Binary files /dev/null and b/plugin/f9_theme/src/images/icons/bell_hd.png differ diff --git a/plugin/f9_theme/src/images/icons/clip.png b/plugin/f9_theme/src/images/icons/clip.png new file mode 100644 index 0000000..be540f3 Binary files /dev/null and b/plugin/f9_theme/src/images/icons/clip.png differ diff --git a/plugin/f9_theme/src/images/icons/config_hd.png b/plugin/f9_theme/src/images/icons/config_hd.png new file mode 100644 index 0000000..73bfaba Binary files /dev/null and b/plugin/f9_theme/src/images/icons/config_hd.png differ diff --git a/plugin/f9_theme/src/images/icons/delete.png b/plugin/f9_theme/src/images/icons/delete.png new file mode 100644 index 0000000..aa299eb Binary files /dev/null and b/plugin/f9_theme/src/images/icons/delete.png differ diff --git a/plugin/f9_theme/src/images/icons/editor_sprite.png b/plugin/f9_theme/src/images/icons/editor_sprite.png new file mode 100644 index 0000000..e097db6 Binary files /dev/null and b/plugin/f9_theme/src/images/icons/editor_sprite.png differ diff --git a/plugin/f9_theme/src/images/icons/index.php b/plugin/f9_theme/src/images/icons/index.php new file mode 100644 index 0000000..2cf5d33 --- /dev/null +++ b/plugin/f9_theme/src/images/icons/index.php @@ -0,0 +1,9 @@ +<?php + +// Try to handle it with the upper level index.php. (it should know what to do.) +if (file_exists(dirname(dirname(__FILE__)) . '/index.php')) + include(dirname(dirname(__FILE__)) . '/index.php'); +else + exit; + +?> \ No newline at end of file diff --git a/plugin/f9_theme/src/images/icons/main_icons_sprite.png b/plugin/f9_theme/src/images/icons/main_icons_sprite.png new file mode 100644 index 0000000..54f1c6a Binary files /dev/null and b/plugin/f9_theme/src/images/icons/main_icons_sprite.png differ diff --git a/plugin/f9_theme/src/images/icons/main_icons_sprite_hd.png b/plugin/f9_theme/src/images/icons/main_icons_sprite_hd.png new file mode 100644 index 0000000..2f6d9ee Binary files /dev/null and b/plugin/f9_theme/src/images/icons/main_icons_sprite_hd.png differ diff --git a/plugin/f9_theme/src/images/icons/members.png b/plugin/f9_theme/src/images/icons/members.png new file mode 100644 index 0000000..d8acc57 Binary files /dev/null and b/plugin/f9_theme/src/images/icons/members.png differ diff --git a/plugin/f9_theme/src/images/icons/menu.svg b/plugin/f9_theme/src/images/icons/menu.svg new file mode 100644 index 0000000..c1ad1ec --- /dev/null +++ b/plugin/f9_theme/src/images/icons/menu.svg @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="windows-1252"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px" height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve"> +<g id="Icons" style="opacity:0.75;"> + <path id="menu" d="M6,15h12c0.553,0,1,0.447,1,1v1c0,0.553-0.447,1-1,1H6c-0.553,0-1-0.447-1-1v-1C5,15.447,5.447,15,6,15z M5,11v1 c0,0.553,0.447,1,1,1h12c0.553,0,1-0.447,1-1v-1c0-0.553-0.447-1-1-1H6C5.447,10,5,10.447,5,11z M5,6v1c0,0.553,0.447,1,1,1h12 c0.553,0,1-0.447,1-1V6c0-0.553-0.447-1-1-1H6C5.447,5,5,5.447,5,6z"/> +</g> +<g id="Guides" style="display:none;"> +</g> +</svg> \ No newline at end of file diff --git a/plugin/f9_theme/src/images/icons/modify_inline.png b/plugin/f9_theme/src/images/icons/modify_inline.png new file mode 100644 index 0000000..9ec041b Binary files /dev/null and b/plugin/f9_theme/src/images/icons/modify_inline.png differ diff --git a/plugin/f9_theme/src/images/icons/profile_hd.png b/plugin/f9_theme/src/images/icons/profile_hd.png new file mode 100644 index 0000000..2ac2218 Binary files /dev/null and b/plugin/f9_theme/src/images/icons/profile_hd.png differ diff --git a/plugin/f9_theme/src/images/icons/profile_sm.png b/plugin/f9_theme/src/images/icons/profile_sm.png new file mode 100644 index 0000000..15112f6 Binary files /dev/null and b/plugin/f9_theme/src/images/icons/profile_sm.png differ diff --git a/plugin/f9_theme/src/images/icons/stats_info.png b/plugin/f9_theme/src/images/icons/stats_info.png new file mode 100644 index 0000000..18ae5ed Binary files /dev/null and b/plugin/f9_theme/src/images/icons/stats_info.png differ diff --git a/plugin/f9_theme/src/images/icons/toggle.png b/plugin/f9_theme/src/images/icons/toggle.png new file mode 100644 index 0000000..54d9b20 Binary files /dev/null and b/plugin/f9_theme/src/images/icons/toggle.png differ diff --git a/plugin/f9_theme/src/images/icq.png b/plugin/f9_theme/src/images/icq.png new file mode 100644 index 0000000..1127f24 Binary files /dev/null and b/plugin/f9_theme/src/images/icq.png differ diff --git a/plugin/f9_theme/src/images/index.php b/plugin/f9_theme/src/images/index.php new file mode 100644 index 0000000..2cf5d33 --- /dev/null +++ b/plugin/f9_theme/src/images/index.php @@ -0,0 +1,9 @@ +<?php + +// Try to handle it with the upper level index.php. (it should know what to do.) +if (file_exists(dirname(dirname(__FILE__)) . '/index.php')) + include(dirname(dirname(__FILE__)) . '/index.php'); +else + exit; + +?> \ No newline at end of file diff --git a/plugin/f9_theme/src/images/ip.png b/plugin/f9_theme/src/images/ip.png new file mode 100644 index 0000000..2f77e04 Binary files /dev/null and b/plugin/f9_theme/src/images/ip.png differ diff --git a/plugin/f9_theme/src/images/loading_sm.gif b/plugin/f9_theme/src/images/loading_sm.gif new file mode 100644 index 0000000..0fa9f5a Binary files /dev/null and b/plugin/f9_theme/src/images/loading_sm.gif differ diff --git a/plugin/f9_theme/src/images/matrix.svg b/plugin/f9_theme/src/images/matrix.svg new file mode 100644 index 0000000..7848961 --- /dev/null +++ b/plugin/f9_theme/src/images/matrix.svg @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 520 520" style="enable-background:new 0 0 520 520;" xml:space="preserve"> +<path d="M13.7,11.9v496.2h35.7V520H0V0h49.4v11.9H13.7z"/> +<path d="M166.3,169.2v25.1h0.7c6.7-9.6,14.8-17,24.2-22.2c9.4-5.3,20.3-7.9,32.5-7.9c11.7,0,22.4,2.3,32.1,6.8 + c9.7,4.5,17,12.6,22.1,24c5.5-8.1,13-15.3,22.4-21.5c9.4-6.2,20.6-9.3,33.5-9.3c9.8,0,18.9,1.2,27.3,3.6c8.4,2.4,15.5,6.2,21.5,11.5 + c6,5.3,10.6,12.1,14,20.6c3.3,8.5,5,18.7,5,30.7v124.1h-50.9V249.6c0-6.2-0.2-12.1-0.7-17.6c-0.5-5.5-1.8-10.3-3.9-14.3 + c-2.2-4.1-5.3-7.3-9.5-9.7c-4.2-2.4-9.9-3.6-17-3.6c-7.2,0-13,1.4-17.4,4.1c-4.4,2.8-7.9,6.3-10.4,10.8c-2.5,4.4-4.2,9.4-5,15.1 + c-0.8,5.6-1.3,11.3-1.3,17v103.3h-50.9v-104c0-5.5-0.1-10.9-0.4-16.3c-0.2-5.4-1.3-10.3-3.1-14.9c-1.8-4.5-4.8-8.2-9-10.9 + c-4.2-2.7-10.3-4.1-18.5-4.1c-2.4,0-5.6,0.5-9.5,1.6c-3.9,1.1-7.8,3.1-11.5,6.1c-3.7,3-6.9,7.3-9.5,12.9c-2.6,5.6-3.9,13-3.9,22.1 + v107.6h-50.9V169.2H166.3z"/> +<path d="M506.3,508.1V11.9h-35.7V0H520v520h-49.4v-11.9H506.3z"/> +</svg> diff --git a/plugin/f9_theme/src/images/membericons/blank.png b/plugin/f9_theme/src/images/membericons/blank.png new file mode 100644 index 0000000..e32226b Binary files /dev/null and b/plugin/f9_theme/src/images/membericons/blank.png differ diff --git a/plugin/f9_theme/src/images/membericons/icon.png b/plugin/f9_theme/src/images/membericons/icon.png new file mode 100644 index 0000000..6ab8bac Binary files /dev/null and b/plugin/f9_theme/src/images/membericons/icon.png differ diff --git a/plugin/f9_theme/src/images/membericons/iconadmin.png b/plugin/f9_theme/src/images/membericons/iconadmin.png new file mode 100644 index 0000000..66b880c Binary files /dev/null and b/plugin/f9_theme/src/images/membericons/iconadmin.png differ diff --git a/plugin/f9_theme/src/images/membericons/icongmod.png b/plugin/f9_theme/src/images/membericons/icongmod.png new file mode 100644 index 0000000..29f973f Binary files /dev/null and b/plugin/f9_theme/src/images/membericons/icongmod.png differ diff --git a/plugin/f9_theme/src/images/membericons/iconmod.png b/plugin/f9_theme/src/images/membericons/iconmod.png new file mode 100644 index 0000000..abed5f4 Binary files /dev/null and b/plugin/f9_theme/src/images/membericons/iconmod.png differ diff --git a/plugin/f9_theme/src/images/membericons/index.php b/plugin/f9_theme/src/images/membericons/index.php new file mode 100644 index 0000000..2cf5d33 --- /dev/null +++ b/plugin/f9_theme/src/images/membericons/index.php @@ -0,0 +1,9 @@ +<?php + +// Try to handle it with the upper level index.php. (it should know what to do.) +if (file_exists(dirname(dirname(__FILE__)) . '/index.php')) + include(dirname(dirname(__FILE__)) . '/index.php'); +else + exit; + +?> \ No newline at end of file diff --git a/plugin/f9_theme/src/images/new_redirect.png b/plugin/f9_theme/src/images/new_redirect.png new file mode 100644 index 0000000..e9c2db8 Binary files /dev/null and b/plugin/f9_theme/src/images/new_redirect.png differ diff --git a/plugin/f9_theme/src/images/post/angry.png b/plugin/f9_theme/src/images/post/angry.png new file mode 100644 index 0000000..c21dd7f Binary files /dev/null and b/plugin/f9_theme/src/images/post/angry.png differ diff --git a/plugin/f9_theme/src/images/post/cheesy.png b/plugin/f9_theme/src/images/post/cheesy.png new file mode 100644 index 0000000..fa13c98 Binary files /dev/null and b/plugin/f9_theme/src/images/post/cheesy.png differ diff --git a/plugin/f9_theme/src/images/post/clip.png b/plugin/f9_theme/src/images/post/clip.png new file mode 100644 index 0000000..889d90e Binary files /dev/null and b/plugin/f9_theme/src/images/post/clip.png differ diff --git a/plugin/f9_theme/src/images/post/exclamation.png b/plugin/f9_theme/src/images/post/exclamation.png new file mode 100644 index 0000000..391c60a Binary files /dev/null and b/plugin/f9_theme/src/images/post/exclamation.png differ diff --git a/plugin/f9_theme/src/images/post/grin.png b/plugin/f9_theme/src/images/post/grin.png new file mode 100644 index 0000000..fd00389 Binary files /dev/null and b/plugin/f9_theme/src/images/post/grin.png differ diff --git a/plugin/f9_theme/src/images/post/index.php b/plugin/f9_theme/src/images/post/index.php new file mode 100644 index 0000000..2cf5d33 --- /dev/null +++ b/plugin/f9_theme/src/images/post/index.php @@ -0,0 +1,9 @@ +<?php + +// Try to handle it with the upper level index.php. (it should know what to do.) +if (file_exists(dirname(dirname(__FILE__)) . '/index.php')) + include(dirname(dirname(__FILE__)) . '/index.php'); +else + exit; + +?> \ No newline at end of file diff --git a/plugin/f9_theme/src/images/post/lamp.png b/plugin/f9_theme/src/images/post/lamp.png new file mode 100644 index 0000000..f7b5f98 Binary files /dev/null and b/plugin/f9_theme/src/images/post/lamp.png differ diff --git a/plugin/f9_theme/src/images/post/moved.png b/plugin/f9_theme/src/images/post/moved.png new file mode 100644 index 0000000..8a91d47 Binary files /dev/null and b/plugin/f9_theme/src/images/post/moved.png differ diff --git a/plugin/f9_theme/src/images/post/poll.png b/plugin/f9_theme/src/images/post/poll.png new file mode 100644 index 0000000..d4d8a35 Binary files /dev/null and b/plugin/f9_theme/src/images/post/poll.png differ diff --git a/plugin/f9_theme/src/images/post/question.png b/plugin/f9_theme/src/images/post/question.png new file mode 100644 index 0000000..1fe069b Binary files /dev/null and b/plugin/f9_theme/src/images/post/question.png differ diff --git a/plugin/f9_theme/src/images/post/recycled.png b/plugin/f9_theme/src/images/post/recycled.png new file mode 100644 index 0000000..682e09e Binary files /dev/null and b/plugin/f9_theme/src/images/post/recycled.png differ diff --git a/plugin/f9_theme/src/images/post/sad.png b/plugin/f9_theme/src/images/post/sad.png new file mode 100644 index 0000000..8622395 Binary files /dev/null and b/plugin/f9_theme/src/images/post/sad.png differ diff --git a/plugin/f9_theme/src/images/post/smiley.png b/plugin/f9_theme/src/images/post/smiley.png new file mode 100644 index 0000000..11eef52 Binary files /dev/null and b/plugin/f9_theme/src/images/post/smiley.png differ diff --git a/plugin/f9_theme/src/images/post/thumbdown.png b/plugin/f9_theme/src/images/post/thumbdown.png new file mode 100644 index 0000000..e4cab2a Binary files /dev/null and b/plugin/f9_theme/src/images/post/thumbdown.png differ diff --git a/plugin/f9_theme/src/images/post/thumbup.png b/plugin/f9_theme/src/images/post/thumbup.png new file mode 100644 index 0000000..5a36f3b Binary files /dev/null and b/plugin/f9_theme/src/images/post/thumbup.png differ diff --git a/plugin/f9_theme/src/images/post/wink.png b/plugin/f9_theme/src/images/post/wink.png new file mode 100644 index 0000000..3f20448 Binary files /dev/null and b/plugin/f9_theme/src/images/post/wink.png differ diff --git a/plugin/f9_theme/src/images/post/xx.png b/plugin/f9_theme/src/images/post/xx.png new file mode 100644 index 0000000..7999038 Binary files /dev/null and b/plugin/f9_theme/src/images/post/xx.png differ diff --git a/plugin/f9_theme/src/images/selected.png b/plugin/f9_theme/src/images/selected.png new file mode 100644 index 0000000..a50ca32 Binary files /dev/null and b/plugin/f9_theme/src/images/selected.png differ diff --git a/plugin/f9_theme/src/images/selected_open.png b/plugin/f9_theme/src/images/selected_open.png new file mode 100644 index 0000000..b6f7534 Binary files /dev/null and b/plugin/f9_theme/src/images/selected_open.png differ diff --git a/plugin/f9_theme/src/images/skype.png b/plugin/f9_theme/src/images/skype.png new file mode 100644 index 0000000..2e25b1b Binary files /dev/null and b/plugin/f9_theme/src/images/skype.png differ diff --git a/plugin/f9_theme/src/images/smflogo.svg b/plugin/f9_theme/src/images/smflogo.svg new file mode 100644 index 0000000..5223406 --- /dev/null +++ b/plugin/f9_theme/src/images/smflogo.svg @@ -0,0 +1,2 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="288px" height="37px" viewBox="0 0 240 31"><path fill="#eb6912" stroke="#eb6912" stroke-width=".29386213" d="M97.161377 19.096411h-7.496309c.02592.917308.297779 1.650035.815665 2.198183.621105.519309 1.354425.714099 2.084793.663612.979645-.06771 1.76521-.120826 2.63404-1.265463l1.131226 1.017548c-.215734.334718-.619924.606446-.949024.86318-.754184.588329-1.618982.835405-2.784211.835405-1.424161 0-2.550554-.413907-3.379157-1.241721-.828614-.839001-1.242911-1.980043-1.242911-3.423124 0-1.443082.577126-2.535381 1.418688-3.396755.854501-.872561 2.144293-1.28087 3.179685-1.241955 2.171561.08162 4.587515 1.579153 4.587515 4.99109zm-7.457463-1.141041h5.729038c0-.760694-.265417-1.206466-.796242-1.721054-.530825-.514587-1.204075-.771881-2.01973-.771881s-1.488904.246108-2.019729.738321c-.530825.481028-.828604.937986-.893337 1.754614z" style="line-height:125%; text-align:start" font-size="17.5" font-family="FreeSans" letter-spacing="0" word-spacing="0"/><g fill="#605353" fill-rule="evenodd"><path d="M49.537543 4.8914737l-22.070082 7.165665v1.808799l22.600632-7.3380383zm-25.50859 8.282734L4 19.6031507l.5305504 1.636426 19.4984026-6.256571z" style="line-height:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;text-transform:none;block-progression:tb;isolation:auto;mix-blend-mode:normal" color="#000" font-family="sans-serif" white-space="normal" overflow="visible" solid-color="#000000"/><path d="M25.734775 8.7887659l-8.309728 14.6718638h16.619456L25.734775 8.7887659zm0 3.7004248a1.0602067 1.0602067 0 0 1 1.058863 1.061104 1.0602067 1.0602067 0 0 1-1.058863 1.058863 1.0602067 1.0602067 0 0 1-1.061102-1.058863 1.0602067 1.0602067 0 0 1 1.061102-1.061104z"/></g><path fill="#eb6912" stroke="#eb6912" stroke-width=".28810284" d="M43.389174 21.153458c.125079.209554.28341.414949.488671.550138.39773.261957.880667.467157 1.357826.451954.326943-.01042.684905-.131319.908418-.368258.228285-.241997.318808-.611885.316859-.943317-.0016-.271608-.105606-.551856-.268737-.769994-.174909-.233888-.456935-.370371-.712889-.512979-.2416-.134609-.518208-.196967-.76698-.318041-.580877-.282705-1.281457-.451258-1.688068-.950538-.355695-.436757-.536838-1.046126-.509185-1.606946.03065-.621603.288491-1.282742.736911-1.717968.496518-.481908 1.076808-.767651 1.934878-.767651.858069 0 1.532915.329054 1.898142.682698.321343.31115.831031.998859.831031.998859l-1.01031.702739c-.571024-.769884-1.048021-1.104019-1.720287-1.054708-.581126.04262-1.245224.286638-1.335733 1.118777-.02931.26952.08375.566073.263799.769995.460614.521703 1.240285.642362 1.879478.923226.590515.259477.99707.564837 1.352217 1.046299.301999.40941.504506.928081.510105 1.435372.0067.608132-.14668 1.296897-.573375 1.733574-.577829.591348-1.514903.923237-2.341133.842929-.981509-.0954-1.649301-.153161-2.532322-1.517802z"/><path fill="#eb6912" stroke="#eb6912" stroke-width=".30061793" d="M72.44688 26.849692V14.407925h1.505406v1.356777c.768995-1.076261 1.857317-1.614392 3.264969-1.614392 1.355517 0 2.42429.440809 3.206319 1.322428.795063.881618 1.192594 1.776471 1.192594 3.287817 0 1.431199-.404048 2.581883-1.212144 3.452052-.795064.858719-1.850803 1.288079-3.167218 1.288079-1.26428 0-2.313501-.446534-3.147666-1.339602v4.688608zm4.496666-11.35978c-.704513.0181-1.420112.429749-1.884889.961765-.516091.590755-.766407 1.437277-.782029 2.223006-.01763.886615.210599 1.865733.782029 2.54181.454396.537612 1.182933.926765 1.884889.944591.782174.01986 1.603159-.314864 2.150579-.944591.54742-.641177.821131-1.471273.821131-2.490287 0-1.076261-.273711-1.633351-.821131-2.274529-.534387-.641177-1.36611-.981915-2.150579-.961765z"/><path fill="#eb6912" stroke="#eb6912" stroke-width=".29938263" d="M85.694214 10.709691v12.700618h-1.77137V10.709691h1.77137z"/><path fill="#605353" stroke="#605353" stroke-width=".29666814" d="M134.62397 16.01986l-1.38788.604757c-.33878-.349193-.42409-.462494-.70189-.597693-.54349-.264498-1.08201-.366466-1.78252-.366466-.91605 0-1.63677.305627-2.16216.916879-.51192.600336-.76787 1.267037-.76787 2.309441 0 1.042403.26269 1.682335.78807 2.260842.52539.578506 1.38306.942746 2.18237.975752 1.03802.04286 1.74908.06375 2.93347-1.028993l.99488 1.117968c-.57417.386439-.83547.63968-1.54901.927304-.88655.35736-1.60835.245266-2.41975.266028-1.07641.02754-2.44213-.406053-3.26326-1.21159-.87297-.856403-1.30409-2.008469-1.30409-3.394702 0-1.418978.30364-2.466771 1.15234-3.318157.86217-.851387 2.00725-1.277081 3.43522-1.277081 1.2259 0 2.09563.223553 2.88314.848086.28285.224317.59959.472546.96894.967625z"/><path fill="#605353" stroke="#605353" stroke-width=".29934436" d="M142.76483 16.90677c0-.219631-.16877-.593866-.5013-.826551-1.31818-.922369-2.26285-.424722-3.19154.188283-.45504.557504-.68256 1.234666-.68256 2.16384v5.034966h-1.45263V10.766652h1.45263v4.693318c.43171-.557505.77431-.689899 1.20488-.912776.44452-.230101 1.082-.303529 1.73539-.303529.88675 0 1.58681.226487 2.10019.679459.52504.441358.78757 1.045322.78757 1.811891v6.732293h-1.45263z"/><path fill="#605353" stroke="#605353" stroke-width=".29993269" d="M152.01896 14.227855h1.39194v1.539295c.42179-.641373.66319-.861503 1.14525-1.141375.49411-.279872 1.09066-.419808 1.78964-.419808.9159 0 1.64502.227396 2.18734.682188.54231.454791.90714 1.06118.90721 1.819166l.00061 6.69738-1.4109-.01248-.011-6.161852c-.00066-.371385-.27204-.916231-.63342-1.176943-1.24705-1.043288-2.90491-.03682-3.40054.588201-.47.559744-.4476.763938-.4476 1.696844v5.055185h-1.51848z"/><path fill="#605353" stroke="#605353" stroke-width=".29876751" d="M189.25997 14.711379v1.179896h-1.52295v7.515341h-1.45293v-7.515341h-1.22536v-1.179896h1.22536v-1.941177c0-.647786.0834-1.104687.45713-1.463284.38511-.370163 1.01914-.601534 1.696-.601534.26841 0 .54266.02892.82275.08676v1.197247c-.22174-.01157-.39095-.01735-.50765-.01735-.67687 0-1.0153.131266-1.0153.744348v1.994994z"/><path fill="#605353" stroke="#605353" stroke-width=".29211053" d="M195.57581 14.101862c1.41573 0 2.51199.422664 3.28877 1.267994.7893.834057 1.18396 1.82391 1.18396 3.356774 0 1.453966-.40092 2.597978-1.20275 3.432035-.78931.834057-1.87304 1.251087-3.25119 1.251087-1.40322 0-2.49948-.41703-3.28878-1.251087-.77677-.845329-1.16517-2.011883-1.16517-3.499661 0-1.48778.39466-2.455091 1.18397-3.289148.7893-.84533 1.87303-1.267994 3.25119-1.267994zm.0187 1.301806c-.877 0-1.56609.309954-2.06723.929862-.50115.608637-.75173 1.254724-.75173 2.325474 0 1.07075.25058 1.916078.75173 2.535986.50114.608637 1.19023.912956 2.06723.912956.86448 0 1.54728-.304319 2.04843-.912956.51368-.619908.77051-1.44833.77051-2.485267 0-1.093292-.25057-1.756285-.75172-2.376193-.48861-.619908-1.17768-.929862-2.06722-.929862z"/><path fill="#605353" stroke="#605353" stroke-width=".29856992" d="M206.91514 15.591624c-.98032.0231-1.80398.445285-2.29414.872708-.49016.427423-.64682 1.03914-.64682 2.228992v4.713198h-1.47048v-9.079837h1.34794v1.197484c.9353-1.022026 1.96584-1.310184 3.0635-1.405419z"/><g fill="#605353" fill-rule="evenodd" stroke="#605353" stroke-width=".30000001" color="#000" font-family="sans-serif" white-space="normal"><path d="M131.36021 15.858035v8.686221h1.40039v-8.686221z" style="line-height:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;text-transform:none;block-progression:tb;isolation:auto;mix-blend-mode:normal" overflow="visible" solid-color="#000000" transform="matrix(.99968 0 0 1.01864 -8.703 -1.63)"/><path d="M129.08203 15.626953c-.99896-.174076-1.88581-.03949-2.62695.34375-1.48228.766474-2.22898 2.378446-2.30664 3.962891-.0777 1.584445.51718 3.259584 1.95508 4.115234 1.43789.85565 3.54226.741229 6.14453-.800781l-.71289-1.205078c-2.35289 1.394238-3.83725 1.326131-4.7168.802734-.87956-.523397-1.32971-1.653937-1.27148-2.841797.0582-1.187859.62821-2.313966 1.55078-2.791015.92256-.47705 2.3458-.457223 4.46484 1.05664l.81445-1.140625c-1.18519-.846715-2.29596-1.327876-3.29492-1.501953z" style="line-height:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;text-transform:none;block-progression:tb;isolation:auto;mix-blend-mode:normal" overflow="visible" solid-color="#000000" transform="matrix(.99968 0 0 1.01864 -8.703 -1.63)"/></g><path fill="#605353" fill-rule="evenodd" stroke="#605353" stroke-width=".30000001" d="M210.25584 14.249633l-1.52547-.000005c.0954 2.795555-.0883 5.262784.24024 6.735146.16425.736181.62057 1.49521 1.1192 1.837461 1.27334.874014 3.42119.820216 4.63493-.13446.48598-.382255.85933-1.029623 1.01763-1.718601.31659-1.377954.17526-3.746658.2461-6.719546h-1.46653l-.009 5.28348c-.0006.354983-.18229 1.676106-.65397 2.055695-.7758.624332-2.22977.633789-2.99026-.009-.56673-.478993-.65339-1.740048-.64948-2.287836l.036-5.042328z" style="line-height:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;text-transform:none;block-progression:tb;isolation:auto;mix-blend-mode:normal" color="#000" font-family="sans-serif" white-space="normal" overflow="visible" solid-color="#000000"/><text x="178.71123" y="14.038308" fill="#605353" style="line-height:125%" font-size="4.42516899" font-family="sans-serif" letter-spacing="0" word-spacing="0"><tspan x="178.71123" y="14.038308" style="-inkscape-font-specification:sans-serif">®</tspan></text><g fill="#eb6912" transform="matrix(1 0 0 1.00095 -7.62 -1.266)"><path stroke="#eb6912" stroke-width=".30044258" d="M59.997591 15.448523v9.199558h-1.639558v-9.199558z"/><ellipse cx="59.169979" cy="12.935604" ry="1.125" rx="1.078125"/></g><g fill="#605353" transform="matrix(1 0 0 1.00095 88.938 -1.266)"><path stroke="#605353" stroke-width=".30044258" d="M59.997591 15.448523v9.199558h-1.639558v-9.199558z"/><ellipse cx="59.169979" cy="12.935604" ry="1.125" rx="1.078125"/></g><path fill="#605353" stroke="#605353" stroke-width=".30047739" d="M218.41181 14.206045h1.54398l.00021 1.299169c.83583-.824636 1.92234-1.150135 2.97812-1.092255 1.05073.0576 2.23912.46817 2.82728 1.404508.49462-.514986.98254-.877817 1.46378-1.088494.48125-.210676 1.06944-.316014 1.76455-.316014.97585 0 1.6111.13141 2.24579.573089.50518.351546 1.05206.971033 1.05206 1.519878v6.899642h-1.49684v-6.037173c0-.673599-.54334-1.280306-1.12868-1.505949-.88476-.341067-2.07945-.152217-2.79252.542133-.39867.388202-.67767.858478-.67767 1.525618v5.475371h-1.41918l-.0442-5.759505c-.0442-1.523246-1.30585-1.933675-2.21017-1.942986-.63995-.0066-1.3925.306205-1.87708.779726-.40354.394322-.68524.880575-.68524 1.547716v5.375049h-1.5442z"/><path fill="#605353" stroke="#605353" stroke-width=".29386213" d="M171.07401 19.096604h-7.49631c.0259.917308.29778 1.650035.81567 2.198183.6211.519309 1.35442.714099 2.08479.663612.97964-.06771 1.76521-.120826 2.63404-1.265463l1.13122 1.017548c-.21573.334718-.61992.606446-.94902.86318-.75418.588329-1.61898.835405-2.78421.835405-1.42416 0-2.55055-.413907-3.37916-1.241721-.82861-.839001-1.24291-1.980043-1.24291-3.423124 0-1.443082.57713-2.535381 1.41869-3.396755.8545-.872561 2.14429-1.28087 3.17968-1.241955 2.17156.08162 4.58752 1.579153 4.58752 4.99109zm-7.45746-1.141041h5.72903c0-.760694-.26541-1.206466-.79624-1.721054-.53082-.514587-1.20407-.771881-2.01973-.771881-.81565 0-1.4889.246108-2.01973.738321-.53082.481028-.8286.937986-.89333 1.754614z"/><text x="31.148907" y="18.68512" fill="#605353" style="line-height:125%" font-size="5.07199335" font-family="sans-serif" letter-spacing="0" word-spacing="0"><tspan x="31.148907" y="18.68512" style="-inkscape-font-specification:sans-serif">®</tspan></text><path fill="#605353" stroke="#605353" stroke-width=".28810284" d="M174.79067 21.153651c.12508.209554.28341.414949.48867.550138.39773.261957.88067.467157 1.35783.451954.32694-.01042.6849-.131319.90842-.368258.22828-.241997.3188-.611885.31685-.943317-.002-.271608-.1056-.551856-.26873-.769994-.17491-.233888-.45694-.370371-.71289-.512979-.2416-.134609-.51821-.196967-.76698-.318041-.58088-.282705-1.28146-.451258-1.68807-.950538-.35569-.436757-.53684-1.046126-.50918-1.606946.0307-.621603.28849-1.282742.73691-1.717968.49651-.481908 1.0768-.767651 1.93487-.767651.85807 0 1.53292.329054 1.89815.682698.32134.31115.83103.998859.83103.998859l-1.01031.702739c-.57103-.769884-1.04802-1.104019-1.72029-1.054708-.58113.04262-1.24522.286638-1.33573 1.118777-.0293.26952.0838.566073.2638.769995.46061.521703 1.24028.642362 1.87947.923226.59052.259477.99707.564837 1.35222 1.046299.302.40941.50451.928081.51011 1.435372.007.608132-.14668 1.296897-.57338 1.733574-.57783.591348-1.5149.923237-2.34113.842929-.98151-.0954-1.6493-.153161-2.53232-1.517802z"/><path fill="#605353" stroke="#605353" stroke-width=".30047739" d="M99.59245 14.210238h1.54398l.00021 1.299169c.83583-.824636 1.92234-1.150135 2.97812-1.092255 1.05073.0576 2.23912.46817 2.82728 1.404508.49462-.514986.98254-.877817 1.46378-1.088494.48125-.210676 1.06944-.316014 1.76455-.316014.97585 0 1.6111.13141 2.24579.573089.50518.351546 1.05206.971033 1.05206 1.519878v6.899642h-1.49684v-6.037173c0-.673599-.54334-1.280306-1.12868-1.505949-.88476-.341067-2.07945-.152217-2.79252.542133-.39867.388202-.67767.858478-.67767 1.525618v5.475371h-1.41918l-.0442-5.759505c-.0442-1.523246-1.30585-1.933675-2.21017-1.942986-.63995-.0066-1.3925.306205-1.87708.779726-.40354.394322-.68524.880575-.68524 1.547716v5.375049h-1.5442z"/><path fill="#eb6912" stroke="#eb6912" stroke-width=".30047739" d="M55.642926 14.210238h1.54398l.00021 1.299169c.83583-.824636 1.92234-1.150135 2.97812-1.092255 1.05073.0576 2.23912.46817 2.82728 1.404508.49462-.514986.98254-.877817 1.46378-1.088494.48125-.210676 1.06944-.316014 1.76455-.316014.97585 0 1.6111.13141 2.24579.573089.50518.351546 1.05206.971033 1.05206 1.519878v6.899642h-1.49684v-6.037173c0-.673599-.54334-1.280306-1.12868-1.505949-.88476-.341067-2.07945-.152217-2.79252.542133-.39867.388202-.67767.858478-.67767 1.525618v5.475371h-1.41918l-.0442-5.759505c-.0442-1.523246-1.30585-1.933675-2.21017-1.942986-.63995-.0066-1.3925.306205-1.87708.779726-.40354.394322-.68524.880575-.68524 1.547716v5.375049h-1.5442z"/></svg> + diff --git a/plugin/f9_theme/src/images/stats_pie.png b/plugin/f9_theme/src/images/stats_pie.png new file mode 100644 index 0000000..5de2b57 Binary files /dev/null and b/plugin/f9_theme/src/images/stats_pie.png differ diff --git a/plugin/f9_theme/src/images/stats_pie_rtl.png b/plugin/f9_theme/src/images/stats_pie_rtl.png new file mode 100644 index 0000000..8add9c1 Binary files /dev/null and b/plugin/f9_theme/src/images/stats_pie_rtl.png differ diff --git a/plugin/f9_theme/src/images/thumbnail.png b/plugin/f9_theme/src/images/thumbnail.png new file mode 100644 index 0000000..8ddeaad Binary files /dev/null and b/plugin/f9_theme/src/images/thumbnail.png differ diff --git a/plugin/f9_theme/src/images/topic/index.php b/plugin/f9_theme/src/images/topic/index.php new file mode 100644 index 0000000..2cf5d33 --- /dev/null +++ b/plugin/f9_theme/src/images/topic/index.php @@ -0,0 +1,9 @@ +<?php + +// Try to handle it with the upper level index.php. (it should know what to do.) +if (file_exists(dirname(dirname(__FILE__)) . '/index.php')) + include(dirname(dirname(__FILE__)) . '/index.php'); +else + exit; + +?> \ No newline at end of file diff --git a/plugin/f9_theme/src/images/topic/normal_post.png b/plugin/f9_theme/src/images/topic/normal_post.png new file mode 100644 index 0000000..1821dc4 Binary files /dev/null and b/plugin/f9_theme/src/images/topic/normal_post.png differ diff --git a/plugin/f9_theme/src/images/topic/normal_post_locked.png b/plugin/f9_theme/src/images/topic/normal_post_locked.png new file mode 100644 index 0000000..8281e5b Binary files /dev/null and b/plugin/f9_theme/src/images/topic/normal_post_locked.png differ diff --git a/plugin/f9_theme/src/images/topic/normal_post_locked_sticky.png b/plugin/f9_theme/src/images/topic/normal_post_locked_sticky.png new file mode 100644 index 0000000..5c82388 Binary files /dev/null and b/plugin/f9_theme/src/images/topic/normal_post_locked_sticky.png differ diff --git a/plugin/f9_theme/src/images/topic/normal_post_sticky.png b/plugin/f9_theme/src/images/topic/normal_post_sticky.png new file mode 100644 index 0000000..61673d1 Binary files /dev/null and b/plugin/f9_theme/src/images/topic/normal_post_sticky.png differ diff --git a/plugin/f9_theme/src/images/xmpp.svg b/plugin/f9_theme/src/images/xmpp.svg new file mode 100644 index 0000000..a7324bd --- /dev/null +++ b/plugin/f9_theme/src/images/xmpp.svg @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) --> +<!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'> +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" xml:space="preserve" viewBox="10 20 180 180" width="200px" height="200px" x="0px" y="0px" enable-background="new 0 0 200 200"> + +<linearGradient id="SVGID_right_" y2="1.279e-13" gradientUnits="userSpaceOnUse" x2="-1073.2" gradientTransform="translate(1196.604,37.368977)" y1="126.85" x1="-1073.2"> + <stop stop-color="#1b3967" offset=".011" /> + <stop stop-color="#13b5ea" offset=".467" /> + <stop stop-color="#002b5c" offset=".9945" /> +</linearGradient> + +<linearGradient id="SVGID_left_" y2="1.279e-13" gradientUnits="userSpaceOnUse" x2="-1073.2" gradientTransform="matrix(-1,0,0,1,-994.78801,37.367977)" y1="126.85" x1="-1073.2"> + <stop stop-color="#1b3967" offset=".011" /> + <stop stop-color="#13b5ea" offset=".467" /> + <stop stop-color="#002b5c" offset=".9945" /> +</linearGradient> + +<path d="m 151.80512,51.557978 c 0.077,1.313 -1.787,0.968 -1.787,2.293 0,38.551002 -46.558,97.366012 -91.687985,108.730012 v 1.639 C 118.28313,158.69999 186.89012,96.41998 188.40012,37.369977 l -36.599,14.189001 z" style="fill:url(#SVGID_right_)" /> +<path d="m 133.67312,56.300978 c 0.076,1.313 0.12,2.63 0.12,3.957 0,38.551002 -30.69898,90.497012 -75.826985,101.860012 v 1.639 c 59.044005,-2.79 105.809995,-63.02401 105.809995,-109.200012 0,-2.375 -0.128,-4.729 -0.371,-7.056 l -29.73,8.798 z" style="fill:#e96d1f" /> +<path d="m 163.69112,46.951978 -7.61699,2.722 c 0.041,0.962 0.066,2.254 0.066,3.225 0,41.219002 -37.271,98.204012 -87.271995,107.120012 -3.24501,1.088 -7.53801,2.077 -10.932,2.931 v 1.638 C 123.19013,159.02799 169.03613,92.72198 163.69612,46.947978 Z" style="fill:#d9541e" /> + +<path d="m 50.011,51.556978 c -0.077,1.313 1.787,0.968 1.787,2.293 0,38.551002 46.558007,97.366012 91.68799,108.730012 v 1.639 C 83.533,158.69899 14.926,96.41898 13.416,37.368977 l 36.599,14.189001 z" style="fill:url(#SVGID_left_)" /> +<path d="m 68.143,56.299978 c -0.076,1.313 -0.12,2.63 -0.12,3.957 0,38.551002 30.698995,90.497012 75.82699,101.860012 v 1.639 C 84.806,160.96599 38.04,100.73198 38.04,54.555978 c 0,-2.375 0.128,-4.729 0.371,-7.056 l 29.73,8.798 z" style="fill:#a0ce67" /> +<path d="m 38.125,46.950978 7.617,2.722 c -0.041,0.962 -0.066,2.254 -0.066,3.225 0,41.219002 37.271,98.204012 87.27199,107.120012 3.245,1.088 7.538,2.077 10.932,2.931 v 1.638 C 78.626,159.02699 32.78,92.72098 38.12,46.946978 Z" style="fill:#439639" /> + +</svg> diff --git a/plugin/f9_theme/src/index.php b/plugin/f9_theme/src/index.php new file mode 100644 index 0000000..2cf5d33 --- /dev/null +++ b/plugin/f9_theme/src/index.php @@ -0,0 +1,9 @@ +<?php + +// Try to handle it with the upper level index.php. (it should know what to do.) +if (file_exists(dirname(dirname(__FILE__)) . '/index.php')) + include(dirname(dirname(__FILE__)) . '/index.php'); +else + exit; + +?> \ No newline at end of file diff --git a/plugin/f9_theme/src/index.template.php b/plugin/f9_theme/src/index.template.php new file mode 100644 index 0000000..f8e6a25 --- /dev/null +++ b/plugin/f9_theme/src/index.template.php @@ -0,0 +1,819 @@ +<?php +/** + * Simple Machines Forum (SMF) + * + * @package SMF + * @author Simple Machines https://www.simplemachines.org + * @copyright 2022 Simple Machines and individual contributors + * @license https://www.simplemachines.org/about/smf/license.php BSD + * + * @version 2.1.3 + */ + +/* This template is, perhaps, the most important template in the theme. It + contains the main template layer that displays the header and footer of + the forum, namely with main_above and main_below. It also contains the + menu sub template, which appropriately displays the menu; the init sub + template, which is there to set the theme up; (init can be missing.) and + the linktree sub template, which sorts out the link tree. + + The init sub template should load any data and set any hardcoded options. + + The main_above sub template is what is shown above the main content, and + should contain anything that should be shown up there. + + The main_below sub template, conversely, is shown after the main content. + It should probably contain the copyright statement and some other things. + + The linktree sub template should display the link tree, using the data + in the $context['linktree'] variable. + + The menu sub template should display all the relevant buttons the user + wants and or needs. + + For more information on the templating system, please see the site at: + https://www.simplemachines.org/ +*/ + +/** + * Initialize the template... mainly little settings. + */ +function template_init() +{ + global $settings, $txt; + + /* $context, $options and $txt may be available for use, but may not be fully populated yet. */ + + // The version this template/theme is for. This should probably be the version of SMF it was created for. + $settings['theme_version'] = '2.1'; + + // Set the following variable to true if this theme requires the optional theme strings file to be loaded. + $settings['require_theme_strings'] = false; + + // Set the following variable to true if this theme wants to display the avatar of the user that posted the last and the first post on the message index and recent pages. + $settings['avatars_on_indexes'] = false; + + // Set the following variable to true if this theme wants to display the avatar of the user that posted the last post on the board index. + $settings['avatars_on_boardIndex'] = false; + + // Set the following variable to true if this theme wants to display the login and register buttons in the main forum menu. + $settings['login_main_menu'] = true; + + // This defines the formatting for the page indexes used throughout the forum. + $settings['page_index'] = array( + 'extra_before' => '<span class="pages">' . $txt['pages'] . '</span>', + 'previous_page' => '<span class="main_icons previous_page"></span>', + 'current_page' => '<span class="current_page">%1$d</span> ', + 'page' => '<a class="nav_page" href="{URL}">%2$s</a> ', + 'expand_pages' => '<span class="expand_pages" onclick="expandPages(this, {LINK}, {FIRST_PAGE}, {LAST_PAGE}, {PER_PAGE});"> ... </span>', + 'next_page' => '<span class="main_icons next_page"></span>', + 'extra_after' => '', + ); + + // Allow css/js files to be disabled for this specific theme. + // Add the identifier as an array key. IE array('smf_script'); Some external files might not add identifiers, on those cases SMF uses its filename as reference. + if (!isset($settings['disable_files'])) + $settings['disable_files'] = array(); + + if (file_exists($settings['theme_dir'] . '/hooks.php')) { + add_integration_function('integrate_sceditor_options', 'f9_hook_sceditor', false, $settings['theme_dir'] . '/hooks.php', false); + } +} + +/** + * The main sub template above the content. + */ +function template_html_above() +{ + global $context, $scripturl, $txt, $modSettings, $options; + + // Show right to left, the language code, and the character set for ease of translating. + echo '<!DOCTYPE html> +<html', $context['right_to_left'] ? ' dir="rtl"' : '', !empty($txt['lang_locale']) ? ' lang="' . str_replace("_", "-", substr($txt['lang_locale'], 0, strcspn($txt['lang_locale'], "."))) . '"' : '', '> +<head> + <meta charset="', $context['character_set'], '">'; + + /* + You don't need to manually load index.css, this will be set up for you. + Note that RTL will also be loaded for you. + To load other CSS and JS files you should use the functions + loadCSSFile() and loadJavaScriptFile() respectively. + This approach will let you take advantage of SMF's automatic CSS + minimization and other benefits. You can, of course, manually add any + other files you want after template_css() has been run. + + * Short example: + - CSS: loadCSSFile('filename.css', array('minimize' => true)); + - JS: loadJavaScriptFile('filename.js', array('minimize' => true)); + You can also read more detailed usages of the parameters for these + functions on the SMF wiki. + + * Themes: + The most efficient way of writing multi themes is to use a master + index.css plus variant.css files. If you've set them up properly + (through $settings['theme_variants']), the variant files will be loaded + for you automatically. + Additionally, tweaking the CSS for the editor requires you to include + a custom 'jquery.sceditor.theme.css' file in the css folder if you need it. + + * MODs: + If you want to load CSS or JS files in here, the best way is to use the + 'integrate_load_theme' hook for adding multiple files, or using + 'integrate_pre_css_output', 'integrate_pre_javascript_output' for a single file. + */ + + // load in any css from mods or themes so they can overwrite if wanted + loadCSSFile('colors.css', array('minimize' => true)); + if (!array_key_exists('dark_light', $options) || $options['dark_light'] == 0) { + // Use Device Settings + loadCSSFile('adaptive_colors.css', array('minimize' => true)); + } else if ($options['dark_light'] == 2) { + // Dark mode + loadCSSFile('dark_colors.css', array('minimize' => true)); + } + template_css(); + + // load in any javascript files from mods and themes + loadJavaScriptFile('muteShow.js', array('minimize' => true)); + template_javascript(); + + echo ' + <title>', $context['page_title_html_safe'], '</title> + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">'; + + // Content related meta tags, like description, keywords, Open Graph stuff, etc... + foreach ($context['meta_tags'] as $meta_tag) + { + echo ' + <meta'; + + foreach ($meta_tag as $meta_key => $meta_value) + echo ' ', $meta_key, '="', $meta_value, '"'; + + echo '>'; + } + + /* What is your Lollipop's color? + Theme Authors, you can change the color here to make sure your theme's main color gets visible on tab */ + echo ' + <meta name="theme-color" content="#557EA0">'; + + // Please don't index these Mr Robot. + if (!empty($context['robot_no_index'])) + echo ' + <meta name="robots" content="noindex">'; + + // Present a canonical url for search engines to prevent duplicate content in their indices. + if (!empty($context['canonical_url'])) + echo ' + <link rel="canonical" href="', $context['canonical_url'], '">'; + + // Show all the relative links, such as help, search, contents, and the like. + echo ' + <link rel="help" href="', $scripturl, '?action=help"> + <link rel="contents" href="', $scripturl, '">', ($context['allow_search'] ? ' + <link rel="search" href="' . $scripturl . '?action=search">' : ''); + + // If RSS feeds are enabled, advertise the presence of one. + if (!empty($modSettings['xmlnews_enable']) && (!empty($modSettings['allow_guestAccess']) || $context['user']['is_logged'])) + echo ' + <link rel="alternate" type="application/rss+xml" title="', $context['forum_name_html_safe'], ' - ', $txt['rss'], '" href="', $scripturl, '?action=.xml;type=rss2', !empty($context['current_board']) ? ';board=' . $context['current_board'] : '', '"> + <link rel="alternate" type="application/atom+xml" title="', $context['forum_name_html_safe'], ' - ', $txt['atom'], '" href="', $scripturl, '?action=.xml;type=atom', !empty($context['current_board']) ? ';board=' . $context['current_board'] : '', '">'; + + // If we're viewing a topic, these should be the previous and next topics, respectively. + if (!empty($context['links']['next'])) + echo ' + <link rel="next" href="', $context['links']['next'], '">'; + + if (!empty($context['links']['prev'])) + echo ' + <link rel="prev" href="', $context['links']['prev'], '">'; + + // If we're in a board, or a topic for that matter, the index will be the board's index. + if (!empty($context['current_board'])) + echo ' + <link rel="index" href="', $scripturl, '?board=', $context['current_board'], '.0">'; + + // Output any remaining HTML headers. (from mods, maybe?) + echo $context['html_headers']; + + echo ' +</head> +<body id="', $context['browser_body_id'], '" class="action_', !empty($context['current_action']) ? $context['current_action'] : (!empty($context['current_board']) ? + 'messageindex' : (!empty($context['current_topic']) ? 'display' : 'home')), !empty($context['current_board']) ? ' board_' . $context['current_board'] : '', '"> +<div id="footerfix">'; +} + +/** + * The upper part of the main template layer. This is the stuff that shows above the main forum content. + */ +function template_body_above() +{ + global $context, $settings, $scripturl, $txt, $modSettings, $maintenance; + + echo ' + <div id="header"> + <a id="top" href="', $scripturl, '"><img />', '</a> + </div> + '; + if (false) { + // If the user is logged in, display some things that might be useful. + if ($context['user']['is_logged']) + { + // Firstly, the user's menu + echo ' + <ul class="floatleft" id="top_info"> + <li> + <a href="', $scripturl, '?action=profile"', !empty($context['self_profile']) ? ' class="active"' : '', ' id="profile_menu_top">'; + + if (!empty($context['user']['avatar'])) + echo $context['user']['avatar']['image']; + + echo '<span class="textmenu">', $context['user']['name'], '</span></a> + <div id="profile_menu" class="top_menu"></div> + </li>'; + + // Secondly, PMs if we're doing them + if ($context['allow_pm']) + echo ' + <li> + <a href="', $scripturl, '?action=pm"', !empty($context['self_pm']) ? ' class="active"' : '', ' id="pm_menu_top"> + <span class="main_icons inbox"></span> + <span class="textmenu">', $txt['pm_short'], '</span>', !empty($context['user']['unread_messages']) ? ' + <span class="amt">' . $context['user']['unread_messages'] . '</span>' : '', ' + </a> + <div id="pm_menu" class="top_menu scrollable"></div> + </li>'; + + // Thirdly, alerts + echo ' + <li> + <a href="', $scripturl, '?action=profile;area=showalerts;u=', $context['user']['id'], '"', !empty($context['self_alerts']) ? ' class="active"' : '', ' id="alerts_menu_top"> + <span class="main_icons alerts"></span> + <span class="textmenu">', $txt['alerts'], '</span>', !empty($context['user']['alerts']) ? ' + <span class="amt">' . $context['user']['alerts'] . '</span>' : '', ' + </a> + <div id="alerts_menu" class="top_menu scrollable"></div> + </li>'; + + // A logout button + echo ' + <li> + <a href="', $scripturl, '?action=logout;', $context['session_var'], '=', $context['session_id'], '">', $txt['logout'], '</a> + </li>'; + + // And now we're done. + echo ' + </ul>'; + } + // Otherwise they're a guest. Ask them to either register or login. + elseif (empty($maintenance)) + { + // Some people like to do things the old-fashioned way. + if (!empty($settings['login_main_menu'])) + { + echo ' + <ul class="floatleft"> + <li class="welcome">', sprintf($txt[$context['can_register'] ? 'welcome_guest_register' : 'welcome_guest'], $context['forum_name_html_safe'], $scripturl . '?action=login', 'return reqOverlayDiv(this.href, ' . JavaScriptEscape($txt['login']) . ', \'login\');', $scripturl . '?action=signup'), '</li> + </ul>'; + } + else + { + echo ' + <ul class="floatleft" id="top_info"> + <li class="welcome"> + ', sprintf($txt['welcome_to_forum'], $context['forum_name_html_safe']), ' + </li> + <li class="button_login"> + <a href="', $scripturl, '?action=login" class="', $context['current_action'] == 'login' ? 'active' : 'open','" onclick="return reqOverlayDiv(this.href, ' . JavaScriptEscape($txt['login']) . ', \'login\');"> + <span class="main_icons login"></span> + <span class="textmenu">', $txt['login'], '</span> + </a> + </li>'; + + if ($context['can_register']) + echo ' + <li class="button_signup"> + <a href="', $scripturl, '?action=signup" class="', $context['current_action'] == 'signup' ? 'active' : 'open','"> + <span class="main_icons regcenter"></span> + <span class="textmenu">', $txt['register'], '</span> + </a> + </li>'; + + echo ' + </ul>'; + } + } + else + // In maintenance mode, only login is allowed and don't show OverlayDiv + echo ' + <ul class="floatleft welcome"> + <li>', sprintf($txt['welcome_guest'], $context['forum_name_html_safe'], $scripturl . '?action=login', 'return true;'), '</li> + </ul>'; + + if (!empty($modSettings['userLanguage']) && !empty($context['languages']) && count($context['languages']) > 1) + { + echo ' + <form id="languages_form" method="get" class="floatright"> + <select id="language_select" name="language" onchange="this.form.submit()">'; + + foreach ($context['languages'] as $language) + echo ' + <option value="', $language['filename'], '"', isset($context['user']['language']) && $context['user']['language'] == $language['filename'] ? ' selected="selected"' : '', '>', str_replace('-utf8', '', $language['name']), '</option>'; + + echo ' + </select> + <noscript> + <input type="submit" value="', $txt['quick_mod_go'], '"> + </noscript> + </form>'; + } + + if ($context['allow_search']) + { + echo ' + <form id="search_form" class="floatright" action="', $scripturl, '?action=search2" method="post" accept-charset="', $context['character_set'], '"> + <input type="search" name="search" value=""> '; + + // Using the quick search dropdown? + $selected = !empty($context['current_topic']) ? 'current_topic' : (!empty($context['current_board']) ? 'current_board' : 'all'); + + echo ' + <select name="search_selection"> + <option value="all"', ($selected == 'all' ? ' selected' : ''), '>', $txt['search_entireforum'], ' </option>'; + + // Can't limit it to a specific topic if we are not in one + if (!empty($context['current_topic'])) + echo ' + <option value="topic"', ($selected == 'current_topic' ? ' selected' : ''), '>', $txt['search_thistopic'], '</option>'; + + // Can't limit it to a specific board if we are not in one + if (!empty($context['current_board'])) + echo ' + <option value="board"', ($selected == 'current_board' ? ' selected' : ''), '>', $txt['search_thisboard'], '</option>'; + + // Can't search for members if we can't see the memberlist + if (!empty($context['allow_memberlist'])) + echo ' + <option value="members"', ($selected == 'members' ? ' selected' : ''), '>', $txt['search_members'], ' </option>'; + + echo ' + </select>'; + + // Search within current topic? + if (!empty($context['current_topic'])) + echo ' + <input type="hidden" name="sd_topic" value="', $context['current_topic'], '">'; + + // If we're on a certain board, limit it to this board ;). + elseif (!empty($context['current_board'])) + echo ' + <input type="hidden" name="sd_brd" value="', $context['current_board'], '">'; + + echo ' + <input type="submit" name="search2" value="', $txt['search'], '" class="button"> + <input type="hidden" name="advanced" value="0"> + </form>'; + } + + echo ' + </div><!-- .inner_wrap --> + </div><!-- #top_section -->'; + + } // if(false) + + echo ' + <div id="wrapper"> + <div id="upper_section"> + <div id="inner_section"> + <div id="inner_wrap"', !$context['user']['is_logged'] ? ' class="hide_720"' : '', '> + <div class="user">'; +/* + <time datetime="', smf_gmstrftime('%FT%TZ'), '">', $context['current_time'], '</time>'; + */ + + if ($context['user']['is_logged']) + echo ' + <ul class="unread_links"> + <li> + <span>Welcome, <a href="', $scripturl, '?action=profile"><strong>', $context['user']['name'], '</strong></a>! + </li> + <li> + <a href="', $scripturl, '?action=unread" title="', $txt['unread_since_visit'], '">', $txt['view_unread_category'], '</a> + </li> + <li> + <a href="', $scripturl, '?action=unreadreplies" title="', $txt['show_unread_replies'], '">', $txt['unread_replies'], '</a> + </li> + </ul>'; + + echo ' + </div>'; + + // Show a random news item? (or you could pick one from news_lines...) + if (!empty($settings['enable_news']) && !empty($context['random_news_line'])) + echo ' + <div class="news"> + <h2>', $txt['news'], ': </h2> + <p>', $context['random_news_line'], '</p> + </div>'; + + echo ' + </div>'; + + // Show the menu here, according to the menu sub template, followed by the navigation tree. + // Load mobile menu here + echo ' + <a class="mobile_user_menu"> + <span class="menu_icon"></span> + <span class="text_menu">', $txt['mobile_user_menu'], '</span> + </a> + <div id="main_menu"> + <div id="mobile_user_menu" class="popup_container"> + <div class="popup_window description"> + <div class="popup_heading">', $txt['mobile_user_menu'], ' + <a href="javascript:void(0);" class="main_icons hide_popup"></a> + </div> + ', template_menu(), ' + </div> + </div> + </div>'; + + theme_linktree(); + + echo ' + </div><!-- #inner_section --> + </div><!-- #upper_section -->'; + + // The main content should go here. + echo ' + <div id="content_section"> + <div id="main_content_section">'; +} + +/** + * The stuff shown immediately below the main content, including the footer + */ +function template_body_below() +{ + global $context, $txt, $scripturl, $modSettings; + + echo ' + </div><!-- #main_content_section --> + </div><!-- #content_section --> + </div><!-- #wrapper --> +</div><!-- #footerfix -->'; + + // Show the footer with copyright, terms and help links. + echo ' + <div id="footer"> + <div class="inner_wrap">'; + + // There is now a global "Go to top" link at the right. + echo ' + <ul> + <li class="floatright"><a href="', $scripturl, '?action=help">', $txt['help'], '</a> ', (!empty($modSettings['requireAgreement'])) ? '| <a href="' . $scripturl . '?action=agreement">' . $txt['terms_and_rules'] . '</a>' : '', ' | <a href="#top_section">', $txt['go_up'], ' ▲</a></li> + <li class="copyright">', theme_copyright(), '</li> + </ul>'; + + // Show the load time? + if ($context['show_load_time']) + echo ' + <p>', sprintf($txt['page_created_full'], $context['load_time'], $context['load_queries']), '</p>'; + + echo ' + </div> + </div><!-- #footer -->'; + +} + +/** + * This shows any deferred JavaScript and closes out the HTML + */ +function template_html_below() +{ + global $settings; + + // Load in any javascipt that could be deferred to the end of the page + template_javascript(true); + + echo ' +</body> +</html>'; + remove_integration_function('integrate_sceditor_options', 'f9_hook_sceditor', false, $settings['theme_dir'] . '/hooks.php', false); +} + +/** + * Show a linktree. This is that thing that shows "My Community | General Category | General Discussion".. + * + * @param bool $force_show Whether to force showing it even if settings say otherwise + */ +function theme_linktree($force_show = false) +{ + global $context, $shown_linktree, $scripturl, $txt; + + // If linktree is empty, just return - also allow an override. + if (empty($context['linktree']) || (!empty($context['dont_default_linktree']) && !$force_show)) + return; + + echo ' + <div class="navigate_section"> + <ul>'; + + // Each tree item has a URL and name. Some may have extra_before and extra_after. + foreach ($context['linktree'] as $link_num => $tree) + { + echo ' + <li', ($link_num == count($context['linktree']) - 1) ? ' class="last"' : '', '>'; + + // Don't show a separator for the first one. + // Better here. Always points to the next level when the linktree breaks to a second line. + // Picked a better looking HTML entity, and added support for RTL plus a span for styling. + if ($link_num != 0) + echo ' + <span class="dividers">', $context['right_to_left'] ? ' ◄ ' : ' ► ', '</span>'; + + // Show something before the link? + if (isset($tree['extra_before'])) + echo $tree['extra_before'], ' '; + + // Show the link, including a URL if it should have one. + if (isset($tree['url'])) + echo ' + <a href="' . $tree['url'] . '"><span>' . $tree['name'] . '</span></a>'; + else + echo ' + <span>' . $tree['name'] . '</span>'; + + // Show something after the link...? + if (isset($tree['extra_after'])) + echo ' ', $tree['extra_after']; + + echo ' + </li>'; + } + + echo ' + </ul> + </div><!-- .navigate_section -->'; + + $shown_linktree = true; +} + +/** + * Show the menu up top. Something like [home] [help] [profile] [logout]... + */ +function template_menu() +{ + global $context; + + echo ' + <ul class="dropmenu menu_nav">'; + $separated = false; + + // Note: Menu markup has been cleaned up to remove unnecessary spans and classes. + foreach ($context['menu_buttons'] as $act => $button) + { + $button['icon'] = ''; + if ($separated == false && ($act == 'login' || $act == 'logout' || $act == 'signup')) { + echo ' + <li class="button_separator"></li>'; + $separated = true; + } + echo ' + <li class="button_', $act, '', !empty($button['sub_buttons']) ? ' subsections"' : '"', '> + <a', $button['active_button'] ? ' class="active"' : '', ' href="', $button['href'], '"', isset($button['target']) ? ' target="' . $button['target'] . '"' : '', isset($button['onclick']) ? ' onclick="' . $button['onclick'] . '"' : '', '> + ', $button['icon'], '<span class="textmenu">', $button['title'], !empty($button['amt']) ? ' <span class="amt">' . $button['amt'] . '</span>' : '', '</span> + </a>'; + + // 2nd level menus + if (!empty($button['sub_buttons'])) + { + echo ' + <ul>'; + + foreach ($button['sub_buttons'] as $childbutton) + { + echo ' + <li', !empty($childbutton['sub_buttons']) ? ' class="subsections"' : '', '> + <a href="', $childbutton['href'], '"', isset($childbutton['target']) ? ' target="' . $childbutton['target'] . '"' : '', isset($childbutton['onclick']) ? ' onclick="' . $childbutton['onclick'] . '"' : '', '> + ', $childbutton['title'], !empty($childbutton['amt']) ? ' <span class="amt">' . $childbutton['amt'] . '</span>' : '', ' + </a>'; + // 3rd level menus :) + if (!empty($childbutton['sub_buttons'])) + { + echo ' + <ul>'; + + foreach ($childbutton['sub_buttons'] as $grandchildbutton) + echo ' + <li> + <a href="', $grandchildbutton['href'], '"', isset($grandchildbutton['target']) ? ' target="' . $grandchildbutton['target'] . '"' : '', isset($grandchildbutton['onclick']) ? ' onclick="' . $grandchildbutton['onclick'] . '"' : '', '> + ', $grandchildbutton['title'], !empty($grandchildbutton['amt']) ? ' <span class="amt">' . $grandchildbutton['amt'] . '</span>' : '', ' + </a> + </li>'; + + echo ' + </ul>'; + } + + echo ' + </li>'; + } + echo ' + </ul>'; + } + echo ' + </li>'; + } + + echo ' + </ul><!-- .menu_nav -->'; +} + +/** + * Generate a strip of buttons. + * + * @param array $button_strip An array with info for displaying the strip + * @param string $direction The direction + * @param array $strip_options Options for the button strip + */ +function template_button_strip($button_strip, $direction = '', $strip_options = array()) +{ + global $context, $txt; + + if (!is_array($strip_options)) + $strip_options = array(); + + // Create the buttons... + $buttons = array(); + foreach ($button_strip as $key => $value) + { + // As of 2.1, the 'test' for each button happens while the array is being generated. The extra 'test' check here is deprecated but kept for backward compatibility (update your mods, folks!) + if (!isset($value['test']) || !empty($context[$value['test']])) + { + if (!isset($value['id'])) + $value['id'] = $key; + + $button = ' + <a class="button button_strip_' . $key . (!empty($value['active']) ? ' active' : '') . (isset($value['class']) ? ' ' . $value['class'] : '') . '" ' . (!empty($value['url']) ? 'href="' . $value['url'] . '"' : '') . ' ' . (isset($value['custom']) ? ' ' . $value['custom'] : '') . '>'.(!empty($value['icon']) ? '<span class="main_icons '.$value['icon'].'"></span>' : '').'' . $txt[$value['text']] . '</a>'; + + if (!empty($value['sub_buttons'])) + { + $button .= ' + <div class="top_menu dropmenu ' . $key . '_dropdown"> + <div class="viewport"> + <div class="overview">'; + foreach ($value['sub_buttons'] as $element) + { + if (isset($element['test']) && empty($context[$element['test']])) + continue; + + $button .= ' + <a href="' . $element['url'] . '"><strong>' . $txt[$element['text']] . '</strong>'; + if (isset($txt[$element['text'] . '_desc'])) + $button .= '<br><span>' . $txt[$element['text'] . '_desc'] . '</span>'; + $button .= '</a>'; + } + $button .= ' + </div><!-- .overview --> + </div><!-- .viewport --> + </div><!-- .top_menu -->'; + } + + $buttons[] = $button; + } + } + + // No buttons? No button strip either. + if (empty($buttons)) + return; + + echo ' + <div class="buttonlist', !empty($direction) ? ' float' . $direction : '', '"', (empty($buttons) ? ' style="display: none;"' : ''), (!empty($strip_options['id']) ? ' id="' . $strip_options['id'] . '"' : ''), '> + ', implode('', $buttons), ' + </div>'; +} + +/** + * Generate a list of quickbuttons. + * + * @param array $list_items An array with info for displaying the strip + * @param string $list_class Used for integration hooks and as a class name + * @param string $output_method The output method. If 'echo', simply displays the buttons, otherwise returns the HTML for them + * @return void|string Returns nothing unless output_method is something other than 'echo' + */ +function template_quickbuttons($list_items, $list_class = null, $output_method = 'echo') +{ + global $txt; + + // Enable manipulation with hooks + if (!empty($list_class)) + call_integration_hook('integrate_' . $list_class . '_quickbuttons', array(&$list_items)); + + // Make sure the list has at least one shown item + foreach ($list_items as $key => $li) + { + // Is there a sublist, and does it have any shown items + if ($key == 'more') + { + foreach ($li as $subkey => $subli) + if (isset($subli['show']) && !$subli['show']) + unset($list_items[$key][$subkey]); + + if (empty($list_items[$key])) + unset($list_items[$key]); + } + // A normal list item + elseif (isset($li['show']) && !$li['show']) + unset($list_items[$key]); + } + + // Now check if there are any items left + if (empty($list_items)) + return; + + // Print the quickbuttons + $output = ' + <ul class="quickbuttons' . (!empty($list_class) ? ' quickbuttons_' . $list_class : '') . '">'; + + // This is used for a list item or a sublist item + $list_item_format = function($li) + { + $html = ' + <li' . (!empty($li['class']) ? ' class="' . $li['class'] . '"' : '') . (!empty($li['id']) ? ' id="' . $li['id'] . '"' : '') . (!empty($li['custom']) ? ' ' . $li['custom'] : '') . '>'; + + if (isset($li['content'])) + $html .= $li['content']; + else + $html .= ' + <a href="' . (!empty($li['href']) ? $li['href'] : 'javascript:void(0);') . '"' . (!empty($li['javascript']) ? ' ' . $li['javascript'] : '') . '> + ' . (!empty($li['icon']) ? '<span class="main_icons ' . $li['icon'] . '"></span>' : '') . (!empty($li['label']) ? $li['label'] : '') . ' + </a>'; + + $html .= ' + </li>'; + + return $html; + }; + + foreach ($list_items as $key => $li) + { + // Handle the sublist + if ($key == 'more') + { + $output .= ' + <li class="post_options"> + <a href="javascript:void(0);">' . $txt['post_options'] . '</a> + <ul>'; + + foreach ($li as $subli) + $output .= $list_item_format($subli); + + $output .= ' + </ul> + </li>'; + } + // Ordinary list item + else + $output .= $list_item_format($li); + } + + $output .= ' + </ul><!-- .quickbuttons -->'; + + // There are a few spots where the result needs to be returned + if ($output_method == 'echo') + echo $output; + else + return $output; +} + +/** + * The upper part of the maintenance warning box + */ +function template_maint_warning_above() +{ + global $txt, $context, $scripturl; + + echo ' + <div class="errorbox" id="errors"> + <dl> + <dt> + <strong id="error_serious">', $txt['forum_in_maintenance'], '</strong> + </dt> + <dd class="error" id="error_list"> + ', sprintf($txt['maintenance_page'], $scripturl . '?action=admin;area=serversettings;' . $context['session_var'] . '=' . $context['session_id']), ' + </dd> + </dl> + </div>'; +} + +/** + * The lower part of the maintenance warning box. + */ +function template_maint_warning_below() +{ + +} + +?> diff --git a/plugin/f9_theme/src/languages/Settings.english.php b/plugin/f9_theme/src/languages/Settings.english.php new file mode 100644 index 0000000..507fbd9 --- /dev/null +++ b/plugin/f9_theme/src/languages/Settings.english.php @@ -0,0 +1,10 @@ +<?php +// Version: 2.1.0; Settings + +global $settings; + +// argument(s): images_url as saved in settings +$txt['theme_thumbnail_href'] = '%1$s/thumbnail.png'; +$txt['theme_description'] = 'The default theme from Simple Machines.<br><br>Author: The Simple Machines Team'; + +?> \ No newline at end of file diff --git a/plugin/f9_theme/src/languages/index.php b/plugin/f9_theme/src/languages/index.php new file mode 100644 index 0000000..2cf5d33 --- /dev/null +++ b/plugin/f9_theme/src/languages/index.php @@ -0,0 +1,9 @@ +<?php + +// Try to handle it with the upper level index.php. (it should know what to do.) +if (file_exists(dirname(dirname(__FILE__)) . '/index.php')) + include(dirname(dirname(__FILE__)) . '/index.php'); +else + exit; + +?> \ No newline at end of file diff --git a/plugin/f9_theme/src/scripts/muteShow.js b/plugin/f9_theme/src/scripts/muteShow.js new file mode 100644 index 0000000..c2cf0dc --- /dev/null +++ b/plugin/f9_theme/src/scripts/muteShow.js @@ -0,0 +1,14 @@ +$(function() { + $('.roadblock_notice a').click(function (e) { + e.preventDefault(); + let muted = $('.windowbg.muted'); + let muteShown = $('.windowbg.mutedShow'); + if (muted.length > 0) { + muted.removeClass('muted').addClass('mutedShow'); + $(this).text('Click here to hide them.'); + } else if (muteShown.length > 0) { + muteShown.removeClass('mutedShow').addClass('muted'); + $(this).text('Click here to show them.'); + } + }); +}); diff --git a/plugin/f9_theme/src/scripts/theme.js b/plugin/f9_theme/src/scripts/theme.js new file mode 100644 index 0000000..cf4cd1b --- /dev/null +++ b/plugin/f9_theme/src/scripts/theme.js @@ -0,0 +1,60 @@ +$(function() { + $('ul.dropmenu, ul.quickbuttons').superfish({delay : 250, speed: 100, sensitivity : 8, interval : 50, timeout : 1}); + + // tooltips + $('.preview').SMFtooltip(); + + // find all nested linked images and turn off the border + $('a.bbc_link img').parent().css('border', '0'); +}); + +// The purpose of this code is to fix the height of overflow: auto blocks, because some browsers can't figure it out for themselves. +function smf_codeBoxFix() +{ + var codeFix = $('code'); + $.each(codeFix, function(index, tag) + { + if (is_webkit && $(tag).height() < 20) + $(tag).css({height: ($(tag).height() + 20) + 'px'}); + + else if (is_ff && ($(tag)[0].scrollWidth > $(tag).innerWidth() || $(tag).innerWidth() == 0)) + $(tag).css({overflow: 'scroll'}); + + // Holy conditional, Batman! + else if ( + 'currentStyle' in $(tag) && $(tag)[0].currentStyle.overflow == 'auto' + && ($(tag).innerHeight() == '' || $(tag).innerHeight() == 'auto') + && ($(tag)[0].scrollWidth > $(tag).innerWidth() || $(tag).innerWidth == 0) + && ($(tag).outerHeight() != 0) + ) + $(tag).css({height: ($(tag).height + 24) + 'px'}); + }); +} + +// Add a fix for code stuff? +if (is_ie || is_webkit || is_ff) + addLoadEvent(smf_codeBoxFix); + +// Toggles the element height and width styles of an image. +function smc_toggleImageDimensions() +{ + $('.postarea .bbc_img.resized').each(function(index, item) + { + $(item).click(function(e) + { + $(item).toggleClass('original_size'); + }); + }); +} + +// Add a load event for the function above. +addLoadEvent(smc_toggleImageDimensions); + +function smf_addButton(stripId, image, options) +{ + $('#' + stripId).append( + '<a href="' + options.sUrl + '" class="button last" ' + ('sCustom' in options ? options.sCustom : '') + ' ' + ('sId' in options ? ' id="' + options.sId + '_text"' : '') + '>' + + options.sText + + '</a>' + ); +} \ No newline at end of file diff --git a/plugin/f9_theme/src/theme_info.xml b/plugin/f9_theme/src/theme_info.xml new file mode 100644 index 0000000..10e3e87 --- /dev/null +++ b/plugin/f9_theme/src/theme_info.xml @@ -0,0 +1,21 @@ +<?xml version="1.0"?> +<theme-info xmlns="http://www.simplemachines.org/xml/theme-info" xmlns:smf="http://www.simplemachines.org/"> +<!-- For the id, always use something unique - put your name, a colon, and then the package name. --> +<id>smf:f9</id> +<!-- The theme's version, please try to use semantic versioning. --> +<version>1.0</version> +<!-- Install for, the SMF versions this theme was designed for. Uses the same wildcards used in the packager manager. This field is mandatory. --> +<install for="2.1 - 2.1.99, 2.1.4" /> +<!-- Theme name, used purely for aesthetics. --> +<name>F9</name> +<!-- Author: your email address or contact information. The name attribute is optional. --> +<author name="snow flurry">snow@datagirl.xyz</author> +<!-- Website... where to get updates and more information. --> +<website>https://f9.hell-labs.net/</website> +<!-- Template layers to use, defaults to "html,body". --> +<layers>html,body</layers> +<!-- Templates to load on startup. Default is "index". --> +<templates>index</templates> +<!-- Base this theme off another? Default is blank, or no. It could be "default". --> +<based-on>default</based-on> +</theme-info> diff --git a/plugin/plugin.mk b/plugin/plugin.mk new file mode 100644 index 0000000..50ec6bb --- /dev/null +++ b/plugin/plugin.mk @@ -0,0 +1,10 @@ +PKGDIR ?= $(PWD) +SRCDIR ?= src +STAGEDIR ?= $(SRCDIR) + +all: $(PKGDIR)/$(PROJECT).tar.gz + +pre-package: + +$(PKGDIR)/$(PROJECT).tar.gz: pre-package + tar czf $@ -C $(STAGEDIR) . diff --git a/plugin/topic_mute/Makefile b/plugin/topic_mute/Makefile new file mode 100644 index 0000000..0bee404 --- /dev/null +++ b/plugin/topic_mute/Makefile @@ -0,0 +1,3 @@ +PROJECT := topic_mute + +include ../plugin.mk diff --git a/plugin/topic_mute/src/Subs-TopicMute.php b/plugin/topic_mute/src/Subs-TopicMute.php new file mode 100644 index 0000000..0602ce0 --- /dev/null +++ b/plugin/topic_mute/src/Subs-TopicMute.php @@ -0,0 +1,129 @@ +<?php + +/** + * Handles topic muting for users. + * + * @package TopicMute + * @author snow flurry https://f9.hell-labs.net + * @copyright 2024 Hell Labs + * @license BSD-2-Clause + * + * @version 1.0 + */ + +if (!defined('SMF')) + die('No direct access...'); + +/** + * Tells if the topic has been muted by the user. + * + * @param int $topic The topic ID to check + * @param int $user The user ID to check settings for, or -1 to get the current user + * @return boolean True if muted, False otherwise. + */ +function topic_is_muted($topic, $user = -1) +{ + global $context, $smcFunc, $user_info; + if ($user_info['is_guest']) { + return false; + } + + if ($user == -1) { + $user = $user_info['id']; + } + + $request = $smcFunc['db_query']('', ' + SELECT COUNT(*) + FROM {db_prefix}log_mute_topic + WHERE + id_topic = {int:topic} + AND id_member = {int:user}', + array( + 'topic' => $topic, + 'user' => $user, + ) + ); + $row = $smcFunc['db_fetch_row']($request); + $smcFunc['db_free_result']($request); + return ($row[0] > 0); +} + +/** + * Integration hook to hide muted topics on board index. + */ +function hide_muted_topics(&$selects, &$tables, &$params, &$wheres, &$topic_ids, &$topic_wheres) +{ + global $user_info, $options; + + // Guests can't mute threads + if (!$user_info['is_guest']) { + $tables[] = 'LEFT JOIN {db_prefix}log_mute_topic AS lmt ' + . 'ON (lmt.id_topic = t.id_topic AND lmt.id_member = {int:current_member})'; + if (empty($options['topic_mute_roadblock'])) { + $selects[] = '(lmt.id_topic IS NOT NULL) AS topic_muted'; + } else { + $wheres[] = 'lmt.id_topic IS NULL'; + } + } +} + +/** + * Integration hook to add the (un)mute button to topic pages. + */ +function add_mute_button(&$buttons) { + global $scripturl, $context, $user_info; + + loadLanguage('TopicMute'); + + if (!$user_info['is_guest']) { + $btn_text = topic_is_muted($context['current_topic']) ? 'unmute_topic' : 'mute_topic'; + $buttons['mute_topic'] = array( + 'text' => $btn_text, + 'url' => $scripturl . '?action=topicmute;topic=' . $context['current_topic'] . ';' + . $context['session_var'] . '=' . $context['session_id'], + ); + } +} + +/** + * Integration hook to add the 'topicmute' action. + */ +function add_topicmute_action(&$actions) +{ + $actions['topicmute'] = array( + 'TopicMute.php', + 'TopicMute', + ); +} + +/** + * Integration hook to show the "How to present muted threads" option in the theme. + */ +function mute_theme_option() +{ + global $context, $txt; + + loadLanguage('TopicMute'); + + $posting_idx = 0; + foreach ($context['theme_options'] as $key) { + $posting_idx++; + if ($key == $txt['theme_opt_posting']) { + break; + } + } + + $option = array( + 'id' => 'topic_mute_roadblock', + 'label' => $txt['topic_mute_roadblock'], + 'default' => false, + ); + + $context['theme_options'] = array_merge( + array_slice($context['theme_options'], 0, $posting_idx - 1, true), + $option, + array_slice($context['theme_options'], $posting_idx - 1, null, true), + ); +} + +?> diff --git a/plugin/topic_mute/src/TopicMute.php b/plugin/topic_mute/src/TopicMute.php new file mode 100644 index 0000000..73c8659 --- /dev/null +++ b/plugin/topic_mute/src/TopicMute.php @@ -0,0 +1,60 @@ +<?php + +/** + * Toggle the mute status of a topic. Must be called with a topic specified in the URL. + * + * Accessed via ?action=topicmute. + */ +function TopicMute() +{ + global $smcFunc, $user_info, $topic, $scripturl; + + is_not_guest(); + checkSession('get'); + + if (empty($topic)) + fatal_lang_error('not_a_topic', false); + + + if (topic_is_muted($topic)) { + // Topic is muted, unmute it + $smcFunc['db_query']('', ' + DELETE FROM {db_prefix}log_mute_topic + WHERE id_member = {int:current_user} + AND id_topic = {int:current_topic}', + array( + 'current_user' => $user_info['id'], + 'current_topic' => $topic, + ) + ); + } else { + // Topic isn't muted, so mute it + $smcFunc['db_insert']('ignore', + '{db_prefix}log_mute_topic', + array('id_member' => 'int', 'id_topic' => 'int'), + array( + $user_info['id'], + $topic, + ), + array('id_member') + ); + } + + // Handle AJAX requests + if (isset($_GET['xml'])) + { + $context['xml_data']['errors'] = array( + 'identifier' => 'error', + 'children' => array( + array( + 'value' => 0, + ), + ), + ); + $context['sub_template'] = 'generic_xml'; + } else { + redirectexit('topic=' . $topic . '.' . $_REQUEST['start']); + } +} + +?> diff --git a/plugin/topic_mute/src/dbinstall.php b/plugin/topic_mute/src/dbinstall.php new file mode 100644 index 0000000..eefcf39 --- /dev/null +++ b/plugin/topic_mute/src/dbinstall.php @@ -0,0 +1,45 @@ +<?php +if (file_exists(dirname(__FILE__) . '/SSI.php') && !defined('SMF')) { + require_once(dirname(__FILE__) . '/SSI.php'); +} elseif (!defined('SMF')) { + die('<b>Error:</b> Cannot install - please verify that you put this file in the same place as SMF\'s index.php and SSI.php files.'); +} + +require_once($sourcedir . '/Subs-Admin.php'); +db_extend('packages'); + +$columns = array( + array( + 'name' => 'id_member', + 'type' => 'mediumint', + 'unsigned' => true, + 'not_null' => true, + ), + array( + 'name' => 'id_topic', + 'type' => 'mediumint', + 'unsigned' => true, + 'not_null' => true, + ), +); + +$indexes = array( + array( + 'type' => 'primary', + 'columns' => array('id_member'), + ), +); + +$smcFunc['db_create_table']( + '{db_prefix}log_mute_topic', + $columns, + $indexes, + array(), + 'update' +); + +if (SMF == 'SSI') { + echo 'Database updated!'; +} + +?> diff --git a/plugin/topic_mute/src/languages/TopicMute.english.php b/plugin/topic_mute/src/languages/TopicMute.english.php new file mode 100644 index 0000000..36f1b31 --- /dev/null +++ b/plugin/topic_mute/src/languages/TopicMute.english.php @@ -0,0 +1,7 @@ +<?php + +$txt['mute_topic'] = 'Mute Topic'; +$txt['unmute_topic'] = 'Unmute Topic'; +$txt['topic_mute_roadblock'] = 'Present an option to show muted threads'; + +?> diff --git a/plugin/topic_mute/src/package-info.xml b/plugin/topic_mute/src/package-info.xml new file mode 100644 index 0000000..a1ddc9c --- /dev/null +++ b/plugin/topic_mute/src/package-info.xml @@ -0,0 +1,30 @@ +<?xml version="1.0"?> +<!DOCTYPE package-info SYSTEM "http://www.simplemachines.org/xml/package-info"> +<package-info xmlns="http://www.simplemachines.org/xml/package-info" xmlns:smf="http://www.simplemachines.org/"> + <id>@flurry:topic_mute</id> + <name>Topic Mute</name> + <version>1.0</version> + <type>modification</type> + + <install for="2.1.* - 2.1.99"> + <readme parsebbc="true">readme.txt</readme> + <require-file name="Subs-TopicMute.php" destination="$sourcedir" /> + <require-file name="languages/TopicMute.english.php" destination="$languagedir" /> + <require-file name="TopicMute.php" destination="$sourcedir" /> + <database>dbinstall.php</database> + <hook hook="integrate_message_index" function="hide_muted_topics" file="$sourcedir/Subs-TopicMute.php" /> + <hook hook="integrate_theme_options" function="mute_theme_option" file="$sourcedir/Subs-TopicMute.php" /> + <hook hook="integrate_display_buttons" function="add_mute_button" file="$sourcedir/Subs-TopicMute.php" /> + <hook hook="integrate_actions" function="add_topicmute_action" file="$sourcedir/Subs-TopicMute.php" /> + </install> + + <uninstall for="2.1.* - 2.1.99"> + <remove-file name="$sourcedir/Subs-TopicMute.php" /> + <remove-file name="$sourcedir/TopicMute.php" /> + <remove-file name="$languagedir/TopicMute.english.php" /> + <hook hook="integrate_message_index" function="hide_muted_topics" file="$sourcedir/Subs-TopicMute.php" reverse="true" /> + <hook hook="integrate_theme_options" function="mute_theme_option" file="$sourcedir/Subs-TopicMute.php" reverse="true" /> + <hook hook="integrate_display_buttons" function="add_mute_button" file="$sourcedir/Subs-TopicMute.php" reverse="true" /> + <hook hook="integrate_actions" function="add_topicmute_action" file="$sourcedir/Subs-TopicMute.php" reverse="true" /> + </uninstall> +</package-info> diff --git a/plugin/topic_mute/src/readme.txt b/plugin/topic_mute/src/readme.txt new file mode 100644 index 0000000..1333ed7 --- /dev/null +++ b/plugin/topic_mute/src/readme.txt @@ -0,0 +1 @@ +TODO diff --git a/renders/F9Render.png b/renders/F9Render.png new file mode 100644 index 0000000..fe137b1 Binary files /dev/null and b/renders/F9Render.png differ diff --git a/renders/F9Render_small.png b/renders/F9Render_small.png new file mode 100644 index 0000000..c2db0c8 Binary files /dev/null and b/renders/F9Render_small.png differ diff --git a/renders/sandbox_hdr.png b/renders/sandbox_hdr.png new file mode 100644 index 0000000..d2797b0 Binary files /dev/null and b/renders/sandbox_hdr.png differ