#26 EPEL should enforce erratum title length
Closed: Unable to Fix by tdawson. Opened by stbenjam.

There are errata in both EPEL6 and EPEL6 that have very long erratum titles (basically the entire package list). This causes issues with Katello (www.katello.org), as we only alot 255 varchar to the title:

{{{
PGError: ERROR: value too long for type character varying(255) : UPDATE "katello_errata" SET "title" = 'trytond-account-1.8.0-3.el6,trytond-account-be-1.8.0-3.el6,trytond-account-de-skr03-1.8.0-3.el6,trytond-account-invoice-1.8.0-3.el6,trytond-account-invoice-history-1.8.0-3.el6,trytond-account-invoice-line-standalone-1.8.0-3.el6,trytond-account-product-1.8.0-3.el6,trytond-account-statement-1.8.0-3.el6,trytond-analytic-account-1.8.0-3.el6
}}}

Pulp also encounters similar issues for some errata, where the name is too long for Mongo:

{{{
Dec 17 12:03:14 satellite pulp: nectar.downloaders.threaded:ERROR: Download of http://dl.fedoraproject.org/pub/epel/6Server/x86_64/treeinfo failed with code 404: Not Found
Dec 17 12:03:15 satellite pulp: pulp.plugins.conduits.mixins:ERROR: Content unit association failed [Unit [key={'id': 'FEDORA-EPEL-2014-3700'}] [type=erratum] [id=None]]
}}}


Can't you simply use the FEDORA-EPEL-YYYY-NNNN ?

ie:

https://admin.fedoraproject.org/updates/FEDORA-EPEL-2011-0250

In any case, wouldn't this be better to discuss with bodhi upstream rather than ask epel to change anything?

Thanks for the quick reply!

Both pulp and katello store the entire erratum, so we do have FEDORA-EPEL-YYYY-NNNN as well.

In both projects, we still have to allocate a database column for the title, the description is a blob/text, not sure the title should be. It seems reasonable to expect the title to be, well, some typical title size.

Looking through the updateinfo.xml for EPEL6 and 7, there's a number of these.

Do you have any suggestions about how we can get them corrected?

Well, to clarify, I meant that bodhi uses the identifier and the list of updates in there is just for a handy way for qa folks to see whats in the update. As requested by them years ago when we setup this method.

​https://admin.fedoraproject.org/updates/FEDORA-EPEL-2011-0250/anything-you-want-to-type

will still get the same update.

So, you could make the title the FEDORA-EPEL-YYYY-NNN always?

as for "corrected" note that EPEL and Fedora use the same instance of bodhi. ANY change to titles and behaviors needs to get run by Fedora QA and Bodhi upstream developers. You are proposing we truncate them at 255 chars?

Not sure I understand your suggestion to use the erratum ID - we already store this, but we're not going to drop the title in favor of display the ID to users. We need a useful title, it's displayed in Katello and Pulp UI/CLI, email reports, etc.

For Red Hat itself, we don't find they've ever issued an errata with a title longer than 255, so I think it would make sense to set some kind of standard for the length upstream.

In the interim is there any way for us to get the existing errata in updateinfo.xml to have the right length - would it take issuing updates for each erratum in Bodhi?

The issue is that it is coming across that you are asking is that Fedora and EPEL change how they have been doing titles for 8->10 years because you have a 255 character limit. So while RHEL fits into that, its upstream does not and has not. Getting it changed will be a lot more yak shaving and politics than using a quick fix.

A quick fix could be to have if the title is larger than 255 characters to use the shorter erratum ID, a longer fix would be to change the title from 255 to something larger. A third fix would be to recommend not using Katello for Fedora or EPEL.

I think it's useful to have the long descriptive strings in Bodhi, personally. It's nice to glance at the links (in Bugzilla or wherever) and know what packages are in that update.

Can Katello truncate the string value at 255 characters before inserting it into postgres? (Or alternatively, use a larger database field?)

Sorry, that is totally backwards. A list of dozens of packages isn't a "title" - a title should be a short description to know why I would want to apply an erratum - e.g. "openssl updates to fix heartbleed", not a package list, which already belongs in !

{{{
The issue is that it is coming across that you are asking is
that Fedora and EPEL change how they have been doing titles
for 8->10 years because you have a 255 character limit. So
while RHEL fits into that, its upstream does not and has not.
Getting it changed will be a lot more yak shaving and politics
than using a quick fix.
}}}

