From 236c936a9d841af4838efe15dda3d8a8697cf141 Mon Sep 17 00:00:00 2001 From: Cedric Date: Sat, 3 Oct 2026 15:44:02 +0200 Subject: [PATCH] Built-in Ubuntu Mono and Inconsolata Condensed fonts Inconsolata Condensed (Inconsolata pinned at width 75, 0.4em per character) is now the narrowest option. Ubuntu Mono moves from Bunny Fonts to the built-in fonts, so it works offline too. Co-Authored-By: Claude Opus 5.5 (1M context) --- README.fr.md | 18 ++-- README.md | 16 ++-- web/app.js | 7 +- web/fonts/OFL-Inconsolata.txt | 93 +++++++++++++++++++++ web/fonts/UFL-Ubuntu-Mono.txt | 96 ++++++++++++++++++++++ web/fonts/inconsolata-condensed-400.woff2 | Bin 0 -> 9928 bytes web/fonts/inconsolata-condensed-700.woff2 | Bin 0 -> 10076 bytes web/fonts/ubuntu-mono-400.woff2 | Bin 0 -> 9296 bytes web/fonts/ubuntu-mono-700.woff2 | Bin 0 -> 9228 bytes web/style.css | 9 +- 10 files changed, 217 insertions(+), 22 deletions(-) create mode 100644 web/fonts/OFL-Inconsolata.txt create mode 100644 web/fonts/UFL-Ubuntu-Mono.txt create mode 100644 web/fonts/inconsolata-condensed-400.woff2 create mode 100644 web/fonts/inconsolata-condensed-700.woff2 create mode 100644 web/fonts/ubuntu-mono-400.woff2 create mode 100644 web/fonts/ubuntu-mono-700.woff2 diff --git a/README.fr.md b/README.fr.md index febd70e..b3d6473 100644 --- a/README.fr.md +++ b/README.fr.md @@ -245,15 +245,15 @@ couleur, est mémorisé par navigateur. bouton soleil/lune de l'en-tête bascule entre clair et sombre. - *Affichage des logs* : taille du texte (très petite, petite, moyenne, grande), densité (normale, ou compacte pour afficher environ 50 % de lignes en plus à l'écran) et police : - la police monospace du système, [Iosevka](https://github.com/be5invis/Iosevka) (étroite, - donc plus de texte par ligne ; servie par LogStream lui-même, fonctionne hors ligne), ou - l'une des 12 polices libres conçues pour le texte dense (JetBrains Mono, Fira Code, Source - Code Pro, IBM Plex Mono, Cascadia Code, Roboto Mono, Ubuntu Mono, Inconsolata, Red Hat Mono, - Noto Sans Mono, Victor Mono, DM Mono). Ces 12 polices sont chargées par le navigateur depuis - [Bunny Fonts](https://fonts.bunny.net), un service européen de polices respectueux de la vie - privée ; sans accès à internet, la police du système est utilisée. Les ligatures sont - désactivées pour que `->` ou `!=` s'affichent tels quels. Le réglage le plus dense est Très - petite + Compacte + Iosevka. + la police monospace du système, l'une des 3 polices étroites intégrées, servies par + LogStream lui-même et utilisables hors ligne (Inconsolata Condensed, la plus étroite, + Iosevka et Ubuntu Mono), ou l'une des 11 polices libres conçues pour le texte dense + (JetBrains Mono, Fira Code, Source Code Pro, IBM Plex Mono, Cascadia Code, Roboto Mono, + Inconsolata, Red Hat Mono, Noto Sans Mono, Victor Mono, DM Mono). Ces 11 polices sont + chargées par le navigateur depuis [Bunny Fonts](https://fonts.bunny.net), un service + européen de polices respectueux de la vie privée ; sans accès à internet, la police du + système est utilisée. Les ligatures sont désactivées pour que `->` ou `!=` s'affichent tels + quels. Le réglage le plus dense est Très petite + Compacte + Inconsolata Condensed. - **Données** : « Supprimer tous les logs » efface définitivement tous les logs stockés (il faut taper `PURGE` pour confirmer). Les tags et les paramètres sont conservés. VictoriaLogs doit être lancé avec `-delete.enable` (déjà présent dans `docker-compose.yml`) ; mettez diff --git a/README.md b/README.md index bb4f266..dcde535 100644 --- a/README.md +++ b/README.md @@ -223,14 +223,14 @@ remembered per browser. - *Theme*: System (follows the computer/phone preference), Light or Dark. The sun/moon button in the header switches between light and dark. - *Log display*: font size (tiny, small, medium, large), density (normal, or compact to - fit about 50% more lines on screen) and font: the system monospace font, - [Iosevka](https://github.com/be5invis/Iosevka) (narrow, so more text fits on each line; - served by LogStream itself, works offline), or one of 12 free fonts made for dense text - (JetBrains Mono, Fira Code, Source Code Pro, IBM Plex Mono, Cascadia Code, Roboto Mono, - Ubuntu Mono, Inconsolata, Red Hat Mono, Noto Sans Mono, Victor Mono, DM Mono). These 12 are - loaded by the browser from [Bunny Fonts](https://fonts.bunny.net), a privacy-friendly - European font service; without internet access, the system font is used. Ligatures are - disabled so `->` or `!=` show as typed. The densest setting is Tiny + Compact + Iosevka. + fit about 50% more lines on screen) and font: the system monospace font, one of 3 narrow + built-in fonts served by LogStream itself, which work offline (Inconsolata Condensed, the + narrowest, Iosevka and Ubuntu Mono), or one of 11 free fonts made for dense text (JetBrains + Mono, Fira Code, Source Code Pro, IBM Plex Mono, Cascadia Code, Roboto Mono, Inconsolata, + Red Hat Mono, Noto Sans Mono, Victor Mono, DM Mono). These 11 are loaded by the browser from + [Bunny Fonts](https://fonts.bunny.net), a privacy-friendly European font service; without + internet access, the system font is used. Ligatures are disabled so `->` or `!=` show as + typed. The densest setting is Tiny + Compact + Inconsolata Condensed. - **Data**: "Delete all logs" permanently erases every stored log (you must type `PURGE` to confirm). Tags and settings are kept. VictoriaLogs needs `-delete.enable` (already set in `docker-compose.yml`); set `ALLOW_PURGE=false` to disable the feature. diff --git a/web/app.js b/web/app.js index 9243ee7..d19762f 100644 --- a/web/app.js +++ b/web/app.js @@ -122,7 +122,7 @@ const I18N = { sizeTiny: 'Tiny', sizeSmall: 'Small', sizeMedium: 'Medium', sizeLarge: 'Large', density: 'Density', densityNormal: 'Normal', densityCompact: 'Compact', fontLabel: 'Font', fontSystem: 'System monospace (no download)', fontBuiltin: 'built in, narrow', - fontHelp: 'Free fonts (SIL Open Font License). Iosevka is served by LogStream itself and works offline; it is narrow, so more text fits on each line. The others are loaded by your browser from Bunny Fonts, a privacy-friendly European font service; without internet access, the system font is used.', + fontHelp: 'Free fonts. The built-in ones (Inconsolata Condensed, the narrowest, Iosevka and Ubuntu Mono) are served by LogStream itself and work offline; they are narrow, so more text fits on each line. The others are loaded by your browser from Bunny Fonts, a privacy-friendly European font service; without internet access, the system font is used.', previewMsgs: ['error: link down on eth1, carrier lost', 'warning: disk /dev/sda temperature 58°C', 'backup finished: ok (12.4 GB in 00:14:32)'], dangerZone: 'Danger zone', purgeHelp: 'Permanently delete every stored log to start from scratch. Color tags and settings are kept.', @@ -276,7 +276,7 @@ const I18N = { sizeTiny: 'Très petite', sizeSmall: 'Petite', sizeMedium: 'Moyenne', sizeLarge: 'Grande', density: 'Densité', densityNormal: 'Normale', densityCompact: 'Compacte', fontLabel: 'Police', fontSystem: 'Monospace du système (aucun téléchargement)', fontBuiltin: 'intégrée, étroite', - fontHelp: 'Polices libres (licence SIL Open Font). Iosevka est servie par LogStream lui-même et fonctionne hors ligne ; elle est étroite, donc chaque ligne affiche plus de texte. Les autres sont chargées par votre navigateur depuis Bunny Fonts, un service européen respectueux de la vie privée ; sans accès à internet, la police du système est utilisée.', + fontHelp: 'Polices libres. Les polices intégrées (Inconsolata Condensed, la plus étroite, Iosevka et Ubuntu Mono) sont servies par LogStream lui-même et fonctionnent hors ligne ; elles sont étroites, donc chaque ligne affiche plus de texte. Les autres sont chargées par votre navigateur depuis Bunny Fonts, un service européen respectueux de la vie privée ; sans accès à internet, la police du système est utilisée.', previewMsgs: ['error: link down on eth1, carrier lost', 'warning: disk /dev/sda temperature 58°C', 'backup finished: ok (12.4 GB in 00:14:32)'], dangerZone: 'Zone de danger', purgeHelp: 'Supprime définitivement tous les logs stockés pour repartir de zéro. Les tags de couleur et les réglages sont conservés.', @@ -543,14 +543,15 @@ $('#themeSwitch').addEventListener('click', (ev) => { // built-in ones (web/fonts, declared in style.css), which also work offline. const LOG_FONTS = [ { id: 'system' }, + { id: 'inconsolata-condensed', family: 'Inconsolata Condensed', builtin: true }, { id: 'iosevka', family: 'Iosevka', builtin: true }, + { id: 'ubuntu-mono', family: 'Ubuntu Mono', builtin: true }, { id: 'jetbrains-mono', family: 'JetBrains Mono' }, { id: 'fira-code', family: 'Fira Code' }, { id: 'source-code-pro', family: 'Source Code Pro' }, { id: 'ibm-plex-mono', family: 'IBM Plex Mono' }, { id: 'cascadia-code', family: 'Cascadia Code' }, { id: 'roboto-mono', family: 'Roboto Mono' }, - { id: 'ubuntu-mono', family: 'Ubuntu Mono' }, { id: 'inconsolata', family: 'Inconsolata' }, { id: 'red-hat-mono', family: 'Red Hat Mono' }, { id: 'noto-sans-mono', family: 'Noto Sans Mono' }, diff --git a/web/fonts/OFL-Inconsolata.txt b/web/fonts/OFL-Inconsolata.txt new file mode 100644 index 0000000..79721ad --- /dev/null +++ b/web/fonts/OFL-Inconsolata.txt @@ -0,0 +1,93 @@ +Copyright 2006 The Inconsolata Project Authors (https://github.com/cyrealtype/Inconsolata) + +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: +http://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) of the Font +Software 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. diff --git a/web/fonts/UFL-Ubuntu-Mono.txt b/web/fonts/UFL-Ubuntu-Mono.txt new file mode 100644 index 0000000..aa36342 --- /dev/null +++ b/web/fonts/UFL-Ubuntu-Mono.txt @@ -0,0 +1,96 @@ +------------------------------- +UBUNTU FONT LICENCE Version 1.0 +------------------------------- + +PREAMBLE +This licence allows the licensed fonts to be used, studied, modified and +redistributed freely. The fonts, including any derivative works, can be +bundled, embedded, and redistributed provided the terms of this licence +are met. The fonts and derivatives, however, cannot be released under +any other licence. The requirement for fonts to remain under this +licence does not require any document created using the fonts or their +derivatives to be published under this licence, as long as the primary +purpose of the document is not to be a vehicle for the distribution of +the fonts. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this licence and clearly marked as such. This may +include source files, build scripts and documentation. + +"Original Version" refers to the collection of Font Software components +as received under this licence. + +"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. + +"Copyright Holder(s)" refers to all individuals and companies who have a +copyright ownership of the Font Software. + +"Substantially Changed" refers to Modified Versions which can be easily +identified as dissimilar to the Font Software by users of the Font +Software comparing the Original Version with the Modified Version. + +To "Propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification and with or without charging +a redistribution fee), making available to the public, and in some +countries other activities as well. + +PERMISSION & CONDITIONS +This licence does not grant any rights under trademark law and all such +rights are reserved. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of the Font Software, to propagate the Font Software, subject to +the below conditions: + +1) Each copy of the Font Software must contain the above copyright +notice and this licence. 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. + +2) The font name complies with the following: +(a) The Original Version must retain its name, unmodified. +(b) Modified Versions which are Substantially Changed must be renamed to +avoid use of the name of the Original Version or similar names entirely. +(c) Modified Versions which are not Substantially Changed must be +renamed to both (i) retain the name of the Original Version and (ii) add +additional naming elements to distinguish the Modified Version from the +Original Version. The name of such Modified Versions must be the name of +the Original Version, with "derivative X" where X represents the name of +the new work, appended to that name. + +3) The name(s) of the Copyright Holder(s) and any contributor to the +Font Software shall not be used to promote, endorse or advertise any +Modified Version, except (i) as required by this licence, (ii) to +acknowledge the contribution(s) of the Copyright Holder(s) or (iii) with +their explicit written permission. + +4) The Font Software, modified or unmodified, in part or in whole, must +be distributed entirely under this licence, and must not be distributed +under any other licence. The requirement for fonts to remain under this +licence does not affect any document created using the Font Software, +except any version of the Font Software extracted from a document +created using the Font Software may only be distributed under this +licence. + +TERMINATION +This licence 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. \ No newline at end of file diff --git a/web/fonts/inconsolata-condensed-400.woff2 b/web/fonts/inconsolata-condensed-400.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..218f90598391ba3e05c734608d3840830bc10fcd GIT binary patch literal 9928 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 GF@*qEf9-t$ literal 0 HcmV?d00001 diff --git a/web/fonts/inconsolata-condensed-700.woff2 b/web/fonts/inconsolata-condensed-700.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..7c742cc1d4e487df437c6d54c022aace94789445 GIT binary patch literal 10076 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 literal 0 HcmV?d00001 diff --git a/web/fonts/ubuntu-mono-400.woff2 b/web/fonts/ubuntu-mono-400.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..467b8d6bfc6a09eb79dd142ecc2da1b33bef3596 GIT binary patch literal 9296 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 literal 0 HcmV?d00001 diff --git a/web/fonts/ubuntu-mono-700.woff2 b/web/fonts/ubuntu-mono-700.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..f77e5f2cd86b5b4ad651f75b76e2d71c7bb986fe GIT binary patch literal 9228 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