[BlueOnyx:23894] Re: tooltip hover blink bug at php options
Tomohiro Hosaka
bokutin at bokut.in
Sat May 23 21:56:29 -05 2020
Hi Michael,
Thanks for the details.
I made a patch.
---
/usr/sausalito/ui/chorizo/ci/application/libraries/I18n.php-00 2019-10-11
09:13:34.000000000 +0900
+++
/usr/sausalito/ui/chorizo/ci/application/libraries/I18n.php 2020-05-24
11:35:25.874369119 +0900
@@ -204,7 +204,8 @@
if ($ini_langs['locale'] == "ja_JP") {
// We can't word wrap Japanese without creating some undesired
results.
// Se we simply don't word wrap it and just replace hard returns:
- $transwebbed = str_replace("\n","<br>", $out_txt_clean);
+ $folded = ja_wordwrap($out_txt_clean, 75);
+ $transwebbed = str_replace("\n","<br>", $folded);
$transwebbed = str_replace('"', "'", $transwebbed);
return $transwebbed;
}
@@ -559,4 +560,4 @@
nuclear facility.
*/
---
/usr/sausalito/ui/chorizo/ci/system/helpers/text_helper.php-00 2019-10-11
09:13:35.000000000 +0900
+++
/usr/sausalito/ui/chorizo/ci/system/helpers/text_helper.php 2020-05-24
11:45:28.371969968 +0900
@@ -478,6 +478,29 @@
return $output;
}
+
+ function ja_wordwrap($string, $charlim = '76') { // $charlim is
treated as visualwidth.
+ $folded = "";
+ $room = $charlim;
+ $chars = preg_split('//u', $string, -1, PREG_SPLIT_NO_EMPTY);
+ foreach ($chars as $char) {
+ $vw = strlen( mb_convert_encoding($char, 'SJIS', 'UTF-8') );
+ if ( $char == "\n" ) {
+ $folded .= $char;
+ $room = $charlim;
+ continue;
+ }
+ if ( $room >= $vw ) {
+ $folded .= $char;
+ $room -= $vw;
+ }
+ else {
+ $folded .= "\n".$char;
+ $room = $charlim-$vw;
+ }
+ }
+ return $folded;
+ }
}
//
------------------------------------------------------------------------
It works fine in my environment.
http://bokut.in/blueonyx_tiptip_tip_left_blink_ja_fold.gif
For Perl there is a perfect implementation at
https://metacpan.org/pod/Text::ANSI::Fold .
This is the author known by jcode.pl.
I looked for something similar for PHP, but I couldn't find anything
that could be adopted as-is.
I also considered the multibyte version of
https://www.php.net/manual/en/function.wordwrap.php in User Contributed
Notes.
I chose to create something simple as a result.
If you want to consider importing the code, of course you can modify it
to make it easier to handle.
Thanks,
On 2020-05-24 03:31, Michael Stauber wrote:
> Hi Tomohiro Hosaka,
>
>> I think the tooltip text for PHP options is important to users, but
>> unfortunately I can't read it.
>> https://bokut.in/blueonyx_tiptip_tip_left_blink.gif
>>
>> Is it possible to fix it?
>
> Yes and this is actually something where I really would appreciate your
> help and expertise to get it fixed.
>
> Here is the problem:
>
> For these mouse-over help texts in all languages *but* Japanese we use
> word-wrap.
>
> The function that does this for us is called getWrapped() and it can be
> found here in the base-alpine code:
>
> https://devel.blueonyx.it/trac/browser/BlueOnyx/5209R/platform/alpine.mod/ci/application/libraries/I18n.php#L182
>
> You feed it a "tag" (like "php_security"), a "domain" (which module has
> the language files (like "base-vsite") an (optionally) an array of
> replacement strings to populate certain placeholders in the locale
> files. It then *should* return a word wrapped text string that contains
> the desired text in the language which the person using the GUI has
> configured.
>
> The critical part being this here:
>
> 204 if ($ini_langs['locale'] == "ja_JP") {
> 205 // We can't word wrap Japanese without creating some
> // undesired results.
> 206 // So we simply don't word wrap it and just replace
> // hard returns:
> 207 $transwebbed = str_replace("\n","<br>", $out_txt_clean);
> 208 $transwebbed = str_replace('"', "'", $transwebbed);
> 209 return $transwebbed;
> 210 }
> 211 else {
> 212 $out_txt_clean = str_replace('"', "'", $out_txt_clean);
> 213 $translated = @htmlentities(html_entity_decode(
> htmlspecialchars_decode($out_txt_clean, ENT_QUOTES),
> ENT_QUOTES), ENT_QUOTES, $ini_langs['localecharset']);
> 214 $transwebbed = 204 if ($ini_langs['locale'] == "ja_JP") {
> 205 // We can't word wrap Japanese without creating some
> undesired
> results.
> 206 // Se we simply don't word wrap it and just replace hard
> returns:
> 207 $transwebbed = str_replace("\n","<br>", $out_txt_clean);
> 208 $transwebbed = str_replace('"', "'", $transwebbed);
> 209 return $transwebbed;
> 210 }
> 211 else {
> 212 $out_txt_clean = str_replace('"', "'", $out_txt_clean);
> 213 $translated =
> @htmlentities(html_entity_decode(htmlspecialchars_decode($out_txt_clean,
> ENT_QUOTES), ENT_QUOTES), ENT_QUOTES, $ini_langs['localecharset']);
> 214 $transwebbed = word_wrap($translated, 75);
> 215 $transwrapped = str_replace("\n","<br>", $transwebbed);
> 216 return $transwrapped;
> 217 }($translated, 75);
> 215 $transwrapped = str_replace("\n","<br>", $transwebbed);
> 216 return $transwrapped;
> 217 }
>
> As you can see: Anything but Japanese is word_wrapped() at around 75
> characters. That turns a long single line help-text into something that
> has multiple lines if needed. That increases readability and makes sure
> the text is not wider than the screen either.
>
> The blinking mouse-over text happens when a line is so long that the
> help text doesn't fit onto the screen.
>
> However: I have no idea how I can do a sensible word-wrap of Japanese
> without hurting the readability or making it an eye sore.
>
> Do you by chance have any recommendation how the above function could
> be
> improved to allow us to do word-wrap for Japanese in a way that's
> actually useful?
>
> Thank you!
More information about the Blueonyx
mailing list