No, I'm asking EPEL and Fedora to change how they do things to make sense. I have no problem making sure we handle long titles in Katello in a sensible way instead of failing, and we will do that. I have no control over Pulp, and I hope they do the same. But I don't see how you think it's valid for EPEL and Fedora to abuse title to display something that's not particularly useful to users, and a duplication of data that's already in an erratum.

Really I know I don't have a leg to stand on - there's no defined schema for updatainfo.xml that I know of, so if you want to make the titles the complete works of Shakespeare, you're not breaking any rules.

That doesn't mean it's not ridiculous.

Does the Fedora policy change process also apply to EPEL (http://fedoraproject.org/wiki/Changes/Policy)?

I can file a change request there, if you think that anyone would consider it useful.

It would be that either Bodhi require helpful (and limited length) titles for errata, or truncate the existing package list (even if that's only in the yum metadata title) to a length that anybody working with it can rely on.

stbenjam, yes it is a trickle down effect. Most of our updates, changes etc roll out of Fedora so if they change how they do things, then EPEL will get those changes. If they don't change then we won't see any change.

It might also help to have the communication in long form with exactly what you are seeing and using in case people are talking past each other on terms. EG you are using a field which we call title that you expect to be used for a short thing but we use a field called SHORT for that and we have been argueing over semantics versus constructive dialog.

Hi, perhaps I can shed some light from Pulp's perspective. When we sync an errata from a repository (such as epel), we parse all the properties of the errata. To facilitate searching we index the "id", "title", "version", "release", "type", "status", "updated", "issued", "severity", and "references" fields. Since Pulp uses Mongo internally we have a hard limit on index keys of 1024 bytes (http://docs.mongodb.org/manual/reference/limits/).

Most of the time erratum titles are along the lines of "NetworkManager bug fix and enhancement update". This bug was opened because in a few cases we have found the entire package list used for the title, eg. "trytond-account-1.8.0-3.el6,trytond-account-be-1.8.0-3.el6,trytond-account-de-skr03-1.8.0-3.el6,trytond-account-invoice-1.8.0-3.el6,trytond-account-invoice-history-1.8.0-3.el6,trytond-account-invoice-line-standalone-1.8.0-3.el6,trytond-account-product-1.8.0-3.el6,trytond-account-statement-1.8.0-3.el6,trytond-analytic-account-1.8.0-3.el6,...

As smooge said, this could ban an issue with a misunderstanding of terminology. What is the intended purpose of the element within a given <update>?</p></span> </div> </section> </div> <div class="card-footer bg-transparent d-flex align-items-center border-0 p-0"> <div class="issue_reactions ml-auto" data-comment-id="50920"> <div class="btn-group"> </div> </div> </div> </div> <div class="card mb-4 clearfix"> <div id="comment-50915" class="card-header bg-light d-flex align-items-center px-3 py-2"> <div> <span class="font-weight-bold" title="">stbenjam</span> <a class="notblue" title="Permalink to this headline" href="#comment-50915"> <span title="2015-01-03 06:19:42 UTC">commented <time class="relative-date" datetime="2015-01-03T06:19:42Z" title="2015-01-03T06:19:42Z" data-toggle="tooltip">Jan 3, 2015</time></span> </a> </div> <div class="issue_actions ml-auto"> <div class="issue_action icon"> <div class="btn-group" role="group" aria-label="Basic example"> </div> </div> </div> </div> <div class="card-body pb-1"> <section class="issue_comment"> <div> <span class="edit_date" title=""> </span> <span class="comment_text comment_body"><p>Bodhi's way of working is entirely targeted towards packages maintainers, <em>every</em> erratum title is just the package list with some additional info on the end (e.g. 'enhancement update'). I didn't realize that at first...</p> <p>Most are just one package though so it generally doesn't cause an issue and looks like the example you gave (NetworkManager bug fix update), but others have dozens and dozens of packages. When Bodhi generates the metadata as part of the repo mashing process, it's just dumping the title used there into the updateinfo.xml title tag. </p> <p>Is Pulp going to truncate the title now, or are you wanting this to get changed on the Fedora side?</p> <p>For Fedora to use descriptive short titles in Bodhi is going to be a big change, and a political one. Although, Bodhi could truncate the package list in the XML during the mashing process probably without any ill effects (does anyone else consume the data?)...<br> https://git.fedorahosted.org/cgit/bodhi.git/tree/bodhi/metadata.py#n251</p> <p>It would be nice if yum-security specified a schema so that we could definitively point to it and say <title> must be < 256 characters...</p></span> </div> </section> </div> <div class="card-footer bg-transparent d-flex align-items-center border-0 p-0"> <div class="issue_reactions ml-auto" data-comment-id="50915"> <div class="btn-group"> </div> </div> </div> </div> <div class="card mb-4 clearfix"> <div id="comment-50918" class="card-header bg-light d-flex align-items-center px-3 py-2"> <div> <span class="font-weight-bold" title="">jcpunk</span> <a class="notblue" title="Permalink to this headline" href="#comment-50918"> <span title="2015-01-05 21:53:57 UTC">commented <time class="relative-date" datetime="2015-01-05T21:53:57Z" title="2015-01-05T21:53:57Z" data-toggle="tooltip">Jan 5, 2015</time></span> </a> </div> <div class="issue_actions ml-auto"> <div class="issue_action icon"> <div class="btn-group" role="group" aria-label="Basic example"> </div> </div> </div> </div> <div class="card-body pb-1"> <section class="issue_comment"> <div> <span class="edit_date" title=""> </span> <span class="comment_text comment_body"><p>I'll confess I too would love a valid schema for yum-security.</p> <p>I've reverse engineered(1) things I've seen in the wild, but a specific schema from the plugin would be very helpful.</p> <p>(1) https://cdcvs.fnal.gov/redmine/projects/python-updateinfo/repository/revisions/master/entry/docs/updateinfo.xsd</p></span> </div> </section> </div> <div class="card-footer bg-transparent d-flex align-items-center border-0 p-0"> <div class="issue_reactions ml-auto" data-comment-id="50918"> <div class="btn-group"> </div> </div> </div> </div> <div class="card mb-4 clearfix"> <div id="comment-50925" class="card-header bg-light d-flex align-items-center px-3 py-2"> <div> <span class="font-weight-bold" title="">stbenjam</span> <a class="notblue" title="Permalink to this headline" href="#comment-50925"> <span title="2015-01-19 21:50:22 UTC">commented <time class="relative-date" datetime="2015-01-19T21:50:22Z" title="2015-01-19T21:50:22Z" data-toggle="tooltip">Jan 19, 2015</time></span> </a> </div> <div class="issue_actions ml-auto"> <div class="issue_action icon"> <div class="btn-group" role="group" aria-label="Basic example"> </div> </div> </div> </div> <div class="card-body pb-1"> <section class="issue_comment"> <div> <span class="edit_date" title=""> </span> <span class="comment_text comment_body"><p>I've made a request to Bodhi: https://fedorahosted.org/bodhi/ticket/771</p> <p>In the end this is really a Bodhi technical issue and/or a Fedora political one, and not limited to EPEL so this issue itself can be closed if you want. </p> <p>Thanks for the feedback...</p></span> </div> </section> </div> <div class="card-footer bg-transparent d-flex align-items-center border-0 p-0"> <div class="issue_reactions ml-auto" data-comment-id="50925"> <div class="btn-group"> </div> </div> </div> </div> <div class="card mb-4 clearfix"> <div id="comment-651241" class="card-header bg-light d-flex align-items-center px-3 py-2"> <div> <span class="font-weight-bold" title="">tdawson</span> <a class="notblue" title="Permalink to this headline" href="#comment-651241"> <span title="2020-05-08 20:56:15 UTC">commented <time class="relative-date" datetime="2020-05-08T20:56:15Z" title="2020-05-08T20:56:15Z" data-toggle="tooltip">May 8, 2020</time></span> </a> </div> <div class="issue_actions ml-auto"> <div class="issue_action icon"> <div class="btn-group" role="group" aria-label="Basic example"> </div> </div> </div> </div> <div class="card-body pb-1"> <section class="issue_comment"> <div> <span class="edit_date" title=""> </span> <span class="comment_text comment_body"><p>Closing issue since this was really a Bodhi technical Issue and/or a Fedora political one.</p></span> </div> </section> </div> <div class="card-footer bg-transparent d-flex align-items-center border-0 p-0"> <div class="issue_reactions ml-auto" data-comment-id="651241"> <div class="btn-group"> </div> </div> </div> </div> <div class="d-flex align-items-center px-3 py-2 mb-3"> <div class=""> </div> <span class="font-size-09 autogenerated-comment pl-4"><p><strong>Metadata Update from @tdawson</strong>:<br> - Issue close_status updated to: Unable to Fix<br> - Issue status updated to: Closed (was: Open)</p></span> <div class="text-muted ml-auto"> <time class="relative-date" datetime="2020-05-08T20:56:15Z" title="2020-05-08T20:56:15Z" data-toggle="tooltip">May 8, 2020</time> </div> </div> <div class="card mb-4 clearfix"> <div id="comment-1004599" class="card-header bg-light d-flex align-items-center px-3 py-2"> <div> <span class="font-weight-bold" title="">dherrera</span> <a class="notblue" title="Permalink to this headline" href="#comment-1004599"> <span title="2026-02-16 16:21:13 UTC">commented <time class="relative-date" datetime="2026-02-16T16:21:13Z" title="2026-02-16T16:21:13Z" data-toggle="tooltip">Feb 16, 2026</time></span> </a> </div> <div class="issue_actions ml-auto"> <div class="issue_action icon"> <div class="btn-group" role="group" aria-label="Basic example"> </div> </div> </div> </div> <div class="card-body pb-1"> <section class="issue_comment"> <div> <span class="edit_date" title=""> </span> <span class="comment_text comment_body"><p>This issue has been migrated to Fedora Forge:<br> https://forge.fedoraproject.org/epel/steering/issues/26</p> <p>Please continue any further discussion there.</p></span> </div> </section> </div> <div class="card-footer bg-transparent d-flex align-items-center border-0 p-0"> <div class="issue_reactions ml-auto" data-comment-id="1004599"> <div class="btn-group"> </div> </div> </div> </div> </section> </div> <div class="col-md-4"> <div> <div class="mb-4"> <h5 class="d-flex align-items-center font-weight-bold border-bottom"> <div class="py-2 text-uppercase font-size-09">Metadata</div> </h5> <fieldset class="form-group issue-metadata-display mt-4"> <label class="mb-1 pl-1"> <i class="fa fa-fw fa-user-plus"></i> <strong>Assignee</strong></label> <div id="assignee_plain"> <div class="ml-2" title=""> <div class="text-muted"> None </div> </div> </div> </fieldset> <fieldset class="form-group issue-metadata-display mt-4"> <label class="mb-1"><i class="fa fa-fw fa-tag"></i> <strong>Tags</strong></label> <h4 class="ml-2" id="taglist"> <a id="tag-errata" title="" data-bg-color="#000000" class="badge badge-secondary text-left my-1 p-2 badge-tag" href="/epel/issues"> errata </a> </h4> </fieldset> <fieldset class="form-group issue-metadata-display mt-4"> <label class="mb-1 pl-1"> <i class="fa fa-fw fa-ban"></i> <strong>Blocking</strong></label> <div class="ml-2" id="blocklist"> <div class="text-muted">None</div> </div> </fieldset> <fieldset class="form-group issue-metadata-display mt-4"> <label class="mb-1 pl-1"> <i class="fa fa-fw fa-check-circle-o"></i> <strong>Depending on</strong></label> <div class="ml-2" id="dependlist"> <div class="text-muted">None</div> </div> </fieldset> <fieldset class="form-group issue-metadata-display mt-4"> <label class="mb-1 pl-1"> <i class="fa fa-bolt"></i> <strong>Priority</strong></label> <div class="ml-2" id="priority_plain"> <div class="text-muted">None</div> </div> </fieldset> <input type="submit" class="btn btn-primary issue-metadata-form hidden" value="Update"> </div> </div> </div> </div> </form> </div> </div> <div class="footer pt-4 pb-5 text-white"> <div class="container"> <div class="row mb-4 pb-3 border-bottom" style="border-color: rgba(255,255,255,0.25) !important;"> <div class="col text-center"> <strong>Static archive.</strong> pagure.io was sunset in 2026; this is a read-only snapshot. </div> </div> <div class="d-flex justify-content-between align-items-center flex-wrap pt-4"> <div class="flex-shrink-0"> <a href="https://www.redhat.com/" class="d-inline-block"> <img src="https://fedoraproject.org/assets/images/logo-sponsored-by-red-hat.png" alt="Red Hat Logo" class="img-fluid" style="max-height: 48px;"> </a> </div> <div class="text-right flex-grow-1 mt-2 mt-md-0"> <p class="my-2 mb-0">Fedora is sponsored by Red Hat. <a href="https://www.redhat.com/en/technologies/linux-platforms/articles/relationship-between-fedora-and-rhel" class="text-white text-decoration-underline">Learn more about the relationship between Red Hat and Fedora »</a></p> <p class="my-2 mb-0">© Red Hat, Inc. and others.</p> </div> </div> </div> </div> <script type="text/javascript" nonce="dev-nonce" src="/static/vendor/jquery/jquery.min.js?version=1.0.0"></script> <script src="/static/vendor/bootstrap/bootstrap.bundle.min.js?version=1.0.0"></script> <script type="text/javascript" nonce="dev-nonce" src="/static/pagure-common.js?version=1.0.0"></script> <script type="text/javascript" nonce="dev-nonce" src="/static/pagure-relative-dates.js?version=1.0.0"></script> <script type="text/javascript" nonce="dev-nonce"> var UPLOAD_URL = "#"; </script> <script nonce="dev-nonce" src="/static/vendor/jquery.textcomplete/jquery.textcomplete.min.js?version=1.0.0"></script> <script type="text/javascript" nonce="dev-nonce" src="/static/vendor/emojione/emojione.min.js?version=1.0.0"></script> <script type="text/javascript" nonce="dev-nonce" src="/static/emoji/emojicomplete.js?version=1.0.0"></script> <script type="text/javascript" nonce="dev-nonce" src="/static/upload.js?version=1.0.0"></script> <script type="text/javascript" nonce="dev-nonce" src="/static/vendor/selectize/selectize.min.js?version=1.0.0"></script> <script type="text/javascript" nonce="dev-nonce" src="/static/vendor/jquery.caret/jquery.caret.min.js?version=1.0.0"></script> <script type="text/javascript" nonce="dev-nonce" src="/static/vendor/jquery.atwho/jquery.atwho.min.js?version=1.0.0"></script> <script type="text/javascript" nonce="dev-nonce" src="/static/tags.js?version=1.0.0"></script> <script type="text/javascript" nonce="dev-nonce" src="/static/comments.js?version=1.0.0"></script> <script type="text/javascript" nonce="dev-nonce"> function setup_edit_btns() { $(".edit_btn").unbind(); $(".edit_btn").click(function() { var commentid = $( this ).attr('data-comment'); var _url = '' + '/comment/' + commentid + '/edit'; $.ajax({ url: _url + '?js=1', type: 'GET', dataType: 'html', success: function(res) { var el = $('#comment-' + commentid); var sec = el.parent().find('.issue_comment'); $(sec).hide(); el.parent().find('.issue_actions').hide(); $(sec).after(res); cancel_edit_btn(); }, error: function() { alert('Could not make edit work'); } }); return false; }); }; function cancel_edit_btn() { $("#comment_update_cancel").unbind(); $("#comment_update_cancel").click( function() { $(this).closest('#comments').find('.issue_comment').show(); $(this).closest('#comments').find('.issue_actions').show(); $(this).closest('.edit_comment').remove(); return false; }); }; $(document).ready(function() { var cur_hash = null; highlight_comment = function() { var _hash = window.location.hash; if (_hash != cur_hash) { $( cur_hash ).css( "background", "linear-gradient(to bottom, #ededed 0%, #fff 100%)" ); }; cur_hash = _hash; if ( _hash ) { $( _hash ).css( "background", "linear-gradient(to bottom, #eded98 0%, #fff 100%)" ); }; return false; }; $('#subscribers-toggle').click(function(event){ var _el = $('#subscribers_list'); if (! _el.is(':visible')){ $('#subscribers-toggle').html('<span class="fa fa-arrow-circle-up fa-fw fa-1x">'); } else { $('#subscribers-toggle').html('<span class="fa fa-arrow-circle-down fa-fw fa-1x">'); } _el.toggle(); }); $(window.onload=highlight_comment()); $(window).on('hashchange', highlight_comment); cancel_edit_btn(); setup_edit_btns(); var url = "#"; setup_issue_reply_btns(url); }); </script> <script type="text/javascript" nonce="dev-nonce"> var source = null; var sse = true; sse = false; </script> <script type="text/javascript" nonce="dev-nonce"> function setup_btn_take_drop(){ } $( document ).ready(function() { $(".close_status_dropdown_action").click(function(event){ var status = "Closed"; if (status == "Open") { $("#changestatusform #statusform_status").val("Closed"); $("#changestatusform #statusform_close_status").val($(this).attr("data-value")); } else { $("#changestatusform #statusform_status").val("Open"); } $("#changestatusform #statusform_assignee").val($("#assignee").val()); $("#changestatusform #statusform_tag").val($("#tag").val()); $("#changestatusform #statusform_priority").val($("#priority").val()); $("#changestatusform #statusform_milestone").val($("#milestone").val()); $("#changestatusform #statusform_blocking").val($("#blocking").val()); $("#changestatusform #statusform_depending").val($("#depending").val()); $("#changestatusform").submit(); }); $(".comment_and_close_action").click(function(event){ var status = "Closed"; if (status == "Open") { $(".mainform #status").val("Closed"); $(".mainform #close_status").val($(this).attr("data-value")); } else { $(".mainform #status").val("Open"); } $(".mainform").submit(); }); var emojiStrategy; $.getJSON( '/static/vendor/emojione/emoji_strategy.json', function( data ) { emojiStrategy = data; } ); var folder = '/static/emoji/png/?version=1.0.0'; var json_url = '/static/vendor/emojione/emoji_strategy.json?version=1.0.0'; emoji_complete(json_url, folder); $(".comment_body").each(function(ind, obj) { var source = $(obj).html(); var preview = emojione.toImage(source); $(obj).html(preview); }); $( ".editmetadatatoggle" ).click( function() { $( ".issue-metadata-form" ).toggle(); $( ".issue-metadata-display" ).toggle(); } ); function _get_issues(url, callback){ $.getJSON( url, function( data ) { issues = data.issues.filter(function(el) { return el.id !== 26; }); callback(issues); if (data.pagination.next){ _get_issues(data.pagination.next, callback) } } ); } $('.mainform #blocking').selectize({ plugins: ['remove_button'], valueField: 'id', labelField: 'id', searchField: ['id', 'title'], preload: 'focus', render: { option: function(item, escape) { return '<div><span>'+escape(item.id)+'</span> <span>'+escape(item.title)+'</span></div>'; }, item: function(item, escape) { return '<div><span>#'+escape(item.id)+'</span></div>'; }, }, create: false, load: function(query, callback) { if (!query){ callback(); return; }; var _url = "#" + "?query_id=" + query; _get_issues(_url, callback); } }); $('.mainform #depending').selectize({ plugins: ['remove_button'], valueField: 'id', labelField: 'id', searchField: ['id', 'title'], preload: 'focus', render: { option: function(item, escape) { return '<div><span>'+escape(item.id)+'</span> <span>'+escape(item.title)+'</span></div>'; }, item: function(item, escape) { return '<div><span>#'+escape(item.id)+'</span></div>'; }, }, create: false, load: function(query, callback) { if (!query){ callback(); return; }; var _url = "#" + "?query_id=" + query; _get_issues(_url, callback); } }); var available_tags = []; var items = available_tags.map(function(x) { return { item: x }; }); $('.mainform #tag').selectize({ delimiter: ',', options: items, persist: false, create: false, labelField: "item", valueField: "item", searchField: ["item"], }); $( "#preview" ).hide(); $( "#previewinmarkdown" ).click( function(event, ui) { var _text = $( "#comment" ).val(); var _url = "#"; $.ajax({ url: _url , type: 'POST', data: { content: _text, csrf_token: "", }, dataType: 'html', success: function(res) { var preview = emojione.toImage(res); $( "#preview" ).html(preview); $( "#previewinmarkdown" ).addClass("active"); $( "#editinmarkdown" ).removeClass("active"); $( "#comment" ).hide(); $( "#preview" ).show(); }, error: function() { alert('Unable to generate preview!'+error); } }); return false; } ); $( "#editinmarkdown" ).click( function(event, ui) { $( "#editinmarkdown" ).addClass("active"); $( "#previewinmarkdown" ).removeClass("active"); $( "#comment" ).show(); $( "#preview" ).hide(); } ); function submitFormOnCtrlKey(event) { if (event.ctrlKey && event.keyCode == 13) { var form = event.target.form; form.submit(); event.preventDefault(); } } $('#comment').keydown(function(e) { submitFormOnCtrlKey(e); }); }); </script> <script type="text/javascript" nonce="dev-nonce" src="/static/reactions.js?version=1.0.0"></script> </body> </html>