@@ -33,6 +33,15 @@ import { i18n$ } from '../i18n.js';
33
33
{
34
34
const CodeMirror = self . CodeMirror ;
35
35
36
+ CodeMirror . defineOption ( 'maximizable' , true , ( cm , maximizable ) => {
37
+ if ( typeof maximizable !== 'boolean' ) { return ; }
38
+ const wrapper = cm . getWrapperElement ( ) ;
39
+ if ( wrapper === null ) { return ; }
40
+ const container = wrapper . closest ( '.codeMirrorContainer' ) ;
41
+ if ( container === null ) { return ; }
42
+ container . dataset . maximizable = `${ maximizable } ` ;
43
+ } ) ;
44
+
36
45
const searchOverlay = function ( query , caseInsensitive ) {
37
46
if ( typeof query === 'string' )
38
47
query = new RegExp (
@@ -90,7 +99,8 @@ import { i18n$ } from '../i18n.js';
90
99
} ;
91
100
92
101
const searchWidgetClickHandler = function ( cm , ev ) {
93
- const tcl = ev . target . classList ;
102
+ const target = ev . target ;
103
+ const tcl = target . classList ;
94
104
if ( tcl . contains ( 'cm-search-widget-up' ) ) {
95
105
findNext ( cm , - 1 ) ;
96
106
} else if ( tcl . contains ( 'cm-search-widget-down' ) ) {
@@ -99,8 +109,13 @@ import { i18n$ } from '../i18n.js';
99
109
findNextError ( cm , - 1 ) ;
100
110
} else if ( tcl . contains ( 'cm-linter-widget-down' ) ) {
101
111
findNextError ( cm , 1 ) ;
112
+ } else if ( tcl . contains ( 'cm-maximize' ) ) {
113
+ const container = target . closest ( '.codeMirrorContainer' ) ;
114
+ if ( container !== null ) {
115
+ container . classList . toggle ( 'cm-maximized' ) ;
116
+ }
102
117
}
103
- if ( ev . target . localName !== 'input' ) {
118
+ if ( target . localName !== 'input' ) {
104
119
ev . preventDefault ( ) ;
105
120
} else {
106
121
ev . stopImmediatePropagation ( ) ;
@@ -458,26 +473,27 @@ import { i18n$ } from '../i18n.js';
458
473
} ;
459
474
460
475
{
461
- const searchWidgetTemplate =
462
- '<div class="cm-search-widget-template" style="display:none;">' +
463
- '<div class="cm-search-widget">' +
464
- '<span class="cm-search-widget-input">' +
465
- '<span class="fa-icon fa-icon-ro">search</span> ' +
466
- '<input type="search" spellcheck="false"> ' +
467
- '<span class="cm-search-widget-up cm-search-widget-button fa-icon">angle-up</span> ' +
468
- '<span class="cm-search-widget-down cm-search-widget-button fa-icon fa-icon-vflipped">angle-up</span> ' +
469
- '<span class="cm-search-widget-count"></span>' +
470
- '</span>' +
471
- '<span class="cm-linter-widget" data-lint="0">' +
472
- '<span class="cm-linter-widget-count"></span> ' +
473
- '<span class="cm-linter-widget-up cm-search-widget-button fa-icon">angle-up</span> ' +
474
- '<span class="cm-linter-widget-down cm-search-widget-button fa-icon fa-icon-vflipped">angle-up</span> ' +
475
- '</span>' +
476
- '<span>' +
477
- '<a class="fa-icon sourceURL" href>external-link</a>' +
478
- '</span>' +
479
- '</div>' +
480
- '</div>' ;
476
+ const searchWidgetTemplate = [
477
+ '<div class="cm-search-widget-template" style="display:none;">' ,
478
+ '<div class="cm-search-widget">' ,
479
+ '<span class="cm-maximize"><svg viewBox="0 0 40 40"><path d="M4,16V4h12M24,4H36V16M4,24V36H16M36,24V36H24" /><path d="M14 2.5v12h-12M38 14h-12v-12M14 38v-12h-12M26 38v-12h12" /></svg></span> ' ,
480
+ '<span class="cm-search-widget-input">' ,
481
+ '<input type="search" spellcheck="false" placeholder="⚲"> ' ,
482
+ '<span class="cm-search-widget-up cm-search-widget-button fa-icon">angle-up</span> ' ,
483
+ '<span class="cm-search-widget-down cm-search-widget-button fa-icon fa-icon-vflipped">angle-up</span> ' ,
484
+ '<span class="cm-search-widget-count"></span>' ,
485
+ '</span>' ,
486
+ '<span class="cm-linter-widget" data-lint="0">' ,
487
+ '<span class="cm-linter-widget-count"></span> ' ,
488
+ '<span class="cm-linter-widget-up cm-search-widget-button fa-icon">angle-up</span> ' ,
489
+ '<span class="cm-linter-widget-down cm-search-widget-button fa-icon fa-icon-vflipped">angle-up</span> ' ,
490
+ '</span>' ,
491
+ '<span>' ,
492
+ '<a class="fa-icon sourceURL" href>external-link</a>' ,
493
+ '</span>' ,
494
+ '</div>' ,
495
+ '</div>' ,
496
+ ] . join ( '\n' ) ;
481
497
const domParser = new DOMParser ( ) ;
482
498
const doc = domParser . parseFromString ( searchWidgetTemplate , 'text/html' ) ;
483
499
const widgetTemplate = document . adoptNode ( doc . body . firstElementChild ) ;
0 commit comments