[prev in list] [next in list] [prev in thread] [next in thread] 

List:       rt-commit
Subject:    [Rt-commit] rt branch 5.0/create-chart-images-for-dashboard-emails-2 created.
From:       BPS Git Server via rt-commit <rt-commit () lists ! bestpractical ! com>
Date:       2023-12-20 20:22:44
Message-ID: 20231220202244.46F9A40547 () bps-git ! bestpractical ! com
[Download RAW message or body]

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "rt".

The branch, 5.0/create-chart-images-for-dashboard-emails-2 has been created
        at  b68286ffb7eb53a82b57f6cf93b7e9dafdf0f6cd (commit)

- Log -----------------------------------------------------------------
commit b68286ffb7eb53a82b57f6cf93b7e9dafdf0f6cd
Author: sunnavy <sunnavy@bestpractical.com>
Date:   Tue Dec 19 14:09:00 2023 -0500

    Test UTF-8 BOM to make sure all static files do not have it

diff --git a/t/99-policy.t b/t/99-policy.t
index 6bfff32a25..4b3d841666 100644
--- a/t/99-policy.t
+++ b/t/99-policy.t
@@ -31,11 +31,12 @@ sub check {
         shebang  => 0,
         exec     => 0,
         bps_tag  => 0,
+        bom      => 0,
         compile_perl => 0,
         @_,
     );
 
