@@ -15,7 +15,12 @@ import fsOperation from "fileSystem";
1515import sidebarApps from "sidebarApps" ;
1616import ajax from "@deadlyjack/ajax" ;
1717import { setKeyBindings } from "cm/commandRegistry" ;
18- import { initModes } from "cm/modelist" ;
18+ import {
19+ getModeForPath ,
20+ getModes ,
21+ getModesByName ,
22+ initModes ,
23+ } from "cm/modelist" ;
1924import Contextmenu from "components/contextmenu" ;
2025import { hasConnectedServers } from "components/lspInfoDialog" ;
2126import Sidebar from "components/sidebar" ;
@@ -64,6 +69,59 @@ const previousVersionCode = Number.parseInt(localStorage.versionCode, 10);
6469window . onload = Main ;
6570const logger = new Logger ( ) ;
6671
72+ function createAceModelistCompatModule ( ) {
73+ const toAceMode = ( mode ) => {
74+ const resolved = mode || getModeForPath ( "" ) ;
75+ if ( ! resolved ) return null ;
76+ const name = resolved . name || "text" ;
77+ const rawMode = String ( resolved . mode || name ) ;
78+ const modePath = rawMode . startsWith ( "ace/mode/" )
79+ ? rawMode
80+ : `ace/mode/${ rawMode } ` ;
81+ return {
82+ ...resolved ,
83+ name,
84+ caption : resolved . caption || name ,
85+ mode : modePath ,
86+ } ;
87+ } ;
88+
89+ return {
90+ get modes ( ) {
91+ return getModes ( )
92+ . map ( ( mode ) => toAceMode ( mode ) )
93+ . filter ( Boolean ) ;
94+ } ,
95+ get modesByName ( ) {
96+ const source = getModesByName ( ) ;
97+ const result = { } ;
98+ Object . keys ( source ) . forEach ( ( name ) => {
99+ result [ name ] = toAceMode ( source [ name ] ) ;
100+ } ) ;
101+ return result ;
102+ } ,
103+ getModeForPath ( path ) {
104+ return toAceMode ( getModeForPath ( String ( path || "" ) ) ) ;
105+ } ,
106+ } ;
107+ }
108+
109+ function ensureAceCompatApi ( ) {
110+ const ace = window . ace || { } ;
111+ const modelistModule = createAceModelistCompatModule ( ) ;
112+ const originalRequire =
113+ typeof ace . require === "function" ? ace . require . bind ( ace ) : null ;
114+
115+ ace . require = ( moduleId ) => {
116+ if ( moduleId === "ace/ext/modelist" || moduleId === "ace/ext/modelist.js" ) {
117+ return modelistModule ;
118+ }
119+ return originalRequire ?. ( moduleId ) ;
120+ } ;
121+
122+ window . ace = ace ;
123+ }
124+
67125async function Main ( ) {
68126 const oldPreventDefault = TouchEvent . prototype . preventDefault ;
69127
@@ -179,6 +237,7 @@ async function onDeviceReady() {
179237 return true ;
180238 } ) ( ) ;
181239 window . acode = new Acode ( ) ;
240+ ensureAceCompatApi ( ) ;
182241
183242 system . requestPermission ( "android.permission.READ_EXTERNAL_STORAGE" ) ;
184243 system . requestPermission ( "android.permission.WRITE_EXTERNAL_STORAGE" ) ;
0 commit comments