@@ -155,7 +155,7 @@ function setupContainer(element, getValue) {
155
155
return container ;
156
156
}
157
157
158
- exports . transformTextarea = function ( element , loader ) {
158
+ exports . transformTextarea = function ( element , options ) {
159
159
var session ;
160
160
var container = setupContainer ( element , function ( ) {
161
161
return session . getValue ( ) ;
@@ -215,9 +215,8 @@ exports.transformTextarea = function(element, loader) {
215
215
applyStyles ( settingDiv , settingDivStyles ) ;
216
216
container . appendChild ( settingDiv ) ;
217
217
218
+ options = options || exports . defaultOptions ;
218
219
// Power up ace on the textarea:
219
- var options = { } ;
220
-
221
220
var editor = ace . edit ( editorDiv ) ;
222
221
session = editor . getSession ( ) ;
223
222
@@ -228,10 +227,10 @@ exports.transformTextarea = function(element, loader) {
228
227
container . appendChild ( settingOpener ) ;
229
228
230
229
// Create the API.
231
- setupApi ( editor , editorDiv , settingDiv , ace , options , loader ) ;
230
+ setupApi ( editor , editorDiv , settingDiv , ace , options , load ) ;
232
231
233
232
// Create the setting's panel.
234
- setupSettingPanel ( settingDiv , settingOpener , editor , options ) ;
233
+ setupSettingPanel ( settingDiv , settingOpener , editor ) ;
235
234
236
235
var state = "" ;
237
236
event . addListener ( settingOpener , "mousemove" , function ( e ) {
@@ -296,37 +295,15 @@ function setupApi(editor, editorDiv, settingDiv, ace, options, loader) {
296
295
} ;
297
296
298
297
editor . $setOption = editor . setOption ;
298
+ editor . $getOption = editor . getOption ;
299
299
editor . setOption = function ( key , value ) {
300
- if ( options [ key ] == value ) return ;
301
-
302
300
switch ( key ) {
303
301
case "mode" :
304
- if ( value != "text" ) {
305
- // Load the required mode file. Files get loaded only once.
306
- loader ( "mode-" + value + ".js" , "ace/mode/" + value , function ( ) {
307
- var aceMode = require ( "../mode/" + value ) . Mode ;
308
- session . setMode ( new aceMode ( ) ) ;
309
- } ) ;
310
- } else {
311
- session . setMode ( new ( require ( "../mode/text" ) . Mode ) ) ;
312
- }
302
+ editor . $setOption ( "mode" , "ace/mode/" + value )
313
303
break ;
314
-
315
304
case "theme" :
316
- if ( value != "textmate" ) {
317
- // Load the required theme file. Files get loaded only once.
318
- loader ( "theme-" + value + ".js" , "ace/theme/" + value , function ( ) {
319
- editor . setTheme ( "ace/theme/" + value ) ;
320
- } ) ;
321
- } else {
322
- editor . setTheme ( "ace/theme/textmate" ) ;
323
- }
324
- break ;
325
-
326
- case "fontSize" :
327
- editorDiv . style . fontSize = value ;
305
+ editor . $setOption ( "theme" , "ace/theme/" + value )
328
306
break ;
329
-
330
307
case "keybindings" :
331
308
switch ( value ) {
332
309
case "vim" :
@@ -341,58 +318,55 @@ function setupApi(editor, editorDiv, settingDiv, ace, options, loader) {
341
318
break ;
342
319
343
320
case "softWrap" :
344
- switch ( value ) {
345
- case "off" :
346
- session . setUseWrapMode ( false ) ;
347
- renderer . setPrintMarginColumn ( 80 ) ;
348
- break ;
349
- case "40" :
350
- session . setUseWrapMode ( true ) ;
351
- session . setWrapLimitRange ( 40 , 40 ) ;
352
- renderer . setPrintMarginColumn ( 40 ) ;
353
- break ;
354
- case "80" :
355
- session . setUseWrapMode ( true ) ;
356
- session . setWrapLimitRange ( 80 , 80 ) ;
357
- renderer . setPrintMarginColumn ( 80 ) ;
358
- break ;
359
- case "free" :
360
- session . setUseWrapMode ( true ) ;
361
- session . setWrapLimitRange ( null , null ) ;
362
- renderer . setPrintMarginColumn ( 80 ) ;
363
- break ;
364
- }
321
+ case "fontSize" :
322
+ editor . $setOption ( key , value ) ;
365
323
break ;
366
324
367
325
default :
368
326
editor . $setOption ( key , toBool ( value ) ) ;
369
327
}
370
-
371
- options [ key ] = value ;
372
328
} ;
373
329
374
330
editor . getOption = function ( key ) {
375
- return options [ key ] ;
376
- } ;
331
+ switch ( key ) {
332
+ case "mode" :
333
+ return editor . $getOption ( "mode" ) . substr ( "ace/mode/" . length )
334
+ break ;
377
335
378
- editor . getOptions = function ( ) {
379
- return options ;
380
- } ;
336
+ case "theme" :
337
+ return editor . $getOption ( "theme" ) . substr ( "ace/theme/" . length )
338
+ break ;
339
+
340
+ case "keybindings" :
341
+ var value = editor . getKeyboardHandler ( )
342
+ switch ( value && value . $id ) {
343
+ case "ace/keyboard/vim" :
344
+ return "vim" ;
345
+ case "ace/keyboard/emacs" :
346
+ return "emacs" ;
347
+ default :
348
+ return "ace" ;
349
+ }
350
+ break ;
381
351
382
- editor . setOptions ( exports . options ) ;
352
+ default :
353
+ return editor . $getOption ( key ) ;
354
+ }
355
+ } ;
383
356
357
+ editor . setOptions ( options ) ;
384
358
return editor ;
385
359
}
386
360
387
- function setupSettingPanel ( settingDiv , settingOpener , editor , options ) {
361
+ function setupSettingPanel ( settingDiv , settingOpener , editor ) {
388
362
var BOOL = null ;
389
363
390
364
var desc = {
391
365
mode : "Mode:" ,
392
- gutter : "Display Gutter :",
366
+ wrap : "Soft Wrap :",
393
367
theme : "Theme:" ,
394
368
fontSize : "Font Size:" ,
395
- softWrap : "Soft Wrap :",
369
+ showGutter : "Display Gutter :",
396
370
keybindings : "Keyboard" ,
397
371
showPrintMargin : "Show Print Margin:" ,
398
372
useSoftTabs : "Use Soft Tabs:" ,
@@ -445,15 +419,15 @@ function setupSettingPanel(settingDiv, settingOpener, editor, options) {
445
419
twilight : "Twilight" ,
446
420
vibrant_ink : "Vibrant Ink"
447
421
} ,
448
- gutter : BOOL ,
422
+ showGutter : BOOL ,
449
423
fontSize : {
450
424
"10px" : "10px" ,
451
425
"11px" : "11px" ,
452
426
"12px" : "12px" ,
453
427
"14px" : "14px" ,
454
428
"16px" : "16px"
455
429
} ,
456
- softWrap : {
430
+ wrap : {
457
431
off : "Off" ,
458
432
40 : "40" ,
459
433
80 : "80" ,
@@ -476,7 +450,7 @@ function setupSettingPanel(settingDiv, settingOpener, editor, options) {
476
450
if ( ! obj ) {
477
451
builder . push (
478
452
"<input type='checkbox' title='" , option , "' " ,
479
- cValue == "true" ? "checked='true'" : "" ,
453
+ cValue + "" == "true" ? "checked='true'" : "" ,
480
454
"'></input>"
481
455
) ;
482
456
return ;
@@ -496,10 +470,10 @@ function setupSettingPanel(settingDiv, settingOpener, editor, options) {
496
470
builder . push ( "</select>" ) ;
497
471
}
498
472
499
- for ( var option in options ) {
473
+ for ( var option in exports . defaultOptions ) {
500
474
table . push ( "<tr><td>" , desc [ option ] , "</td>" ) ;
501
475
table . push ( "<td>" ) ;
502
- renderOption ( table , option , optionValues [ option ] , options [ option ] ) ;
476
+ renderOption ( table , option , optionValues [ option ] , editor . getOption ( option ) ) ;
503
477
table . push ( "</td></tr>" ) ;
504
478
}
505
479
table . push ( "</table>" ) ;
@@ -532,12 +506,12 @@ function setupSettingPanel(settingDiv, settingOpener, editor, options) {
532
506
}
533
507
534
508
// Default startup options.
535
- exports . options = {
536
- mode : "text " ,
509
+ exports . defaultOptions = {
510
+ mode : "javascript " ,
537
511
theme : "textmate" ,
538
- gutter : "false ",
512
+ wrap : "off ",
539
513
fontSize : "12px" ,
540
- softWrap : "off ",
514
+ showGutter : "false ",
541
515
keybindings : "ace" ,
542
516
showPrintMargin : "false" ,
543
517
useSoftTabs : "true" ,
0 commit comments