Compare commits

..
155 Commits
Author SHA1 Message Date
deepend 2922c9982a fix build warnings 2026-09-16 01:17:45 -06:00
deepend 062c105bc1 fix application crash + other fixes 2026-09-16 01:17:45 -06:00
deepend 18d77b7279 enable storage information 2026-09-16 01:17:45 -06:00
deepend a1cd9897ea fix Win32 IP Helper includes for sysinfo 2026-09-16 01:17:45 -06:00
deepend dad6abee58 bring sysinfo into 2026 2026-09-16 01:17:45 -06:00
deepend 2672f9b087 Start acknowleding 2.20 development 2026-09-16 01:16:35 -06:00
deepend 4315a75a12 add 2.19.1 release notes 2026-09-16 00:10:49 -06:00
deepend-tildeclub fc4a7454ad Merge pull request #391 from ZoiteChat/fix-away-tracking
Fix away tracking
2026-09-15 11:45:16 -07:00
deepend 87410aea50 Fix away tracking 2026-09-15 12:30:04 -06:00
deepend-tildeclub de98d00a1c Merge pull request #390 from ZoiteChat/fix-issue-369
defer channel tree scrolling until realized
2026-09-14 05:36:00 -07:00
deepend e94ffd9d79 defer channel tree scrolling until realized 2026-09-14 04:11:23 -06:00
deepend-tildeclub d7aebb784d Merge pull request #387 from ZoiteChat/tab-font-custom
add custom tab fonts and reduce close button size
2026-09-14 02:56:19 -07:00
deepend-tildeclub 20b8cb939d Merge pull request #389 from ZoiteChat/fix-issue-386
fix theme service tests
2026-09-14 02:47:50 -07:00
deepend ff4217c3d1 fix theme service tests 2026-09-13 15:34:56 -06:00
deepend 4fb72d30d8 add custom tab fonts and reduce close button size 2026-09-12 06:43:08 -06:00
deepend-tildeclub d2b8fc0bda Merge pull request #352 from ZoiteChat/inline-images
support inline images in chat.
2026-09-11 02:51:36 -07:00
deepend 951181628a Bundle GIO TLS support in AppImage 2026-09-11 03:30:43 -06:00
deepend-tildeclub ccee274847 Merge pull request #384 from salahcoronya/build-improvements
Fix build bug and improve build process
2026-09-11 02:13:17 -07:00
deepend 967f6728ef Use OpenSSL for Win HTTPS image downloads 2026-09-11 02:58:53 -06:00
deepend-tildeclub bf11ffb626 Merge pull request #379 from ZoiteChat/fix-issue-373
Add formatting status bar to input box
2026-09-11 01:14:09 -07:00
deepend c12cabbe4e Add formatting status bar to input box 2026-09-10 22:40:11 -06:00
deepend-tildeclub e997594db9 Merge pull request #346 from ZoiteChat/emoji-major-updates
New Emoji Menu and Emoji Version 17.0 support.
2026-09-10 19:16:01 -07:00
deepend 6f5e3b395f fix failed CI builds 2026-09-10 19:55:33 -06:00
deepend 8bf2caf20d Unified emoji support across builds, fixed picker bugs, and added CI checks. 2026-09-10 07:13:41 -06:00
Christopher Byrne 040021ee0e buuld: Fix deprecated features since 0.56
Now the the minimum is 0.59, silence some warning in Meson:

dependency.get_pkgconfig_variable becomes
depenency.get_variable(pkgconfig: 'var_name')
executable(gui_app = true) becomes
executable(win_subsystem = 'windows')

Signed-off-by: Christopher Byrne <[email protected]>
2026-09-07 20:57:29 -05:00
Christopher Byrne 5018a3a848 meson.build: Reflect usage of 0.59 Meson features
src/fe-gtk/meson.build calls feature_opt.allowed() which wasn't
added until 0.59.

Signed-off-by: Christopher Byrne <[email protected]>
2026-09-07 20:57:29 -05:00
Christopher Byrne df1c74a91d data/misc/meson.build: Fix referencing possibly undefined variable "appstreamcli"
If meson is passed -Dinstall-plugin-metainfo=false, the "appstreamcli"
will not be defined, but it is later referenced in global scope, which
causes and "undefined variable" error in Meson

Signed-off-by: Christopher Byrne <[email protected]>
2026-09-07 20:57:21 -05:00
deepend bb3893d36c Fix channel ACTION routing after self-message handling 2026-09-03 09:27:07 -06:00
deepend-tildeclub fe57449f6c Merge pull request #374 from TehPeGaSuS/fix/weechat-relay-pm-split
Fix private messages splitting into two windows over WeeChat's IRC relay
2026-09-03 08:20:55 -07:00
ThePeGaSuS c725adaa09 Fix CTCP ACTION not rerouting self-sent /me to correct PM window
Mirrors the PRIVMSG fix: replayed /me messages sent by our own nick
via WeeChat relay backlog were always passed with fromme=FALSE,
so they never got rerouted to the actual PM query window.
2026-09-03 08:51:21 +02:00
deepend-tildeclub 7731bfa4e0 Merge pull request #377 from ZoiteChat/retain-searched-text-view
unblock navigation when in search
2026-09-02 09:46:13 -07:00
deepend e72546aaec fix accidental removal of mg_apply_emoji_fallback_widget (entry); 2026-09-02 10:43:09 -06:00
deepend d6d648f0f4 unblock navigation when in search 2026-09-02 10:41:21 -06:00
deepend-tildeclub 56fddd56f5 Merge pull request #340 from bgermann/winspell
Require Enchant 2.8.19+ and drop win8 provider
2026-09-01 15:06:11 -07:00
Bastian Germann 3c9c350bc0 win32: Set Enchant prefix dir to install location
Enchant looks for its providers (including the WinSpell spellcheck
provider) under a hardcoded default path derived from its build
prefix, which is C:\gtk-build\gtk\x64\release\lib\enchant-2 when
built via gvsbuild. After installation, the provider DLLs live
under ZoiteChat's own install directory, so Enchant fails to find
them and spellcheck silently stops working.

Call enchant_set_prefix_dir() to redirect Enchant's provider search
to <install_dir> before the first enchant_broker_init().
enchant_set_prefix_dir() expects the installation prefix itself;
Enchant adds lib\enchant-2 when searching for providers.
The symbol is loaded optionally since it may not exist in older
Enchant builds; if missing, behavior is unchanged.
2026-09-01 21:36:40 +02:00
Bastian Germann 8340a04bd6 win32: Use parentheses to be independent of and/or evaluation order
The Version.NTPlatform shall be true for every evaluation of the if
branch.
2026-08-31 14:45:31 +02:00
Bastian Germann ccef70fd3d Clarify comments about spelling provider 2026-08-31 14:29:16 +02:00
Bastian Germann 0650fa7bbe win32: Reference enchant-2 in installer 2026-08-31 14:17:58 +02:00
Bastian Germann 5cffa06385 Update gvsbuild to version with updated enchant 2026-08-31 14:17:58 +02:00
Bastian Germann 4df17a151e Require Enchant 2.8.19+ and drop win8 provider
Require Enchant 2.8.19 or newer so Windows can use upstream winspell.
Remove the in-tree libenchant_win8 provider project and sources.
Update runtime library probing to prefer Enchant 2 library names.
2026-08-31 14:17:58 +02:00
deepend c8e314b690 docs version uses VERSION file 2026-08-30 23:39:07 -06:00
deepend 3d91f3c235 fix build issue for readthedocs.io 2026-08-30 23:19:20 -06:00
deepend 32cd536ada combine docs into zoitechat repo 2026-08-30 23:13:52 -06:00
ThePeGaSuS 0ba523d071 Fix: private messages split into two windows over WeeChat's IRC relay
When you send a private message, ZoiteChat sometimes gets the same
message echoed back by the server so it can show it in the right
window. Whether it recognizes that echo depended on the server first
confirming a feature called "echo-message" during connection setup.

WeeChat's relay doesn't seem to confirm that feature the way other
servers (or ZNC) do, so ZoiteChat didn't recognize its own echoed
messages and treated them as brand new incoming messages from
yourself, opening a second, separate conversation window instead of
using the one you were already typing in.

This makes ZoiteChat recognize its own message by checking who sent
it, instead of only trusting that feature confirmation. That way,
sent and received messages always end up in the same conversation
window, regardless of how well the server/relay announces its
capabilities.
2026-08-28 20:48:12 +02:00
deepend-tildeclub 314171b2b1 Merge pull request #367 from ZoiteChat/release/2.19
WIN32: fix installer theme download URL.
2026-08-16 01:38:36 -06:00
deepend 909309cc2e WIN32: fix installer theme download URL. 2026-08-15 12:49:58 -06:00
deepend-tildeclub 32b6de0c3a Merge pull request #366 from ZoiteChat/release/2.19-flatpak-error-startup
fix startup error on flatpak
2026-08-15 12:38:30 -06:00
deepend-tildeclub 7e22e7b67d Merge pull request #365 from ZoiteChat/release/2.19
Release/2.19
2026-08-15 12:37:35 -06:00
deepend 36f0d7450c fix startup error on flatpak 2026-08-15 12:20:18 -06:00
deepend-tildeclub 73d958911f Merge pull request #364 from ZoiteChat/master
run Ci for release branches
2026-08-15 12:10:29 -06:00
deepend 6b4a2b5406 fix unmark away option 2026-08-15 12:07:41 -06:00
deepend cd8d1c9b10 Run Ci on Release/version branches on commit 2026-08-04 12:11:30 -06:00
deepend-tildeclub a79fedda77 Merge pull request #360 from ZoiteChat/release/2.19
fix duplicate /msg output + Escaping of the intial slash
2026-08-04 12:10:53 -06:00
deepend 558ef7fbdf fix Escaping of the intial slash 2026-08-04 11:58:30 -06:00
deepend 7c6609a414 fix duplicate /msg output 2026-08-04 11:35:48 -06:00
deepend 54514f494f Version bump for 2.19.0 Release. 2026-07-28 10:26:04 -06:00
deepend-tildeclub 67aa7ca79f Merge pull request #355 from ZoiteChat/centralize_version_management
Centralize release version in root VERSION file.
2026-07-28 09:31:12 -06:00
deepend 344f5af01b Centralize release version in root VERSION file. 2026-07-28 09:12:53 -06:00
deepend-tildeclub 8150d6c48c Merge pull request #351 from ZoiteChat/reduce-client-restarts
Reduce needed client restarts for settings changes.
2026-07-19 17:02:04 -06:00
deepend 05ee0dbdb5 Reduce needed client restarts for settings changes. 2026-07-16 08:48:33 -06:00
deepend-tildeclub 2db3076c92 Merge pull request #350 from ZoiteChat/fix-gtk3-quirks
fix a few GTK3 theming quirks
2026-07-16 02:29:43 -06:00
deepend 90daed18df fix a few GTK3 theming quirks 2026-07-15 23:56:05 -06:00
deepend-tildeclub 65dd2c645a Merge pull request #345 from ZoiteChat/gtk3-consistency-fixes
theming: respect system theme by default
2026-07-14 14:27:08 -06:00
deepend 89d70a940c theming: respect system theme by default 2026-07-13 13:26:55 -06:00
deepend-tildeclub 4944517a0e Merge pull request #344 from ZoiteChat/ask_sasl_password_reconnect
Prompt SASL password again on reconnect
2026-07-13 09:53:41 -06:00
deepend 2a7ee7f0b2 Prompt SASL password again on reconnect 2026-07-13 09:18:19 -06:00
deepend-tildeclub 6edbd47c9a Merge pull request #342 from ZoiteChat/sasl_password_prompt
Add manual SASL password prompt
2026-07-10 05:12:19 -06:00
deepend d755c39e4a Add manual SASL password prompt 2026-07-09 12:50:13 -06:00
deepend-tildeclub b7f8327209 Merge pull request #341 from ZoiteChat/theme_manager_get_channel_tree_palette_behavior
Use owned channel tree font for palette behavior
2026-07-09 10:57:13 -06:00
deepend 27c82d8411 Use owned channel tree font for palette behavior 2026-07-09 10:38:52 -06:00
deepend e0b159c069 Remove Manjaro package. Handled seperately. 2026-07-08 12:24:08 -06:00
deepend-tildeclub cfb19820fa Merge pull request #330 from ZoiteChat/Windows/python38-support
Add Python 3.8 support for older windows versions.
2026-07-08 10:00:31 -06:00
deepend-tildeclub e05ca13608 Merge pull request #335 from ZoiteChat/color-tooltips
Add mouse over tooltips for each color selection.
2026-07-08 09:44:10 -06:00
deepend-tildeclub 15cf96c01f Merge pull request #336 from ZoiteChat/win32-taskbar-fix
Fix Windows taskbar click not minimizing the window
2026-07-08 09:31:04 -06:00
deepend 2caec91a0f Improve color tooltip design 2026-07-08 00:58:34 -06:00
deepend 9465a1e0a8 Fix Windows taskbar click not minimizing the window 2026-07-07 23:44:22 -06:00
deepend 251272c708 Applying: Fix Windows 7 crash after connecting when Python plugin init fails 2026-07-07 19:04:51 -06:00
deepend f068a0e0fa Fix Windows Python plugin DLL selection 2026-07-07 15:34:11 -06:00
deepend d0034cd112 Fixed missing comma in color tooltips 2026-07-07 14:14:36 -06:00
deepend ae6d5ebeef Add mouse over tooltips for each color selection. 2026-07-07 09:08:00 -06:00
deepend-tildeclub 8466e70424 Merge pull request #329 from ZoiteChat/implement-issue-326
Adjust default text-event colors
2026-07-06 23:46:48 -06:00
deepend c3d8f27f48 Add Python 3.8 support for older windows versions. 2026-07-06 01:37:59 -06:00
deepend b85229f1a1 Adjust default text-event colors 2026-07-05 23:54:49 -06:00
deepend-tildeclub d03298a048 Merge pull request #325 from ZoiteChat/fix-chat-scrollbar-stepper-scrolling
Fix chat scrollbar step increment for arrow scrolling
2026-07-05 15:07:25 -06:00
deepend-tildeclub 798e0b487e Merge pull request #324 from ZoiteChat/fix-nickserv-pass-auth
Fix NickServ auth to use decrypted active password
2026-07-05 13:50:48 -06:00
deepend 49444d72b4 Fix chat scrollbar step increment for arrow scrolling 2026-07-05 13:38:26 -06:00
deepend-tildeclub c0e0fe4dcb Merge pull request #319 from ZoiteChat/css-use-after-free-fix
Fix channel tree font ownership/lifetime
2026-07-04 20:07:58 -06:00
deepend-tildeclub 9a189848ea Merge pull request #318 from ZoiteChat/windows-browser-preference
Prefer ShellExecuteW for Windows URL opens
2026-07-04 20:07:37 -06:00
deepend 96b09bfc1d Fix NickServ auth to use decrypted active password 2026-07-04 20:04:11 -06:00
deepend 9a6c913d89 Fix channel tree font ownership/lifetime 2026-07-02 13:08:48 -06:00
deepend 42010594be Prefer ShellExecuteW for Windows URL opens 2026-07-02 13:02:09 -06:00
deepend 5469c30b75 Update GPLv2 text, Add feature request template. 2026-07-01 18:25:48 -06:00
deepend fe9a2ee202 Preparation for 2.18.3 2026-06-29 20:49:41 -06:00
deepend-tildeclub 5e27dc7e9f Merge pull request #315 from ZoiteChat/python-script-compatibility-fix
Snapshot Python hooks during plugin unload
2026-06-29 20:41:00 -06:00
deepend-tildeclub 69d083e3c0 Merge pull request #314 from ZoiteChat/openssl4-build-fixes
Support OpenSSL 4 APIs
2026-06-29 20:38:39 -06:00
deepend 2b95f9724e Snapshot Python hooks during plugin unload 2026-06-29 19:13:18 -06:00
deepend 4066a07892 Support OpenSSL 4 API 2026-06-29 18:47:46 -06:00
deepend-tildeclub 443ab58f65 Merge pull request #313 from ZoiteChat/fix-lag-ping-timeout-window
Fix lag ping timeout window.
2026-06-27 11:56:38 -06:00
deepend e0116acbe4 Fix lag ping timeout window. 2026-06-27 11:46:51 -06:00
deepend-tildeclub 91e9bf0207 Merge pull request #311 from ZoiteChat/fix-pm-echo-routing
Fix self-echoed PM routing to target tab
2026-06-27 01:59:20 -06:00
deepend aff0335f7e Fix self-echoed PM routing to target tab 2026-06-27 01:42:23 -06:00
deepend-tildeclub 4d8baaa19b Merge pull request #310 from ZoiteChat/fix-tray-right-click-menu
Fix Windows GtkStatusIcon tray menu popup
2026-06-26 14:47:23 -06:00
deepend 65452d80f1 Use native Win32 tray context menu 2026-06-26 14:32:12 -06:00
deepend-tildeclub df4d432151 Merge pull request #308 from ZoiteChat/replace-depreciated-ipv4-conversion-calls
Replace legacy IPv4 APIs
2026-06-25 21:34:39 -06:00
deepend-tildeclub 1390f2c783 Merge pull request #307 from ZoiteChat/ircv3-typing-reply-messagetags-echo-message
IRCv3 +message-tags, +echo-message, +typing +replies
2026-06-25 20:32:24 -06:00
deepend be99d0e900 Add reply cache, composer bar, and nick-menu replies 2026-06-25 14:51:04 -06:00
deepend 97fcf1d5fc Replace legacy IPv4 APIs 2026-06-24 14:24:43 -06:00
deepend c9b14d7c45 fix github bug template 2026-06-22 16:20:46 -06:00
deepend 3d0dda0347 Add github bug report template 2026-06-22 16:17:24 -06:00
deepend-tildeclub 8d69b35d67 Merge pull request #303 from ZoiteChat/fix-invalid-cert-setting
Restore accept-invalid-cert TLS bypass behavior
2026-06-22 16:00:55 -06:00
deepend 7ba142a9f2 Restore accept-invalid-cert TLS bypass behavior 2026-06-20 19:07:19 -06:00
deepend-tildeclub 56ac55806d Merge pull request #302 from ZoiteChat/theme-gtk3-tests-revert
Revert previous fixes merged to master without forcing.
2026-06-20 11:04:25 -06:00
deepend 47f53c14db Adjust Fedora package checks for GTK3 test stability 2026-06-20 10:59:10 -06:00
deepend a47d40b914 Guard GTK3 theme tests for headless Xwayland 2026-06-20 10:25:02 -06:00
deepend be33ae30bb Guard GTK theme ops when screen/seat missing 2026-06-20 09:51:16 -06:00
deepend 6d5f1306bf Guard legacy OpenSSL cleanup for 4.x builds 2026-06-20 09:24:05 -06:00
deepend ad3dc716e7 2.18.2 release preparation 2026-06-20 08:44:47 -06:00
deepend-tildeclub 089b125a89 Merge pull request #301 from ZoiteChat/mode-button-multi-line-settings
Add topic layout prefs for inline modes/multiline topics
2026-06-20 07:58:25 -06:00
deepend dfd4554a11 Move Topic Bar prefs under Appearance 2026-06-20 04:48:47 -06:00
deepend 1b98297881 Add topic layout prefs for inline modes/multiline topics 2026-06-20 04:09:45 -06:00
deepend-tildeclub cacc8fcafe Merge pull request #299 from ZoiteChat/fix-unload-crash
Fix DBus unload null filename path
2026-06-18 19:45:38 -06:00
deepend ac07d39db8 Fix DBus unload null filename path 2026-06-18 19:25:11 -06:00
deepend-tildeclub e27aa77cec Merge pull request #296 from ZoiteChat/fishlim-manager
Add FiSHLiM manager and context menu hooks
2026-06-18 19:11:11 -06:00
deepend cbc9f68dd6 Isolate GTK3 settings test data home + use xwayland-run 2026-06-18 18:57:49 -06:00
deepend 944d0f5a70 adding fedora packaging spec file. 2026-06-17 04:00:30 -06:00
deepend 9ded7ef830 Clarify FiSHLiM key manager invite wording 2026-06-16 15:47:56 -06:00
deepend adb18b7ce3 Improve FiSHLiM key delete flow + CBC warnings 2026-06-15 23:26:59 -06:00
deepend-tildeclub 8220e60257 Merge pull request #297 from ZoiteChat/fix-flatpak-tabs-tree-errors
Expose hidden channel tree for tab switcher compatibility
2026-06-15 23:01:03 -06:00
deepend b09af655e7 Add FiSHLiM GTK key manager + context menu access 2026-06-15 22:56:50 -06:00
deepend 5833f8a3d8 Expose hidden channel tree for tab switcher compatibility 2026-06-15 22:52:20 -06:00
deepend-tildeclub 72132d5e88 Merge pull request #283 from ZoiteChat/tray-iconified-restore
Fix tray restore for iconified windows
2026-06-15 14:22:47 -06:00
deepend-tildeclub 4167c4db78 Merge pull request #293 from ZoiteChat/feat-reset-keybinds
Add keybind reset while preserving custom rows
2026-06-12 10:37:36 -06:00
deepend 3e1f6b9137 Add keybind reset while preserving custom rows 2026-06-12 08:22:03 -06:00
deepend-tildeclub bb08b19c0d Merge pull request #291 from ZoiteChat/extend-keybind-change-page-targeting
Allow keybinds to switch by channel name
2026-06-10 16:28:18 -06:00
deepend-tildeclub 7497919e8f Merge pull request #290 from ZoiteChat/ssl-init--modern-apis
Harden TLS defaults, cert checks, and hostname failures
2026-06-10 16:24:19 -06:00
deepend-tildeclub 41cbe7b31c Merge pull request #287 from ZoiteChat/customize-all-keybinds
Customize all keybinds
2026-06-10 16:22:52 -06:00
deepend 425e951341 Allow keybinds to switch by channel name 2026-06-10 16:19:01 -06:00
deepend 2e4a0b92fc Harden TLS defaults, cert checks, and hostname failures 2026-06-10 16:13:59 -06:00
deepend 9f839579e2 Show live menu accelerators from keybinds 2026-06-10 15:57:23 -06:00
deepend 900066b9d4 Add option to hide join/part hostmasks 2026-06-10 15:09:47 -06:00
deepend 97534b0670 Add option to hide join/part hostmasks 2026-06-10 15:05:00 -06:00
deepend-tildeclub 62672ade04 Merge pull request #285 from ZoiteChat/no_proxy_option
Add -noproxy to /server
2026-06-10 09:05:39 -06:00
deepend b22e1c1ccc Add -noproxy to /server 2026-06-10 08:47:52 -06:00
deepend-tildeclub 1b8e60c26d Merge pull request #284 from ZoiteChat/windows-taskbar-improvement
Limit Win32 taskbar workaround to size state changes
2026-06-10 08:20:33 -06:00
deepend 035dfdd332 Limit Win32 taskbar workaround to size state changes 2026-06-09 14:02:41 -06:00
deepend d1707d3c72 Fix tray restore for iconified windows 2026-06-09 13:55:43 -06:00
deepend-tildeclub c9bed097ba Merge pull request #282 from ZoiteChat/improve-theme-switching-consistency
Fix GTK3 theme background refresh/saving
2026-06-09 11:37:44 -06:00
deepend 5acb90025f Fix GTK3 theme background refresh/saving 2026-06-09 11:23:38 -06:00
deepend-tildeclub 2d12da79b0 Merge pull request #279 from ZoiteChat/resolver-api-updates
Replace DCC IPv4 lookups with getaddrinfo
2026-06-06 20:21:42 -06:00
deepend-tildeclub bede379021 Merge pull request #267 from ZoiteChat/keyring-support
Keyring support
2026-06-06 15:54:47 -06:00
deepend 38acde1b20 Replace DCC IPv4 lookups with getaddrinfo 2026-06-06 15:50:52 -06:00
deepend d0c4a5addd Fix keyring mode switching and password reveal state 2026-06-05 10:38:16 -06:00
deepend-tildeclub b8a7ccf005 Merge pull request #277 from ZoiteChat/fix-window-restore
Defer topic relayout after restore-down
2026-06-05 09:15:10 -06:00
deepend 68fc53585e Defer topic relayout after restore-down 2026-06-04 15:24:37 -06:00
deepend 26afc125c7 Add optional keyring + encrypted password fallback 2026-06-02 15:57:28 -06:00
280 changed files with 68530 additions and 2091 deletions
+132
View File
@@ -0,0 +1,132 @@
---
name: Bug report
about: Report a problem with ZoiteChat
title: "[Bug]: "
labels: bug
assignees: ""
---
```
+------------------------------------------------------------+
| ZoiteChat Bug Report |
| Please fill this out so the bug goblin has enough crumbs. |
+------------------------------------------------------------+
```
## Summary
What went wrong?
```text
Describe the bug clearly and briefly.
```
## Steps to Reproduce
```text
1.
2.
3.
4.
```
## Expected Result
```text
What should have happened?
```
## Actual Result
```text
What happened instead?
```
## ZoiteChat Version
```text
ZoiteChat version:
Build/source: GitHub release / Fedora package / source build / Windows installer / other
Commit hash, if built from source:
```
## System Information
```text
OS:
OS version:
Desktop environment:
Display server: Wayland / X11 / Windows / other
CPU architecture: x86_64 / aarch64 / other
```
## IRC / Network Details
```text
IRC network/server:
Port:
TLS/SSL enabled: yes / no
SASL enabled: yes / no
Using bouncer/ZNC: yes / no
Proxy/VPN involved: yes / no
IRCv3 capabilities involved, if known:
```
## Plugins, Scripts, and Config
```text
Plugins enabled:
Scripts loaded:
Theme/custom CSS:
Custom config changes:
Does the bug still happen with a clean config? yes / no / untested
```
## Logs / Terminal Output
Paste relevant output below.
```text
```
## Raw IRC Lines, If Relevant
Remove passwords, tokens, IPs, private channels, private messages, certs, and account details before posting.
```text
```
## Crash Details, If Relevant
```text
Did ZoiteChat crash? yes / no
Crash reporter output:
Backtrace:
Core dump available: yes / no
```
## Screenshots
Attach screenshots or screen recordings if the issue is visual.
## Regression Check
```text
Did this work in an older version? yes / no / unknown
Last known working version:
First broken version:
```
## Checklist
* [ ] I searched existing issues first.
* [ ] I tested with the latest ZoiteChat version available to me.
* [ ] I included steps to reproduce the issue.
* [ ] I removed private information from logs and raw IRC lines.
* [ ] I included system and network details where relevant.
## Extra Notes
```text
Anything else that might help.
```
+1
View File
@@ -0,0 +1 @@
blank_issues_enabled: false
+57
View File
@@ -0,0 +1,57 @@
---
name: Feature request
about: Suggest an improvement for ZoiteChat
title: "[Feature]: "
labels: enhancement
assignees: ""
---
## Summary
```text
Describe the feature or enhancement clearly and briefly.
```
## Problem
```text
What problem would this solve?
```
## Proposed Solution
```text
How should ZoiteChat behave?
```
## Alternatives Considered
```text
Other approaches or workarounds you considered.
```
## Use Case
```text
Who benefits from this, and when would they use it?
```
## Platform Details
```text
OS:
ZoiteChat version:
Build/source: GitHub release / Fedora package / source build / Windows installer / other
```
## Checklist
* [ ] I searched existing issues first.
* [ ] I checked whether this already exists in the latest ZoiteChat version available to me.
* [ ] I explained the problem this would solve.
## Extra Notes
```text
Anything else that might help.
```
+26 -26
View File
@@ -2,7 +2,7 @@ name: AppImage Build
on:
push:
branches: [master]
branches: [master, 'release/**']
pull_request:
branches: [master]
@@ -30,13 +30,13 @@ jobs:
gettext \
libcanberra-dev libglib2.0-dev \
libarchive-dev \
libgtk-3-dev \
libgtk-3-dev libfontconfig1-dev libpango1.0-dev xvfb xauth dbus-daemon at-spi2-core \
libwayland-client0 libwayland-cursor0 libwayland-egl1 \
libxkbcommon0 \
libgtk-3-bin libglib2.0-bin shared-mime-info gsettings-desktop-schemas \
libgtk-3-bin libglib2.0-bin glib-networking shared-mime-info gsettings-desktop-schemas \
liblua5.4-dev libpci-dev libperl-dev libssl-dev libayatana-appindicator3-dev \
perl python3 python3-minimal python3-dev python3-cffi mono-devel desktop-file-utils \
fonts-noto-color-emoji breeze-gtk-theme \
breeze-gtk-theme \
patchelf file curl
- name: Configure
@@ -56,17 +56,15 @@ jobs:
set -eux
ninja -C build
- name: Test emoji catalog, font coverage and picker
run: xvfb-run -a dbus-run-session -- meson test -C build --print-errorlogs "Emoji Data Tests" "Emoji Font Tests" "Emoji UI Tests"
- name: Install to AppDir
run: |
set -eux
rm -rf AppDir
DESTDIR="${PWD}/AppDir" ninja -C build install
- name: Verify offline docs install
run: |
set -eux
test -f AppDir/usr/share/doc/zoitechat/html/index.html
- name: Bundle scripting runtimes in AppDir
run: |
set -eux
@@ -124,15 +122,8 @@ jobs:
cp -a /usr/lib/x86_64-linux-gnu/libpython3*.so* AppDir/usr/lib/x86_64-linux-gnu/
fi
if [ -d "/usr/share/gtk-3.0/emoji" ]; then
install -d AppDir/usr/share/gtk-3.0
cp -a /usr/share/gtk-3.0/emoji AppDir/usr/share/gtk-3.0/
fi
if [ -f "/usr/share/fonts/truetype/noto/NotoColorEmoji.ttf" ]; then
install -d AppDir/usr/share/fonts/truetype/noto
cp -a /usr/share/fonts/truetype/noto/NotoColorEmoji.ttf AppDir/usr/share/fonts/truetype/noto/
fi
# Every package ships the pinned font, including portable builds.
cmp data/fonts/NotoColorEmoji.ttf AppDir/usr/share/fonts/zoitechat/NotoColorEmoji.ttf
if [ -d "/usr/lib/x86_64-linux-gnu/gtk-3.0/modules" ]; then
install -d AppDir/usr/lib/x86_64-linux-gnu/gtk-3.0
@@ -144,6 +135,20 @@ jobs:
cp -a /usr/lib/gtk-3.0/modules AppDir/usr/lib/gtk-3.0/
fi
# HTTPS inline-image downloads use GSocketClient TLS on Linux.
# GLib provides the API, but TLS and system-proxy support live in
# loadable GIO modules shipped by glib-networking. Bundle those
# modules so the AppImage does not depend on the host copy.
gio_module_dir="$(pkg-config --variable=giomoduledir gio-2.0)"
test -n "$gio_module_dir"
test -f "${gio_module_dir}/libgiognutls.so"
install -d "AppDir${gio_module_dir}"
cp -a "${gio_module_dir}"/libgio*.so "AppDir${gio_module_dir}/"
gio-querymodules "AppDir${gio_module_dir}"
test -f "AppDir${gio_module_dir}/libgiognutls.so"
test -s "AppDir${gio_module_dir}/giomodule.cache"
- name: Verify bundled plugins
run: |
set -eux
@@ -197,14 +202,6 @@ jobs:
export GTK_PATH="$gtk_path_entries${GTK_PATH:+:$GTK_PATH}"
fi
if [ -d "$APPDIR/etc/fonts" ]; then
export FONTCONFIG_SYSROOT="$APPDIR"
export FONTCONFIG_PATH="$APPDIR/etc/fonts${FONTCONFIG_PATH:+:$FONTCONFIG_PATH}"
if [ -f "$APPDIR/etc/fonts/fonts.conf" ]; then
export FONTCONFIG_FILE="$APPDIR/etc/fonts/fonts.conf"
fi
fi
if [ -d "$APPDIR/usr/lib/x86_64-linux-gnu/zoitechat/plugins" ]; then
export ZOITECHAT_LIBDIR="$APPDIR/usr/lib/x86_64-linux-gnu/zoitechat/plugins"
elif [ -d "$APPDIR/usr/lib/zoitechat/plugins" ]; then
@@ -263,6 +260,9 @@ jobs:
export PYTHONPATH="$pythonpath_entries${PYTHONPATH:+:$PYTHONPATH}"
fi
# Register the private font without hiding the host's normal fonts.
export ZOITECHAT_EMOJI_FONT="${ZOITECHAT_EMOJI_FONT:-$APPDIR/usr/share/fonts/zoitechat/NotoColorEmoji.ttf}"
# OpenSSL trust store override
export SSL_CERT_FILE="${SSL_CERT_FILE:-$APPDIR/etc/ssl/certs/ca-certificates.crt}"
export SSL_CERT_DIR="${SSL_CERT_DIR:-$APPDIR/etc/ssl/certs}"
+1 -7
View File
@@ -2,7 +2,7 @@ name: Flatpak Build
on:
push:
branches: [master]
branches: [master, 'release/**']
pull_request:
branches: [master]
@@ -37,12 +37,6 @@ jobs:
cache: false
restore-cache: false
- name: Verify offline docs install
run: |
flatpak --user install -y zoitechat.flatpak
app_dir="$(flatpak info --user --show-location net.zoite.Zoitechat)"
test -f "$app_dir/files/share/zoitechat/offline-docs/index.html"
- name: Upload Flatpak Bundle
id: upload_flatpak
uses: actions/upload-artifact@v6
@@ -1,79 +0,0 @@
name: Manjaro Package Build
on:
push:
branches: [master, main]
pull_request:
branches: [master, main]
workflow_dispatch:
permissions:
contents: read
jobs:
manjaro-package:
runs-on: ubuntu-latest
container:
image: manjarolinux/base:latest
steps:
- name: Install packaging toolchain
run: |
set -euxo pipefail
pacman -Syu --noconfirm
pacman -S --noconfirm --needed \
base-devel \
git \
namcap \
meson \
ninja \
pkgconf \
glib2 \
glib2-devel \
gtk3 \
openssl \
libcanberra \
libayatana-appindicator \
iso-codes \
lua \
perl \
python \
python-cffi \
pciutils
- name: Checkout repository
uses: actions/checkout@v5
with:
fetch-depth: 0
submodules: true
- name: Build package and generate .SRCINFO (non-root)
run: |
set -euxo pipefail
id -u builder >/dev/null 2>&1 || useradd -m builder
chown -R builder:builder "$GITHUB_WORKSPACE"
su builder -c "cd '$GITHUB_WORKSPACE/packaging/manjaro' && makepkg --noconfirm --syncdeps --cleanbuild"
su builder -c "cd '$GITHUB_WORKSPACE/packaging/manjaro' && makepkg --printsrcinfo > .SRCINFO"
- name: Lint PKGBUILD and package with namcap
run: |
set -euxo pipefail
cd "$GITHUB_WORKSPACE/packaging/manjaro"
namcap PKGBUILD
pkg_file="$(find . -maxdepth 1 -type f -name '*.pkg.tar.*' | head -n1)"
namcap "$pkg_file"
- name: Collect artifacts
run: |
set -euxo pipefail
mkdir -p artifacts
cp -v "$GITHUB_WORKSPACE"/packaging/manjaro/*.pkg.tar.* artifacts/
cp -v "$GITHUB_WORKSPACE"/packaging/manjaro/PKGBUILD artifacts/
cp -v "$GITHUB_WORKSPACE"/packaging/manjaro/.SRCINFO artifacts/
- name: Upload package artifacts
uses: actions/upload-artifact@v6
with:
name: zoitechat-manjaro-package
path: artifacts/*
if-no-files-found: error
+81 -9
View File
@@ -4,6 +4,7 @@ on:
push:
branches:
- master
- 'release/**'
pull_request:
branches:
- master
@@ -65,9 +66,33 @@ jobs:
Download-WithRetry -Url https://github.com/jrsoftware/issrc/releases/download/is-6_7_1/innosetup-6.7.1.exe -OutFile deps\innosetup-unicode.exe
& deps\innosetup-unicode.exe /VERYSILENT | Out-Null
Download-WithRetry -Url https://github.com/ZoiteChat/gvsbuild/releases/download/zoitechat-2.18.1/GTK3_Gvsbuild_zoitechat-2.18.1_x64.zip -OutFile deps\gtk-${{ matrix.arch }}.zip
Download-WithRetry -Url https://github.com/ZoiteChat/gvsbuild/releases/download/zoitechat-2.20.0-alpha.1/GTK3_Gvsbuild_zoitechat-2.20.0-alpha.1_x64.zip -OutFile deps\gtk-${{ matrix.arch }}.zip
Expand-Archive -LiteralPath deps\gtk-${{ matrix.arch }}.zip -DestinationPath C:\gtk-build\gtk\x64\release -Force
# The GTK3 archive omits librsvg. Add only its renderer, loader and
# license from the companion release, keeping the GTK3 DLLs intact.
Download-WithRetry -Url https://github.com/ZoiteChat/gvsbuild/releases/download/zoitechat-2.20.0-alpha.1/GTK4_Gvsbuild_zoitechat-2.20.0-alpha.1_x64.zip -OutFile deps\svg-runtime.zip
if ((Get-FileHash deps\svg-runtime.zip -Algorithm SHA256).Hash -ne 'fb657f9ebae3a6807defb15e66091d643a703ee66cb37488e3e11e5646f45adb') {
throw 'Unexpected SVG runtime archive checksum'
}
$svgArchive = [System.IO.Compression.ZipFile]::OpenRead((Resolve-Path deps\svg-runtime.zip))
try {
foreach ($name in @('bin/rsvg-2-2.dll', 'lib/gdk-pixbuf-2.0/2.10.0/loaders/pixbufloader_svg.dll', 'share/doc/librsvg/COPYING.LIB')) {
$entry = $svgArchive.GetEntry($name)
if ($null -eq $entry) { throw "Missing SVG runtime file: $name" }
$destination = Join-Path 'C:\gtk-build\gtk\x64\release' $name
New-Item -ItemType Directory -Path (Split-Path $destination) -Force | Out-Null
[System.IO.Compression.ZipFileExtensions]::ExtractToFile($entry, $destination, $true)
}
}
finally { $svgArchive.Dispose() }
# This loads the module now, catching missing DLLs before the build.
& C:\gtk-build\gtk\x64\release\bin\gdk-pixbuf-query-loaders.exe --update-cache
if ($LASTEXITCODE -ne 0) { throw 'Could not generate the pixbuf loader cache' }
if (-not (Select-String -LiteralPath 'C:\gtk-build\gtk\x64\release\lib\gdk-pixbuf-2.0\2.10.0\loaders.cache' -SimpleMatch '"svg"')) {
throw 'SVG loader could not be loaded with the GTK3 runtime'
}
Download-WithRetry -Url https://repo.msys2.org/mingw/x86_64/mingw-w64-x86_64-hicolor-icon-theme-0.18-1-any.pkg.tar.zst -OutFile deps\hicolor-icon-theme.pkg.tar.zst
python -c "import tarfile,zstandard,pathlib;archive=pathlib.Path(r'deps\\hicolor-icon-theme.pkg.tar.zst');target=pathlib.Path(r'C:\\gtk-build\\gtk\\x64\\release');dctx=zstandard.ZstdDecompressor();f=archive.open('rb');reader=dctx.stream_reader(f);tf=tarfile.open(fileobj=reader,mode='r|');[tf.extract(m,path=target) for m in tf if m.name.startswith('mingw64/share/icons/hicolor/')];tf.close();reader.close();f.close()"
@@ -113,6 +138,26 @@ jobs:
New-Item -Path $pyDir -Name "${{ matrix.platform }}" -ItemType Junction -Value $pyRoot | Out-Null
}
- uses: actions/setup-python@v6
with:
python-version: '3.8.10'
architecture: ${{ matrix.arch }}
- name: Prepare Python 3.8
run: |
python -m pip install --upgrade pip
python -m pip install cffi
$pyRoot = $env:pythonLocation
if (-not $pyRoot) { $pyRoot = & python -c "import sys; print(sys.prefix)" }
foreach ($pyDir in @("C:\gtk-build\python-3.8.10", "C:\gtk-build\python-3.8")) {
New-Item -Path $pyDir -ItemType Directory -Force | Out-Null
$target = Join-Path $pyDir "${{ matrix.platform }}"
if (Test-Path $target) { Remove-Item $target -Recurse -Force }
New-Item -Path $pyDir -Name "${{ matrix.platform }}" -ItemType Junction -Value $pyRoot | Out-Null
}
- name: Build
run: |
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\Tools\VsDevCmd.bat"
@@ -124,23 +169,50 @@ jobs:
exit /b 1
)
set "PYTHON38_DIR=C:\gtk-build\python-3.8\${{ matrix.platform }}"
if not exist "%PYTHON38_DIR%\libs\python38.lib" (
echo Missing %PYTHON38_DIR%\libs\python38.lib
dir "%PYTHON38_DIR%\libs"
exit /b 1
)
if not exist "%PYTHON38_DIR%\Lib\site-packages\_cffi_backend.cp38*.pyd" (
echo Missing %PYTHON38_DIR%\Lib\site-packages\_cffi_backend.cp38*.pyd
exit /b 1
)
set "LIB=%PYTHON_DIR%\libs;%LIB%"
set "INCLUDE=%PYTHON_DIR%\include;%INCLUDE%"
powershell -NoProfile -ExecutionPolicy Bypass -Command "$archiveLib='C:\gtk-build\gtk\x64\release\lib\libarchive.lib'; if (-not (Test-Path $archiveLib)) { $archiveDll = Get-ChildItem 'C:\gtk-build\gtk\x64\release\bin\libarchive*.dll' | Select-Object -First 1; if ($archiveDll) { Push-Location 'C:\gtk-build\gtk\x64\release\lib'; & 'C:\gtk-build\gendef\gendef.exe' $archiveDll.FullName | Out-Null; $archiveDef = Get-ChildItem 'libarchive*.def' | Select-Object -First 1; if ($archiveDef) { & lib /def:$archiveDef.Name /machine:${{ matrix.platform }} /out:libarchive.lib | Out-Null }; Pop-Location } }"
msbuild win32\zoitechat.sln /m /verbosity:minimal /p:Configuration=Release /p:Platform=${{ matrix.platform }}
if errorlevel 1 exit /b 1
if not exist "..\zoitechat-build\${{ matrix.platform }}\rel\plugins\hcpython38.dll" (
echo hcpython38.dll was not built
exit /b 1
)
if not exist "..\zoitechat-build\${{ matrix.platform }}\rel\_cffi_backend.cp38*.pyd" (
echo _cffi_backend for Python 3.8 was not staged for the installer
exit /b 1
)
shell: cmd
- name: Verify offline docs install
run: |
if not exist "..\zoitechat-build\${{ matrix.platform }}\rel\offline-docs\index.html" exit /b 1
findstr /C:"Name:" "..\zoitechat-build\${{ matrix.platform }}\bin\zoitechat.iss" | findstr /C:"docs"
findstr /C:"OFFLINEDOCSURL" "..\zoitechat-build\${{ matrix.platform }}\bin\zoitechat.iss"
findstr /C:"Source:" "..\zoitechat-build\${{ matrix.platform }}\bin\zoitechat.iss" | findstr /C:"offline-docs"
findstr /C:"offline-docs.tar.gz" "..\zoitechat-build\${{ matrix.platform }}\bin\zoitechat.iss"
findstr /C:"InstallOfflineDocs" "..\zoitechat-build\${{ matrix.platform }}\bin\zoitechat.iss"
- name: Test emoji catalog, font coverage and picker
shell: cmd
run: |
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\Tools\VsDevCmd.bat"
set "PATH=%CD%\..\zoitechat-build\x64\rel;%PATH%"
set "GDK_PIXBUF_MODULE_FILE=%CD%\..\zoitechat-build\x64\rel\lib\gdk-pixbuf-2.0\2.10.0\loaders.cache"
set "ZOITECHAT_EMOJI_FONT=%CD%\..\zoitechat-build\x64\rel\share\fonts\zoitechat\NotoColorEmoji.ttf"
fc /b data\fonts\NotoColorEmoji.ttf "%ZOITECHAT_EMOJI_FONT%"
if errorlevel 1 exit /b 1
for %%T in (data font ui) do (
msbuild win32\emoji-tests.vcxproj /m /verbosity:minimal /p:Configuration=Release /p:Platform=x64 /p:EmojiTestKind=%%T
if errorlevel 1 exit /b 1
..\zoitechat-build\x64\tests\emoji-%%T-tests.exe --tap
if errorlevel 1 exit /b 1
)
- name: Preparing Artifacts
run: |
+7
View File
@@ -0,0 +1,7 @@
version: 2
sphinx:
configuration: 'docs/conf.py'
build:
os: 'ubuntu-22.04'
tools:
python: '3.11'
+45 -24
View File
@@ -1,12 +1,12 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
<https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
@@ -15,7 +15,7 @@ software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
@@ -55,8 +55,8 @@ patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
@@ -110,7 +110,7 @@ above, provided that you also meet all of these conditions:
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
@@ -168,7 +168,7 @@ access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
@@ -225,7 +225,7 @@ impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
@@ -255,7 +255,7 @@ make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
@@ -277,9 +277,9 @@ YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
@@ -291,7 +291,7 @@ convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) 19yy <name of author>
Copyright (C) <year> <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -303,17 +303,15 @@ the "copyright" line and a pointer to where the full notice is found.
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
You should have received a copy of the GNU General Public License along
with this program; if not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) 19yy name of author
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
@@ -330,11 +328,34 @@ necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
<signature of Moe Ghoul>, 1 April 1989
Moe Ghoul, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.
======================================================================
ADDITIONAL LICENSE NOTICE
======================================================================
ZoiteChat source code:
GPL version 2
See Above.
Unicode Emoji and CLDR data:
Unicode License v3
data/emoji/LICENSE-UNICODE.txt
gemoji shortcode data:
MIT License
Copyright (c) 2019 GitHub, Inc.
data/emoji/LICENSE-GEMOJI.txt
Noto Color Emoji:
SIL Open Font License 1.1
data/fonts/OFL.txt
+1
View File
@@ -0,0 +1 @@
2.20.0-dev
+43
View File
@@ -1,6 +1,49 @@
ZoiteChat ChangeLog
=================
2.19.0 (2026-07-28)
-------------------
- Added Python 3.8 compatibility for older Windows releases.
- Added on-demand SASL password prompts, including renewed prompts after reconnecting.
- Corrected NickServ authentication to use the decrypted password for the active network.
- Made system theme matching the default and polished GTK3 theme integration.
- Applied more settings changes immediately, reducing the need to restart ZoiteChat.
- Added descriptive tooltips to the color picker choices and refined default text-event colors.
- Stabilized channel tree font handling across palette and theme updates.
- Corrected the chat scrollbar increment used by its arrow buttons.
- Improved Windows URL launching through the native shell.
- Restored expected minimize behavior when clicking ZoiteChat on the Windows taskbar.
2.18.3 (2026-06-29)
-------------------
- Added IRCv3 support for message tags, echo-message, typing notifications, and replies.
- Restored the accept-invalid-cert TLS bypass behavior.
- Replaced legacy IPv4 APIs and added support for OpenSSL 4 APIs.
- Snapshot Python hooks during plugin unload for safer plugin shutdown.
- Fixed Windows GtkStatusIcon tray menu popup behavior.
- Fixed self-echoed private messages routing to the target tab.
- Fixed the lag ping timeout window.
2.18.2 (2026-06-20)
-------------------
- Improved security and connection handling with stronger TLS defaults,
safer certificate/hostname validation, FiSHLiM OpenSSL fixes, keyring support,
and getaddrinfo-based DCC lookups.
- Expanded FiSHLiM usability with a GTK key manager, context-menu access, and clearer
channel/private-message key handling.
- Improved keyboard and navigation behavior with customizable keybinds, reset support,
channel-name switching, /server -noproxy, and configurable stale-link ping checks.
- Refined the GTK interface with native file chooser dialogs, topic layout preferences,
timestamp/date hover tooltips, better restore-down relayout, text scroll speed controls,
and aligned network meters.
- Added privacy and display options, including hiding join/part hostmasks and improved
topic/multiline mode layout controls.
- Fixed several platform/UI edge cases, including tray restore from iconified state, DBus unload
handling, GTK3 theme refresh/saving, and tab switcher compatibility.
2.18.1 (2026-05-21)
-------------------
+39
View File
@@ -0,0 +1,39 @@
UNICODE LICENSE V3
COPYRIGHT AND PERMISSION NOTICE
Copyright © 1991-2026 Unicode, Inc.
NOTICE TO USER: Carefully read the following legal agreement. BY
DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR
SOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE
TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT
DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE.
Permission is hereby granted, free of charge, to any person obtaining a
copy of data files and any associated documentation (the "Data Files") or
software and any associated documentation (the "Software") to deal in the
Data Files or Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, and/or sell
copies of the Data Files or Software, and to permit persons to whom the
Data Files or Software are furnished to do so, provided that either (a)
this copyright and permission notice appear with all copies of the Data
Files or Software, or (b) this copyright and permission notice appear in
associated Documentation.
THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
THIRD PARTY RIGHTS.
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE
BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES,
OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA
FILES OR SOFTWARE.
Except as contained in this notice, the name of a copyright holder shall
not be used in advertising or otherwise to promote the sale, use or other
dealings in these Data Files or Software without prior written
authorization of the copyright holder.
+30
View File
@@ -0,0 +1,30 @@
# Bundled emoji data
These are pinned copies of the upstream data files that
`tools/gen-emoji-data.py` compiles into ZoiteChat's emoji picker catalog
at build time. Bundling them means every ZoiteChat package exposes the
same emoji, names, categories and search keywords, independent of the
GTK runtime version or the emoji data a distribution installs under
`/usr/share/gtk-3.0/emoji`.
Nothing here affects what is sent over IRC: the picker inserts plain
Unicode sequences. Official builds register the bundled Noto Color Emoji
font privately for consistent rendering, while preserving platform font
fallback if registration is unavailable.
| File | Source | Version |
| ---- | ------ | ------- |
| `emoji-test.txt` | [Unicode emoji data](https://unicode.org/Public/emoji/17.0/emoji-test.txt) (mirrored at [unicode-org/unicodetools](https://github.com/unicode-org/unicodetools/blob/main/unicodetools/data/emoji/17.0/emoji-test.txt)) | Emoji 17.0 |
| `cldr-annotations-en.xml` | [unicode-org/cldr](https://github.com/unicode-org/cldr/blob/release-48/common/annotations/en.xml) `common/annotations/en.xml` | CLDR release 48 |
| `cldr-annotations-derived-en.xml` | [unicode-org/cldr](https://github.com/unicode-org/cldr/blob/release-48/common/annotationsDerived/en.xml) `common/annotationsDerived/en.xml` | CLDR release 48 |
| `gemoji.json` | [github/gemoji](https://github.com/github/gemoji/blob/v4.1.0/db/emoji.json) `db/emoji.json` | v4.1.0 |
The pinned versions are recorded in `VERSIONS`.
## Licenses
- `emoji-test.txt`, `cldr-annotations-en.xml`,
`cldr-annotations-derived-en.xml`: © Unicode, Inc., distributed under
the [Unicode License v3](https://www.unicode.org/license.txt).
- `gemoji.json`: from the gemoji project, MIT licensed,
© GitHub, Inc.
+6
View File
@@ -0,0 +1,6 @@
# Pinned versions of the emoji source data in this directory.
# Keep in sync with the files themselves; tools/gen-emoji-data.py
# verifies unicode-emoji against the emoji-test.txt header.
unicode-emoji=17.0
cldr=48
gemoji=4.1.0
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+23479
View File
File diff suppressed because it is too large Load Diff
Binary file not shown.
+91
View File
@@ -0,0 +1,91 @@
Copyright 2013 Google LLC
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
https://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) shall not be
used to promote, endorse or advertise any Modified Version, except to
acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s)
or with their explicit written permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.
+43
View File
@@ -0,0 +1,43 @@
# Bundled emoji font
`NotoColorEmoji.ttf` reports Noto Color Emoji version 2.051 and covers
Unicode Emoji 17.0. It is vendored from Debian's
`fonts-noto-color-emoji` 2.051 package, built from the corresponding
Google Noto Emoji release.
Every GTK build installs this exact file: Windows (installer and portable
build files), AppImage, Flatpak and native Meson/RPM builds. It is loaded
into a private Pango/FreeType font map as `ZoiteChat Emoji`; an older system
Noto font cannot replace it. No font is installed globally on Windows.
Chat windows and the emoji picker share this map. Fontconfig still loads
system fonts and configuration for ordinary text, and the configured text
font, size and style remain in effect. In particular, plain digits, `#`
and `*` are not assigned emoji metrics.
Windows uses the same FreeType backend rather than GDI registration or an
OS-version-specific picker. The dependency bundle already ships FreeType,
Fontconfig and PangoFT2. This rendering path does not require Windows' native
color-font support. Actual Windows 7 execution still needs testing on that OS.
Meson requires PangoFT2 >= 1.44 and Fontconfig >= 2.13. Normal installations
load `share/fonts/zoitechat/NotoColorEmoji.ttf` beneath the configured data
directory; Windows resolves it relative to the executable. AppImage sets
`ZOITECHAT_EMOJI_FONT` to its own copy. For an uninstalled development build:
```sh
ZOITECHAT_EMOJI_FONT="$PWD/data/fonts/NotoColorEmoji.ttf" build/src/fe-gtk/zoitechat
```
A missing/unloadable file logs a warning and retains system-font fallback.
CI verifies the installed copy and tests catalog/font coverage; AppImage and
Windows also run the interactive picker regression tests. Native themes,
DPI and different Pango/Cairo versions can still affect pixel-level output.
Upstream release: https://github.com/googlefonts/noto-emoji/releases/tag/v2.051
Vendored file SHA-256:
`dac5c27651082d6c53dab5081f50d2022ddf6877d730fa919cf6a4fc2af22de0`
The font is distributed under the SIL Open Font License 1.1. See
`OFL.txt`.
+13
View File
@@ -0,0 +1,13 @@
emoji_font_dir = join_paths(get_option('datadir'), 'fonts', 'zoitechat')
emoji_font_doc_dir = join_paths(get_option('datadir'), 'doc', 'zoitechat', 'fonts')
install_data(
'NotoColorEmoji.ttf',
install_dir: emoji_font_dir,
)
install_data(
'OFL.txt',
'README.md',
install_dir: emoji_font_doc_dir,
)
+1 -12
View File
@@ -3,19 +3,8 @@ if get_option('plugin')
endif
if get_option('gtk-frontend')
subdir('fonts')
subdir('icons')
subdir('misc')
subdir('man')
endif
offline_docs_url = get_option('offline-docs-url')
offline_docs = custom_target('offline-docs',
output: 'offline-docs.stamp',
command: [find_program('python3'), files('misc/fetch_offline_docs.py'), offline_docs_url, '@OUTDIR@', meson.source_root()],
build_by_default: true,
)
meson.add_install_script(
files('misc/install_offline_docs.py'),
join_paths(meson.current_build_dir(), 'offline-docs'),
offline_docs_dir,
)
-89
View File
@@ -1,89 +0,0 @@
#!/usr/bin/env python3
import html
import io
import pathlib
import shutil
import sys
import tarfile
import tempfile
import urllib.error
import urllib.request
url = sys.argv[1]
out_dir = pathlib.Path(sys.argv[2])
source_dir = pathlib.Path(sys.argv[3]) if len(sys.argv) > 3 else pathlib.Path.cwd()
docs_dir = out_dir / "offline-docs"
if docs_dir.exists():
shutil.rmtree(docs_dir)
docs_dir.mkdir(parents=True, exist_ok=True)
def write_source_docs() -> None:
parts = [
'<!doctype html><html><head><meta charset="utf-8">'
"<title>ZoiteChat Documentation</title></head><body>"
"<h1>ZoiteChat Documentation</h1>"
]
for name in ("readme.md", "troubleshooting.md", "changelog.rst"):
path = source_dir / name
if path.exists():
parts.append(
f"<h2>{html.escape(name)}</h2>"
f"<pre>{html.escape(path.read_text(encoding='utf-8', errors='replace'))}</pre>"
)
parts.append("</body></html>")
(docs_dir / "index.html").write_text("\n".join(parts), encoding="utf-8")
def safe_extract(tar: tarfile.TarFile, target: pathlib.Path) -> None:
target = target.resolve()
for member in tar.getmembers():
member_path = (target / member.name).resolve()
if not str(member_path).startswith(str(target) + "/"):
raise tarfile.TarError(f"unsafe archive path: {member.name}")
tar.extractall(target)
def copy_index_tree(extracted_dir: pathlib.Path) -> bool:
indexes = sorted(extracted_dir.rglob("index.html"))
if not indexes:
return False
root = indexes[0].parent
for item in root.iterdir():
dest = docs_dir / item.name
if item.is_dir():
shutil.copytree(item, dest, dirs_exist_ok=True)
else:
shutil.copy2(item, dest)
return (docs_dir / "index.html").exists()
if url:
try:
with urllib.request.urlopen(url, timeout=30) as response:
data = response.read()
with tempfile.TemporaryDirectory() as tmp:
extract_dir = pathlib.Path(tmp)
with tarfile.open(fileobj=io.BytesIO(data), mode="r:gz") as tar:
safe_extract(tar, extract_dir)
if not copy_index_tree(extract_dir):
write_source_docs()
except (OSError, tarfile.TarError, urllib.error.URLError) as error:
print(f"offline docs download failed: {error}", file=sys.stderr)
write_source_docs()
else:
write_source_docs()
(out_dir / "offline-docs.stamp").write_text("ok", encoding="utf-8")
-13
View File
@@ -1,13 +0,0 @@
#!/usr/bin/env python3
import os
import pathlib
import shutil
import sys
src = pathlib.Path(sys.argv[1])
dest = pathlib.Path(os.environ['MESON_INSTALL_DESTDIR_PREFIX']) / sys.argv[2]
if not (src / 'index.html').exists():
sys.exit(0)
if dest.exists():
shutil.rmtree(dest)
shutil.copytree(src, dest)
+1 -1
View File
@@ -2,6 +2,7 @@ appdir = join_paths(get_option('datadir'), 'applications')
metainfodir = join_paths(get_option('datadir'), 'metainfo')
mimedir = join_paths(get_option('datadir'), 'mime', 'packages')
desktop_utils = find_program('desktop-file-validate', required: false)
appstreamcli = find_program('appstreamcli', required: false)
if get_option('gtk-frontend')
if get_option('install-appdata')
@@ -13,7 +14,6 @@ if get_option('gtk-frontend')
install_dir: metainfodir
)
appstreamcli = find_program('appstreamcli', required: false)
if appstreamcli.found()
test('Validate net.zoite.Zoitechat.appdata.xml', appstreamcli,
args: ['validate', zoitechat_appdata]
@@ -29,6 +29,74 @@
<id>zoitechat.desktop</id>
</provides>
<releases>
<release date="2026-09-15" version="2.19.1">
<description>
<ul>
<li>Fixed /msg messages showing twice on servers using IRCv3 <code>echo-message</code>.</li>
<li>Fixed escaping a leading command slash so <code>//text</code> sends <code>/text</code> as normal chat.</li>
<li>Fixed automatic away clearing when sending messages on servers using <code>echo-message</code>.</li>
<li>Fixed other users' away status not updating until rejoining a channel when <code>away-notify</code> updates are missed.</li>
<li>Fixed private messages and <code>/me</code> actions being routed to the wrong window when using WeeChat's IRC relay, while preserving channel ACTION routing.</li>
<li>Fixed a Flatpak startup error caused by the D-Bus service still using the old HexChat app ID.</li>
<li>Fixed optional Windows 10 theme downloads in the Windows installer.</li>
<li>Fixed the GTK warning when switching from channel tabs to the channel tree.</li>
<li>Fixed GTK3 theme archive root detection so themes with an <code>index.theme</code> file are preferred correctly.</li>
<li>Fixed source-build configuration when plugin AppStream metadata installation is disabled, and corrected the minimum Meson version to 0.59.</li>
</ul>
</description>
</release>
<release date="2026-07-28" version="2.19.0">
<description>
<ul>
<li>Added Python 3.8 compatibility for older Windows releases.</li>
<li>Added on-demand SASL password prompts, including renewed prompts after reconnecting.</li>
<li>Corrected NickServ authentication to use the decrypted password for the active network.</li>
<li>Made system theme matching the default and polished GTK3 theme integration.</li>
<li>Applied more settings changes immediately, reducing the need to restart ZoiteChat.</li>
<li>Added descriptive tooltips to the color picker choices and refined default text-event colors.</li>
<li>Stabilized channel tree font handling across palette and theme updates.</li>
<li>Corrected the chat scrollbar increment used by its arrow buttons.</li>
<li>Improved Windows URL launching through the native shell.</li>
<li>Restored expected minimize behavior when clicking ZoiteChat on the Windows taskbar.</li>
</ul>
</description>
</release>
<release date="2026-06-29" version="2.18.3">
<description>
<ul>
<li>Added IRCv3 support for message tags, echo-message, typing notifications, and replies.</li>
<li>Restored the accept-invalid-cert TLS bypass behavior.</li>
<li>Replaced legacy IPv4 APIs and added support for OpenSSL 4 APIs.</li>
<li>Snapshot Python hooks during plugin unload for safer plugin shutdown.</li>
<li>Fixed Windows GtkStatusIcon tray menu popup behavior.</li>
<li>Fixed self-echoed private messages routing to the target tab.</li>
<li>Fixed the lag ping timeout window.</li>
</ul>
</description>
</release>
<release date="2026-06-20" version="2.18.2">
<description>
<p>Security and connections:</p>
<ul>
<li>Improved TLS, certificate and hostname validation, FiSHLiM OpenSSL handling, keyring support, and DCC host lookups.</li>
</ul>
<p>FiSHLiM:</p>
<ul>
<li>Added a GTK key manager with context-menu access and clearer channel/private-message key handling.</li>
</ul>
<p>Interface and preferences:</p>
<ul>
<li>Improved keybind customization, reset support, channel-name switching, <code>/server -noproxy</code>, and stale-link ping checks.</li>
<li>Refined GTK behavior with native file choosers, topic layout preferences, timestamp/date tooltips, text scroll controls, and aligned network meters.</li>
<li>Added privacy and display options for hiding join/part hostmasks and controlling topic/multiline layout.</li>
</ul>
<p>Fixes:</p>
<ul>
<li>Fixed tray restore, DBus unload handling, GTK3 theme refresh/saving, topic relayout, and tab switcher compatibility.</li>
<li>Updated project documentation.</li>
</ul>
</description>
</release>
<release date="2026-05-21" version="2.18.1">
<description>
<ul>
+15
View File
@@ -0,0 +1,15 @@
# Source https://coderwall.com/p/wws2uq
sudo: false
language: python
python:
- "2.7"
cache:
pip: true
custom_install: true
# command to install dependencies
install: pip install --upgrade Sphinx
# command to run tests
script: sphinx-build -n -b html -d _build/doctrees . _build/html
# Flags used here, not in `make html`:
# -n Run in nit-picky mode. Currently, this generates warnings for all missing references.
# -W Turn warnings into errors. This means that the build stops at the first warning and sphinx-build exits with exit status 1.
+94
View File
@@ -0,0 +1,94 @@
[main]
host = https://www.transifex.com
type = PO
[zoitechat-documentation.addons]
file_filter = po/<lang>/LC_MESSAGES/addons.po
source_file = _build/locale/addons.pot
source_lang = en
[zoitechat-documentation.appearance]
file_filter = po/<lang>/LC_MESSAGES/appearance.po
source_file = _build/locale/appearance.pot
source_lang = en
[zoitechat-documentation.building]
file_filter = po/<lang>/LC_MESSAGES/building.po
source_file = _build/locale/building.pot
source_lang = en
[zoitechat-documentation.changelog]
file_filter = po/<lang>/LC_MESSAGES/changelog.po
source_file = _build/locale/changelog.pot
source_lang = en
[zoitechat-documentation.commands]
file_filter = po/<lang>/LC_MESSAGES/commands.po
source_file = _build/locale/commands.pot
source_lang = en
#[zoitechat-documentation.developers]
#file_filter = po/<lang>/LC_MESSAGES/developers.po
#source_file = _build/locale/developers.pot
#source_lang = en
[zoitechat-documentation.faq]
file_filter = po/<lang>/LC_MESSAGES/faq.po
source_file = _build/locale/faq.pot
source_lang = en
#[zoitechat-documentation.getting_started]
#file_filter = po/<lang>/LC_MESSAGES/getting_started.po
#source_file = _build/locale/getting_started.pot
#source_lang = en
#[zoitechat-documentation.helping]
#file_filter = po/<lang>/LC_MESSAGES/helping.po
#source_file = _build/locale/helping.pot
#source_lang = en
#[zoitechat-documentation.index]
#file_filter = po/<lang>/LC_MESSAGES/index.po
#source_file = _build/locale/index.pot
#source_lang = en
#[zoitechat-documentation.perl_modules]
#file_filter = po/<lang>/LC_MESSAGES/perl_modules.po
#source_file = _build/locale/perl_modules.pot
#source_lang = en
#[zoitechat-documentation.plugins]
#file_filter = po/<lang>/LC_MESSAGES/plugins.po
#source_file = _build/locale/plugins.pot
#source_lang = en
#[zoitechat-documentation.script_dbus]
#file_filter = po/<lang>/LC_MESSAGES/script_dbus.po
#source_file = _build/locale/script_dbus.pot
#source_lang = en
#[zoitechat-documentation.script_javascript]
#file_filter = po/<lang>/LC_MESSAGES/script_javascript.po
#source_file = _build/locale/script_javascript.pot
#source_lang = en
#[zoitechat-documentation.script_perl]
#file_filter = po/<lang>/LC_MESSAGES/script_perl.po
#source_file = _build/locale/script_perl.pot
#source_lang = en
#[zoitechat-documentation.script_python]
#file_filter = po/<lang>/LC_MESSAGES/script_python.po
#source_file = _build/locale/script_python.pot
#source_lang = en
[zoitechat-documentation.settings]
file_filter = po/<lang>/LC_MESSAGES/settings.po
source_file = _build/locale/settings.pot
source_lang = en
[zoitechat-documentation.tips]
file_filter = po/<lang>/LC_MESSAGES/tips.po
source_file = _build/locale/tips.pot
source_lang = en
+157
View File
@@ -0,0 +1,157 @@
# Makefile for Sphinx documentation
#
# You can set these variables from the command line.
SPHINXOPTS =
SPHINXBUILD = sphinx-build
PAPER =
BUILDDIR = _build
# Internal variables.
PAPEROPT_a4 = -D latex_paper_size=a4
PAPEROPT_letter = -D latex_paper_size=letter
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
# the i18n builder cannot share the environment and doctrees with the others
I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext
help:
@echo "Please use \`make <target>' where <target> is one of"
@echo " html to make standalone HTML files"
@echo " dirhtml to make HTML files named index.html in directories"
@echo " singlehtml to make a single large HTML file"
@echo " pickle to make pickle files"
@echo " json to make JSON files"
@echo " htmlhelp to make HTML files and a HTML help project"
@echo " qthelp to make HTML files and a qthelp project"
@echo " devhelp to make HTML files and a Devhelp project"
@echo " epub to make an epub"
@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
@echo " latexpdf to make LaTeX files and run them through pdflatex"
@echo " text to make text files"
@echo " man to make manual pages"
@echo " texinfo to make Texinfo files"
@echo " info to make Texinfo files and run them through makeinfo"
@echo " gettext to make PO message catalogs"
@echo " changes to make an overview of all changed/added/deprecated items"
@echo " linkcheck to check all external links for integrity"
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
clean:
-rm -rf $(BUILDDIR)/*
html:
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
dirhtml:
$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
singlehtml:
$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
@echo
@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
pickle:
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
@echo
@echo "Build finished; now you can process the pickle files."
json:
$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
@echo
@echo "Build finished; now you can process the JSON files."
htmlhelp:
$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
@echo
@echo "Build finished; now you can run HTML Help Workshop with the" \
".hhp project file in $(BUILDDIR)/htmlhelp."
qthelp:
$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
@echo
@echo "Build finished; now you can run "qcollectiongenerator" with the" \
".qhcp project file in $(BUILDDIR)/qthelp, like this:"
@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/ZoiteChat.qhcp"
@echo "To view the help file:"
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/ZoiteChat.qhc"
devhelp:
$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
@echo
@echo "Build finished."
@echo "To view the help file:"
@echo "# mkdir -p $$HOME/.local/share/devhelp/ZoiteChat"
@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/ZoiteChat"
@echo "# devhelp"
epub:
$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
@echo
@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
latex:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo
@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
@echo "Run \`make' in that directory to run these through (pdf)latex" \
"(use \`make latexpdf' here to do that automatically)."
latexpdf:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo "Running LaTeX files through pdflatex..."
$(MAKE) -C $(BUILDDIR)/latex all-pdf
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
text:
$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
@echo
@echo "Build finished. The text files are in $(BUILDDIR)/text."
man:
$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
@echo
@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
texinfo:
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
@echo
@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
@echo "Run \`make' in that directory to run these through makeinfo" \
"(use \`make info' here to do that automatically)."
info:
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
@echo "Running Texinfo files through makeinfo..."
make -C $(BUILDDIR)/texinfo info
@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
gettext:
$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
@echo
@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
changes:
$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
@echo
@echo "The overview file is in $(BUILDDIR)/changes."
linkcheck:
$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
@echo
@echo "Link check complete; look for any errors in the above output " \
"or in $(BUILDDIR)/linkcheck/output.txt."
doctest:
$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
@echo "Testing of doctests in the sources finished, look at the " \
"results in $(BUILDDIR)/doctest/output.txt."
server:
@cd $(BUILDDIR)/html
@python -u -m SimpleHTTPServer
+42
View File
@@ -0,0 +1,42 @@
# ZoiteChat documentation
## Getting started
* Install [Python 3](https://www.python.org/)
* Install pip for Python 3
* Install Sphinx: `python -m pip install sphinx`
* On Windows: ensure your Python 3 installation is on `PATH`
* Run `make html` to build the HTML files
* Run the Python webserver to test your changes: `make server`
(http://localhost:8000/)
## Conventions
* 4 Spaces are used for indentation.
* Ordered or unordered lists use visual indentation, where any non-list
subelement would use an indentation of a multiple of 4 again.
Example:
```rest
- a list item
- a list item
with a visually indented continuation
- a list item with a sub-list
- that is also visually indented
- a list item with a code block
.. code-block:: none
that is not visually indented
```
## Read the Docs theme skin
The HTML output keeps the existing `basicstrap` Sphinx theme, then applies the
ZoiteChat main-site skin from `_static/css/zoitechat-docs.css`.
Brand navigation links are set in `conf.py` through `html_context`, and the
header logo uses `_static/zoitechat-logo.svg`.
Binary file not shown.
File diff suppressed because it is too large Load Diff
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

+56
View File
File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 12 KiB

+362
View File
@@ -0,0 +1,362 @@
{#
basicstrap/layout.html
~~~~~~~~~~~~~~~~~~~~~~~~~
Master layout template for Sphinx themes. on Twitter Bootstrap
:copyright: Copyright 2012 by tell-k.
:license: MIT Licence, see LICENSE for details.
#}
{%- block doctype -%}
<!DOCTYPE html>
{%- endblock %}
{%- set reldelim1 = reldelim1 is not defined and ' &raquo;' or reldelim1 %}
{%- set reldelim2 = reldelim2 is not defined and ' |' or reldelim2 %}
{%- set render_sidebar = (not embedded) and (not theme_nosidebar|tobool) and
(sidebars != []) %}
{%- set url_root = pathto('', 1) %}
{# XXX necessary? #}
{%- if url_root == '#' %}{% set url_root = '' %}{% endif %}
{%- if not embedded and docstitle %}
{%- set titlesuffix = " &mdash; "|safe + docstitle|e %}
{%- else %}
{%- set titlesuffix = "" %}
{%- endif %}
{%- if theme_bootstrap_version == "3" %}
{%- set bs_span_prefix = "col-md-" %}
{%- set class_device_xs= "xs" %}
{%- set class_device_sm= "sm" %}
{%- set class_device_md= "md" %}
{%- set class_row = "row" %}
{%- else %}
{%- set bs_span_prefix = "span" %}
{%- set class_device_xs= "phone" %}
{%- set class_device_sm= "tablet" %}
{%- set class_device_md= "desktop" %}
{%- if (not theme_row_fixed|tobool) %}
{%- set class_row = "row-fluid" %}
{%- else %}
{%- set class_row = "row" %}
{%- endif %}
{%- endif %}
{%- macro relbar() %}
<div id="navbar-related" class=" related navbar {% if (theme_relbar_inverse|tobool) %}navbar-inverse{% else %}navbar-default{% endif %}" role="navigation" aria-label="related navigation">
<div class="navbar-inner">
<ul class="nav navbar-nav {% if theme_noresponsiverelbar|tobool %}text-center{% endif %}">
<li><a href="{{ pathto(master_doc) }}">{{ shorttitle|e }}</a></li>
</ul>
<ul class="nav navbar-nav {% if not theme_noresponsiverelbar|tobool %}pull-right hidden-{{ class_device_xs }} hidden-{{ class_device_sm }}{% else %}text-center{% endif %}">
{% if not (theme_nosidebar|tobool) %}
{%- for rellink in rellinks|reverse %}
<li><a href="{{ pathto(rellink[0]) }}" title="{{ rellink[1]|striptags|e }}" {{ accesskey(rellink[2]) }}>{{ rellink[3] }}</a></li>
{%- endfor %}
{%- block rootrellink %}
{%- endblock %}
{%- for parent in parents %}
<li><a href="{{ parent.link|e }}" {% if loop.last %}{{ accesskey("U") }}{% endif %}>{{ parent.title }}</a></li>
{%- endfor %}
<li><a href="#">top</a></li>
{%- block relbaritems %} {% endblock %}
{% else %}
{%- if prev %}
<li><a href="{{ prev.link|e }}"><i class="icon icon-double-angle-left"></i>&nbsp;{{ prev.title }}</a></li>
{%- endif %}
<li><a class="uplink" href="{{ pathto(master_doc) }}">{{ _('Contents') }}</a></li>
{%- if next %}
<li><a href="{{ next.link|e }}">{{ next.title }}&nbsp;<i class="icon icon-double-angle-right"></i></a></li>
{%- endif %}
<li><a href="#">top</a></li>
{%- endif %}
</ul>
</div>
</div>
{%- endmacro %}
{%- macro sidebar() %}
{%- if render_sidebar %}
<div class="{{ bs_span_prefix }}{{ theme_sidebar_span }} hidden-{{ class_device_xs }}" id="sidebar-wrapper">
<div class="sidebar hidden-{{ class_device_xs }}" role="navigation" aria-label="main navigation">
{%- block sidebarlogo %}
{%- if logo %}
<p class="logo"><a href="{{ pathto(master_doc) }}">
<img class="logo" src="{{ pathto('_static/' + logo, 1) }}" alt="Logo"/>
</a></p>
{%- endif %}
{%- endblock %}
{%- if sidebars != None %}
{#- new style sidebar: explicitly include/exclude templates #}
{%- for sidebartemplate in sidebars %}
{%- include sidebartemplate %}
{%- endfor %}
{%- else %}
{#- old style sidebars: using blocks -- should be deprecated #}
{%- block sidebartoc %}
{%- include "localtoc.html" %}
{%- endblock %}
{%- block sidebarrel %}
{%- include "relations.html" %}
{%- endblock %}
{%- block sidebarsourcelink %}
{%- include "sourcelink.html" %}
{%- endblock %}
{%- if customsidebar %}
{%- include customsidebar %}
{%- endif %}
{%- block sidebarsearch %}
{%- include "searchbox.html" %}
{%- endblock %}
{%- endif %}
</div>
</div>
{%- endif %}
{%- endmacro %}
{% set script_files = (['_static/js/jquery.min.js'] if '_static/js/jquery.min.js' not in script_files else []) + script_files + ['_static/js/bootstrap' + theme_bootstrap_version + '.min.js'] %}
{%- macro script() %}
{%- if '_static/documentation_options.js' not in script_files %}
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '{{ url_root }}',
VERSION: '{{ release|e }}',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '{{ '' if no_search_suffix else file_suffix }}',
HAS_SOURCE: {{ has_source|lower }}
};
</script>
{%- endif %}
{%- for scriptfile in script_files %}
{%- if scriptfile is string -%}
<script src="{{ pathto(scriptfile, 1) }}"></script>
{%- else -%}
{{ js_tag(scriptfile) }}
{%- endif -%}
{%- endfor %}
<script type="text/javascript" src="{{ pathto('_static/js/jquery.cookie.min.js', 1) }}"></script>
<script type="text/javascript" src="{{ pathto('_static/js/basicstrap.js', 1) }}"></script>
<script type="text/javascript">
DOCUMENTATION_OPTIONS.FILE_SUFFIX = DOCUMENTATION_OPTIONS.FILE_SUFFIX || '.html';
DOCUMENTATION_OPTIONS.LINK_SUFFIX = DOCUMENTATION_OPTIONS.LINK_SUFFIX || '.html';
</script>
{%- endmacro %}
{%- macro css() %}
{%- if (theme_googlewebfont|tobool) %}
<link rel="stylesheet" href="{{ pathto(theme_googlewebfont_url, 1) }}" media="screen and (min-width:481px)" type="text/css" />
{%- endif %}
<link rel="stylesheet" href="{{ pathto('_static/css/basicstrap-base.css', 1) }}" type="text/css" />
{%- if (theme_inner_theme|tobool) %}
<link rel="stylesheet" id="current-theme" href="{{ pathto('_static/css/bootstrap' + theme_bootstrap_version + '/' + theme_inner_theme_name + '.css', 1) }}" type="text/css" />
<link rel="stylesheet" id="current-adjust-theme" href="{{ pathto('_static/css/adjust_theme/' + theme_inner_theme_name + '.css', 1) }}" type="text/css" />
{%- else %}
<link rel="stylesheet" id="current-theme" href="{{ pathto('_static/css/bootstrap' + theme_bootstrap_version + '/bootstrap.min.css', 1) }}" type="text/css" />
<link rel="stylesheet" id="current-adjust-theme" type="text/css" />
{%- endif %}
{%- if theme_bootstrap_version == "3" and theme_noflatdesign|tobool %}
<link rel="stylesheet" href="{{ pathto('_static/css/bootstrap' + theme_bootstrap_version + '/bootstrap-theme.min.css', 1) }}" type="text/css" />
{%- endif %}
<link rel="stylesheet" href="{{ pathto('_static/css/font-awesome.min.css', 1) }}">
{% if (theme_nav_fixed_top|tobool) %}
<style type="text/css">
body {
{%- if theme_bootstrap_version == "3" %}
padding-top: 60px;
padding-bottom: 40px;
{%- else %}
padding-top: 60px;
padding-bottom: 40px;
{%- endif %}
}
</style>
{% endif %}
<link rel="stylesheet" href="{{ pathto('_static/pygments.css', 1) }}" type="text/css" />
{%- if (not theme_noresponsive|tobool) and theme_bootstrap_version == "2" %}
<link rel="stylesheet" href="{{ pathto('_static/css/bootstrap2/bootstrap-responsive.min.css', 1) }}" type="text/css" />
{%- endif %}
{%- if theme_noresponsive|tobool and theme_bootstrap_version == "3" %}
<link rel="stylesheet" href="{{ pathto('_static/css/bootstrap3/bootstrap-non-responsive.css', 1) }}" type="text/css" />
{%- endif %}
{# Keep project CSS last so Bootstrap/basicstrap cannot re-float or resize the docs columns. #}
{%- for cssfile in css_files %}
{%- if cssfile is string -%}
<link rel="stylesheet" href="{{ pathto(cssfile, 1) }}" type="text/css" />
{%- else -%}
{{ css_tag(cssfile) }}
{%- endif -%}
{%- endfor %}
{%- endmacro %}
<html lang="{{ theme_lang }}">
<head>
<meta charset="{{ encoding }}" />
{{ metatags }}
{%- block htmltitle %}
<title>{{ title|striptags|e }}{{ titlesuffix }}</title>
{%- endblock %}
{%- if theme_noresponsive|tobool and theme_bootstrap_version == "3" %}
<meta name="viewport" content="width=device-width, initial-scale=1.0">
{%- endif %}
<meta name="description" content="">
<meta name="author" content="">
{{ css() }}
{%- if not embedded %}
{{ script() }}
{%- if use_opensearch %}
<link rel="search" type="application/opensearchdescription+xml"
title="{% trans docstitle=docstitle|e %}Search within {{ docstitle }}{% endtrans %}"
href="{{ pathto('_static/opensearch.xml', 1) }}"/>
{%- endif %}
{%- if favicon %}
<link rel="shortcut icon" href="{{ pathto('_static/' + favicon, 1) }}"/>
{%- endif %}
{%- endif %}
{%- block linktags %}
{%- if hasdoc('about') %}
<link rel="author" title="{{ _('About these documents') }}" href="{{ pathto('about') }}" />
{%- endif %}
{%- if hasdoc('genindex') %}
<link rel="index" title="{{ _('Index') }}" href="{{ pathto('genindex') }}" />
{%- endif %}
{%- if hasdoc('search') %}
<link rel="search" title="{{ _('Search') }}" href="{{ pathto('search') }}" />
{%- endif %}
{%- if hasdoc('copyright') %}
<link rel="copyright" title="{{ _('Copyright') }}" href="{{ pathto('copyright') }}" />
{%- endif %}
<link rel="top" title="{{ docstitle|e }}" href="{{ pathto('index') }}" />
{%- if parents %}
<link rel="up" title="{{ parents[-1].title|striptags|e }}" href="{{ parents[-1].link|e }}" />
{%- endif %}
{%- if next %}
<link rel="next" title="{{ next.title|striptags|e }}" href="{{ next.link|e }}" />
{%- endif %}
{%- if prev %}
<link rel="prev" title="{{ prev.title|striptags|e }}" href="{{ prev.link|e }}" />
{%- endif %}
{%- endblock %}
{%- block extrahead %} {% endblock %}
</head>
<body role="document">
{%- block header %}
<header id="navbar-top" class="site-header" role="banner">
<div class="shell nav-shell">
<a class="brand" href="https://zoitechat.org/" aria-label="ZoiteChat home">
<img class="brand-logo" src="{{ pathto('_static/zoitechat-logo.svg', 1) }}" alt="" width="44" height="48">
<span class="brand-text">ZoiteChat</span>
</a>
<nav class="site-nav" aria-label="Primary">
<a href="https://zoitechat.org/">Home</a>
<a href="https://zoitechat.org/addons.php">Addons</a>
<a href="https://zoitechat.org/download.php">Download</a>
<a href="{{ pathto(master_doc) }}">Docs</a>
<a href="https://github.com/ZoiteChat/zoitechat" target="_blank" rel="noopener">GitHub</a>
<details class="nav-menu">
<summary>IRC Support</summary>
<div class="nav-menu-panel" aria-label="IRC support channels">
<a href="https://zoite.net/webchat/?join=%23zoitechat" target="_blank" rel="noopener">
<strong>Zoite IRC</strong>
<span>Official network, #zoitechat</span>
</a>
<a href="https://web.libera.chat/#zoitechat" target="_blank" rel="noopener">
<strong>Libera.Chat</strong>
<span>Secondary support channel, #zoitechat</span>
</a>
</div>
</details>
</nav>
</div>
</header>
{% endblock %}
<!-- container -->
<div class="{% if (not theme_content_fixed|tobool) %}container-fluid{% else %}container{% endif %} docs-shell">
<!-- row -->
<div class="{{ class_row }} docs-main-row">
{%- block content %}
{%- block sidebar1 %}
{% if (not theme_rightsidebar|tobool) %} {{ sidebar() }} {% endif %}
{% endblock %}
<div class="{% if (not theme_nosidebar|tobool) %}{{ bs_span_prefix }}{{ 12 - theme_sidebar_span|int }}{% else %}{{ bs_span_prefix }}12{% endif %}" id="content-wrapper">
<div class="document" role="main">
{%- block document %}
<div class="documentwrapper">
{%- if render_sidebar %}
<div class="bodywrapper">
{%- endif %}
<div class="body">
{% block body %} {% endblock %}
</div>
{%- if render_sidebar %}
</div>
{%- endif %}
</div>
{%- endblock %}
</div>
</div>
{%- block sidebar2 %}
{% if (theme_rightsidebar|tobool) %} {{ sidebar() }} {% endif %}
{% endblock %}
{%- endblock %}{# /content block #}
</div><!-- /row -->
<!-- row -->
<div class="{{ class_row }} footer-relbar">
{%- block relbar2 %}{{ relbar() }}{% endblock %}
</div><!-- /row -->
<!-- footer -->
{%- block footer %}
<footer class="site-footer" role="contentinfo">
<div class="shell footer-grid">
<div>
<div class="footer-brand-wrap">
<img class="footer-logo" src="{{ pathto('_static/zoitechat-logo.svg', 1) }}" alt="" width="40" height="44">
<div class="footer-brand">ZoiteChat</div>
</div>
<p class="footer-copy">ZoiteChat is a HexChat fork, carrying that client lineage forward with care. Built on the foundation HexChat left behind, and grateful to the project and people that made it possible.</p>
</div>
<div class="footer-links">
<a href="https://zoitechat.org/download.php">Download</a>
<a href="https://zoitechat.org/addons.php">Addons</a>
<a href="https://zoitechat.org/privacy.php">Privacy Policy</a>
<a href="{{ pathto(master_doc) }}">Documentation</a>
<a href="https://github.com/ZoiteChat/zoitechat" target="_blank" rel="noopener">Source code</a>
<a href="https://zoite.net/webchat/?join=%23zoitechat" target="_blank" rel="noopener">Official IRC support</a>
<a href="https://web.libera.chat/#zoitechat" target="_blank" rel="noopener">Libera IRC support</a>
</div>
<div class="footer-meta">
<div>Documentation source: Read the Docs / Sphinx</div>
<div>Theme skin: ZoiteChat main site</div>
</div>
</div>
</footer>
{%- endblock %}
<!-- /footer -->
</div>
<!-- /container -->
{%- if theme_theme_preview|tobool %}
{%- include "_theme_preview.html" %}
{%- endif %}
</body>
</html>
+63
View File
@@ -0,0 +1,63 @@
{#
basicstrap/search.html
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Template for the search page.
:copyright: Copyright 2012 by tell-k.
:license: MIT Licence, see LICENSE for details.
#}
{% extends "layout.html" %}
{% set title = _('Search') %}
{% set script_files = script_files + (['_static/language_data.js'] if '_static/language_data.js' not in script_files else []) + ['_static/searchtools.js'] %}
{% block extrahead %}
<script type="text/javascript">
jQuery(function() { Search.loadIndex("{{ pathto('searchindex.js', 1) }}"); });
</script>
{{ super() }}
{% endblock %}
{% block body %}
<h1 id="search-documentation">{{ _('Search') }}</h1>
<div id="fallback" class="admonition warning">
<script type="text/javascript">$('#fallback').hide();</script>
<p>
{% trans %}Please activate JavaScript to enable the search
functionality.{% endtrans %}
</p>
</div>
<p>
{% trans %}From here you can search these documents. Enter your search
words into the box below and click "search". Note that the search
function will automatically search for all of the words. Pages
containing fewer words won't appear in the result list.{% endtrans %}
</p>
<form class="form-search form-inline" action="" method="get">
<div class="input-append input-group">
<input type="text" class="search-query form-control" name="q" value="" placeholder="Search...">
<span class="input-group-btn">
<input type="submit" class="btn" value="{{ _('search') }}" />
</span>
</div>
<span id="search-progress" style="padding-left: 10px"></span>
</form>
<div role="main">
{% if search_performed %}
<h2>{{ _('Search Results') }}</h2>
{% if not search_results %}
<p>{{ _('Your search did not match any results.') }}</p>
{% endif %}
{% endif %}
<div id="search-results">
{% if search_results %}
<ul>
{% for href, caption, context in search_results %}
<li><a href="{{ pathto(href) }}">{{ caption }}</a>
<div class="context">{{ context|e }}</div>
</li>
{% endfor %}
</ul>
{% endif %}
</div>
</div>
{% endblock %}
+27
View File
@@ -0,0 +1,27 @@
{#
basicstrap/searchbox.html
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Sphinx sidebar template: quick search box.
:copyright: Copyright 2012 by tell-k.
:license: MIT Licence, see LICENSE for details.
#}
{%- if pagename != "search" %}
<div id="searchbox" role="search">
<h3>{{ _('Quick search') }}</h3>
<form class="search form-inline" action="{{ pathto('search') }}" method="get">
<div class="input-append input-group">
<input type="text" class="search-query form-control" name="q" placeholder="Search...">
<span class="input-group-btn">
<input type="submit" class="btn" value="{{ _('Go') }}" />
</span>
</div>
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
{{ _('Enter search terms or a module, class or function name.') }}
</p>
</div>
{%- endif %}
+38
View File
@@ -0,0 +1,38 @@
{#
basicstrap/searchresults.html
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Template for the body of the search results page.
:copyright: Copyright 2012 by tell-k.
:license: MIT Licence, see LICENSE for details.
#}
<h1 id="search-documentation">Search</h1>
<p>
From here you can search these documents. Enter your search
words into the box below and click "search".
</p>
<form class="form-search" action="" method="get">
<div class="input-append">
<input type="text" class="search-query" name="q">
<input type="submit" class="btn" value="{{ _('search') }}" />
</div>
<span id="search-progress" style="padding-left: 10px"></span>
</form>
{%- if search_performed %}
<h2>Search Results</h2>
{%- if not search_results %}
<p>Your search did not match any results.</p>
{%- endif %}
{%- endif %}
<div id="search-results">
{%- if search_results %}
<ul class="search">
{% for href, caption, context in search_results %}
<li><a href="{{ docroot }}{{ href }}/?highlight={{ q }}">{{ caption }}</a>
<div class="context">{{ context|e }}</div>
</li>
{% endfor %}
</ul>
{%- endif %}
</div>
@@ -0,0 +1,67 @@
/* Table
---------------------------------------------------------*/
table.docutils {
border-color: {{ table_border_color }};
}
table.docutils th,
table.docutils td
{
border-color: {{ table_border_color }};
}
table.docutils tbody + tbody {
border-color: {{ table_border_color }};
}
/* Table-bordered
---------------------------------------------------------*/
table.table-bordered {
border-color: {{ table_border_color }};
}
/* -- admonition -- */
div.admonition {
color: {{ warning_color }};
background-color: {{ warning_background_color }};
border-color: {{ warning_border_color }};
}
/* -- danger, error -- */
div.danger,
div.error {
color: {{ danger_color }};
background-color: {{ danger_background_color }};
border-color: {{ danger_border_color }};
}
/* -- warning, caution, attention -- */
div.warning,
div.caution,
div.attention {
color: {{ warning_color }};
background-color: {{ warning_background_color }};
border-color: {{ warning_border_color }};
}
/* -- note, important -- */
div.note,
div.important {
color: {{ note_color }};
background-color: {{ note_background_color }};
border-color: {{ note_border_color }};
}
/* -- hint, tip -- */
div.hint,
div.tip {
color: {{ hint_color }};
background-color: {{ hint_background_color }};
border-color: {{ hint_border_color }};
}
div.topic {
background-color: {{ table_oddrow_color }};
border-color: {{ table_border_color }};
}
@@ -0,0 +1,62 @@
{% set table_border_color = "#357279" %}
{% set danger_color = "rgba(255, 255, 255, 0.9)" %}
{% set danger_background_color = "#d5b321" %}
{% set danger_border_color = "#d5b321" %}
{% set warning_color = "rgba(255, 255, 255, 0.9)" %}
{% set warning_background_color = "#df6e1e" %}
{% set warning_border_color = "#df6e1e" %}
{% set note_color = "rgba(255, 255, 255, 0.9)" %}
{% set note_background_color = "#48ca3b" %}
{% set note_border_color = "#48ca3b" %}
{% set hint_color = "rgba(255, 255, 255, 0.9)" %}
{% set hint_background_color = "#4d3a7d" %}
{% set hint_border_color = "#4d3a7d" %}
{% include "static/css/adjust_theme/_common_adjust.css" %}
/* Heading
---------------------------------------------------------*/
h2, h3, h4, h5, h6 {
border-bottom: 1px solid #00747d !important;
}
/* Contents
---------------------------------------------------------*/
div.contents {
background-color: #00747d;
border: none;
box-shadow: none;
}
/* Genindex
---------------------------------------------------------*/
div.genindex-jumpbox {
color: #00747d;
border-top: 1px solid #00747d;
border-bottom: 1px solid #00747d;
}
/* Smartphone Local Toc
---------------------------------------------------------*/
ul.sp-localtoc ul a{
color: #ffffff;
}
ul.sp-localtoc ul a:hover{
background-color: #d92432;
color: #ffffff;
}
div.navbar-inverse ul.sp-localtoc ul a{
color: #ffffff;
}
div.navbar-inverse ul.sp-localtoc ul a:hover{
background-color: #e5c953;
color: #ffffff;
}
@@ -0,0 +1,46 @@
{% set table_border_color = "#dddddd" %}
{% include "static/css/adjust_theme/_common_adjust.css" %}
/* Heading
---------------------------------------------------------*/
h2, h3, h4, h5, h6 {
border-bottom: 1px solid #eeeeee !important;
}
/* Contents
---------------------------------------------------------*/
div.contents {
background-color: #eeeeee;
border: 1px solid #eeeeee;
box-shadow: none;
}
/* Genindex
---------------------------------------------------------*/
div.genindex-jumpbox {
color: #eeeeee;
border-top: 1px solid #eeeeee;
border-bottom: 1px solid #eeeeee;
}
/* Smartphone Local Toc
---------------------------------------------------------*/
ul.sp-localtoc ul a{
color: #ffffff;
}
ul.sp-localtoc ul a:hover{
background-color: #178acc;
color: #ffffff;
}
div.navbar-inverse ul.sp-localtoc ul a{
color: #ffffff;
}
div.navbar-inverse ul.sp-localtoc ul a:hover{
background-color: #022f5a;
color: #ffffff;
}
@@ -0,0 +1,71 @@
{% set table_border_color = "#dddddd" %}
{% set danger_color = "#ffffff" %}
{% set danger_background_color = "#ff0039" %}
{% set danger_border_color = "transparent" %}
{% set warning_color = "#ffffff" %}
{% set warning_background_color = "#ff7518" %}
{% set warning_border_color = "transparent" %}
{% set note_color = "#ffffff" %}
{% set note_background_color = "#3fb618" %}
{% set note_border_color = "#transparent" %}
{% set hint_color = "#ffffff" %}
{% set hint_background_color = "#9954bb" %}
{% set hint_border_color = "transparent" %}
{% include "static/css/adjust_theme/_common_adjust.css" %}
/* Heading
---------------------------------------------------------*/
h2, h3, h4, h5, h6 {
border-bottom: 1px solid #e6e6e6 !important;
}
/* Contents
---------------------------------------------------------*/
div.contents {
background-color: #e6e6e6;
border: 1px solid #e6e6e6;
box-shadow: none;
}
/* Genindex
---------------------------------------------------------*/
div.genindex-jumpbox {
color: #e6e6e6;
border-top: 1px solid #e6e6e6;
border-bottom: 1px solid #e6e6e6;
}
/* Smartphone Local Toc
---------------------------------------------------------*/
ul.sp-localtoc ul a{
color: #ffffff;
}
ul.sp-localtoc ul a:hover{
background-color: #090909;
color: #ffffff;
}
div.navbar-inverse ul.sp-localtoc ul a{
color: #ffffff;
}
div.navbar-inverse ul.sp-localtoc ul a:hover{
background-color: #0066cc;
color: #ffffff;
}
{% if theme_bootstrap_version == "2" %}
/* Docutils
---------------------------------------------------------*/
table.docutils td.label {
min-height: 0px;
}
{% endif %}
@@ -0,0 +1,73 @@
{% set table_border_color = "#222222" %}
{% set danger_color = "#eeeeee" %}
{% set danger_background_color = "#cc0000" %}
{% set danger_border_color = "transparent" %}
{% set warning_color = "#eeeeee" %}
{% set warning_background_color = "#666666" %}
{% set warning_border_color = "transparent" %}
{% set note_color = "#eeeeee" %}
{% set note_background_color = "#5c8a00" %}
{% set note_border_color = "#transparent" %}
{% set hint_color = "#ffffff" %}
{% set hint_background_color = "#007399" %}
{% set hint_border_color = "transparent" %}
{% include "static/css/adjust_theme/_common_adjust.css" %}
/* Heading
---------------------------------------------------------*/
h2, h3, h4, h5, h6 {
border-bottom: 1px solid #282828 !important;
}
/* Field-list
---------------------------------------------------------*/
table.field-list {
background-color: #060606;
}
/* Citation
---------------------------------------------------------*/
table.citation{
background-color: #060606;
}
/* Footnote
---------------------------------------------------------*/
table.footnote {
background-color: #060606;
}
/* Contents
---------------------------------------------------------*/
div.contents {
background-color: #222222;
}
/* Genindex
---------------------------------------------------------*/
div.genindex-jumpbox {
color: #282828;
border-top: 1px solid #282828;
border-bottom: 1px solid #282828;
}
/* Smartphone Local Toc
---------------------------------------------------------*/
ul.sp-localtoc ul a:hover{
color: #ffffff;
}
div.navbar-inverse ul.sp-localtoc ul a:hover{
color: #ffffff;
}
@@ -0,0 +1,60 @@
{% set table_border_color = "#464545" %}
{% set danger_color = "#ffffff" %}
{% set danger_background_color = "#e94b35" %}
{% set danger_border_color = "#e94b35" %}
{% set warning_color = "#ffffff" %}
{% set warning_background_color = "#f59d00" %}
{% set warning_border_color = "#f59d00" %}
{% set note_color = "#ffffff" %}
{% set note_background_color = "#00bd8b" %}
{% set note_border_color = "#00bd8b" %}
{% set hint_color = "#ffffff" %}
{% set hint_background_color = "#2c97de" %}
{% set hint_border_color = "#2c97de" %}
{% include "static/css/adjust_theme/_common_adjust.css" %}
/* Heading
---------------------------------------------------------*/
h2, h3, h4, h5, h6 {
border-bottom: 1px solid #464545 !important;
}
/* Contents
---------------------------------------------------------*/
div.contents {
background-color: #464545;
}
/* Genindex
---------------------------------------------------------*/
div.genindex-jumpbox {
color: #464545;
border-top: 1px solid #464545;
border-bottom: 1px solid #464545;
}
/* Smartphone Local Toc
---------------------------------------------------------*/
ul.sp-localtoc ul a{
color: #ffffff;
}
ul.sp-localtoc ul a:hover{
background-color: transparent;
color: #00bc8c;
}
div.navbar-inverse ul.sp-localtoc ul a{
color: #ffffff;
}
div.navbar-inverse ul.sp-localtoc ul a:hover{
background-color: transparent;
color: #375a7f;
}
@@ -0,0 +1,54 @@
{% set table_border_color = "#ecf0f1" %}
{% set danger_color = "#ffffff" %}
{% set danger_background_color = "#dd4838" %}
{% set danger_border_color = "#dd4838" %}
{% set warning_color = "#ffffff" %}
{% set warning_background_color = "#ec9B00" %}
{% set warning_border_color = "#ec9B00" %}
{% set note_color = "#ffffff" %}
{% set note_background_color = "#40bc9c" %}
{% set note_border_color = "#40bc9c" %}
{% set hint_color = "#ffffff" %}
{% set hint_background_color = "#4b99dc" %}
{% set hint_border_color = "#4b99dc" %}
{% include "static/css/adjust_theme/_common_adjust.css" %}
/* Heading
---------------------------------------------------------*/
h2, h3, h4, h5, h6 {
border-bottom: 1px solid #ecf0f1 !important;
}
/* Genindex
---------------------------------------------------------*/
div.genindex-jumpbox {
color: #ecf0f1;
border-top: 1px solid #ecf0f1;
border-bottom: 1px solid #ecf0f1;
}
/* Smartphone Local Toc
---------------------------------------------------------*/
ul.sp-localtoc ul a{
color: #ffffff;
}
ul.sp-localtoc ul a:hover{
background-color: transparent;
color: #00bc8c;
}
div.navbar-inverse ul.sp-localtoc ul a{
color: #ffffff;
}
div.navbar-inverse ul.sp-localtoc ul a:hover{
background-color: transparent;
color: #2c3e50;
}
@@ -0,0 +1,69 @@
{% set table_border_color = "#dddddd" %}
{% set danger_color = "#ffffff" %}
{% set danger_background_color = "#ed6761" %}
{% set danger_border_color = "#ed6761" %}
{% set warning_color = "#ffffff" %}
{% set warning_background_color = "#f77400" %}
{% set warning_border_color = "#f77400" %}
{% set note_color = "#ffffff" %}
{% set note_background_color = "#11b446" %}
{% set note_border_color = "#11b446" %}
{% set hint_color = "#ffffff" %}
{% set hint_background_color = "#306598" %}
{% set hint_border_color = "#306598" %}
{% include "static/css/adjust_theme/_common_adjust.css" %}
/* Heading
---------------------------------------------------------*/
h2, h3, h4, h5, h6 {
border-bottom: 1px solid #eeeeee !important;
}
/* Contents
---------------------------------------------------------*/
div.contents {
background-color: #eeeeee;
border-color: #eeeeee;
}
/* Genindex
---------------------------------------------------------*/
div.genindex-jumpbox {
color: #eeeeee;
border-top: 1px solid #eeeeee;
border-bottom: 1px solid #eeeeee;
}
/* Smartphone Local Toc
---------------------------------------------------------*/
ul.sp-localtoc ul a{
color: #000000;
}
ul.sp-localtoc ul a:hover{
background-color: #eeeeee;
color: #000000;
}
div.navbar-inverse ul.sp-localtoc ul a{
color: #ffffff;
}
div.navbar-inverse ul.sp-localtoc ul a:hover{
background-color: #e74b47;
color: #ffffff;
}
/* Etc
---------------------------------------------------------*/
div.navbar-inner ul.pull-right li a{
font-size: 15px;
}
@@ -0,0 +1,61 @@
{% set table_border_color = "#dddddd" %}
{% set danger_color = "#ffffff" %}
{% set danger_background_color = "#ff3f2c" %}
{% set danger_border_color = "#ff3f2c" %}
{% set warning_color = "#ffffff" %}
{% set warning_background_color = "#ff8500" %}
{% set warning_border_color = "#ff8500" %}
{% set note_color = "#ffffff" %}
{% set note_background_color = "#18B81D" %}
{% set note_border_color = "#18B81D" %}
{% set hint_color = "#ffffff" %}
{% set hint_background_color = "#71CAED" %}
{% set hint_border_color = "#71CAED" %}
{% include "static/css/adjust_theme/_common_adjust.css" %}
/* Heading
---------------------------------------------------------*/
h2, h3, h4, h5, h6 {
border-bottom: 1px solid #eeeeee !important;
}
/* Contents
---------------------------------------------------------*/
div.contents {
background-color: #fafafa;
border-color: #eeeeee;
}
/* Genindex
---------------------------------------------------------*/
div.genindex-jumpbox {
color: #eeeeee;
border-top: 1px solid #eeeeee;
border-bottom: 1px solid #eeeeee;
}
/* Smartphone Local Toc
---------------------------------------------------------*/
ul.sp-localtoc ul a{
color: #999999;
}
ul.sp-localtoc ul a:hover{
background-color: transparent;
color: #333333;
}
div.navbar-inverse ul.sp-localtoc ul a{
color: #999999;
}
div.navbar-inverse ul.sp-localtoc ul a:hover{
background-color: transparent;
color: #333333;
}
@@ -0,0 +1,20 @@
{% set table_border_color = "#dddddd" %}
{% set danger_color = "#ffffff" %}
{% set danger_background_color = "#d23f3c" %}
{% set danger_border_color = "#d23f3c" %}
{% set warning_color = "#ffffff" %}
{% set warning_background_color = "#f19842" %}
{% set warning_border_color = "#f19842" %}
{% set note_color = "#ffffff" %}
{% set note_background_color = "#69a858" %}
{% set note_border_color = "#69a858" %}
{% set hint_color = "#ffffff" %}
{% set hint_background_color = "#8e45ab" %}
{% set hint_border_color = "#8e45ab" %}
{% include "static/css/adjust_theme/_common_adjust.css" %}
@@ -0,0 +1,73 @@
{% set table_border_color = "#dddddd" %}
{% set danger_color = "#ffffff" %}
{% set danger_background_color = "#db524b" %}
{% set danger_border_color = "#db524b" %}
{% set warning_color = "#ffffff" %}
{% set warning_background_color = "#f2ae43" %}
{% set warning_border_color = "#f2ae43" %}
{% set note_color = "#ffffff" %}
{% set note_background_color = "#39af40" %}
{% set note_border_color = "#39af40" %}
{% set hint_color = "#ffffff" %}
{% set hint_background_color = "#56C0E0" %}
{% set hint_border_color = "#56C0E0" %}
{% include "static/css/adjust_theme/_common_adjust.css" %}
/* Heading
---------------------------------------------------------*/
h2, h3, h4, h5, h6 {
border-bottom: 1px solid #eeeeee !important;
}
/* Genindex
---------------------------------------------------------*/
div.genindex-jumpbox {
color: #eeeeee;
border-top: 1px solid #eeeeee;
border-bottom: 1px solid #eeeeee;
}
/* Contents
---------------------------------------------------------*/
div.contents {
background-color: #f7f7f7;
border-color: #eeeeee;
}
/* Smartphone Local Toc
---------------------------------------------------------*/
ul.sp-localtoc ul a{
margin-left: 7px;
margin-right: 7px;
border: 1px solid transparent;
border-radius: 4px;
color: #4582ec;
}
ul.sp-localtoc ul a:hover{
border-color: #dddddd;
color: #4582ec;
}
div.navbar-inverse ul.sp-localtoc ul a{
color: #333333;
}
div.navbar-inverse ul.sp-localtoc ul a:hover{
color: #333333;
}
/* Etc
---------------------------------------------------------*/
div.navbar-inner ul.pull-right li a{
font-size: 15px;
}
@@ -0,0 +1,19 @@
{% set table_border_color = "#dddddd" %}
{% set danger_color = "#ffffff" %}
{% set danger_background_color = "#c9605a" %}
{% set danger_border_color = "#c9605a" %}
{% set warning_color = "#ffffff" %}
{% set warning_background_color = "#e48353" %}
{% set warning_border_color = "#e48353" %}
{% set note_color = "#ffffff" %}
{% set note_background_color = "#9fbe5b" %}
{% set note_border_color = "#9fbe5b" %}
{% set hint_color = "#ffffff" %}
{% set hint_background_color = "#55abda" %}
{% set hint_border_color = "#55abda" %}
{% include "static/css/adjust_theme/_common_adjust.css" %}
@@ -0,0 +1,60 @@
{% set table_border_color = "#dddddd" %}
{% set danger_color = "#ffffff" %}
{% set danger_background_color = "#d88400" %}
{% set danger_border_color = "#d88400" %}
{% set warning_color = "#ffffff" %}
{% set warning_background_color = "#9c43a1" %}
{% set warning_border_color = "#9c43a1" %}
{% set note_color = "#ffffff" %}
{% set note_background_color = "#439500" %}
{% set note_border_color = "#439500" %}
{% set hint_color = "#ffffff" %}
{% set hint_background_color = "#0099d1" %}
{% set hint_border_color = "#0099d1" %}
{% include "static/css/adjust_theme/_common_adjust.css" %}
/* Heading
---------------------------------------------------------*/
h2, h3, h4, h5, h6 {
border-bottom: 1px solid #dddddd !important;
}
/* Genindex
---------------------------------------------------------*/
div.genindex-jumpbox {
color: #dddddd;
border-top: 1px solid #dddddd;
border-bottom: 1px solid #dddddd;
}
/* Contents
---------------------------------------------------------*/
div.contents {
background-color: #f4f4f4;
border: none;
box-shadow: none;
}
/* Smartphone Local Toc
---------------------------------------------------------*/
ul.sp-localtoc ul a{
color: #333333;
}
ul.sp-localtoc ul a:hover{
color: #d9230f;
}
div.navbar-inverse ul.sp-localtoc ul a{
color: #ffffff;
}
div.navbar-inverse ul.sp-localtoc ul a:hover{
color: #fac0ba;
}
@@ -0,0 +1,83 @@
{% set table_border_color = "#1c1e22" %}
{% set danger_color = "rgba(255, 255, 255, 0.9)" %}
{% set danger_background_color = "#f05e57" %}
{% set danger_border_color = "#ef4b60" %}
{% set warning_color = "rgba(255, 255, 255, 0.9)" %}
{% set warning_background_color = "#fa9500" %}
{% set warning_border_color = "#eb6500" %}
{% set note_color = "rgba(255, 255, 255, 0.9)" %}
{% set note_background_color = "#468847" %}
{% set note_border_color = "#5ec65d" %}
{% set hint_color = "rgba(255, 255, 255, 0.9)" %}
{% set hint_background_color = "#56C0E0" %}
{% set hint_border_color = "#31ced9" %}
{% include "static/css/adjust_theme/_common_adjust.css" %}
/* Heading
---------------------------------------------------------*/
h2, h3, h4, h5, h6 {
border-bottom: 1px solid #1c1e22 !important;
}
/* Genindex
---------------------------------------------------------*/
div.genindex-jumpbox {
color: #1c1e22;
border-top: 1px solid #1c1e22;
border-bottom: 1px solid #1c1e22;
}
/* Field-list
---------------------------------------------------------*/
table.field-list {
background-color: #272B30;
}
/* Citation
---------------------------------------------------------*/
table.citation{
background-color: #272B30;
}
/* Footnote
---------------------------------------------------------*/
table.footnote {
background-color: #272B30;
}
/* Contents
---------------------------------------------------------*/
div.contents {
background-color: #1c1e22;
border-color: #0b0b0d;
}
/* Smartphone Local Toc
---------------------------------------------------------*/
ul.sp-localtoc ul a{
color: #c8c8c8;
}
ul.sp-localtoc ul a:hover{
background-color: #272b2e;
color: #ffffff;
}
div.navbar-inverse ul.sp-localtoc ul a{
color: #c8c8c8;
}
div.navbar-inverse ul.sp-localtoc ul a:hover{
background-color: #272b2e;
color: #ffffff;
}
@@ -0,0 +1,72 @@
{% set table_border_color = "#dddddd" %}
{% set danger_color = "#ffffff" %}
{% set danger_background_color = "#cd0200" %}
{% set danger_border_color = "#be001e" %}
{% set warning_color = "#ffffff" %}
{% set warning_background_color = "#d47500" %}
{% set warning_border_color = "#c54c00" %}
{% set note_color = "#ffffff" %}
{% set note_background_color = "#3cb521" %}
{% set note_border_color = "#4b9f1d" %}
{% set hint_color = "#ffffff" %}
{% set hint_background_color = "#3399f3" %}
{% set hint_border_color = "#11adf1" %}
{% include "static/css/adjust_theme/_common_adjust.css" %}
/* Heading
---------------------------------------------------------*/
h2, h3, h4, h5, h6 {
border-bottom: 1px solid #eeeeee !important;
}
/* Genindex
---------------------------------------------------------*/
div.genindex-jumpbox {
color: #eeeeee;
border-top: 1px solid #eeeeee;
border-bottom: 1px solid #eeeeee;
}
/* Contents
---------------------------------------------------------*/
div.contents {
background-color: #eeeeee;
border: none;
box-shadow: none;
}
/* Smartphone Local Toc
---------------------------------------------------------*/
ul.sp-localtoc ul a{
color: #777777;
}
ul.sp-localtoc ul a:hover{
color: #3399f3;
-webkit-transition: color ease-in-out .2s;
transition: color ease-in-out .2s;
}
div.navbar-inverse ul.sp-localtoc ul a{
color: #c8c8c8;
}
div.navbar-inverse ul.sp-localtoc ul a:hover{
color: #ffffff;
-webkit-transition: color ease-in-out .2s;
transition: color ease-in-out .2s;
}
/* Etc
---------------------------------------------------------*/
div.navbar-inner ul.pull-right li a{
font-size: 12px;
}
@@ -0,0 +1,36 @@
{% set table_border_color = "#999999" %}
{% set table_oddrow_color = "#eaeaea;" %}
{% set table_hover_color = "#dddddd" %}
{% set danger_color = "#ffffff" %}
{% set danger_background_color = "#d14432" %}
{% set danger_border_color = "#c72d35" %}
{% set warning_color = "#ffffff" %}
{% set warning_background_color = "#f26522" %}
{% set warning_border_color = "#f13614" %}
{% set note_color = "#ffffff" %}
{% set note_background_color = "#24c00b" %}
{% set note_border_color = "#3aa80a" %}
{% set hint_color = "#ffffff" %}
{% set hint_background_color = "#185af9" %}
{% set hint_border_color = "#066ee7" %}
div.navbar-inner ul.pull-right li a{
font-size: 15px;
}
@media (max-width: 480px) {
a.brand {
line-height: 25px;
}
}
table.docutils th.head {
background-color: #015b4e;
color: #fff;
}
{% include "static/css/adjust_theme/_common_adjust.css" %}
@@ -0,0 +1,123 @@
{% set table_border_color = "#4d5d6d" %}
{% set danger_color = "#ffffff" %}
{% set danger_background_color = "#db524b" %}
{% set danger_border_color = "#db524b" %}
{% set warning_color = "#ffffff" %}
{% set warning_background_color = "#f2ae43" %}
{% set warning_border_color = "#f2ae43" %}
{% set note_color = "#ffffff" %}
{% set note_background_color = "#58b957" %}
{% set note_border_color = "#58b957" %}
{% set hint_color = "#ffffff" %}
{% set hint_background_color = "#56c0e0" %}
{% set hint_border_color = "#56c0e0" %}
{% include "static/css/adjust_theme/_common_adjust.css" %}
/* Heading
---------------------------------------------------------*/
h2, h3, h4, h5, h6 {
border-bottom: 1px solid #4d5d6d !important;
}
/* Genindex
---------------------------------------------------------*/
div.genindex-jumpbox {
color: #4d5d6d;
border-top: 1px solid #4d5d6d;
border-bottom: 1px solid #4d5d6d;
}
/* Contents
---------------------------------------------------------*/
div.contents {
background-color: #4d5d6d;
border: none;
box-shadow: none;
}
/* Smartphone Local Toc
---------------------------------------------------------*/
ul.sp-localtoc ul a{
font-size: 12px;
color: #ebebeb;
}
ul.sp-localtoc ul a:hover{
color: #ebebeb;
background-color: #485563;
}
div.navbar-inverse ul.sp-localtoc ul a{
color: #ebebeb;
}
div.navbar-inverse ul.sp-localtoc ul a:hover{
color: #ebebeb;
background-color: #c85e17;
}
/* Code
---------------------------------------------------------*/
code, pre {
padding:0 3px 2px;
font-family:Menlo,Monaco,Consolas,"Courier New",monospace;
font-size:12px;
color:#3a3f44;
-webkit-border-radius:3px;
-moz-border-radius:3px;
border-radius:3px;
}
code{
padding:2px 4px;
color:#d14;
background-color:#f7f7f9;
border:1px solid #e1e1e8;
white-space:nowrap;
}
pre{
display:block;
padding:10px;
margin:0 0 10.5px;
font-size:13px;
line-height:21px;
word-break:break-all;
word-wrap:break-word;
white-space:pre;
white-space:pre-wrap;
background-color:#f5f5f5;
border:1px solid #ccc;
border:1px solid rgba(0, 0, 0, 0.15);
-webkit-border-radius:4px;
-moz-border-radius:4px;
border-radius:4px;
}
pre.prettyprint{
margin-bottom:21px;
}
pre code{
padding:0;
color:inherit;
white-space:pre;
white-space:pre-wrap;
background-color:transparent;
border:0;
}
div.navbar-inner ul.pull-right li a{
font-size: 15px;
}
@media (max-width: 480px) {
a.brand {
line-height: 30px;
}
}
@@ -0,0 +1,62 @@
{% set table_border_color = "#dddddd" %}
{% set danger_color = "#ffffff" %}
{% set danger_background_color = "#e13622" %}
{% set danger_border_color = "#e13622" %}
{% set warning_color = "#ffffff" %}
{% set warning_background_color = "#f0b82d" %}
{% set warning_border_color = "#f0b82d" %}
{% set note_color = "#ffffff" %}
{% set note_background_color = "#30b644" %}
{% set note_border_color = "#30b644" %}
{% set hint_color = "#ffffff" %}
{% set hint_background_color = "#782753" %}
{% set hint_border_color = "#782753" %}
{% include "static/css/adjust_theme/_common_adjust.css" %}
/* Heading
---------------------------------------------------------*/
h2, h3, h4, h5, h6 {
border-bottom: 1px solid #eeeeee !important;
}
/* Genindex
---------------------------------------------------------*/
div.genindex-jumpbox {
color: #eeeeee;
border-top: 1px solid #eeeeee;
border-bottom: 1px solid #eeeeee;
}
/* Contents
---------------------------------------------------------*/
div.contents {
background-color: #eeeeee;
border: none;
box-shadow: none;
}
/* Smartphone Local Toc
---------------------------------------------------------*/
ul.sp-localtoc ul a{
color: #ffffff;
}
ul.sp-localtoc ul a:hover{
color: #ffffff;
background-color: #97310e;
}
div.navbar-inverse ul.sp-localtoc ul a{
color: #ffffff;
}
div.navbar-inverse ul.sp-localtoc ul a:hover{
color: #ffffff;
background-color: #3e152b;
}
@@ -0,0 +1,62 @@
{% set table_border_color = "#dddddd" %}
{% set danger_color = "#ffffff" %}
{% set danger_background_color = "#f33f13" %}
{% set danger_border_color = "#ed2c00" %}
{% set warning_color = "#ffffff" %}
{% set warning_background_color = "#eb9100" %}
{% set warning_border_color = "#d28100" %}
{% set note_color = "#ffffff" %}
{% set note_background_color = "#3ead68" %}
{% set note_border_color = "#379b5d" %}
{% set hint_color = "#ffffff" %}
{% set hint_background_color = "#56c0e0" %}
{% set hint_border_color = "#3ab5da" %}
{% include "static/css/adjust_theme/_common_adjust.css" %}
/* Heading
---------------------------------------------------------*/
h2, h3, h4, h5, h6 {
border-bottom: 1px solid #dddddd !important;
}
/* Genindex
---------------------------------------------------------*/
div.genindex-jumpbox {
color: #dddddd;
border-top: 1px solid #dddddd;
border-bottom: 1px solid #dddddd;
}
/* Contents
---------------------------------------------------------*/
div.contents {
background-color: #fafafa;
border: none;
box-shadow: none;
}
/* Smartphone Local Toc
---------------------------------------------------------*/
ul.sp-localtoc ul a{
color: #ffffff;
}
ul.sp-localtoc ul a:hover{
color: #ffffff;
background-color: #272727;
}
div.navbar-inverse ul.sp-localtoc ul a{
color: #ffffff;
}
div.navbar-inverse ul.sp-localtoc ul a:hover{
color: #ffffff;
background-color: #006687;
}
@@ -0,0 +1,36 @@
{% set table_border_color = "#228000" %}
{% set danger_color = "#ffffff" %}
{% set danger_background_color = "#f40000" %}
{% set danger_border_color = "#a20000" %}
{% set warning_color = "#000000" %}
{% set warning_background_color = "#fcfe00" %}
{% set warning_border_color = "#f40000" %}
{% set note_color = "#ffffff" %}
{% set note_background_color = "#228000" %}
{% set note_border_color = "#2faa00" %}
{% set hint_color = "#000000" %}
{% set hint_background_color = "#57ffff" %}
{% set hint_border_color = "#a8a900" %}
{% include "static/css/adjust_theme/_common_adjust.css" %}
table.docutils {
-webkit-border-radius: 0px;
-moz-border-radius: 0px;
border-radius: 0px;
}
div.admonition {
-webkit-border-radius: 0px;
-moz-border-radius: 0px;
border-radius: 0px;
}
div.topic {
background: url("../../img/stars.gif") !important;
}
+350
View File
@@ -0,0 +1,350 @@
@import url("../basic.css");
/* Table
---------------------------------------------------------*/
table {
border: 0;
max-width: 100%;
background-color: transparent;
border-collapse: collapse;
border-spacing: 0 !important;
}
table.docutils {
width: 100%;
margin-bottom: 20px;
border: 1px solid #dddddd;
border-collapse: separate;
*border-collapse: collapse;
border-left: 0;
border-right: 0;
}
table.docutils th {
font-weight: bold;
}
table.docutils th,
table.docutils td
{
padding: 8px;
line-height: 20px;
text-align: left;
vertical-align: top;
border: none;
border-spacing: 0 !important;
border-collapse: none;
border-top: 1px solid #dddddd;
}
table.docutils caption + thead tr:first-child th,
table.docutils caption + tbody tr:first-child th,
table.docutils caption + tbody tr:first-child td,
table.docutils colgroup + thead tr:first-child th,
table.docutils colgroup + tbody tr:first-child th,
table.docutils colgroup + tbody tr:first-child td,
table.docutils thead:first-child tr:first-child th,
table.docutils tbody:first-child tr:first-child th,
table.docutils tbody:first-child tr:first-child td {
border-top: 0;
}
table.docutils thead th {
vertical-align: bottom;
}
table.docutils tbody + tbody {
border-top: 2px solid #dddddd;
}
/* Table-bordered
---------------------------------------------------------*/
table.table-bordered {
border-top: 1px solid #dddddd;
border-left: 1px solid #dddddd;
border-right: none;
}
table.table-bordered > thead > tr > th,
table.table-bordered > tbody > tr > th,
table.table-bordered > tfoot > tr > th,
table.table-bordered > thead > tr > td,
table.table-bordered > tbody > tr > td,
table.table-bordered > tfoot > tr > td {
border-left: none;
border-bottom-width: 0;
}
/* Highlight Table
---------------------------------------------------------*/
.highlighttable .code pre {
font-size: 12px;
}
.highlighttable .linenos pre {
word-break: normal;
font-size: 12px;
}
div.highlight {
background: none;
}
/* Field-list
---------------------------------------------------------*/
table.field-list {
width: auto;
border: none;
}
/* Citation
---------------------------------------------------------*/
table.citation{
width: auto;
margin-bottom: 0;
border: none;
}
table.citation td.label {
font-size: 100%;
display: block;
line-height: normal;
background: inherit;
}
/* Footnote
---------------------------------------------------------*/
a.footnote-reference {
vertical-align: super;
font-size: 75%;
}
table.footnote td.label {
font-size: 100%;
display: block;
line-height: normal;
background: inherit;
}
table.footnote {
width: auto;
margin-bottom: 0px;
border: none;
}
/* Footer
---------------------------------------------------------*/
footer {
width: 100%;
margin: 0;
text-align: center;
padding: 0px;
padding-left: auto;
padding-right: auto;
}
/* Sidebar
------------------------------------------------------- */
div.sidebar {
border: none;
margin: 0;
padding: 0;
background: none;
width: 100%;
float: none;
}
div.sidebar ul:second-child {
color: red;
background-color: #000 !important;
list-style: none !important;
}
/* Definition lists
----------------------------------------------------------- */
dl dd {
padding-left: 1em;
}
/* Admonition styles
----------------------------------------------------------- */
div.admonition {
padding: 8px 35px 8px 0px;
margin-bottom: 20px;
color: #c09853;
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
background-color: #fcf8e3;
border: 1px solid #fbeed5;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
}
div.admonition p {
margin: 0.5em 1em 0.5em 1em;
padding: 0;
}
div.admonition pre {
margin: 0.4em 1em 0.4em 1em;
}
div.admonition p.admonition-title {
margin: 0;
padding: 0.1em 0 0.1em 0.5em;
font-weight: bold;
}
div.admonition ul, div.admonition ol {
margin: 0.1em 0.5em 0.5em 3em;
padding: 0;
}
/* -- danger, error -- */
div.danger,
div.error {
color: #b94a48;
background-color: #f2dede;
border-color: #eed3d7;
}
/* -- warning, caution, attention -- */
div.warning,
div.caution,
div.attention {
}
/* -- note, important -- */
div.note,
div.important {
color: #468847;
background-color: #dff0d8;
border-color: #d6e9c6;
}
/* -- hint, tip -- */
div.hint,
div.tip {
color: #3a87ad;
background-color: #d9edf7;
border-color: #bce8f1;
}
/* Etc
----------------------------------------------------------- */
div.figure-round img {
-webkit-border-radius: 6px;
-moz-border-radius: 6px;
border-radius: 6px;
}
div.figure-polaroid img{
padding: 4px;
background-color: #fff;
border: 1px solid #ccc;
border: 1px solid rgba(0, 0, 0, 0.2);
-webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
-moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
}
div.figure-circle img {
-webkit-border-radius: 500px;
-moz-border-radius: 500px;
border-radius: 500px;
}
a.headerlink {
font-size: 60% !important;
padding-left: 5px;
}
/*
#searchbox .search-query {
width: 60%;
}
*/
div.topic {
min-height: 20px;
padding: 9px;
margin-bottom: 20px;
background-color: #f5f5f5;
border: 1px solid #e3e3e3;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
-moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
}
ul.sp-localtoc {
list-style: none;
padding: 0;
}
ul.sp-localtoc ul{
list-style: none;
padding-left: 0;
}
ul.sp-localtoc ul a{
padding-left: 15px;
padding-top:7px;
padding-bottom:7px;
display: block;
text-decoration: none;
color: #777777;
}
ul.sp-localtoc ul a:hover{
color: #555555;
}
ul.sp-localtoc ul ul{
list-style: none;
}
ul.sp-localtoc ul ul a{
padding-left: 25px;
}
ul.sp-localtoc ul ul ul a{
padding-left: 35px;
}
ul.sp-localtoc ul ul ul ul a{
padding-left: 45px;
}
ul.sp-localtoc ul ul ul ul ul a{
padding-left: 55px;
}
ul.sp-localtoc ul ul ul ul ul a{
padding-left: 65px;
}
div.navbar-inverse ul.sp-localtoc ul a{
color: #999999;
}
div.navbar-inverse ul.sp-localtoc ul a:hover{
color: #ffffff;
}
div.footer-relbar {
margin-top:10px;
}
div.sidebar ul {
list-style: none;
padding-left: 10px;
}
div.sidebar ul ul {
list-style: initial;
padding-left: 40px;
}
div.sidebar p.topless {
padding-left: 10px;
}
+186
View File
@@ -0,0 +1,186 @@
/* Bootstrap
------------------------------------------------------- */
/* apply font awesome
------------------------------------------------------- */
div.danger p.admonition-title:before,
div.error p.admonition-title:before,
div.warning p.admonition-title:before,
div.caution p.admonition-title:before,
div.attention p.admonition-title:before,
div.important p.admonition-title:before,
div.note p.admonition-title:before,
div.hint p.admonition-title:before,
div.tip p.admonition-title:before
{
display: inline-block;
font-family: FontAwesome;
font-style: normal;
font-weight: normal;
line-height: 1;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
div.danger p.admonition-title:before,
div.error p.admonition-title:before {
content: "\f06a\00a0";
}
div.warning p.admonition-title:before,
div.caution p.admonition-title:before,
div.attention p.admonition-title:before {
content: "\f071\00a0";
}
div.important p.admonition-title:before,
div.note p.admonition-title:before {
content: "\f05a\00a0";
}
div.hint p.admonition-title:before,
div.tip p.admonition-title:before {
content: "\f0eb\00a0";
}
{%- if theme_h1_size != '' %}
h1 { font-size: {{ theme_h1_size }}; line-height: {{ theme_h1_size }};}
{% endif %}
{%- if theme_h2_size != '' %}
h2 { font-size: {{ theme_h2_size }}; line-height: {{ theme_h2_size }};}
{% endif %}
{%- if theme_h3_size != '' %}
h3 { font-size: {{ theme_h3_size }}; line-height: {{ theme_h3_size }};}
{% endif %}
{%- if theme_h4_size != '' %}
h4 { font-size: {{ theme_h4_size }}; line-height: {{ theme_h4_size }};}
{% endif %}
{%- if theme_h5_size != '' %}
h5 { font-size: {{ theme_h5_size }}; line-height: {{ theme_h5_size }};}
{% endif %}
{%- if theme_h6_size != '' %}
h6 { font-size: {{ theme_h6_size }}; line-height: {{ theme_h6_size }};}
{% endif %}
{%- if (theme_googlewebfont|tobool) %}
body,
h1,
h2,
h3,
h4,
h5,
h6,
input,
button,
select,
textarea,
h1 small,
h2 small,
h3 small,
h4 small,
h5 small,
h6 small,
.navbar,
.navbar-search .search-query,
.navbar .navbar-search .search-query,
/*
.navbar .search-query::-moz-placeholder,
.navbar .search-query::-webkit-input-placeholder,
*/
.navbar .brand,
.navbar .nav>li>a,
.navbar .navbar-text,
.navbar .dropdown-menu li>a,
.nav li>a,
div.subnav,
div.subnav .nav>li>a,
div.subnav .nav>li:first-child>a,
div.subnav .nav>li.active>a,
legend,
.btn,
.alert-heading
{
{{ theme_googlewebfont_style }}
}
{%- endif %}
h2, h3, h4, h5, h6 {
padding-bottom: 10px;
border-bottom: 1px solid #d0d0d0;
}
{%- if theme_bootstrap_version == '2' %}
div.sidebar ul {
margin-left: 0;
}
ul.sp-localtoc{
margin-left: 0 !important;
}
ul.sp-localtoc ul{
margin-left: 0 !important;
}
ul.sp-localtoc ul ul{
margin-left: 0 !important;
}
ul.sp-localtoc ul ul a{
margin-left: 25px;
}
ul.sp-localtoc ul ul ul a{
margin-left: 35px;
}
ul.sp-localtoc ul ul ul ul a{
margin-left: 45px;
}
ul.sp-localtoc ul ul ul ul ul a{
margin-left: 55px;
}
ul.sp-localtoc ul ul ul ul ul a{
margin-left: 65px;
}
{% endif %}
/* for tablet */
@media (max-width: 767px) {
form.sp-searchbox div.input-append {
margin-top: 10px;
margin-left: 12px;
}
form.sp-searchbox div.input-append {
{%- if theme_bootstrap_version == '2' %}
width: 70%;
{% else %}
width: 90%;
{% endif %}
}
form.sp-searchbox input.search-query {
width: 100%;
}
}
/* for smartphone */
@media (max-width: 480px) {
a.brand {
width: 80%;
}
a.navbar-brand {
width: 80%;
height: 100%;
}
.searchbox .search-query {
width: 90%;
}
}
/* for desktop */
@media (min-width: 768px) {
{% if theme_nav_fixed %}
.navbar-inner div.container {
width: {{ theme_nav_width }};
}
{% endif %}
{% if theme_content_fixed %}
div.container {
width: {{ theme_content_width }};
}
{% endif %}
}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,82 @@
/* Template-specific stuff
*
* Customizations just for the template; these are not necessary for anything
* with disabling the responsiveness.
*/
/* Account for fixed navbar */
body {
min-width: 970px;
}
/* Finesse the page header spacing */
.page-header {
margin-bottom: 30px;
}
.page-header .lead {
margin-bottom: 10px;
}
/* Non-responsive overrides
*
* Utilitze the following CSS to disable the responsive-ness of the container,
* grid system, and navbar.
*/
/* Reset the container */
.container {
width: 970px;
max-width: none !important;
}
/* Demonstrate the grids */
.col-xs-3 {
}
.container .navbar-header,
.container .navbar-collapse {
margin-right: 0;
margin-left: 0;
}
/* Always float the navbar header */
.navbar-header {
float: left;
}
/* Undo the collapsing navbar */
.navbar-collapse {
display: block !important;
height: auto !important;
padding-bottom: 0;
overflow: visible !important;
}
.navbar-toggle {
display: none;
}
.navbar-collapse {
border-top: 0;
}
.navbar-brand {
margin-left: -15px;
}
/* Always apply the floated nav */
.navbar-nav {
float: left;
margin: 0;
}
.navbar-nav > li {
float: left;
}
.navbar-nav > li > a {
padding: 15px;
}
/* Redeclare since we override the float above */
.navbar-nav.navbar-right {
float: right;
}
/* Undo custom dropdowns */
.navbar .navbar-nav .open .dropdown-menu {
position: absolute;
float: left;
}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More