<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[12405] sites/trunk/wordpress.org/public_html/wp-content/plugins/gp-translation-helpers: Translate: Sync gp-translation-helpers with GitHub</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { white-space: pre-line; overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta" style="font-size: 105%">
<dt style="float: left; width: 6em; font-weight: bold">Revision</dt> <dd><a style="font-weight: bold" href="http://meta.trac.wordpress.org/changeset/12405">12405</a><script type="application/ld+json">{"@context":"http://schema.org","@type":"EmailMessage","description":"Review this Commit","action":{"@type":"ViewAction","url":"http://meta.trac.wordpress.org/changeset/12405","name":"Review Commit"}}</script></dd>
<dt style="float: left; width: 6em; font-weight: bold">Author</dt> <dd>amieiro</dd>
<dt style="float: left; width: 6em; font-weight: bold">Date</dt> <dd>2023-02-20 14:50:11 +0000 (Mon, 20 Feb 2023)</dd>
</dl>

<pre style='padding-left: 1em; margin: 2em 0; border-left: 2px solid #ccc; line-height: 1.25; font-size: 105%; font-family: sans-serif'>Translate: Sync gp-translation-helpers with GitHub</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentpluginsgptranslationhelperscssdiscussioncss">sites/trunk/wordpress.org/public_html/wp-content/plugins/gp-translation-helpers/css/discussion.css</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentpluginsgptranslationhelpersgptranslationhelpersphp">sites/trunk/wordpress.org/public_html/wp-content/plugins/gp-translation-helpers/gp-translation-helpers.php</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentpluginsgptranslationhelpershelpershelpertranslationdiscussionphp">sites/trunk/wordpress.org/public_html/wp-content/plugins/gp-translation-helpers/helpers/helper-translation-discussion.php</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentpluginsgptranslationhelpersincludesclassgptranslationhelpersphp">sites/trunk/wordpress.org/public_html/wp-content/plugins/gp-translation-helpers/includes/class-gp-translation-helpers.php</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentpluginsgptranslationhelpersincludesclasswporgcustomizationsphp">sites/trunk/wordpress.org/public_html/wp-content/plugins/gp-translation-helpers/includes/class-wporg-customizations.php</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentpluginsgptranslationhelpersjsrejectfeedbackjs">sites/trunk/wordpress.org/public_html/wp-content/plugins/gp-translation-helpers/js/reject-feedback.js</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentpluginsgptranslationhelperstemplatesdiscussionsdashboardphp">sites/trunk/wordpress.org/public_html/wp-content/plugins/gp-translation-helpers/templates/discussions-dashboard.php</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentpluginsgptranslationhelperstemplatestranslationroweditormetafeedbackphp">sites/trunk/wordpress.org/public_html/wp-content/plugins/gp-translation-helpers/templates/translation-row-editor-meta-feedback.php</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentpluginsgptranslationhelperscsseditorcss">sites/trunk/wordpress.org/public_html/wp-content/plugins/gp-translation-helpers/css/editor.css</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentpluginsgptranslationhelpersincludesclassgpcustomlocalereasonsphp">sites/trunk/wordpress.org/public_html/wp-content/plugins/gp-translation-helpers/includes/class-gp-custom-locale-reasons.php</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentpluginsgptranslationhelpersincludesclassgpsidebarphp">sites/trunk/wordpress.org/public_html/wp-content/plugins/gp-translation-helpers/includes/class-gp-sidebar.php</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentpluginsgptranslationhelpersjseditorjs">sites/trunk/wordpress.org/public_html/wp-content/plugins/gp-translation-helpers/js/editor.js</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentpluginsgptranslationhelperstemplatesgptemplatesoverridestranslationroweditormetaphp">sites/trunk/wordpress.org/public_html/wp-content/plugins/gp-translation-helpers/templates/gp-templates-overrides/translation-row-editor-meta.php</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentpluginsgptranslationhelperscssdiscussioncss"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/plugins/gp-translation-helpers/css/discussion.css</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/plugins/gp-translation-helpers/css/discussion.css        2023-02-20 01:21:36 UTC (rev 12404)
+++ sites/trunk/wordpress.org/public_html/wp-content/plugins/gp-translation-helpers/css/discussion.css  2023-02-20 14:50:11 UTC (rev 12405)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -297,19 +297,22 @@
</span><span class="cx" style="display: block; padding: 0 10px">        padding-left: 13px;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> ul#glossary-item-list {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-    list-style-type: none;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ list-style-type: none;
</ins><span class="cx" style="display: block; padding: 0 10px">         border: #bcc3c3 thin solid;
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-    padding: 10px;
-    border-radius: 3px;
-    background: #f2f2f2;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ padding: 10px;
+       border-radius: 3px;
+       background: #f2f2f2;
</ins><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> ul#glossary-item-list h6 {
</span><span class="cx" style="display: block; padding: 0 10px">        margin-top: 3px;
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-    margin-bottom: 8px
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ margin-bottom: 8px
</ins><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> ul#glossary-item-list li label {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-    margin-left: 5px;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ margin-left: 5px;
</ins><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> #glossary-item-list li label input[type="checkbox"].glossary-word-item {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-    margin-right: 5px;
-}
</del><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        margin-right: 5px;
+}
+td.gtes-involved a{
+       text-decoration: none;
+}
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentpluginsgptranslationhelperscsseditorcss"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.org/public_html/wp-content/plugins/gp-translation-helpers/css/editor.css</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/plugins/gp-translation-helpers/css/editor.css                            (rev 0)
+++ sites/trunk/wordpress.org/public_html/wp-content/plugins/gp-translation-helpers/css/editor.css      2023-02-20 14:50:11 UTC (rev 12405)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,95 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+.editor .nav-sidebar .meta {
+    border: 1px solid #ccc;
+    margin-left: -1px !important;
+    width: 100% !important;
+    min-height: 300px;
+}
+
+.meta.discussion, .meta.history, .meta.other-locales {
+    padding: 1rem;
+}
+.meta.discussion h6 {
+    margin-block: auto;
+}
+
+.meta.history .translations {
+    width: 100%;
+}
+.meta.history #translation-history-table thead tr th {
+    font-size: 0.9rem;
+    font-weight: 500 !important;
+}
+
+.meta.history #legend > div {
+    margin-top: 0.5rem;
+}
+
+.meta.other-locales ul {
+    list-style: none;
+}
+
+.meta.other-locales span.locale.unique {
+    margin-right: 26px;
+}
+
+.meta.other-locales .other-locales .locale {
+    display: inline-block;
+    padding: 1px 6px 0 0;
+    margin: 1px 6px 1px 0;
+    background: #00DA12;
+    width: 5em;
+    text-align: right;
+    float: left;
+    color: #fff;
+}
+
+.meta.other-locales .sidebar-other-locales {
+    margin: 0.1rem .5rem;
+}
+
+.editor .nav-sidebar {
+    float: left;
+    width: 35%;
+    margin: 0;
+    padding: 0;
+}
+
+.warning {
+    margin-right: 1rem !important;
+}
+.sidebar-tabs {
+    margin: 0;
+    padding: 0;
+}
+
+ul.sidebar-tabs {
+    margin-bottom: 0;
+}
+
+.sidebar-tabs > li {
+    background: #eee;
+    color: #222;
+    display: inline-block;
+    padding: 10px 15px;
+    cursor: pointer;
+    margin: 0 1px 0 0;
+}
+.sidebar-tabs li.current {
+    background-color: transparent;
+    margin: 0 0 -1px -1px;
+    border: 1px solid #ccc;
+    border-bottom: 1px solid #fff;
+    font-weight: bold;
+}
+
+.meta h3 {
+    display: none !important;
+}
+
+.meta.discussion .comment-respond{
+    padding: 0 1rem;
+}
+
+.meta.discussion .optin-message-for-each-discussion {
+    padding: 0 1rem 1rem 1rem;
+}
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span><span class="cx" style="display: block; padding: 0 10px">Property changes on: sites/trunk/wordpress.org/public_html/wp-content/plugins/gp-translation-helpers/css/editor.css
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="sitestrunkwordpressorgpublic_htmlwpcontentpluginsgptranslationhelpersgptranslationhelpersphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/plugins/gp-translation-helpers/gp-translation-helpers.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/plugins/gp-translation-helpers/gp-translation-helpers.php        2023-02-20 01:21:36 UTC (rev 12404)
+++ sites/trunk/wordpress.org/public_html/wp-content/plugins/gp-translation-helpers/gp-translation-helpers.php  2023-02-20 14:50:11 UTC (rev 12405)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -30,13 +30,16 @@
</span><span class="cx" style="display: block; padding: 0 10px">  */
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> require_once __DIR__ . '/includes/class-gp-route-translation-helpers.php';
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+require_once __DIR__ . '/includes/class-gp-sidebar.php';
</ins><span class="cx" style="display: block; padding: 0 10px"> require_once __DIR__ . '/includes/class-gp-translation-helpers.php';
</span><span class="cx" style="display: block; padding: 0 10px"> require_once __DIR__ . '/includes/class-gth-temporary-post.php';
</span><span class="cx" style="display: block; padding: 0 10px"> require_once __DIR__ . '/includes/class-gp-notifications.php';
</span><span class="cx" style="display: block; padding: 0 10px"> require_once __DIR__ . '/includes/class-wporg-notifications.php';
</span><span class="cx" style="display: block; padding: 0 10px"> require_once __DIR__ . '/includes/class-wporg-customizations.php';
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+require_once __DIR__ . '/includes/class-gp-custom-locale-reasons.php';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-add_action( 'gp_init', array( 'GP_Translation_Helpers', 'init' ) );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+add_action( 'gp_init', array( 'GP_Translation_Helpers', 'init' ) ); // todo: remove this when this plugin will be merged in the GlotPress core.
+add_action( 'gp_init', array( 'GP_Sidebar', 'init' ) );    // todo: remove this when this plugin will be merged in the GlotPress core.
</ins><span class="cx" style="display: block; padding: 0 10px"> add_action( 'gp_init', array( 'WPorg_GlotPress_Notifications', 'init' ) );    // todo: include this class in a different plugin.
</span><span class="cx" style="display: block; padding: 0 10px"> add_action( 'gp_init', array( 'WPorg_GlotPress_Customizations', 'init' ) );    // todo: include this class in a different plugin.
</span><span class="cx" style="display: block; padding: 0 10px"> add_filter( 'gp_enable_changesrequested_status', '__return_true' ); // todo: remove this filter when this plugin will be merged in the GlotPress core.
</span></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentpluginsgptranslationhelpershelpershelpertranslationdiscussionphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/plugins/gp-translation-helpers/helpers/helper-translation-discussion.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/plugins/gp-translation-helpers/helpers/helper-translation-discussion.php 2023-02-20 01:21:36 UTC (rev 12404)
+++ sites/trunk/wordpress.org/public_html/wp-content/plugins/gp-translation-helpers/helpers/helper-translation-discussion.php   2023-02-20 14:50:11 UTC (rev 12405)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -804,8 +804,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return array
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public static function get_comment_reasons(): array {
-               return array(
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public static function get_comment_reasons( $locale = null ): array {
+               $default_reasons = array(
</ins><span class="cx" style="display: block; padding: 0 10px">                         'style'       => array(
</span><span class="cx" style="display: block; padding: 0 10px">                                'name'        => __( 'Style Guide' ),
</span><span class="cx" style="display: block; padding: 0 10px">                                'explanation' => __( 'The translation is not following the style guide. It will be interesting to provide a link to the style guide for your locale in the comment.' ),
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -824,8 +824,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        ),
</span><span class="cx" style="display: block; padding: 0 10px">                        'punctuation' => array(
</span><span class="cx" style="display: block; padding: 0 10px">                                'name'        => __( 'Punctuation' ),
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                'explanation' =>
-                                       __( 'The translation is not using the punctuation marks correctly.' ),
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         'explanation' => __( 'The translation is not using the punctuation marks correctly.' ),
</ins><span class="cx" style="display: block; padding: 0 10px">                         ),
</span><span class="cx" style="display: block; padding: 0 10px">                        'typo'        => array(
</span><span class="cx" style="display: block; padding: 0 10px">                                'name'        => __( 'Typo' ),
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -832,6 +831,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                'explanation' => __( 'The translation has a typo. E.g., it is using the \'apostrope\' word instead of \'apostrophe\'.' ),
</span><span class="cx" style="display: block; padding: 0 10px">                        ),
</span><span class="cx" style="display: block; padding: 0 10px">                );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                $reasons         = apply_filters( 'gp_custom_reasons', $default_reasons, $locale );
+               return $reasons;
</ins><span class="cx" style="display: block; padding: 0 10px">         }
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -897,9 +898,8 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        $is_linking_comment = preg_match( '!^' . home_url( gp_url() ) . '[a-z0-9_/#-]+$!i', $comment->comment_content );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        $comment_locale = get_comment_meta( $comment->comment_ID, 'locale', true );
-       $current_locale = $args['locale_slug'];
-
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $comment_locale         = get_comment_meta( $comment->comment_ID, 'locale', true );
+       $current_locale         = $args['locale_slug'];
</ins><span class="cx" style="display: block; padding: 0 10px">         $current_translation_id = $args['translation_id'];
</span><span class="cx" style="display: block; padding: 0 10px">        $comment_translation_id = get_comment_meta( $comment->comment_ID, 'translation_id', true );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -959,7 +959,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        if ( $comment_reason ) :
</span><span class="cx" style="display: block; padding: 0 10px">                                ?>
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                The translation <?php gth_print_translation( $comment_translation_id, $args ); ?> <a href="<?php echo esc_url( $linked_comment ); ?>"><?php esc_html_e( 'is being discussed here' ); ?></a>.
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         <p>The translation <?php gth_print_translation( $comment_translation_id, $args ); ?> <a href="<?php echo esc_url( $linked_comment ); ?>"><?php esc_html_e( 'is being discussed here' ); ?></a>.</p>
</ins><span class="cx" style="display: block; padding: 0 10px">                         <?php else : ?>
</span><span class="cx" style="display: block; padding: 0 10px">                                <a href="<?php echo esc_url( $linked_comment ); ?>"><?php esc_html_e( 'Please continue the discussion here' ); ?></a>
</span><span class="cx" style="display: block; padding: 0 10px">                        <?php endif; ?>
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1036,14 +1036,15 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                <?php
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        if ( $comment_translation_id && $comment_translation_id !== $current_translation_id ) {
+                               $translation_status = '';
+                               if ( $_translation_status ) {
+
+                                       $translation_status = ( is_array( $_translation_status ) && array_key_exists( $comment_translation_id, $_translation_status ) ) ? '(' . $_translation_status[ $comment_translation_id ] . ')' : ' (' . $_translation_status[0] . ')';
+                               }
+                               gth_print_translation( $comment_translation_id, $args, 'Translation' . $translation_status . ': ' );
+                       }
</ins><span class="cx" style="display: block; padding: 0 10px">                         if ( ! $is_linking_comment ) :
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                if ( $comment_translation_id && $comment_translation_id !== $current_translation_id ) {
-                                       $translation_status = '';
-                                       if ( $_translation_status ) {
-                                               $translation_status = ' (' . $_translation_status . ')';
-                                       }
-                                       gth_print_translation( $comment_translation_id, $args, 'Translation' . $translation_status . ': ' );
-                               }
</del><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                ?>
</span><span class="cx" style="display: block; padding: 0 10px">                                <div id="comment-reply-<?php echo esc_attr( $comment->comment_ID ); ?>" style="display: none;">
</span></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentpluginsgptranslationhelpersincludesclassgpcustomlocalereasonsphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.org/public_html/wp-content/plugins/gp-translation-helpers/includes/class-gp-custom-locale-reasons.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/plugins/gp-translation-helpers/includes/class-gp-custom-locale-reasons.php                               (rev 0)
+++ sites/trunk/wordpress.org/public_html/wp-content/plugins/gp-translation-helpers/includes/class-gp-custom-locale-reasons.php 2023-02-20 14:50:11 UTC (rev 12405)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,29 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+
+class GP_Custom_Locale_Reasons extends GP_Route {
+       /**
+        * Return the custom reasons set for the specified locale
+        *
+        * @since 0.0.2
+        *
+        * @param string $locale The locale for the custom reason
+        *
+        * @return array $locale_reasons[ $locale ] The custom reasons defined for the specified locale.
+        */
+       public static function get_custom_reasons( $locale ) {
+               // Add custom reasons here in this array in the format below ,
+               // here's and example how to add a custom reason for the `yor` locale
+               // Ensure the key for the custom reasons is not one of the following [ 'style', 'grammar', 'branding', 'glossary', 'punctuation', 'typo' ]
+               // $locale_reasons = array(
+               // 'yor' => array (
+               // 'custom_style'       => array(
+               // 'name'        => __( 'Custom Style Guide' ),
+               // 'explanation' => __( 'The translation is not following the style guide. It will be interesting to provide a link to the style guide for your locale in the comment.' ),
+               // ),
+               // )
+               // );
+               $locale_reasons = array();
+
+               return isset( $locale_reasons[ $locale ] ) ? $locale_reasons[ $locale ] : array();
+       }
+}
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: sites/trunk/wordpress.org/public_html/wp-content/plugins/gp-translation-helpers/includes/class-gp-custom-locale-reasons.php
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="sitestrunkwordpressorgpublic_htmlwpcontentpluginsgptranslationhelpersincludesclassgpsidebarphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.org/public_html/wp-content/plugins/gp-translation-helpers/includes/class-gp-sidebar.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/plugins/gp-translation-helpers/includes/class-gp-sidebar.php                             (rev 0)
+++ sites/trunk/wordpress.org/public_html/wp-content/plugins/gp-translation-helpers/includes/class-gp-sidebar.php       2023-02-20 14:50:11 UTC (rev 12405)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,27 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+
+/**
+ * Routes: GP_Sidebar class
+ *
+ * Manages the sidebar in the translation rows.
+ *
+ * @package gp-translation-helpers
+ * @since 0.0.2
+ */
+class GP_Sidebar {
+
+       public static function init() {
+               add_filter(
+                       'gp_tmpl_load_locations',
+                       function ( $locations, $template, $args, $template_path ) {
+                               if ( 'translation-row-editor-meta' === $template ) {
+                                       array_unshift( $locations, dirname( __FILE__, 2 ) . '/templates/gp-templates-overrides/' );
+                               }
+
+                               return $locations;
+                       },
+                       60,
+                       4
+               );
+       }
+}
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: sites/trunk/wordpress.org/public_html/wp-content/plugins/gp-translation-helpers/includes/class-gp-sidebar.php
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="sitestrunkwordpressorgpublic_htmlwpcontentpluginsgptranslationhelpersincludesclassgptranslationhelpersphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/plugins/gp-translation-helpers/includes/class-gp-translation-helpers.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/plugins/gp-translation-helpers/includes/class-gp-translation-helpers.php 2023-02-20 01:21:36 UTC (rev 12404)
+++ sites/trunk/wordpress.org/public_html/wp-content/plugins/gp-translation-helpers/includes/class-gp-translation-helpers.php   2023-02-20 14:50:11 UTC (rev 12405)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -75,6 +75,14 @@
</span><span class="cx" style="display: block; padding: 0 10px">                );
</span><span class="cx" style="display: block; padding: 0 10px">                gp_enqueue_style( 'gp-discussion-css' );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                wp_register_style(  // todo: these CSS should be integrated in GlotPress.
+                       'gp-translation-helpers-editor',
+                       plugins_url( 'css/editor.css', __DIR__ ),
+                       array(),
+                       filemtime( plugin_dir_path( __DIR__ ) . 'css/editor.css' )
+               );
+               gp_enqueue_style( 'gp-translation-helpers-editor' );
+
</ins><span class="cx" style="display: block; padding: 0 10px">                 add_filter( 'gp_translation_row_template_more_links', array( $this, 'translation_row_template_more_links' ), 10, 5 );
</span><span class="cx" style="display: block; padding: 0 10px">                add_filter( 'preprocess_comment', array( $this, 'preprocess_comment' ) );
</span><span class="cx" style="display: block; padding: 0 10px">                add_filter(
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -370,7 +378,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @since 0.0.2
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         *  @param string $template Template of the current page.
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-         *  @param string $translation_set Current translation set
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+  *  @param array  $translation_set Current translation set.
</ins><span class="cx" style="display: block; padding: 0 10px">          *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return void
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -395,9 +403,37 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                'url'             => admin_url( 'admin-ajax.php' ),
</span><span class="cx" style="display: block; padding: 0 10px">                                'nonce'           => wp_create_nonce( 'gp_comment_feedback' ),
</span><span class="cx" style="display: block; padding: 0 10px">                                'locale_slug'     => $translation_set['locale_slug'],
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                'comment_reasons' => Helper_Translation_Discussion::get_comment_reasons(),
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         'comment_reasons' => Helper_Translation_Discussion::get_comment_reasons( $translation_set['locale_slug'] ),
</ins><span class="cx" style="display: block; padding: 0 10px">                         )
</span><span class="cx" style="display: block; padding: 0 10px">                );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
+               wp_register_script(
+                       'gp-translation-helpers-editor',
+                       plugins_url( 'js/editor.js', __DIR__ ),
+                       array( 'gp-editor' ),
+                       filemtime( plugin_dir_path( __DIR__ ) . 'js/editor.js' ),
+                       true
+               );
+               gp_enqueue_scripts( array( 'gp-translation-helpers-editor' ) );
+
+               wp_localize_script(
+                       'gp-translation-helpers-editor',
+                       '$gp_translation_helpers_editor',
+                       array(
+                               'translation_helper_url' => gp_url_project( $translation_set['project']->path, gp_url_join( $translation_set['locale_slug'], $translation_set['translation_set']->slug, '-get-translation-helpers' ) ),
+                               'reply_text'             => esc_attr__( 'Reply' ),
+                               'cancel_reply_text'      => esc_html__( 'Cancel reply' ),
+                       )
+               );
+               wp_localize_script(
+                       'gp-translation-helpers-editor',
+                       'wpApiSettings',
+                       array(
+                               'root'           => esc_url_raw( rest_url() ),
+                               'nonce'          => wp_create_nonce( 'wp_rest' ),
+                               'admin_ajax_url' => admin_url( 'admin-ajax.php' ),
+                       )
+               );
</ins><span class="cx" style="display: block; padding: 0 10px">         }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        /**
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -412,7 +448,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                $helper_discussion    = new Helper_Translation_Discussion();
</span><span class="cx" style="display: block; padding: 0 10px">                $locale_slug          = $helper_discussion->sanitize_comment_locale( sanitize_text_field( $_POST['data']['locale_slug'] ) );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                $translation_status   = $helper_discussion->sanitize_translation_status( sanitize_text_field( $_POST['data']['translation_status'] ) );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         $translation_status   = ! empty( $_POST['data']['translation_status'] ) ? array_map( array( $helper_discussion, 'sanitize_translation_status' ), $_POST['data']['translation_status'] ) : null;
</ins><span class="cx" style="display: block; padding: 0 10px">                 $translation_id_array = ! empty( $_POST['data']['translation_id'] ) ? array_map( array( $helper_discussion, 'sanitize_translation_id' ), $_POST['data']['translation_id'] ) : null;
</span><span class="cx" style="display: block; padding: 0 10px">                $original_id_array    = ! empty( $_POST['data']['original_id'] ) ? array_map( array( $helper_discussion, 'sanitize_original_id' ), $_POST['data']['original_id'] ) : null;
</span><span class="cx" style="display: block; padding: 0 10px">                $comment_reason       = ! empty( $_POST['data']['reason'] ) ? $_POST['data']['reason'] : array( 'other' );
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -450,8 +486,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        $comment = get_comment_link( $first_comment_id );
</span><span class="cx" style="display: block; padding: 0 10px">                        foreach ( $original_id_array as $index => $single_original_id ) {
</span><span class="cx" style="display: block; padding: 0 10px">                                $comment_id = $this->insert_comment( $comment, $single_original_id, $comment_reason, $translation_id_array[ $index ], $locale_slug, $_SERVER, $translation_status );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                $comment    = get_comment( $comment_id );
-                               GP_Notifications::add_related_comment( $comment );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         $_comment   = get_comment( $comment_id );
+                               GP_Notifications::add_related_comment( $_comment );
</ins><span class="cx" style="display: block; padding: 0 10px">                         }
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -460,7 +496,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        GP_Notifications::init( $comment, null, null );
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                wp_send_json_success();
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         wp_send_json_success( 'success' );
</ins><span class="cx" style="display: block; padding: 0 10px">         }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        /**
</span></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentpluginsgptranslationhelpersincludesclasswporgcustomizationsphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/plugins/gp-translation-helpers/includes/class-wporg-customizations.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/plugins/gp-translation-helpers/includes/class-wporg-customizations.php   2023-02-20 01:21:36 UTC (rev 12404)
+++ sites/trunk/wordpress.org/public_html/wp-content/plugins/gp-translation-helpers/includes/class-wporg-customizations.php     2023-02-20 14:50:11 UTC (rev 12405)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -44,6 +44,15 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                2
</span><span class="cx" style="display: block; padding: 0 10px">                        );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        add_filter(
+                               'gp_custom_reasons',
+                               function ( $default_reasons, $locale ) {
+                                       return array_merge( $default_reasons, GP_Custom_Locale_Reasons::get_custom_reasons( $locale ) );
+                               },
+                               10,
+                               2
+                       );
+
</ins><span class="cx" style="display: block; padding: 0 10px">                         add_filter( 'jetpack_mentions_should_load_ui', '__return_true' );
</span><span class="cx" style="display: block; padding: 0 10px">                        add_filter(
</span><span class="cx" style="display: block; padding: 0 10px">                                'jetpack_mentions_allowed_post_types',
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -53,6 +62,25 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span><span class="cx" style="display: block; padding: 0 10px">                        );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        add_filter(
+                               'gp_validators_involved',
+                               function ( $gtes_involved, $locale_slug, $original_id, $comment_authors ) {
+                                       $gte_emails   = WPorg_GlotPress_Notifications::get_gte_email_addresses( $locale_slug );
+                                       $pte_emails   = WPorg_GlotPress_Notifications::get_pte_email_addresses_by_project_and_locale( $original_id, $locale_slug );
+                                       $clpte_emails = WPorg_GlotPress_Notifications::get_clpte_email_addresses_by_project( $original_id );
+                                       return array_intersect( array_merge( $gte_emails, $pte_emails, $clpte_emails ), $comment_authors );
+
+                               },
+                               10,
+                               4
+                       );
+
+                       add_filter(
+                               'gp_involved_table_heading',
+                               function () {
+                                       return __( 'GTEs/PTEs/CLPTEs Involved' );
+                               }
+                       );
</ins><span class="cx" style="display: block; padding: 0 10px">                 }
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentpluginsgptranslationhelpersjseditorjs"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.org/public_html/wp-content/plugins/gp-translation-helpers/js/editor.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/plugins/gp-translation-helpers/js/editor.js                              (rev 0)
+++ sites/trunk/wordpress.org/public_html/wp-content/plugins/gp-translation-helpers/js/editor.js        2023-02-20 14:50:11 UTC (rev 12405)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,217 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/* global $gp, $gp_translation_helpers_editor, wpApiSettings  */
+/* eslint camelcase: "off" */
+jQuery( function( $ ) {
+       // When a user clicks on a sidebar tab, the visible tab and div changes.
+       $gp.editor.table.on( 'click', '.sidebar-tabs li', function() {
+               var tab = $( this );
+               var tabId = tab.attr( 'data-tab' );
+               var divId = tabId.replace( 'tab', 'div' );
+               var originalId = tabId.replace( /[^\d-]/g, '' ).replace( /^-+/g, '' );
+               change_visible_tab( tab );
+               change_visible_div( divId, originalId );
+       } );
+
+       // When a new translation row is opened (with double click), the tabs
+       // (header tab and content) for this row are updated with the Ajax query.
+       $gp.editor.table.on( 'dblclick', 'tr.preview td', function() {
+               loadTabsAndDivs( $( this ) );
+       } );
+
+       // When a new translation row is opened (clicking in the "Details" button), the
+       // tabs (header tab and content) for this row are updated with the Ajax query.
+       $gp.editor.table.on( 'click', '.action.edit', function( ) {
+               loadTabsAndDivs( $( this ) );
+       } );
+
+       // Shows/hides the reply form for a comment in the discussion.
+       $gp.editor.table.on( 'click', 'a.comment-reply-link', function( event ) {
+               var commentId = $( this ).attr( 'data-commentid' );
+               event.preventDefault();
+               $( '#comment-reply-' + commentId ).toggle().find( 'textarea' ).focus();
+               if ( $gp_translation_helpers_editor.reply_text === $( this ).text() ) {
+                       $( this ).text( $gp_translation_helpers_editor.cancel_reply_text );
+               } else {
+                       $( this ).text( $gp_translation_helpers_editor.reply_text );
+               }
+               return false;
+       } );
+
+       // Creates a shadow post, with a format like "gth_original9753" (the number changes)
+       // to avoid creating empty posts (without comments).
+       function createShadowPost( formdata, submitComment ) {
+               var data = {
+                       action: 'create_shadow_post',
+                       data: formdata,
+                       _ajax_nonce: wpApiSettings.nonce,
+               };
+
+               $.ajax(
+                       {
+                               type: 'POST',
+                               url: wpApiSettings.admin_ajax_url,
+                               data: data,
+                       }
+               ).done(
+                       function( response ) {
+                               formdata.post = response.data;
+                               submitComment( formdata );
+                       }
+               );
+       }
+
+       // Sends the new comment or the reply to an existing comment.
+       $gp.editor.table.on( 'submit', '.meta.discussion .comment-form', function( e ) {
+               var $commentform = $( e.target );
+               var postId = $commentform.attr( 'id' ).split( '-' )[ 1 ];
+               var divDiscussion = $commentform.closest( '.meta.discussion' );
+               var rowId = divDiscussion.attr( 'data-row-id' );
+               var requestUrl = $gp_translation_helpers_editor.translation_helper_url + rowId + '?nohc';
+
+               var submitComment = function( formdata ) {
+                       $.ajax( {
+                               url: wpApiSettings.root + 'wp/v2/comments',
+                               method: 'POST',
+                               beforeSend: function( xhr ) {
+                                       xhr.setRequestHeader( 'X-WP-Nonce', wpApiSettings.nonce );
+                               },
+                               data: formdata,
+                       } ).done( function( response ) {
+                               if ( 'undefined' !== typeof ( response.data ) ) {
+                                       // There's probably a better way, but response.data is only set for errors.
+                                       // TODO: error handling.
+                               } else {
+                                       $commentform.find( 'textarea[name=comment]' ).val( '' );
+                                       $.getJSON( requestUrl, function( data ) {
+                                               $( '[data-tab="sidebar-tab-discussion-' + rowId + '"]' ).html( 'Discussion&nbsp;(' + data[ 'helper-translation-discussion-' + rowId ].count + ')' );
+                                               $( '#sidebar-div-discussion-' + rowId ).html( data[ 'helper-translation-discussion-' + rowId ].content );
+                                       } );
+                               }
+                       } );
+               };
+
+               var formdata = {
+                       content: $commentform.find( 'textarea[name=comment]' ).val(),
+                       parent: $commentform.find( 'input[name=comment_parent]' ).val(),
+                       post: postId,
+                       meta: {
+                               translation_id: $commentform.find( 'input[name=translation_id]' ).val(),
+                               locale: $commentform.find( 'input[name=comment_locale]' ).val(),
+                               comment_topic: $commentform.find( 'select[name=comment_topic]' ).val(),
+                       },
+               };
+               e.preventDefault();
+               e.stopImmediatePropagation();
+
+               $( 'input.submit' ).prop( 'disabled', true );
+
+               if ( ! formdata.meta.translation_id ) {
+                       formdata.meta.translation_id = 0;
+               }
+
+               if ( formdata.meta.locale ) {
+                       /**
+                        * Set the locale to an empty string if option selected has value 'typo' or 'context'
+                        * to force comment to be posted to the English discussion page
+                        */
+                       if ( formdata.meta.comment_topic === 'typo' || formdata.meta.comment_topic === 'context' ) {
+                               formdata.meta.locale = '';
+                       }
+               }
+
+               if ( isNaN( Number( postId ) ) ) {
+                       createShadowPost( formdata, submitComment );
+               } else {
+                       submitComment( formdata );
+               }
+
+               return false;
+       } );
+
+       // Copies the translation from another language to the current translation.
+       $gp.editor.table.on( 'click', 'button.sidebar-other-locales', function() {
+               var textToCopy = $( this ).closest( 'li' ).find( 'a' ).text();
+               var textareaToPaste = $( this ).closest( '.editor' ).find( 'textarea.foreign-text' );
+               var selectionStart = textareaToPaste.get( 0 ).selectionStart;
+               var selectionEnd = textareaToPaste.get( 0 ).selectionEnd;
+               var textToCopyLength = textToCopy.length;
+               textareaToPaste.val( textareaToPaste.val().substring( 0, selectionStart ) +
+                       textToCopy +
+                       textareaToPaste.val().substring( selectionEnd, textareaToPaste.val().length ) );
+               selectionStart += textToCopyLength;
+               selectionEnd += textToCopyLength;
+               if ( selectionEnd > textareaToPaste.val().length ) {
+                       selectionEnd = textareaToPaste.val().length;
+               }
+               textareaToPaste.get( 0 ).setSelectionRange( selectionStart, selectionEnd );
+       } );
+
+       // Fires the double click event in the first row of the table if we only
+       // have a row, because GlotPress opens the first editor if the current
+       // table has only one, so with the double click we load the content sidebar.
+       // eslint-disable-next-line vars-on-top
+       var previewRows = $gp.editor.table.find( 'tr.preview' );
+       if ( 1 === previewRows.length ) {
+               $( 'tr.preview td' ).trigger( 'dblclick' );
+       }
+
+       /**
+        * Hides all tabs and show one of them, the last clicked.
+        *
+        * @param {Object} tab The selected tab.
+        */
+       function change_visible_tab( tab ) {
+               var tabId = tab.attr( 'data-tab' );
+               tab.siblings().removeClass( 'current' );
+               tab.parents( '.sidebar-tabs ' ).find( '.helper' ).removeClass( 'current' );
+               tab.addClass( 'current' );
+
+               $( '#' + tabId ).addClass( 'current' );
+       }
+
+       /**
+        * Hides all divs and show one of them, the last clicked.
+        *
+        * @param {string} tabId      The select tab id.
+        * @param {number} originalId The id of the original string to translate.
+        */
+       function change_visible_div( tabId, originalId ) {
+               $( '#sidebar-div-meta-' + originalId ).hide();
+               $( '#sidebar-div-discussion-' + originalId ).hide();
+               $( '#sidebar-div-history-' + originalId ).hide();
+               $( '#sidebar-div-other-locales-' + originalId ).hide();
+               $( '#' + tabId ).show();
+       }
+
+       /**
+        * Adds a button to each translation from another locales.
+        *
+        * @param {string} sidebarDiv The div where we add the buttons.
+        */
+       function add_copy_button( sidebarDiv ) {
+               var lis = $( sidebarDiv + ' .other-locales li' );
+               lis.each( function() {
+                       var html = $( this ).html();
+                       html += '<button class="sidebar-other-locales button is-small copy-suggestion"> Copy </button>';
+                       $( this ).html( html );
+               } );
+       }
+
+       /**
+        * Load the content in the tabs (header tab and content) for the opened row.
+        *
+        * @param {Object} element The element that triggers the action.
+        */
+       function loadTabsAndDivs( element ) {
+               var originalId = element.closest( 'tr' ).attr( 'id' ).substring( 8 );
+               var requestUrl = $gp_translation_helpers_editor.translation_helper_url + originalId + '?nohc';
+               $.getJSON( requestUrl, function( data ) {
+                       $( '[data-tab="sidebar-tab-discussion-' + originalId + '"]' ).html( 'Discussion&nbsp;(' + data[ 'helper-translation-discussion-' + originalId ].count + ')' );
+                       $( '#sidebar-div-discussion-' + originalId ).html( data[ 'helper-translation-discussion-' + originalId ].content );
+                       $( '[data-tab="sidebar-tab-history-' + originalId + '"]' ).html( 'History&nbsp;(' + data[ 'helper-history-' + originalId ].count + ')' );
+                       $( '#sidebar-div-history-' + originalId ).html( data[ 'helper-history-' + originalId ].content );
+                       $( '[data-tab="sidebar-tab-other-locales-' + originalId + '"]' ).html( 'Other&nbsp;locales&nbsp;(' + data[ 'helper-other-locales-' + originalId ].count + ')' );
+                       $( '#sidebar-div-other-locales-' + originalId ).html( data[ 'helper-other-locales-' + originalId ].content );
+                       add_copy_button( '#sidebar-div-other-locales-' + originalId );
+               } );
+       }
+} );
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentpluginsgptranslationhelpersjsrejectfeedbackjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/plugins/gp-translation-helpers/js/reject-feedback.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/plugins/gp-translation-helpers/js/reject-feedback.js     2023-02-20 01:21:36 UTC (rev 12404)
+++ sites/trunk/wordpress.org/public_html/wp-content/plugins/gp-translation-helpers/js/reject-feedback.js       2023-02-20 14:50:11 UTC (rev 12405)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -5,6 +5,9 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        var rowIds = [];
</span><span class="cx" style="display: block; padding: 0 10px">                        var translationIds = [];
</span><span class="cx" style="display: block; padding: 0 10px">                        var originalIds = [];
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        var bulkTranslationStatus = [];
+                       var translationStatuses = {};
+                       var statusIndex = 0;
</ins><span class="cx" style="display: block; padding: 0 10px">                         var modalFeedbackForm =
</span><span class="cx" style="display: block; padding: 0 10px">                        '<div id="reject-feedback-form" style="display:none;">' +
</span><span class="cx" style="display: block; padding: 0 10px">                        '<form>' +
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -29,7 +32,11 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                        rowIds = $( 'input:checked', $( 'table#translations th.checkbox' ) ).map(
</span><span class="cx" style="display: block; padding: 0 10px">                                                function() {
</span><span class="cx" style="display: block; padding: 0 10px">                                                        var selectedRow = $( this ).parents( 'tr.preview' );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                                        var translationStatus = '';
+
</ins><span class="cx" style="display: block; padding: 0 10px">                                                         if ( ! selectedRow.hasClass( 'untranslated' ) ) {
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                                                translationStatus = selectedRow.attr( 'class' ).split( ' ' )[ 1 ].substring( 7 );
+                                                               bulkTranslationStatus.push( translationStatus );
</ins><span class="cx" style="display: block; padding: 0 10px">                                                                 return selectedRow.attr( 'row' );
</span><span class="cx" style="display: block; padding: 0 10px">                                                        }
</span><span class="cx" style="display: block; padding: 0 10px">                                                        $( this ).prop( 'checked', false );
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -45,7 +52,9 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                                        if ( originalId && translationId ) {
</span><span class="cx" style="display: block; padding: 0 10px">                                                                originalIds.push( originalId );
</span><span class="cx" style="display: block; padding: 0 10px">                                                                translationIds.push( translationId );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                                                translationStatuses[ translationId ] = bulkTranslationStatus[ statusIndex ];
</ins><span class="cx" style="display: block; padding: 0 10px">                                                         }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                                        statusIndex++;
</ins><span class="cx" style="display: block; padding: 0 10px">                                                 }
</span><span class="cx" style="display: block; padding: 0 10px">                                        );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -104,6 +113,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                        commentData.original_id = originalIds;
</span><span class="cx" style="display: block; padding: 0 10px">                                        commentData.translation_id = translationIds;
</span><span class="cx" style="display: block; padding: 0 10px">                                        commentData.is_bulk_reject = true;
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                        commentData.translation_status = translationStatuses;
+
</ins><span class="cx" style="display: block; padding: 0 10px">                                         commentWithFeedback( commentData, false, 'rejected' );
</span><span class="cx" style="display: block; padding: 0 10px">                                        e.preventDefault();
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -282,7 +293,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                feedbackData.comment = comment;
</span><span class="cx" style="display: block; padding: 0 10px">                feedbackData.original_id = [ $gp.editor.current.original_id ];
</span><span class="cx" style="display: block; padding: 0 10px">                feedbackData.translation_id = [ $gp.editor.current.translation_id ];
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                feedbackData.translation_status = status;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         feedbackData.translation_status = [ status ];
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                commentWithFeedback( feedbackData, button, status );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentpluginsgptranslationhelperstemplatesdiscussionsdashboardphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/plugins/gp-translation-helpers/templates/discussions-dashboard.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/plugins/gp-translation-helpers/templates/discussions-dashboard.php       2023-02-20 01:21:36 UTC (rev 12404)
+++ sites/trunk/wordpress.org/public_html/wp-content/plugins/gp-translation-helpers/templates/discussions-dashboard.php 2023-02-20 14:50:11 UTC (rev 12405)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -103,6 +103,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                <th>Project</th>
</span><span class="cx" style="display: block; padding: 0 10px">                <th>Author</th>
</span><span class="cx" style="display: block; padding: 0 10px">                <th>Submitted on</th>
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                <th><?php echo esc_html( apply_filters( 'gp_involved_table_heading', __( 'Validators Involved' ) ) ); ?></th>
</ins><span class="cx" style="display: block; padding: 0 10px">         </tr>
</span><span class="cx" style="display: block; padding: 0 10px">        </thead>
</span><span class="cx" style="display: block; padding: 0 10px">        <tbody>
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -119,6 +120,20 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        $project_name   = ( $parent_project ) ? $parent_project->name : $project->name;
</span><span class="cx" style="display: block; padding: 0 10px">                        $project_link   = gp_link_project_get( $project, esc_html( $project_name ) );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        $comment_authors            = array_unique( array_column( $post_comments, 'comment_author_email' ) );
+                       $validator_emails           = GP_Notifications::get_validators_email_addresses( $project->path );
+                       $validators_involved_emails = array_intersect( $validator_emails, $comment_authors );
+
+                       $validators_involved_emails = apply_filters( 'gp_validators_involved', $validators_involved_emails, $locale_slug, $original_id, $comment_authors );
+
+                       $validator_involved_names = array_map(
+                               function( $validator ) {
+                                       $validator_user = get_user_by( 'email', $validator );
+                                       return '<a href="' . esc_url( gp_url_profile( $validator_user->user_nicename ) ) . '">' . esc_html( $validator_user->display_name ) . '</a>';
+                               },
+                               $validators_involved_emails
+                       );
+
</ins><span class="cx" style="display: block; padding: 0 10px">                         $first_comment        = reset( $post_comments );
</span><span class="cx" style="display: block; padding: 0 10px">                        $no_of_other_comments = count( $post_comments ) - 1;
</span><span class="cx" style="display: block; padding: 0 10px">                        $_translation_set     = GP::$translation_set->by_project_id( $project->id );
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -200,6 +215,19 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                <td><?php echo wp_kses( $project_link, array( 'a' => array( 'href' => true ) ) ); ?></td>
</span><span class="cx" style="display: block; padding: 0 10px">                                <td><?php echo get_comment_author_link( $first_comment ); ?></td>
</span><span class="cx" style="display: block; padding: 0 10px">                                <td><?php echo esc_html( $first_comment->comment_date ); ?></td>
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                <td class="gtes-involved">
+                                       <?php
+                                               echo wp_kses(
+                                                       implode( ', ', $validator_involved_names ),
+                                                       array(
+                                                               'a' => array(
+                                                                       'href'  => array(),
+                                                                       'class' => array(),
+                                                               ),
+                                                       )
+                                               );
+                                       ?>
+                       </td>
</ins><span class="cx" style="display: block; padding: 0 10px">                         </tr>
</span><span class="cx" style="display: block; padding: 0 10px">                        <?php
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentpluginsgptranslationhelperstemplatesgptemplatesoverridestranslationroweditormetaphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.org/public_html/wp-content/plugins/gp-translation-helpers/templates/gp-templates-overrides/translation-row-editor-meta.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/plugins/gp-translation-helpers/templates/gp-templates-overrides/translation-row-editor-meta.php                          (rev 0)
+++ sites/trunk/wordpress.org/public_html/wp-content/plugins/gp-translation-helpers/templates/gp-templates-overrides/translation-row-editor-meta.php    2023-02-20 14:50:11 UTC (rev 12405)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,184 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+/**
+ * Template for the meta section of the editor row in a translation set display
+ *
+ * @package    GlotPress
+ * @subpackage Templates
+ */
+
+$more_links = array();
+if ( $translation->translation_status ) {
+       $translation_permalink = gp_url_project_locale(
+               $project,
+               $locale->slug,
+               $translation_set->slug,
+               array(
+                       'filters[status]'         => 'either',
+                       'filters[original_id]'    => $translation->original_id,
+                       'filters[translation_id]' => $translation->id,
+               )
+       );
+
+       $more_links['translation-permalink'] = '<a tabindex="-1" href="' . esc_url( $translation_permalink ) . '">' . __( 'Permalink to this translation', 'glotpress' ) . '</a>';
+} else {
+       $original_permalink = gp_url_project_locale( $project, $locale->slug, $translation_set->slug, array( 'filters[original_id]' => $translation->original_id ) );
+
+       $more_links['original-permalink'] = '<a tabindex="-1" href="' . esc_url( $original_permalink ) . '">' . __( 'Permalink to this original', 'glotpress' ) . '</a>';
+}
+
+$original_history = gp_url_project_locale(
+       $project,
+       $locale->slug,
+       $translation_set->slug,
+       array(
+               'filters[status]'      => 'either',
+               'filters[original_id]' => $translation->original_id,
+               'sort[by]'             => 'translation_date_added',
+               'sort[how]'            => 'asc',
+       )
+);
+
+$more_links['history'] = '<a tabindex="-1" href="' . esc_url( $original_history ) . '">' . __( 'All translations of this original', 'glotpress' ) . '</a>';
+
+/**
+ * Allows to modify the more links in the translation editor.
+ *
+ * @since 2.3.0
+ *
+ * @param array $more_links The links to be output.
+ * @param GP_Project $project Project object.
+ * @param GP_Locale $locale Locale object.
+ * @param GP_Translation_Set $translation_set Translation Set object.
+ * @param GP_Translation $translation Translation object.
+ */
+$more_links = apply_filters( 'gp_translation_row_template_more_links', $more_links, $project, $locale, $translation_set, $translation );
+ob_start();
+// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
+echo '<div class="meta" id="sidebar-div-meta-' . $translation->row_id . '"  data-row-id="' . $translation->row_id . '">';
+?>
+               <h3><?php _e( 'Meta', 'glotpress' ); ?></h3>
+
+               <?php gp_tmpl_load( 'translation-row-editor-meta-status', get_defined_vars() ); ?>
+
+               <?php if ( $translation->context ) : ?>
+                       <dl>
+                               <dt><?php _e( 'Context:', 'glotpress' ); ?></dt>
+                               <dd><?php echo esc_translation( $translation->context ); ?></dd>
+                       </dl>
+               <?php endif; ?>
+               <?php if ( $translation->extracted_comments ) : ?>
+                       <dl>
+                               <dt><?php _e( 'Comment:', 'glotpress' ); ?></dt>
+                               <dd>
+                                       <?php
+                                       /**
+                                        * Filters the extracted comments of an original.
+                                        *
+                                        * @param string         $extracted_comments Extracted comments of an original.
+                                        * @param GP_Translation $translation        Translation object.
+                                        */
+                                       // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
+                                       echo apply_filters( 'gp_original_extracted_comments', $translation->extracted_comments, $translation );
+                                       ?>
+                               </dd>
+                       </dl>
+               <?php endif; ?>
+               <?php if ( $translation->translation_added && '0000-00-00 00:00:00' !== $translation->translation_added ) : ?>
+                       <dl>
+                               <dt><?php _e( 'Date added (GMT):', 'glotpress' ); ?></dt>
+                               <dd id="gmt-date-added-<?php echo esc_attr( $translation->row_id ); ?>"><?php echo esc_html( $translation->translation_added ); ?></dd>
+                       </dl>
+                       <dl>
+                               <dt><?php _e( 'Date added (local):', 'glotpress' ); ?></dt>
+                               <dd id="local-date-added-<?php echo esc_attr( $translation->row_id ); ?>"><?php _e( 'Calculating...', 'glotpress' ); ?></dd>
+                       </dl>
+               <?php endif; ?>
+               <?php if ( $translation->user ) : ?>
+                       <dl>
+                               <dt><?php _e( 'Translated by:', 'glotpress' ); ?></dt>
+                               <dd><?php gp_link_user( $translation->user ); ?></dd>
+                       </dl>
+               <?php endif; ?>
+               <?php if ( $translation->user_last_modified && ( ! $translation->user || $translation->user->ID !== $translation->user_last_modified->ID ) ) : ?>
+                       <dl>
+                               <dt>
+                                       <?php
+                                       if ( 'current' === $translation->translation_status ) {
+                                               _e( 'Approved by:', 'glotpress' );
+                                       } elseif ( 'rejected' === $translation->translation_status ) {
+                                               _e( 'Rejected by:', 'glotpress' );
+                                       } else {
+                                               _e( 'Last updated by:', 'glotpress' );
+                                       }
+                                       ?>
+                               </dt>
+                               <dd><?php gp_link_user( $translation->user_last_modified ); ?></dd>
+                       </dl>
+               <?php endif; ?>
+               <?php references( $project, $translation ); ?>
+
+               <dl>
+                       <dt><?php _e( 'Priority:', 'glotpress' ); ?></dt>
+                       <?php if ( $can_write ) : ?>
+                               <dd>
+                                       <?php
+                                       echo gp_select(
+                                               'priority-' . $translation->original_id,
+                                               GP::$original->get_static( 'priorities' ),
+                                               $translation->priority,
+                                               array(
+                                                       'class'      => 'priority',
+                                                       'tabindex'   => '-1',
+                                                       'data-nonce' => wp_create_nonce( 'set-priority_' . $translation->original_id ),
+                                               )
+                                       );
+                                       ?>
+                               </dd>
+                       <?php else : ?>
+                               <dd>
+                                       <?php
+                                       echo esc_html(
+                                               gp_array_get(
+                                                       GP::$original->get_static( 'priorities' ),
+                                                       $translation->priority,
+                                                       _x( 'Unknown', 'priority', 'glotpress' )
+                                               )
+                                       );
+                                       ?>
+                               </dd>
+                       <?php endif; ?>
+               </dl>
+
+               <dl>
+                       <dt><?php _e( 'More links:', 'glotpress' ); ?>
+                               <ul>
+                                       <?php foreach ( $more_links as $more_link ) : ?>
+                                               <li>
+                                                       <?php
+                                                       // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
+                                                       echo $more_link;
+                                                       ?>
+                                               </li>
+                                       <?php endforeach; ?>
+                               </ul>
+                       </dt>
+               </dl>
+       </div>
+<?php
+$meta_sidebar = ob_get_clean();
+
+$sidebar_tabs  = '<nav class="nav-sidebar">';
+$sidebar_tabs .= '<ul class="sidebar-tabs">';
+$sidebar_tabs .= '     <li class="current tab-meta" data-tab="sidebar-tab-meta-' . $translation->row_id . '" data-row-id="' . $translation->row_id . '">Meta</li>';
+$sidebar_tabs .= '     <li class="tab-discussion" data-tab="sidebar-tab-discussion-' . $translation->row_id . '" data-row-id="' . $translation->row_id . '">Discussion&nbsp;<span class="count"></span></li>';
+$sidebar_tabs .= '     <li class="tab-history" data-tab="sidebar-tab-history-' . $translation->row_id . '" data-row-id="' . $translation->row_id . '">History&nbsp;<span class="count"></span></li>';
+$sidebar_tabs .= '     <li class="tab-other-locales" data-tab="sidebar-tab-other-locales-' . $translation->row_id . '" data-row-id="' . $translation->row_id . '">Other&nbsp;locales&nbsp;<span class="count"></span></li>';
+$sidebar_tabs .= '</ul>';
+$sidebar_tabs .= $meta_sidebar;
+$sidebar_tabs .= '<div class="meta discussion" id="sidebar-div-discussion-' . $translation->row_id . '"  data-row-id="' . $translation->row_id . '" style="display: none;"></div>';
+$sidebar_tabs .= '<div class="meta history" id="sidebar-div-history-' . $translation->row_id . '"  data-row-id="' . $translation->row_id . '" style="display: none;"></div>';
+$sidebar_tabs .= '<div class="meta other-locales" id="sidebar-div-other-locales-' . $translation->row_id . '"  data-row-id="' . $translation->row_id . '" style="display: none;"></div>';
+$sidebar_tabs .= '</nav>';
+
+// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
+echo $sidebar_tabs;
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: sites/trunk/wordpress.org/public_html/wp-content/plugins/gp-translation-helpers/templates/gp-templates-overrides/translation-row-editor-meta.php
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="sitestrunkwordpressorgpublic_htmlwpcontentpluginsgptranslationhelperstemplatestranslationroweditormetafeedbackphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/plugins/gp-translation-helpers/templates/translation-row-editor-meta-feedback.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/plugins/gp-translation-helpers/templates/translation-row-editor-meta-feedback.php        2023-02-20 01:21:36 UTC (rev 12404)
+++ sites/trunk/wordpress.org/public_html/wp-content/plugins/gp-translation-helpers/templates/translation-row-editor-meta-feedback.php  2023-02-20 14:50:11 UTC (rev 12405)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -8,7 +8,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        <h3 class="feedback-reason-title"><?php esc_html_e( 'Type (Optional)', 'glotpress' ); ?></h3>
</span><span class="cx" style="display: block; padding: 0 10px">                        <ul class="feedback-reason-list">
</span><span class="cx" style="display: block; padding: 0 10px">                        <?php
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                $comment_reasons = Helper_Translation_Discussion::get_comment_reasons();
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         $comment_reasons = Helper_Translation_Discussion::get_comment_reasons( $locale_slug );
</ins><span class="cx" style="display: block; padding: 0 10px">                         foreach ( $comment_reasons as $key => $reason ) :
</span><span class="cx" style="display: block; padding: 0 10px">                                ?>
</span><span class="cx" style="display: block; padding: 0 10px">                                        <li>
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -17,9 +17,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                <?php endforeach; ?>
</span><span class="cx" style="display: block; padding: 0 10px">                        </ul>
</span><span class="cx" style="display: block; padding: 0 10px">                        <div class="feedback-comment">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                <label><?php esc_html_e( 'Comment (Optional)', 'glotpress' ); ?>
-                                       <textarea name="feedback_comment"></textarea>
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         <label for="feedback_comment"><?php esc_html_e( 'Comment (Optional)', 'glotpress' ); ?>
</ins><span class="cx" style="display: block; padding: 0 10px">                                 </label>
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                <textarea name="feedback_comment"></textarea>
+
</ins><span class="cx" style="display: block; padding: 0 10px">                                 <label class="note">Please note that all feedback is visible to the public.</label>
</span><span class="cx" style="display: block; padding: 0 10px">                        </div>
</span><span class="cx" style="display: block; padding: 0 10px">                </form>
</span></span></pre>
</div>
</div>

</body>
</html>