Files
wordpress/wp-admin/js/code-editor.min.js
Weston Ruter 40d04f7d71 Code Editor: Allow saving with Ctrl/Cmd+S in Theme/Plugin Editors.
* Keyboard shortcuts work when CodeMirror is not enabled (due to syntax highlighting not being enabled), and when the user is not focused inside the CodeMirror editor.
* The autocomplete trigger is switched from `keyup` to `inputRead` to improve reliability, support IME composition, and prevent conflicts with modifier keys (e.g., releasing `Ctrl`/`Cmd` before `s` after a save).
* A `updateErrorNotice` method is exposed on the code editor instance to ensure validation errors are displayed when a save via shortcut is attempted, preventing "silent" failures. Otherwise, the linting error notice is only shown when focus leaves the editor.
* The form submission is modernized by replacing the deprecated jQuery `.submit()` shorthand with `.trigger( 'submit' )`.

Developed in https://github.com/WordPress/wordpress-develop/pull/10851

Props westonruter, Junaidkbr, evansolomon, desrosj, mukesh27, jonsurrell, spiraltee, chexee, andrewryno, tusharaddweb, gauri87, huzaifaalmesbah, ocean90, karmatosed, johnbillion, scribu, jcnetsys.
Fixes #17133.

Built from https://develop.svn.wordpress.org/trunk@61588


git-svn-id: http://core.svn.wordpress.org/trunk@60899 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2026-02-04 07:03:44 +00:00

2 lines
3.2 KiB
JavaScript

/*! This file is auto-generated */
void 0===window.wp&&(window.wp={}),void 0===window.wp.codeEditor&&(window.wp.codeEditor={}),function(u,d){"use strict";function s(r,s){var a=[],d=[];function c(){s.onUpdateErrorNotice&&!_.isEqual(a,d)&&(s.onUpdateErrorNotice(a,r),d=a)}function i(){var i,t=r.getOption("lint");return!!t&&(!0===t?t={}:_.isObject(t)&&(t=u.extend({},t)),t.options||(t.options={}),"javascript"===s.codemirror.mode&&s.jshint&&u.extend(t.options,s.jshint),"css"===s.codemirror.mode&&s.csslint&&u.extend(t.options,s.csslint),"htmlmixed"===s.codemirror.mode&&s.htmlhint&&(t.options.rules=u.extend({},s.htmlhint),s.jshint&&(t.options.rules.jshint=s.jshint),s.csslint)&&(t.options.rules.csslint=s.csslint),t.onUpdateLinting=(i=t.onUpdateLinting,function(t,n,e){var o=_.filter(t,function(t){return"error"===t.severity});i&&i.apply(t,n,e),!_.isEqual(o,a)&&(a=o,s.onChangeLintingErrors&&s.onChangeLintingErrors(o,t,n,e),!r.state.focused||0===a.length||0<d.length)&&c()}),t)}return r.setOption("lint",i()),r.on("optionChange",function(t,n){var e,o="CodeMirror-lint-markers";"lint"===n&&(n=r.getOption("gutters")||[],!0===(e=r.getOption("lint"))?(_.contains(n,o)||r.setOption("gutters",[o].concat(n)),r.setOption("lint",i())):e||r.setOption("gutters",_.without(n,o)),r.getOption("lint")?r.performLint():(a=[],c()))}),r.on("blur",c),r.on("startCompletion",function(){r.off("blur",c)}),r.on("endCompletion",function(){r.on("blur",c),_.delay(function(){r.state.focused||c()},500)}),u(document.body).on("mousedown",function(t){!r.state.focused||u.contains(r.display.wrapper,t.target)||u(t.target).hasClass("CodeMirror-hint")||c()}),c}d.codeEditor.defaultSettings={codemirror:{},csslint:{},htmlhint:{},jshint:{},onTabNext:function(){},onTabPrevious:function(){},onChangeLintingErrors:function(){},onUpdateErrorNotice:function(){}},d.codeEditor.initialize=function(t,n){var a,e,o,i,t=u("string"==typeof t?"#"+t:t),r=u.extend({},d.codeEditor.defaultSettings,n);return r.codemirror=u.extend({},r.codemirror),t=s(a=d.CodeMirror.fromTextArea(t[0],r.codemirror),r),r={settings:r,codemirror:a,updateErrorNotice:t},a.showHint&&a.on("inputRead",function(t,n){var e,o,i,r,s;"+input"!==n.origin&&!n.origin.startsWith("*compose")||1!==n.text.length||1!==n.text[0].length||(n=n.text[0],o=/^[a-zA-Z]$/.test(n),a.state.completionActive&&o)||"string"!==(s=a.getTokenAt(a.getCursor())).type&&"comment"!==s.type&&(r=d.CodeMirror.innerMode(a.getMode(),s.state).mode.name,i=a.doc.getLine(a.doc.getCursor().line).substr(0,a.doc.getCursor().ch),"html"===r||"xml"===r?e="<"===n||"/"===n&&"tag"===s.type||o&&"tag"===s.type||o&&"attribute"===s.type||"="===n&&(s.state.htmlState?.tagName||s.state.curState?.htmlState?.tagName):"css"===r?e=o||":"===n||" "===n&&/:\s+$/.test(i):"javascript"===r?e=o||"."===n:"clike"===r&&"php"===a.options.mode&&(e=o&&("keyword"===s.type||"variable"===s.type)),e)&&a.showHint({completeSingle:!1})}),o=n,i=u((e=a).getTextArea()),e.on("blur",function(){i.data("next-tab-blurs",!1)}),e.on("keydown",function(t,n){27===n.keyCode?i.data("next-tab-blurs",!0):9===n.keyCode&&i.data("next-tab-blurs")&&(n.shiftKey?o.onTabPrevious(e,n):o.onTabNext(e,n),i.data("next-tab-blurs",!1),n.preventDefault())}),r}}(window.jQuery,window.wp);