PluginProbe
Code Snippets / trunk
Code Snippets vtrunk
4.0.0-beta.2 3.10.2 3.10.1 3.10.0 3.10.0-beta.2 3.10.0-beta.1 4.0.0-beta.1 3.9.6 trunk 2.10.0 2.10.1 2.12.0 2.12.1 2.13.0 2.13.1 2.13.2 2.13.3 2.14.0 2.14.1 2.14.2 2.14.3 2.14.4 2.14.5 2.14.6 3.0.0 All 65 releases
code-snippets / js / services / settings / editor-preview.ts

editor-preview.ts in Code Snippets trunk, at js/services/settings/editor-preview.ts

61 lines 1.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 import { __ } from '@wordpress/i18n'
2 import '../../entries/editor'
3
4 const parseSelect = (select: HTMLSelectElement) => select.options[select.selectedIndex].value
5 const parseCheckbox = (checkbox: HTMLInputElement) => checkbox.checked
6 const parseNumber = (input: HTMLInputElement) => parseInt(input.value, 10)
7
8 const initialiseCodeMirror = () => {
9 const { codeEditor } = window.wp
10 const textarea = document.getElementById('code_snippets_editor_preview')
11
12 if (textarea && codeEditor) {
13 window.code_snippets_editor_preview = codeEditor.initialize(textarea)
14
15 // CodeMirror's own input is unlabelled; name it so the preview reads as what it is.
16 window.code_snippets_editor_preview.codemirror.getInputField().setAttribute('aria-label', __('Code editor preview', 'code-snippets'))
17
18 return window.code_snippets_editor_preview.codemirror
19 }
20
21 console.error('Could not initialise CodeMirror on textarea.', textarea)
22 return undefined
23 }
24
25 export const handleEditorPreviewUpdates = () => {
26 const editor = initialiseCodeMirror()
27 const editorSettings = window.code_snippets_editor_settings
28
29 for (const setting of editorSettings) {
30 const element = document.querySelector(`[name="code_snippets_settings[editor][${setting.name}]"]`)
31
32 element?.addEventListener('change', () => {
33 const opt = setting.codemirror
34
35 const value = (() => {
36 switch (setting.type) {
37 case 'select':
38 return parseSelect(<HTMLSelectElement> element)
39 case 'checkbox':
40 return parseCheckbox(<HTMLInputElement> element)
41 case 'number':
42 return parseNumber(<HTMLInputElement> element)
43 default:
44 return null
45 }
46 })()
47
48 if (null !== value) {
49 if ('font_size' === setting.name) {
50 const codeElement = document.querySelector('.CodeMirror-code')
51 if (codeElement && codeElement instanceof HTMLElement) {
52 codeElement.style.fontSize = `${value}px`
53 }
54 } else {
55 editor?.setOption(opt, value)
56 }
57 }
58 })
59 }
60 }
61