-    if ($check{strict} or $check{warnings} or $check{shebang} or $check{bps_tag} or \
$check{no_tabs}) { +    if ($check{strict} or $check{warnings} or $check{shebang} or \
$check{bps_tag} or $check{no_tabs} or $check{bom}) {  local $/;
         open my $fh, '<', $file or die $!;
         my $content = <$fh>;
@@ -79,6 +80,13 @@ sub check {
         if (not $other_copyright and $check{no_tabs}) {
             unlike( $content, qr/\t/, "$file has no hard tabs" );
         }
+
+        if ( $check{bom} == 1 ) {
+            like( $content, qr/^\xEF\xBB\xBF/, "$file has bom" );
+        }
+        elsif ( $check{bom} == -1 ) {
+            unlike( $content, qr/^\xEF\xBB\xBF/, "$file has no bom" );
+        }
     }
 
     my $executable = ( stat $file )[2] & 0100;
@@ -122,7 +130,7 @@ check( $_, compile_perl => 1, exec => 1 )
 check( $_, shebang => 1, exec => 1, warnings => 1, strict => 1, bps_tag => 1, \
                no_tabs => 1 )
     for grep {m{^devel/tools/} and not m{/(localhost\.(crt|key)|mime\.types)$}} \
@files;  
-check( $_, exec => -1 )
+check( $_, exec => -1, bom => -1 )
     for grep {m{^share/static/}} @files;
 
 check( $_, exec => -1, bps_tag => 1, no_tabs => 1 )

commit 3023e7eca2d0ef6fca748879e70b5ab8691f0296
Author: sunnavy <sunnavy@bestpractical.com>
Date:   Tue Dec 19 14:08:23 2023 -0500

    Drop UTF-8 BOM from ckeditor js files
    
    The easiest approach is to convert these files using dos2unix.

diff --git a/devel/third-party/ckeditor-4.20.1/README \
b/devel/third-party/ckeditor-4.20.1/README index e8c476ae12..2e6ff8b561 100644
--- a/devel/third-party/ckeditor-4.20.1/README
+++ b/devel/third-party/ckeditor-4.20.1/README
@@ -46,3 +46,7 @@ RT uses CKEditor as its WYSIWYG text editor. We build a customized \
download, the  $ rm -rf skins/bootstrapck/sample
       $ rm -rf plugins/confighelper/docs/
       $ rm -rf plugins/ccmsconfighelper/docs
+
+    * Drop UTF-8 BOM from js files:
+
+      $ find share/static/RichText -name '*.js' | xargs dos2unix
diff --git a/share/static/RichText/adapters/jquery.js \
b/share/static/RichText/adapters/jquery.js index 0defc72049..ed51b367e0 100644
--- a/share/static/RichText/adapters/jquery.js
+++ b/share/static/RichText/adapters/jquery.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/ckeditor.min.js \
b/share/static/RichText/ckeditor.min.js index f31629e520..33e42ea818 100644
--- a/share/static/RichText/ckeditor.min.js
+++ b/share/static/RichText/ckeditor.min.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/af.js b/share/static/RichText/lang/af.js
index ad4ea6172e..41f8f7dfbd 100644
--- a/share/static/RichText/lang/af.js
+++ b/share/static/RichText/lang/af.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/ar.js b/share/static/RichText/lang/ar.js
index 41218b4095..5bce9c84c9 100644
--- a/share/static/RichText/lang/ar.js
+++ b/share/static/RichText/lang/ar.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/az.js b/share/static/RichText/lang/az.js
index 84cf6d14cb..eb08d6cd8b 100644
--- a/share/static/RichText/lang/az.js
+++ b/share/static/RichText/lang/az.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/bg.js b/share/static/RichText/lang/bg.js
index d7b5a4bfb9..303d9e6c17 100644
--- a/share/static/RichText/lang/bg.js
+++ b/share/static/RichText/lang/bg.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/bn.js b/share/static/RichText/lang/bn.js
index f7cd328fa3..5f74ecebd9 100644
--- a/share/static/RichText/lang/bn.js
+++ b/share/static/RichText/lang/bn.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/bs.js b/share/static/RichText/lang/bs.js
index 6e94752c6f..b5d4498220 100644
--- a/share/static/RichText/lang/bs.js
+++ b/share/static/RichText/lang/bs.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/ca.js b/share/static/RichText/lang/ca.js
index 47d690d2ae..acc7b75c86 100644
--- a/share/static/RichText/lang/ca.js
+++ b/share/static/RichText/lang/ca.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/cs.js b/share/static/RichText/lang/cs.js
index dd42d9fe27..4c1ec88a1e 100644
--- a/share/static/RichText/lang/cs.js
+++ b/share/static/RichText/lang/cs.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/cy.js b/share/static/RichText/lang/cy.js
index a6679d3b8c..3c9e9e2f85 100644
--- a/share/static/RichText/lang/cy.js
+++ b/share/static/RichText/lang/cy.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/da.js b/share/static/RichText/lang/da.js
index cb649963bf..fcdfc8d7cf 100644
--- a/share/static/RichText/lang/da.js
+++ b/share/static/RichText/lang/da.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/de-ch.js \
b/share/static/RichText/lang/de-ch.js index 78658ad602..b2c58cf00b 100644
--- a/share/static/RichText/lang/de-ch.js
+++ b/share/static/RichText/lang/de-ch.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/de.js b/share/static/RichText/lang/de.js
index f857411dfa..6a6aa17705 100644
--- a/share/static/RichText/lang/de.js
+++ b/share/static/RichText/lang/de.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/el.js b/share/static/RichText/lang/el.js
index 7397326509..85555e9f22 100644
--- a/share/static/RichText/lang/el.js
+++ b/share/static/RichText/lang/el.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/en-au.js \
b/share/static/RichText/lang/en-au.js index 3721e59640..6a9fd169b7 100644
--- a/share/static/RichText/lang/en-au.js
+++ b/share/static/RichText/lang/en-au.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/en-ca.js \
b/share/static/RichText/lang/en-ca.js index 54257fb151..9ee6901095 100644
--- a/share/static/RichText/lang/en-ca.js
+++ b/share/static/RichText/lang/en-ca.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/en-gb.js \
b/share/static/RichText/lang/en-gb.js index 54969920fb..f036596564 100644
--- a/share/static/RichText/lang/en-gb.js
+++ b/share/static/RichText/lang/en-gb.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/en.js b/share/static/RichText/lang/en.js
index 97af249129..404a202d5a 100644
--- a/share/static/RichText/lang/en.js
+++ b/share/static/RichText/lang/en.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/eo.js b/share/static/RichText/lang/eo.js
index 7391d4d86e..9595eebbf5 100644
--- a/share/static/RichText/lang/eo.js
+++ b/share/static/RichText/lang/eo.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/es-mx.js \
b/share/static/RichText/lang/es-mx.js index e8aa980bc0..cc816f799d 100644
--- a/share/static/RichText/lang/es-mx.js
+++ b/share/static/RichText/lang/es-mx.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/es.js b/share/static/RichText/lang/es.js
index 872db2f84f..fc894515b5 100644
--- a/share/static/RichText/lang/es.js
+++ b/share/static/RichText/lang/es.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/et.js b/share/static/RichText/lang/et.js
index 5be5753e13..5f66be81c5 100644
--- a/share/static/RichText/lang/et.js
+++ b/share/static/RichText/lang/et.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/eu.js b/share/static/RichText/lang/eu.js
index d3f4e47e6e..a607b4e79a 100644
--- a/share/static/RichText/lang/eu.js
+++ b/share/static/RichText/lang/eu.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/fa.js b/share/static/RichText/lang/fa.js
index e550d7c423..2f4836b338 100644
--- a/share/static/RichText/lang/fa.js
+++ b/share/static/RichText/lang/fa.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/fi.js b/share/static/RichText/lang/fi.js
index 76a58cc67f..626e4334a8 100644
--- a/share/static/RichText/lang/fi.js
+++ b/share/static/RichText/lang/fi.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/fo.js b/share/static/RichText/lang/fo.js
index 2e6ff38d7a..b89cf6a469 100644
--- a/share/static/RichText/lang/fo.js
+++ b/share/static/RichText/lang/fo.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/fr-ca.js \
b/share/static/RichText/lang/fr-ca.js index 29daed480b..270a5f1230 100644
--- a/share/static/RichText/lang/fr-ca.js
+++ b/share/static/RichText/lang/fr-ca.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/fr.js b/share/static/RichText/lang/fr.js
index 347f54c574..06c0ddb18e 100644
--- a/share/static/RichText/lang/fr.js
+++ b/share/static/RichText/lang/fr.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/gl.js b/share/static/RichText/lang/gl.js
index 13d2b126e0..68bcf89d0a 100644
--- a/share/static/RichText/lang/gl.js
+++ b/share/static/RichText/lang/gl.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/gu.js b/share/static/RichText/lang/gu.js
index 1d0f957ffe..c0e9d254c3 100644
--- a/share/static/RichText/lang/gu.js
+++ b/share/static/RichText/lang/gu.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/he.js b/share/static/RichText/lang/he.js
index 84c8df27d8..4cd08e97a5 100644
--- a/share/static/RichText/lang/he.js
+++ b/share/static/RichText/lang/he.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/hi.js b/share/static/RichText/lang/hi.js
index 1f66b08c0d..f4f61ca2db 100644
--- a/share/static/RichText/lang/hi.js
+++ b/share/static/RichText/lang/hi.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/hr.js b/share/static/RichText/lang/hr.js
index 99a33b4152..d3393bc3b7 100644
--- a/share/static/RichText/lang/hr.js
+++ b/share/static/RichText/lang/hr.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/hu.js b/share/static/RichText/lang/hu.js
index e6b76b78dc..2ed564023f 100644
--- a/share/static/RichText/lang/hu.js
+++ b/share/static/RichText/lang/hu.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/id.js b/share/static/RichText/lang/id.js
index 3b9fedd107..0939802ec1 100644
--- a/share/static/RichText/lang/id.js
+++ b/share/static/RichText/lang/id.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/is.js b/share/static/RichText/lang/is.js
index a3da11bd59..6e6fc3493b 100644
--- a/share/static/RichText/lang/is.js
+++ b/share/static/RichText/lang/is.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/it.js b/share/static/RichText/lang/it.js
index 8f444f0339..bccf6b47a7 100644
--- a/share/static/RichText/lang/it.js
+++ b/share/static/RichText/lang/it.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/ja.js b/share/static/RichText/lang/ja.js
index 805562b5a1..bbe8e785f2 100644
--- a/share/static/RichText/lang/ja.js
+++ b/share/static/RichText/lang/ja.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/ka.js b/share/static/RichText/lang/ka.js
index d886f81783..84d37ec096 100644
--- a/share/static/RichText/lang/ka.js
+++ b/share/static/RichText/lang/ka.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/km.js b/share/static/RichText/lang/km.js
index 4f8624873c..ff85062619 100644
--- a/share/static/RichText/lang/km.js
+++ b/share/static/RichText/lang/km.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/ko.js b/share/static/RichText/lang/ko.js
index a0282762a1..8538d8caed 100644
--- a/share/static/RichText/lang/ko.js
+++ b/share/static/RichText/lang/ko.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/ku.js b/share/static/RichText/lang/ku.js
index 1e201fa0db..c8524d5c43 100644
--- a/share/static/RichText/lang/ku.js
+++ b/share/static/RichText/lang/ku.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/lt.js b/share/static/RichText/lang/lt.js
index 77cf918051..c0c9328f19 100644
--- a/share/static/RichText/lang/lt.js
+++ b/share/static/RichText/lang/lt.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/lv.js b/share/static/RichText/lang/lv.js
index 003ff2dbbe..f3cdf473e7 100644
--- a/share/static/RichText/lang/lv.js
+++ b/share/static/RichText/lang/lv.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/mk.js b/share/static/RichText/lang/mk.js
index 0d4f95df3c..73e4e1e0ae 100644
--- a/share/static/RichText/lang/mk.js
+++ b/share/static/RichText/lang/mk.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/mn.js b/share/static/RichText/lang/mn.js
index 23a6521455..4c2589e369 100644
--- a/share/static/RichText/lang/mn.js
+++ b/share/static/RichText/lang/mn.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/ms.js b/share/static/RichText/lang/ms.js
index b9fee1f2e5..c271d9e1b3 100644
--- a/share/static/RichText/lang/ms.js
+++ b/share/static/RichText/lang/ms.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/nb.js b/share/static/RichText/lang/nb.js
index 2a83a0db3a..dd111487d4 100644
--- a/share/static/RichText/lang/nb.js
+++ b/share/static/RichText/lang/nb.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/nl.js b/share/static/RichText/lang/nl.js
index 09bead9960..89e1028dd1 100644
--- a/share/static/RichText/lang/nl.js
+++ b/share/static/RichText/lang/nl.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/no.js b/share/static/RichText/lang/no.js
index d199d02bd6..5feeb74e3c 100644
--- a/share/static/RichText/lang/no.js
+++ b/share/static/RichText/lang/no.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/oc.js b/share/static/RichText/lang/oc.js
index 19e30006ad..3a7c19fe14 100644
--- a/share/static/RichText/lang/oc.js
+++ b/share/static/RichText/lang/oc.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/pl.js b/share/static/RichText/lang/pl.js
index e5e77707a4..af773602e5 100644
--- a/share/static/RichText/lang/pl.js
+++ b/share/static/RichText/lang/pl.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/pt-br.js \
b/share/static/RichText/lang/pt-br.js index b9c1a1193f..64ba6be33e 100644
--- a/share/static/RichText/lang/pt-br.js
+++ b/share/static/RichText/lang/pt-br.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/pt.js b/share/static/RichText/lang/pt.js
index ade0b6fab8..c6b13da933 100644
--- a/share/static/RichText/lang/pt.js
+++ b/share/static/RichText/lang/pt.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/ro.js b/share/static/RichText/lang/ro.js
index 578b5f87bf..d750f55806 100644
--- a/share/static/RichText/lang/ro.js
+++ b/share/static/RichText/lang/ro.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/ru.js b/share/static/RichText/lang/ru.js
index 5c618113c4..69f168b711 100644
--- a/share/static/RichText/lang/ru.js
+++ b/share/static/RichText/lang/ru.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/si.js b/share/static/RichText/lang/si.js
index c9f42d17a8..093ee60f3e 100644
--- a/share/static/RichText/lang/si.js
+++ b/share/static/RichText/lang/si.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/sk.js b/share/static/RichText/lang/sk.js
index 6fd892e395..b77dfd626d 100644
--- a/share/static/RichText/lang/sk.js
+++ b/share/static/RichText/lang/sk.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/sl.js b/share/static/RichText/lang/sl.js
index d4de03dc03..3365818d9e 100644
--- a/share/static/RichText/lang/sl.js
+++ b/share/static/RichText/lang/sl.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/sq.js b/share/static/RichText/lang/sq.js
index ddccef5837..01a99084c8 100644
--- a/share/static/RichText/lang/sq.js
+++ b/share/static/RichText/lang/sq.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/sr-latn.js \
b/share/static/RichText/lang/sr-latn.js index 52aec0c9b8..473650b92f 100644
--- a/share/static/RichText/lang/sr-latn.js
+++ b/share/static/RichText/lang/sr-latn.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/sr.js b/share/static/RichText/lang/sr.js
index 8041c08443..b41906db00 100644
--- a/share/static/RichText/lang/sr.js
+++ b/share/static/RichText/lang/sr.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/sv.js b/share/static/RichText/lang/sv.js
index 7e373a69f2..dc2736f5d0 100644
--- a/share/static/RichText/lang/sv.js
+++ b/share/static/RichText/lang/sv.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/th.js b/share/static/RichText/lang/th.js
index bf95f42db8..a19b5fb9b5 100644
--- a/share/static/RichText/lang/th.js
+++ b/share/static/RichText/lang/th.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/tr.js b/share/static/RichText/lang/tr.js
index 7a00989a4c..e299de9bfa 100644
--- a/share/static/RichText/lang/tr.js
+++ b/share/static/RichText/lang/tr.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/tt.js b/share/static/RichText/lang/tt.js
index b6f11f3964..ad0c028ceb 100644
--- a/share/static/RichText/lang/tt.js
+++ b/share/static/RichText/lang/tt.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/ug.js b/share/static/RichText/lang/ug.js
index b3a97a1014..dfbf0f0c02 100644
--- a/share/static/RichText/lang/ug.js
+++ b/share/static/RichText/lang/ug.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/uk.js b/share/static/RichText/lang/uk.js
index eb69d319ca..594ec3b6da 100644
--- a/share/static/RichText/lang/uk.js
+++ b/share/static/RichText/lang/uk.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/vi.js b/share/static/RichText/lang/vi.js
index 904cc043bb..941a05d985 100644
--- a/share/static/RichText/lang/vi.js
+++ b/share/static/RichText/lang/vi.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/zh-cn.js \
b/share/static/RichText/lang/zh-cn.js index f441f614fd..2d8a1dc181 100644
--- a/share/static/RichText/lang/zh-cn.js
+++ b/share/static/RichText/lang/zh-cn.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/lang/zh.js b/share/static/RichText/lang/zh.js
index 483b1b4404..578f4cd680 100644
--- a/share/static/RichText/lang/zh.js
+++ b/share/static/RichText/lang/zh.js
@@ -1,4 +1,4 @@
-/*
+/*
 Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/a11yhelp.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/a11yhelp.js index \
                14345b166a..16736313fd 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/a11yhelp.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/a11yhelp.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/af.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/af.js index \
                4db82c694b..27f2831e76 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/af.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/af.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/ar.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/ar.js index \
                af325b426d..06b2d085a4 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/ar.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/ar.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/az.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/az.js index \
                b757f104a2..2d22f86a6d 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/az.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/az.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/bg.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/bg.js index \
                b091cea508..7287859a73 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/bg.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/bg.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/ca.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/ca.js index \
                2de6ffdb6d..7bf8793200 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/ca.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/ca.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/cs.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/cs.js index \
                f81c7480a7..e32129610a 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/cs.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/cs.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/cy.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/cy.js index \
                52376a9824..3673fe56e0 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/cy.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/cy.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/da.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/da.js index \
                ccc7f030e1..dd4c2632bf 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/da.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/da.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/de-ch.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/de-ch.js index \
                616f516c78..708c206dce 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/de-ch.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/de-ch.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/de.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/de.js index \
                b3b8ddfb5b..b541af5e40 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/de.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/de.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/el.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/el.js index \
                0567e998e0..64a071b454 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/el.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/el.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/en-au.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/en-au.js index \
                c3f24caedc..c48332d45f 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/en-au.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/en-au.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/en-gb.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/en-gb.js index \
                15b8992971..cd9ffa74ed 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/en-gb.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/en-gb.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/en.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/en.js index \
                3cc91fe99e..86f4464d7d 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/en.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/en.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/eo.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/eo.js index \
                68d3cae51b..514f6818e8 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/eo.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/eo.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/es-mx.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/es-mx.js index \
                ef993cf929..4e6962a297 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/es-mx.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/es-mx.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/es.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/es.js index \
                8f29d21055..291a31d447 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/es.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/es.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/et.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/et.js index \
                b6503c831e..0db584116b 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/et.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/et.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/eu.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/eu.js index \
                347626043f..ba239da3fb 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/eu.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/eu.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/fa.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/fa.js index \
                0fb420114f..7038cfe910 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/fa.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/fa.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/fi.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/fi.js index \
                bf083ec4cf..69ad3b6f4a 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/fi.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/fi.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/fo.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/fo.js index \
                d97df924a4..7ef9e41238 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/fo.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/fo.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/fr-ca.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/fr-ca.js index \
                45642cc5b5..a242c51703 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/fr-ca.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/fr-ca.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/fr.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/fr.js index \
                c13cf511ed..3df0c059fd 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/fr.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/fr.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/gl.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/gl.js index \
                040235aadc..968a11f59c 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/gl.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/gl.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/gu.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/gu.js index \
                df23d31303..76e6034adb 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/gu.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/gu.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/he.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/he.js index \
                28767a2ae8..3950b0846b 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/he.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/he.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/hi.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/hi.js index \
                5302758555..c48a10241b 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/hi.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/hi.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/hr.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/hr.js index \
                1af96cd451..39fd3cf486 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/hr.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/hr.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/hu.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/hu.js index \
                d0a5ebf149..cc0d1ddf90 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/hu.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/hu.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/id.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/id.js index \
                ffc3b8f599..1135805346 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/id.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/id.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/it.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/it.js index \
                c361e0adf0..0f937fcd9e 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/it.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/it.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/ja.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/ja.js index \
                75764d613d..bfc342c6ab 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/ja.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/ja.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/km.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/km.js index \
                07238e74a9..2146044c82 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/km.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/km.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/ko.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/ko.js index \
                68084c473b..f748f9530b 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/ko.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/ko.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/ku.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/ku.js index \
                d8e77e418a..a4b0f9575f 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/ku.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/ku.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/lt.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/lt.js index \
                dcdd1ad6e3..d991017642 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/lt.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/lt.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/lv.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/lv.js index \
                262467f34a..46df598720 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/lv.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/lv.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/mk.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/mk.js index \
                8567a90233..8177a7beb0 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/mk.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/mk.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/mn.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/mn.js index \
                e904acd4ba..788947f36e 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/mn.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/mn.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/nb.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/nb.js index \
                0cf4f8dd58..70d7e4c903 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/nb.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/nb.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/nl.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/nl.js index \
                f778316f3a..d5b1c283b3 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/nl.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/nl.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/no.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/no.js index \
                3b8b0092b8..a1fbdfb8bf 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/no.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/no.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/oc.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/oc.js index \
                8834c76c2a..ddc9dc3678 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/oc.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/oc.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/pl.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/pl.js index \
                41dfb9961e..3643840787 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/pl.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/pl.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/pt-br.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/pt-br.js index \
                6fe5403c5b..e5226a77da 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/pt-br.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/pt-br.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/pt.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/pt.js index \
                95519a15ba..9bd39479b4 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/pt.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/pt.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/ro.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/ro.js index \
                2aadf15fc2..cea3cdcc19 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/ro.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/ro.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/ru.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/ru.js index \
                32e2dc519d..7a3be5ef82 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/ru.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/ru.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/si.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/si.js index \
                f7322bd767..d2d8d91886 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/si.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/si.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/sk.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/sk.js index \
                aa3a2fac8c..7c7813d9a0 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/sk.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/sk.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/sl.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/sl.js index \
                c6e12e529e..7f13cafddd 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/sl.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/sl.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/sq.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/sq.js index \
                07d331412a..9783fb55dd 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/sq.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/sq.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/sr-latn.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/sr-latn.js index \
                3f2661006c..35dd879a7c 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/sr-latn.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/sr-latn.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/sr.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/sr.js index \
                ccc10e5759..21e67e72c4 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/sr.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/sr.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/sv.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/sv.js index \
                784e24edcc..7796a2d318 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/sv.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/sv.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/th.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/th.js index \
                54bedcd244..46f1ef07ec 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/th.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/th.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/tr.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/tr.js index \
                364fde4fad..5bfdd735d5 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/tr.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/tr.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/tt.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/tt.js index \
                d46c97d4f3..16ced6cdfb 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/tt.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/tt.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/ug.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/ug.js index \
                827373ef53..5b4ae1b3c6 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/ug.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/ug.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/uk.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/uk.js index \
                a529919fa6..6d125eb8f5 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/uk.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/uk.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/vi.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/vi.js index \
                998932c1d1..5a0a413387 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/vi.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/vi.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/zh-cn.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/zh-cn.js index \
                35c2625c8e..9c27f906ed 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/zh-cn.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/zh-cn.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/a11yhelp/dialogs/lang/zh.js \
b/share/static/RichText/plugins/a11yhelp/dialogs/lang/zh.js index \
                622358df07..7da0432d11 100644
--- a/share/static/RichText/plugins/a11yhelp/dialogs/lang/zh.js
+++ b/share/static/RichText/plugins/a11yhelp/dialogs/lang/zh.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/about/dialogs/about.js \
b/share/static/RichText/plugins/about/dialogs/about.js index ffa2500e91..031a514a39 \
                100644
--- a/share/static/RichText/plugins/about/dialogs/about.js
+++ b/share/static/RichText/plugins/about/dialogs/about.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/clipboard/dialogs/paste.js \
b/share/static/RichText/plugins/clipboard/dialogs/paste.js index \
                29cd687af3..d6795ae5d8 100644
--- a/share/static/RichText/plugins/clipboard/dialogs/paste.js
+++ b/share/static/RichText/plugins/clipboard/dialogs/paste.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/colordialog/dialogs/colordialog.js \
b/share/static/RichText/plugins/colordialog/dialogs/colordialog.js index \
                5628357d6e..f2d5f297a0 100644
--- a/share/static/RichText/plugins/colordialog/dialogs/colordialog.js
+++ b/share/static/RichText/plugins/colordialog/dialogs/colordialog.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/dialog/dialogDefinition.js \
b/share/static/RichText/plugins/dialog/dialogDefinition.js index \
                9361af4ba3..b8fe53496e 100644
--- a/share/static/RichText/plugins/dialog/dialogDefinition.js
+++ b/share/static/RichText/plugins/dialog/dialogDefinition.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/docprops/dialogs/docprops.js \
b/share/static/RichText/plugins/docprops/dialogs/docprops.js index \
                1b010bf193..29f8f9f6ef 100644
--- a/share/static/RichText/plugins/docprops/dialogs/docprops.js
+++ b/share/static/RichText/plugins/docprops/dialogs/docprops.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/image/dialogs/image.js \
b/share/static/RichText/plugins/image/dialogs/image.js index f9f6ce23f5..b554f82e98 \
                100644
--- a/share/static/RichText/plugins/image/dialogs/image.js
+++ b/share/static/RichText/plugins/image/dialogs/image.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/link/dialogs/anchor.js \
b/share/static/RichText/plugins/link/dialogs/anchor.js index 9394a29533..dc3418c4d2 \
                100644
--- a/share/static/RichText/plugins/link/dialogs/anchor.js
+++ b/share/static/RichText/plugins/link/dialogs/anchor.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/link/dialogs/link.js \
b/share/static/RichText/plugins/link/dialogs/link.js index 51bd322e21..b8dbaf06ca \
                100644
--- a/share/static/RichText/plugins/link/dialogs/link.js
+++ b/share/static/RichText/plugins/link/dialogs/link.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/pastefromgdocs/filter/default.js \
b/share/static/RichText/plugins/pastefromgdocs/filter/default.js index \
                3c187022b6..cddc38f831 100644
--- a/share/static/RichText/plugins/pastefromgdocs/filter/default.js
+++ b/share/static/RichText/plugins/pastefromgdocs/filter/default.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/pastefromword/filter/default.js \
b/share/static/RichText/plugins/pastefromword/filter/default.js index \
                054f7d674b..946b1a9735 100644
--- a/share/static/RichText/plugins/pastefromword/filter/default.js
+++ b/share/static/RichText/plugins/pastefromword/filter/default.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/pastetools/filter/common.js \
b/share/static/RichText/plugins/pastetools/filter/common.js index \
                bce639a9dd..65a329993a 100644
--- a/share/static/RichText/plugins/pastetools/filter/common.js
+++ b/share/static/RichText/plugins/pastetools/filter/common.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/pastetools/filter/image.js \
b/share/static/RichText/plugins/pastetools/filter/image.js index \
                7d0203a803..67c6483820 100644
--- a/share/static/RichText/plugins/pastetools/filter/image.js
+++ b/share/static/RichText/plugins/pastetools/filter/image.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/af.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/af.js index \
                de40926b39..0f42e49f48 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/af.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/af.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/ar.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/ar.js index \
                d81a336923..20152a5b66 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/ar.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/ar.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/az.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/az.js index \
                f41941f08d..313c27a6ce 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/az.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/az.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/bg.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/bg.js index \
                9635a0007c..a571a5af6e 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/bg.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/bg.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/ca.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/ca.js index \
                1bea341ac1..d1ec56d667 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/ca.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/ca.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/cs.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/cs.js index \
                c3414236bd..3718309495 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/cs.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/cs.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/cy.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/cy.js index \
                8e243481f5..5dcb22caa1 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/cy.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/cy.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/da.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/da.js index \
                c1d3b37a05..859e01c574 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/da.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/da.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/de-ch.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/de-ch.js index \
                e7fb723422..064699bced 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/de-ch.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/de-ch.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/de.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/de.js index \
                8519b532ee..82b27c9a21 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/de.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/de.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/el.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/el.js index \
                aa1843c5c8..904fe00a6f 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/el.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/el.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/en-au.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/en-au.js index \
                2c03bce69c..4a8b8b1586 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/en-au.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/en-au.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/en-ca.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/en-ca.js index \
                ca807e4369..cb3ddfc0d9 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/en-ca.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/en-ca.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/en-gb.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/en-gb.js index \
                e6b649ffd4..73690cb974 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/en-gb.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/en-gb.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/en.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/en.js index \
                b5d78fd40a..2839ed1609 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/en.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/en.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/eo.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/eo.js index \
                7c26ff9789..1ead163f89 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/eo.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/eo.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/es-mx.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/es-mx.js index \
                44aef0dd83..39c1a3464d 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/es-mx.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/es-mx.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/es.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/es.js index \
                2d90d98a81..48b5e402cf 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/es.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/es.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/et.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/et.js index \
                04e8dfcdd5..52c879c517 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/et.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/et.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/eu.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/eu.js index \
                aed5e196af..2e4c1d9e6a 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/eu.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/eu.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/fa.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/fa.js index \
                257f89c640..2618277deb 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/fa.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/fa.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/fi.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/fi.js index \
                acd0285b74..0888eba839 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/fi.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/fi.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/fr-ca.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/fr-ca.js index \
                54ec800919..15828ffea0 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/fr-ca.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/fr-ca.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/fr.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/fr.js index \
                3897403798..39eb70c128 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/fr.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/fr.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/gl.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/gl.js index \
                4708165a75..567e75ebb5 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/gl.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/gl.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/he.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/he.js index \
                6f0c7e039d..54f2d3f347 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/he.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/he.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/hr.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/hr.js index \
                9cf926d731..09811f564e 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/hr.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/hr.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/hu.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/hu.js index \
                cccdca33af..dd7b0babc4 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/hu.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/hu.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/id.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/id.js index \
                d88fdff141..c046db551d 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/id.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/id.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/it.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/it.js index \
                ab291bd853..4221dda57a 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/it.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/it.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/ja.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/ja.js index \
                cccb9dfffa..2b3508ee9c 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/ja.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/ja.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/km.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/km.js index \
                7845bde63d..381504096c 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/km.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/km.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/ko.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/ko.js index \
                0800139d0d..e1534697c0 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/ko.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/ko.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/ku.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/ku.js index \
                a8a7d7f162..03039304f9 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/ku.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/ku.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/lt.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/lt.js index \
                8fbf8d7090..5adeac42ae 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/lt.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/lt.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/lv.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/lv.js index \
                1ac0378e4c..a31f7fc269 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/lv.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/lv.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/nb.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/nb.js index \
                9f3d75b8c4..4b77e3bdd1 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/nb.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/nb.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/nl.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/nl.js index \
                e32d985815..3f36d91670 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/nl.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/nl.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/no.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/no.js index \
                7b73e3e9ca..172818d945 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/no.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/no.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/oc.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/oc.js index \
                5a51193a90..2d7601ecd5 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/oc.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/oc.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/pl.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/pl.js index \
                35ee2ee6bc..0af0c7b72e 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/pl.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/pl.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/pt-br.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/pt-br.js index \
                7cb124b4d8..371c0429d7 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/pt-br.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/pt-br.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/pt.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/pt.js index \
                966e9508ad..4e36373275 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/pt.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/pt.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/ro.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/ro.js index \
                3441ddfa47..5cb0ee9509 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/ro.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/ro.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/ru.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/ru.js index \
                292dfe4739..3b77979743 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/ru.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/ru.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/si.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/si.js index \
                e2524473ba..bb7bac990c 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/si.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/si.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/sk.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/sk.js index \
                2e51979a88..82d546b89a 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/sk.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/sk.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/sl.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/sl.js index \
                be82905611..42db427a46 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/sl.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/sl.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/sq.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/sq.js index \
                9a2aaa8ae5..12b1d8a6b7 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/sq.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/sq.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/sr-latn.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/sr-latn.js index \
                b8a24741a7..e6c21d99ce 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/sr-latn.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/sr-latn.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/sr.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/sr.js index \
                27d6229fb4..ceaf518de9 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/sr.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/sr.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/sv.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/sv.js index \
                3a44aa2a20..b82bcd74a4 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/sv.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/sv.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/th.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/th.js index \
                4ed9ad93c5..869afdf32e 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/th.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/th.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/tr.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/tr.js index \
                73c34eeecd..667fdd4de7 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/tr.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/tr.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/tt.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/tt.js index \
                3c3f13291f..f4be1feeba 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/tt.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/tt.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/ug.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/ug.js index \
                3929c61da8..61702bbdbe 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/ug.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/ug.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/uk.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/uk.js index \
                d99c4b70e1..69c2ab7358 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/uk.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/uk.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/vi.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/vi.js index \
                775516f7b6..b1c6030aff 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/vi.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/vi.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/zh-cn.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/zh-cn.js index \
                f57e3dfab3..4298983d2a 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/zh-cn.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/zh-cn.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/lang/zh.js \
b/share/static/RichText/plugins/specialchar/dialogs/lang/zh.js index \
                fbcdb3621a..b38a75e09f 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/lang/zh.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/lang/zh.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/specialchar/dialogs/specialchar.js \
b/share/static/RichText/plugins/specialchar/dialogs/specialchar.js index \
                f93434466e..340e17b658 100644
--- a/share/static/RichText/plugins/specialchar/dialogs/specialchar.js
+++ b/share/static/RichText/plugins/specialchar/dialogs/specialchar.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/plugins/table/dialogs/table.js \
b/share/static/RichText/plugins/table/dialogs/table.js index cb3850b1b1..2b27767355 \
                100644
--- a/share/static/RichText/plugins/table/dialogs/table.js
+++ b/share/static/RichText/plugins/table/dialogs/table.js
@@ -1,4 +1,4 @@
-/*
+/*
  Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
diff --git a/share/static/RichText/styles.js b/share/static/RichText/styles.js
index 78141dc3bc..db6067d425 100644
--- a/share/static/RichText/styles.js
+++ b/share/static/RichText/styles.js
@@ -1,137 +1,137 @@
-/**
- * Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
- */
-
-// This file contains style definitions that can be used by CKEditor plugins.
-//
-// The most common use for it is the "stylescombo" plugin which shows the Styles \
                drop-down
-// list containing all styles in the editor toolbar. Other plugins, like
-// the "div" plugin, use a subset of the styles for their features.
-//
-// If you do not have plugins that depend on this file in your editor build, you can \
                simply
-// ignore it. Otherwise it is strongly recommended to customize this file to match \
                your
-// website requirements and design properly.
-//
-// For more information refer to: \
                https://ckeditor.com/docs/ckeditor4/latest/guide/dev_styles.html#style-rules
                
-
-CKEDITOR.stylesSet.add( 'default', [
-	/* Block styles */
-
-	// These styles are already available in the "Format" drop-down list ("format" \
                plugin),
-	// so they are not needed here by default. You may enable them to avoid
-	// placing the "Format" combo in the toolbar, maintaining the same features.
-	/*
-	{ name: 'Paragraph',		element: 'p' },
-	{ name: 'Heading 1',		element: 'h1' },
-	{ name: 'Heading 2',		element: 'h2' },
-	{ name: 'Heading 3',		element: 'h3' },
-	{ name: 'Heading 4',		element: 'h4' },
-	{ name: 'Heading 5',		element: 'h5' },
-	{ name: 'Heading 6',		element: 'h6' },
-	{ name: 'Preformatted Text',element: 'pre' },
-	{ name: 'Address',			element: 'address' },
-	*/
-
-	{ name: 'Italic Title',		element: 'h2', styles: { 'font-style': 'italic' } },
-	{ name: 'Subtitle',			element: 'h3', styles: { 'color': '#aaa', 'font-style': \
                'italic' } },
-	{
-		name: 'Special Container',
-		element: 'div',
-		styles: {
-			padding: '5px 10px',
-			background: '#eee',
-			border: '1px solid #ccc'
-		}
-	},
-
-	/* Inline styles */
-
-	// These are core styles available as toolbar buttons. You may opt enabling
-	// some of them in the Styles drop-down list, removing them from the toolbar.
-	// (This requires the "stylescombo" plugin.)
-	/*
-	{ name: 'Strong',			element: 'strong', overrides: 'b' },
-	{ name: 'Emphasis',			element: 'em'	, overrides: 'i' },
-	{ name: 'Underline',		element: 'u' },
-	{ name: 'Strikethrough',	element: 'strike' },
-	{ name: 'Subscript',		element: 'sub' },
-	{ name: 'Superscript',		element: 'sup' },
-	*/
-
-	{ name: 'Marker',			element: 'span', attributes: { 'class': 'marker' } },
-
-	{ name: 'Big',				element: 'big' },
-	{ name: 'Small',			element: 'small' },
-	{ name: 'Typewriter',		element: 'tt' },
-
-	{ name: 'Computer Code',	element: 'code' },
-	{ name: 'Keyboard Phrase',	element: 'kbd' },
-	{ name: 'Sample Text',		element: 'samp' },
-	{ name: 'Variable',			element: 'var' },
-
-	{ name: 'Deleted Text',		element: 'del' },
-	{ name: 'Inserted Text',	element: 'ins' },
-
-	{ name: 'Cited Work',		element: 'cite' },
-	{ name: 'Inline Quotation',	element: 'q' },
-
-	{ name: 'Language: RTL',	element: 'span', attributes: { 'dir': 'rtl' } },
-	{ name: 'Language: LTR',	element: 'span', attributes: { 'dir': 'ltr' } },
-
-	/* Object styles */
-
-	{
-		name: 'Styled Image (left)',
-		element: 'img',
-		attributes: { 'class': 'left' }
-	},
-
-	{
-		name: 'Styled Image (right)',
-		element: 'img',
-		attributes: { 'class': 'right' }
-	},
-
-	{
-		name: 'Compact Table',
-		element: 'table',
-		attributes: {
-			cellpadding: '5',
-			cellspacing: '0',
-			border: '1',
-			bordercolor: '#ccc'
-		},
-		styles: {
-			'border-collapse': 'collapse'
-		}
-	},
-
-	{ name: 'Borderless Table',		element: 'table',	styles: { 'border-style': 'hidden', \
                'background-color': '#E6E6FA' } },
-	{ name: 'Square Bulleted List',	element: 'ul',		styles: { 'list-style-type': \
                'square' } },
-
-	/* Widget styles */
-
-	{ name: 'Clean Image', type: 'widget', widget: 'image', attributes: { 'class': \
                'image-clean' } },
-	{ name: 'Grayscale Image', type: 'widget', widget: 'image', attributes: { 'class': \
                'image-grayscale' } },
-
-	{ name: 'Featured Snippet', type: 'widget', widget: 'codeSnippet', attributes: { \
                'class': 'code-featured' } },
-
-	{ name: 'Featured Formula', type: 'widget', widget: 'mathjax', attributes: { \
                'class': 'math-featured' } },
-
-	{ name: '240p', type: 'widget', widget: 'embedSemantic', attributes: { 'class': \
                'embed-240p' }, group: 'size' },
-	{ name: '360p', type: 'widget', widget: 'embedSemantic', attributes: { 'class': \
                'embed-360p' }, group: 'size' },
-	{ name: '480p', type: 'widget', widget: 'embedSemantic', attributes: { 'class': \
                'embed-480p' }, group: 'size' },
-	{ name: '720p', type: 'widget', widget: 'embedSemantic', attributes: { 'class': \
                'embed-720p' }, group: 'size' },
-	{ name: '1080p', type: 'widget', widget: 'embedSemantic', attributes: { 'class': \
                'embed-1080p' }, group: 'size' },
-
-	// Adding space after the style name is an intended workaround. For now, there
-	// is no option to create two styles with the same name for different widget types. \
                See https://dev.ckeditor.com/ticket/16664.
-	{ name: '240p ', type: 'widget', widget: 'embed', attributes: { 'class': \
                'embed-240p' }, group: 'size' },
-	{ name: '360p ', type: 'widget', widget: 'embed', attributes: { 'class': \
                'embed-360p' }, group: 'size' },
-	{ name: '480p ', type: 'widget', widget: 'embed', attributes: { 'class': \
                'embed-480p' }, group: 'size' },
-	{ name: '720p ', type: 'widget', widget: 'embed', attributes: { 'class': \
                'embed-720p' }, group: 'size' },
-	{ name: '1080p ', type: 'widget', widget: 'embed', attributes: { 'class': \
                'embed-1080p' }, group: 'size' }
-
-] );
-
+/**
+ * Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+ */
+
+// This file contains style definitions that can be used by CKEditor plugins.
+//
+// The most common use for it is the "stylescombo" plugin which shows the Styles \
drop-down +// list containing all styles in the editor toolbar. Other plugins, like
+// the "div" plugin, use a subset of the styles for their features.
+//
+// If you do not have plugins that depend on this file in your editor build, you can \
simply +// ignore it. Otherwise it is strongly recommended to customize this file to \
match your +// website requirements and design properly.
+//
+// For more information refer to: \
https://ckeditor.com/docs/ckeditor4/latest/guide/dev_styles.html#style-rules +
+CKEDITOR.stylesSet.add( 'default', [
+	/* Block styles */
+
+	// These styles are already available in the "Format" drop-down list ("format" \
plugin), +	// so they are not needed here by default. You may enable them to avoid
+	// placing the "Format" combo in the toolbar, maintaining the same features.
+	/*
+	{ name: 'Paragraph',		element: 'p' },
+	{ name: 'Heading 1',		element: 'h1' },
+	{ name: 'Heading 2',		element: 'h2' },
+	{ name: 'Heading 3',		element: 'h3' },
+	{ name: 'Heading 4',		element: 'h4' },
+	{ name: 'Heading 5',		element: 'h5' },
+	{ name: 'Heading 6',		element: 'h6' },
+	{ name: 'Preformatted Text',element: 'pre' },
+	{ name: 'Address',			element: 'address' },
+	*/
+
+	{ name: 'Italic Title',		element: 'h2', styles: { 'font-style': 'italic' } },
+	{ name: 'Subtitle',			element: 'h3', styles: { 'color': '#aaa', 'font-style': \
'italic' } }, +	{
+		name: 'Special Container',
+		element: 'div',
+		styles: {
+			padding: '5px 10px',
+			background: '#eee',
+			border: '1px solid #ccc'
+		}
+	},
+
+	/* Inline styles */
+
+	// These are core styles available as toolbar buttons. You may opt enabling
+	// some of them in the Styles drop-down list, removing them from the toolbar.
+	// (This requires the "stylescombo" plugin.)
+	/*
+	{ name: 'Strong',			element: 'strong', overrides: 'b' },
+	{ name: 'Emphasis',			element: 'em'	, overrides: 'i' },
+	{ name: 'Underline',		element: 'u' },
+	{ name: 'Strikethrough',	element: 'strike' },
+	{ name: 'Subscript',		element: 'sub' },
+	{ name: 'Superscript',		element: 'sup' },
+	*/
+
+	{ name: 'Marker',			element: 'span', attributes: { 'class': 'marker' } },
+
+	{ name: 'Big',				element: 'big' },
+	{ name: 'Small',			element: 'small' },
+	{ name: 'Typewriter',		element: 'tt' },
+
+	{ name: 'Computer Code',	element: 'code' },
+	{ name: 'Keyboard Phrase',	element: 'kbd' },
+	{ name: 'Sample Text',		element: 'samp' },
+	{ name: 'Variable',			element: 'var' },
+
+	{ name: 'Deleted Text',		element: 'del' },
+	{ name: 'Inserted Text',	element: 'ins' },
+
+	{ name: 'Cited Work',		element: 'cite' },
+	{ name: 'Inline Quotation',	element: 'q' },
+
+	{ name: 'Language: RTL',	element: 'span', attributes: { 'dir': 'rtl' } },
+	{ name: 'Language: LTR',	element: 'span', attributes: { 'dir': 'ltr' } },
+
+	/* Object styles */
+
+	{
+		name: 'Styled Image (left)',
+		element: 'img',
+		attributes: { 'class': 'left' }
+	},
+
+	{
+		name: 'Styled Image (right)',
+		element: 'img',
+		attributes: { 'class': 'right' }
+	},
+
+	{
+		name: 'Compact Table',
+		element: 'table',
+		attributes: {
+			cellpadding: '5',
+			cellspacing: '0',
+			border: '1',
+			bordercolor: '#ccc'
+		},
+		styles: {
+			'border-collapse': 'collapse'
+		}
+	},
+
+	{ name: 'Borderless Table',		element: 'table',	styles: { 'border-style': 'hidden', \
'background-color': '#E6E6FA' } }, +	{ name: 'Square Bulleted List',	element: \
'ul',		styles: { 'list-style-type': 'square' } }, +
+	/* Widget styles */
+
+	{ name: 'Clean Image', type: 'widget', widget: 'image', attributes: { 'class': \
'image-clean' } }, +	{ name: 'Grayscale Image', type: 'widget', widget: 'image', \
attributes: { 'class': 'image-grayscale' } }, +
+	{ name: 'Featured Snippet', type: 'widget', widget: 'codeSnippet', attributes: { \
'class': 'code-featured' } }, +
+	{ name: 'Featured Formula', type: 'widget', widget: 'mathjax', attributes: { \
'class': 'math-featured' } }, +
+	{ name: '240p', type: 'widget', widget: 'embedSemantic', attributes: { 'class': \
'embed-240p' }, group: 'size' }, +	{ name: '360p', type: 'widget', widget: \
'embedSemantic', attributes: { 'class': 'embed-360p' }, group: 'size' }, +	{ name: \
'480p', type: 'widget', widget: 'embedSemantic', attributes: { 'class': 'embed-480p' \
}, group: 'size' }, +	{ name: '720p', type: 'widget', widget: 'embedSemantic', \
attributes: { 'class': 'embed-720p' }, group: 'size' }, +	{ name: '1080p', type: \
'widget', widget: 'embedSemantic', attributes: { 'class': 'embed-1080p' }, group: \
'size' }, +
+	// Adding space after the style name is an intended workaround. For now, there
+	// is no option to create two styles with the same name for different widget types. \
See https://dev.ckeditor.com/ticket/16664. +	{ name: '240p ', type: 'widget', widget: \
'embed', attributes: { 'class': 'embed-240p' }, group: 'size' }, +	{ name: '360p ', \
type: 'widget', widget: 'embed', attributes: { 'class': 'embed-360p' }, group: 'size' \
}, +	{ name: '480p ', type: 'widget', widget: 'embed', attributes: { 'class': \
'embed-480p' }, group: 'size' }, +	{ name: '720p ', type: 'widget', widget: 'embed', \
attributes: { 'class': 'embed-720p' }, group: 'size' }, +	{ name: '1080p ', type: \
'widget', widget: 'embed', attributes: { 'class': 'embed-1080p' }, group: 'size' } +
+] );
+
diff --git a/share/static/RichText/vendor/promise.js \
b/share/static/RichText/vendor/promise.js index c4d99120dc..84d3b8067b 100644
--- a/share/static/RichText/vendor/promise.js
+++ b/share/static/RichText/vendor/promise.js
@@ -1,4 +1,4 @@
-(function(v,w){"object"===typeof exports&&"undefined"!==typeof \
module?module.exports=w():"function"===typeof \
define&&define.amd?define(w):v.ES6Promise=w()})(this,function(){function \
v(a){return"function"===typeof a}function w(){return function(){return \
process.nextTick(n)}}function R(){return"undefined"!==typeof \
B?function(){B(n)}:C()}function S(){var a=0,b=new \
J(n),c=document.createTextNode("");b.observe(c,{characterData:!0});return \
function(){c.data=a=++a%2}}function T(){var a=new MessageChannel; \
+(function(v,w){"object"===typeof exports&&"undefined"!==typeof \
module?module.exports=w():"function"===typeof \
define&&define.amd?define(w):v.ES6Promise=w()})(this,function(){function \
v(a){return"function"===typeof a}function w(){return function(){return \
process.nextTick(n)}}function R(){return"undefined"!==typeof \
B?function(){B(n)}:C()}function S(){var a=0,b=new \
J(n),c=document.createTextNode("");b.observe(c,{characterData:!0});return \
function(){c.data=a=++a%2}}function T(){var a=new MessageChannel;  \
a.port1.onmessage=n;return function(){return a.port2.postMessage(0)}}function C(){var \
a=setTimeout;return function(){return a(n,1)}}function n(){for(var \
a=0;a<k;a+=2)(0,q[a])(q[a+1]),q[a]=void 0,q[a+1]=void 0;k=0}function U(){try{var \
a=Function("return this")().require("vertx");B=a.runOnLoop||a.runOnContext;return \
R()}catch(b){return C()}}function D(a,b){var c=this,d=new this.constructor(r);void \
0===d[z]&&K(d);var e=c._state;if(e){var f=arguments[e-1];l(function(){return \
L(e,d,f,c._result)})}else E(c,  d,a,b);return d}function F(a){if(a&&"object"===typeof \
a&&a.constructor===this)return a;var b=new this(r);x(b,a);return b}function \
r(){}function M(a){try{return a.then}catch(b){return p.error=b,p}}function \
V(a,b,c,d){try{a.call(b,c,d)}catch(e){return e}}function W(a,b,c){l(function(a){var \
e=!1,f=V(c,b,function(c){e||(e=!0,b!==c?x(a,c):m(a,c))},function(b){e||(e=!0,g(a,b))},"Settle: \
"+(a._label||" unknown promise"));!e&&f&&(e=!0,g(a,f))},a)}function \
X(a,b){b._state===y?m(a,b._result):b._state===t?g(a,  b._result):E(b,void \
0,function(b){return x(a,b)},function(b){return g(a,b)})}function \
N(a,b,c){b.constructor===a.constructor&&c===D&&b.constructor.resolve===F?X(a,b):c===p?(g(a,p.error),p.error=null):void \
0===c?m(a,b):v(c)?W(a,b,c):m(a,b)}function x(a,b){if(a===b)g(a,new TypeError("You \
cannot resolve a promise with itself"));else{var c=typeof \
b;null===b||"object"!==c&&"function"!==c?m(a,b):N(a,b,M(b))}}function \
Y(a){a._onerror&&a._onerror(a._result);G(a)}function \
m(a,b){a._state===u&&(a._result=b,

commit d96ce12753329296ebd83829277c16683731452f
Author: sunnavy <sunnavy@bestpractical.com>
Date:   Tue Dec 19 14:25:00 2023 -0500

    Decode text contents including js from GetResource
    
    The issue was initially noticed from dashboard jschart tests: tests
    could pass with devel mode on but not without it. Turned out that
    ckeditor.min.js has UTF-8 BOM and encoding the BOM twice broke js
    syntax. Unlike devel mode where js files are wrapped into independent
    "script" tags, squished js is wrapped into a single tag, thus JSChart
    related code couldn't run because of earlier syntax error.
    
    This commit makes sure that all text contents are decoded consistently.
    Note that unlike css that $res->decoded_content automatically decodes
    since its content type starts with "text/", js is not automatically
    decoded by $res->decoded_content as its content type starts with
    "application/".

diff --git a/lib/RT/Dashboard/Mailer.pm b/lib/RT/Dashboard/Mailer.pm
index ac34cfc090..c669f2fd7a 100644
--- a/lib/RT/Dashboard/Mailer.pm
+++ b/lib/RT/Dashboard/Mailer.pm
@@ -911,6 +911,12 @@ sub GetResource {
     # the rest of this was taken from Email::MIME::CreateHTML::Resolver::LWP
     ($mimetype, $encoding) = MIME::Types::by_suffix($filename);
 
+    if ( $mimetype =~ m{^(?:text/|application/(?:x-)?javascript)}
+        && !utf8::is_utf8($content) )
+    {
+        $content = Encode::decode( 'UTF-8', $content );
+    }
+
     if ($content_type) {
         $mimetype = $content_type;
 

commit dc025b8a4150a284115818dc05c013f6508852b6
Author: sunnavy <sunnavy@bestpractical.com>
Date:   Mon Dec 18 12:13:20 2023 -0500

    Test JSChart images in dashboard emails

diff --git a/t/mail/dashboard-jschart.t b/t/mail/dashboard-jschart.t
new file mode 100644
index 0000000000..1a39078a3c
--- /dev/null
+++ b/t/mail/dashboard-jschart.t
@@ -0,0 +1,107 @@
+use strict;
+use warnings;
+
+use RT::Test
+    tests  => undef,
+    config => qq{Set(\$EmailDashboardJSChartImages, 1);
+Set(\@ChromeLaunchArguments, '--no-sandbox');
+Set(\$ChromePath, '@{[$ENV{RT_TEST_CHROME_PATH} // '']}');
+};
+
+plan skip_all => 'Need WWW::Mechanize::Chrome and a chrome-based browser'
+    unless RT::StaticUtil::RequireModule("WWW::Mechanize::Chrome")
+    && ( $ENV{RT_TEST_CHROME_PATH} || \
WWW::Mechanize::Chrome->find_executable('chromium') ); +
+my $root = RT::Test->load_or_create_user( Name => 'root' );
+
+my ( $baseurl, $m ) = RT::Test->started_ok;
+ok( $m->login, 'logged in' );
+my $ticket = RT::Test->create_ticket(
+    Queue   => 'General',
+    Subject => 'Test JSChart',
+);
+
+$m->get_ok(q{/Search/Chart.html?Query=Subject LIKE 'test JSChart'});
+$m->submit_form(
+    form_name => 'SaveSearch',
+    fields    => {
+        SavedSearchDescription => 'chart foo',
+        SavedSearchOwner       => 'RT::User-' . $root->id,
+        ChartStyle             => 'bar',
+    },
+    button => 'SavedSearchSave',
+);
+
+# first, create and populate a dashboard
+$m->get_ok('/Dashboards/Modify.html?Create=1');
+$m->form_name('ModifyDashboard');
+$m->field( 'Name' => 'dashboard foo' );
+$m->click_button( value => 'Create' );
+
+my ($dashboard_id) = ( $m->uri =~ /id=(\d+)/ );
+ok( $dashboard_id, "Got an ID for the dashboard, $dashboard_id" );
+
+$m->follow_link_ok( { text => 'Content' } );
+
+# add content, Chart: chart foo, to dashboard body
+# we need to get the saved search id from the content before submitting the form.
+my $regex = qr/data-type="(\w+)" data-name="RT::User-/ . $root->id . \
qr/-SavedSearch-(\d+)"/; +my ( $saved_search_type, $saved_search_id ) = $m->content \
=~ /$regex/; +ok( $saved_search_type, "Got a type for the saved search, \
$saved_search_type" ); +ok( $saved_search_id,   "Got an ID for the saved search, \
$saved_search_id" ); +
+$m->submit_form_ok(
+    {
+        form_name => 'UpdateSearches',
+        fields    => {
+            dashboard_id => $dashboard_id,
+            body         => $saved_search_type . "-" . "RT::User-" . $root->id . \
"-SavedSearch-" . $saved_search_id, +        },
+        button => 'UpdateSearches',
+    },
+    "Add content 'Chart: chart foo' to dashboard body"
+);
+
+like( $m->uri, qr/results=[A-Za-z0-9]{32}/, 'URL redirected for results' );
+$m->content_contains('Dashboard updated');
+
+$m->follow_link_ok( { text => 'Subscription' } );
+$m->form_name('SubscribeDashboard');
+$m->field( 'Frequency' => 'daily' );
+$m->field( 'Hour'      => '06:00' );
+$m->click_button( name => 'Save' );
+$m->content_contains('Subscribed to dashboard dashboard foo');
+
+RT::Test->run_and_capture(
+    command => $RT::SbinPath . '/rt-email-dashboards',
+    all     => 1,
+);
+
+my @mails = RT::Test->fetch_caught_mails;
+is @mails, 1, "Got a dashboard mail";
+
+
+# can't use parse_mail here is because it deletes all attachments
+# before we can call bodyhandle :/
+use RT::EmailParser;
+my $parser = RT::EmailParser->new;
+my $mail   = $parser->ParseMIMEEntityFromScalar( $mails[0] );
+like( $mail->head->get('Subject'), qr/Daily Dashboard: dashboard foo/, 'Mail \
subject' ); +
+my ($mail_image) = grep { $_->mime_type eq 'image/png' } $mail->parts;
+ok( $mail_image, 'Mail contains image attachment' );
+require Imager;                                    # Imager is a dependency of \
WWW::Mechanize::Chrome +my $imager = Imager->new();
+$imager->open( data => $mail_image->bodyhandle->as_string, type => 'png' );
+is( $imager->bits, 8, 'Image bit depth is 8' );    # Images created by GD::Graph \
have 4-bit color depth +
+
+# The first bar's color is #a6cee3, which is (166, 206, 227),
+# on Apple Display preset, it's converted to (174, 205, 225).
+my $bar_color  = $imager->getpixel( x => 300, y => 200 );
+my $srgb_color = Imager::Color->new( 166, 206, 227 );
+my $p3_color   = Imager::Color->new( 174, 205, 225 );
+ok( $bar_color->equals( other => $srgb_color ) || $bar_color->equals( other => \
$p3_color ), +    'Image bar color is #a6cee3' );
+
+done_testing;

commit 381f4a64f19374068fb58ebee6a5e51aca48b8d3
Author: Brian Conry <bconry@bestpractical.com>
Date:   Thu Oct 6 13:01:35 2022 -0500

    Email JSChart images with WWW::Mechanize::Chrome
    
    This change allows the dashboard emails to contain image versions of
    JSChart graphs obtained using WWW::Mechanize::Chrome.
    
    Previously it was only possible to generate graph images for emails
    using the GD module.
    
    This Feature has been tested with Chrome, Chromium, Microsoft Edge, and
    Opera.

diff --git a/docs/UPGRADING-5.0 b/docs/UPGRADING-5.0
index d12cb26e19..5686369fd9 100644
--- a/docs/UPGRADING-5.0
+++ b/docs/UPGRADING-5.0
@@ -634,4 +634,27 @@ messages, you may need to update your system to match the new \
format.  
 =back
 
+=head1 UPGRADING FROM 5.0.5 AND EARLIER
+
+=over 4
+
+=item * Additional options for charts in dashboard emails
+
+While it has been possible to use JSChart to generate chart images in the RT UI,
+because these images are generated client-side it hasn't been possible to include
+them in dashboard emails, so the GD-generated images have been the only option.
+
+It is now possible to use the optional Perl module L<WWW::Mechanize::Chrome> and
+a compatible server-side web brwoser to create images of the JSChart graphs for
+inclusion in emails.
+
+This is accomplished by setting C<$EmailDashboardJSChartImages> to '1' and
+maybe also setting C<$ChromePath> to the path of the executable for your
+chosen Chrome-based browser.
+
+This feature has been tested with Chrome, Chromium, Microsoft Edge, and Opera.
+Other Chrome-based browsers may also work.
+
+=back
+
 =cut
diff --git a/etc/RT_Config.pm.in b/etc/RT_Config.pm.in
index 6433198a36..d20dcb1f55 100644
--- a/etc/RT_Config.pm.in
+++ b/etc/RT_Config.pm.in
@@ -971,6 +971,44 @@ With this enabled, some parts of the email won't look exactly \
like RT.  
 Set($EmailDashboardInlineCSS, 0);
 
+=item C<$EmailDashboardJSChartImages>
+
+To use the JSChart-generated images in emailed dashboards, install the
+optional module L<WWW::Mechanize::Chrome> and enable this option.
+
+=cut
+
+Set($EmailDashboardJSChartImages, 0);
+
+=item C<$ChromePath>
+
+This option contains the path for a compatible Chrome-based browser
+executable that will be used to generate static images for JSChart
+graphs for dashboard emails.
+
+See also L<WWW::Mechanize::Chrome/launch_exe>
+
+=cut
+
+Set($ChromePath, 'chromium');
+
+=item C<@ChromeLaunchArguments>
+
+This option contains the launch arguments when initializing
+L<WWW::Mechanize::Chrome>.
+
+If you need to run L<rt-email-dashboards> as root, you probably need to add
+C<--no-sandbox> to get around Chrome's restriction:
+
+    Set(@ChromeLaunchArguments, '--no-sandbox');
+
+See also L<WWW::Mechanize::Chrome/launch_arg>
+
+=cut
+
+Set(@ChromeLaunchArguments, () );
+
+
 =back
 
 
diff --git a/lib/RT/Config.pm b/lib/RT/Config.pm
index 04fbe3dcd5..f9f474465c 100644
--- a/lib/RT/Config.pm
+++ b/lib/RT/Config.pm
@@ -1994,6 +1994,31 @@ our %META;
     EmailDashboardInlineCSS => {
         Widget => '/Widgets/Form/Boolean',
     },
+    EmailDashboardJSChartImages => {
+        Widget => '/Widgets/Form/Boolean',
+        PostLoadCheck => sub {
+            my $self = shift;
+            return unless $self->Get('EmailDashboardJSChartImages');
+
+            if ( RT::StaticUtil::RequireModule('WWW::Mechanize::Chrome') ) {
+                my $chrome = RT->Config->Get('ChromePath') || 'chromium';
+                if ( !WWW::Mechanize::Chrome->find_executable( $chrome ) ) {
+                    RT->Logger->warning("Can't find chrome executable from \
\$ChromePath value '$chrome', disabling \$EmailDashboardJSChartImages"); +            \
$self->Set( 'EmailDashboardJSChartImages', 0 ); +                }
+            }
+            else {
+                RT->Logger->warning('WWW::Mechanize::Chrome is not installed, \
disabling $EmailDashboardJSChartImages'); +                $self->Set( \
'EmailDashboardJSChartImages', 0 ); +            }
+        },
+    },
+    ChromePath => {
+        Widget => '/Widgets/Form/String',
+    },
+    ChromeLaunchArguments => {
+        Type => 'ARRAY',
+    },
     DefaultErrorMailPrecedence => {
         Widget => '/Widgets/Form/String',
     },
diff --git a/lib/RT/Dashboard/Mailer.pm b/lib/RT/Dashboard/Mailer.pm
index 84ce29e171..ac34cfc090 100644
--- a/lib/RT/Dashboard/Mailer.pm
+++ b/lib/RT/Dashboard/Mailer.pm
@@ -423,8 +423,6 @@ SUMMARY
         }
     }
 
-    $content = ScrubContent($content);
-
     $RT::Logger->debug("Got ".length($content)." characters of output.");
 
     $content = HTML::RewriteAttributes::Links->rewrite(
@@ -536,6 +534,8 @@ sub EmailDashboard {
     $RT::Logger->debug("Done sending dashboard to ".$currentuser->Name." <$email>");
 }
 
+my $chrome;
+
 sub BuildEmail {
     my $self = shift;
     my %args = (
@@ -592,6 +592,133 @@ sub BuildEmail {
         inline_imports => 1,
     );
 
+    # This needs to be done after all of the CSS has been imported (by
+    # inline_css above, which is distinct from the work done by CSS::Inliner
+    # below) and before all of the scripts are scrubbed away.
+    if ( RT->Config->Get('EmailDashboardJSChartImages') ) {
+        # WWW::Mechanize::Chrome uses Log::Log4perl and calls trace sometimes.
+        # Here we merge trace to debug.
+        my $is_debug;
+        for my $type (qw/LogToSyslog LogToSTDERR LogToFile/) {
+            my $log_level = RT->Config->Get($type) or next;
+            if ( $log_level eq 'debug' ) {
+                $is_debug = 1;
+                last;
+            }
+        }
+
+        local *Log::Dispatch::is_trace = sub { $is_debug || 0 };
+        local *Log::Dispatch::trace    = sub {
+            my $self = shift;
+            return $self->debug(@_);
+        };
+
+        my ( $width, $height );
+        my @launch_arguments = RT->Config->Get('ChromeLaunchArguments');
+
+        for my $arg (@launch_arguments) {
+            if ( $arg =~ /^--window-size=(\d+)x(\d+)$/ ) {
+                $width  = $1;
+                $height = $2;
+                last;
+            }
+        }
+
+        $width  ||= 2560;
+        $height ||= 1440;
+
+        $chrome ||= WWW::Mechanize::Chrome->new(
+            autodie          => 0,
+            headless         => 1,
+            autoclose        => 1,
+            separate_session => 1,
+            log              => RT->Logger,
+            launch_arg       => \@launch_arguments,
+            launch_exe       => RT->Config->Get('ChromePath') || 'chromium',
+        );
+
+        # copy the content
+        my $content_with_script = $content;
+
+        # copy in the text of the linked js
+        $content_with_script
+            =~ s{<script type="text/javascript" src="([^"]+)"></script>}{<script \
type="text/javascript">@{ [(GetResource( $1 ))[0]] }</script>}g; +
+        # write the complete content to a temp file
+        my $temp_fh = File::Temp->new(
+            UNLINK   => 1,
+            TEMPLATE => 'email-dashboard-XXXXXX',
+            SUFFIX   => '.html',
+            DIR      => $RT::VarPath,               # $chrome can't get the file if \
saved to /tmp +        );
+        print $temp_fh Encode::encode( 'UTF-8', $content_with_script );
+        close $temp_fh;
+
+        $chrome->viewport_size( { width => $width, height => $height } );
+        $chrome->get_local( $temp_fh->filename );
+        $chrome->wait_until_visible( selector => 'div.dashboard' );
+
+        # grab the list of canvas elements
+        my @canvases = $chrome->selector('div.chart canvas');
+        if (@canvases) {
+
+            my $max_extent = 0;
+
+            # ... and their coordinates
+            foreach my $canvas_data (@canvases) {
+                my $coords = $canvas_data->{coords} = \
$chrome->element_coordinates($canvas_data); +                if ( $max_extent < \
$coords->{top} + $coords->{height} ) { +                    $max_extent = int( \
$coords->{top} + $coords->{height} ) + 1; +                }
+            }
+
+            # make sure that all of them are "visible" in the headless instance
+            if ( $height < $max_extent ) {
+                $chrome->viewport_size( { width => $width, height => $max_extent } \
); +            }
+
+            # capture the entire page as an image
+            my $page_image = $chrome->_content_as_png( undef, { width => $width, \
height => $height } )->get; +
+            my $cid = time() . $$;
+            foreach my $canvas_data (@canvases) {
+                $cid++;
+
+                my $coords       = $canvas_data->{coords};
+                my $canvas_image = $page_image->crop(
+                    left   => $coords->{left},
+                    top    => $coords->{top},
+                    width  => $coords->{width},
+                    height => $coords->{height},
+                );
+                my $canvas_data;
+                $canvas_image->write( data => \$canvas_data, type => 'png' );
+
+                # replace each canvas in the original content with an image tag
+                $content =~ s{<canvas [^>]+>}{<img src="cid:$cid"/>};
+
+                push @parts,
+                    MIME::Entity->build(
+                        Top          => 0,
+                        Data         => $canvas_data,
+                        Type         => 'image/png',
+                        Encoding     => 'base64',
+                        Disposition  => 'inline',
+                        'Content-Id' => "<$cid>",
+                    );
+            }
+        }
+
+        # Shut down chrome if it's a test email from web UI, to reduce memory usage.
+        # Unset $chrome so next time it can re-create a new one.
+        if ( $args{Test} ) {
+            $chrome->close;
+            undef $chrome;
+        }
+    }
+
+    $content =~ s{<link rel="shortcut icon"[^>]+/>}{};
+
     # Inline the CSS if CSS::Inliner is installed and can be loaded
     if ( RT->Config->Get('EmailDashboardInlineCSS') ) {
         if ( RT::StaticUtil::RequireModule('CSS::Inliner') ) {
@@ -609,6 +736,8 @@ sub BuildEmail {
         }
     }
 
+    $content = ScrubContent($content);
+
     my $entity = MIME::Entity->build(
         From    => Encode::encode("UTF-8", $args{From}),
         To      => Encode::encode("UTF-8", $args{To}),
diff --git a/sbin/rt-email-dashboards.in b/sbin/rt-email-dashboards.in
index 4b3b008782..00bd0f52a0 100644
--- a/sbin/rt-email-dashboards.in
+++ b/sbin/rt-email-dashboards.in
@@ -89,15 +89,16 @@ RT::LoadConfig();
 # adjust logging to the screen according to options
 RT->Config->Set( LogToSTDERR => $opts{log} ) if $opts{log};
 
-# Disable JS chart as email clients don't support it
-RT->Config->Set( EnableJSChart => 0 );
-
 # Disable inline editing as email clients don't support it
 RT->Config->Set( InlineEdit => 0 );
 
 # Connect to the database and get RT::SystemUser and RT::Nobody loaded
 RT::Init();
 
+# Disable JS chart unless EmailDashboardJSChartImages is true
+# Do this after Init as PostLoadCheck of EmailDashboardJSChartImages might disable \
the config. +RT->Config->Set( EnableJSChart => RT->Config->Get( \
'EmailDashboardJSChartImages' ) ); +
 require RT::Dashboard::Mailer;
 RT::Dashboard::Mailer->MailDashboards(
     All        => $opts{all},

-----------------------------------------------------------------------


hooks/post-receive
-- 
rt
_______________________________________________
rt-commit mailing list
rt-commit@lists.bestpractical.com
https://lists.bestpractical.com/mailman/listinfo/rt-commit


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic