jsoneditor-rails 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8e1818882213183182ef11386489b26e6cc386c1
4
- data.tar.gz: 5d4fd61bdbb25a6dec7ea1b7d7fc1f51406db068
3
+ metadata.gz: be5f026ccec561a1f01c54729101d5f93135c20a
4
+ data.tar.gz: fa5b221511aa17167002f295d2180d9c08904429
5
5
  SHA512:
6
- metadata.gz: 61638fc856e8bf2d12b3d2c5296bfe76167e309f732c97f39b73f08a9e36bc7e0b11f6e29ddc0ada90234925dda6d10c2da1506884682309e200fca0ae6c7851
7
- data.tar.gz: 34bad4e11a56cf455e70ab543d85289ef731fce48fca24f4e75a4acaa8098300e1e7962b0d6258a046fca423c9e93d74b0390fde0dd88c50d312caf55476ca70
6
+ metadata.gz: 99f0557998e4c0d3037f0c00dd17942a6a51dae98de9e7aba17f2c6df43daa6c88dd76dd73078b60c537e4d1e6e858f110cb1d883fb33b878e04e537ede8f524
7
+ data.tar.gz: 0c71eac98713101aed6cf89db4a7a77421d38ea84a01c3eda3bb9543f35e60b25439ef29789853a61dc4f43246cb13628b49b2d87f5e0d5e56832cae7c9be078
@@ -0,0 +1,8 @@
1
+ ## 1.0.1 (2017-07-14)
2
+
3
+ * Updated jsoneditor to version 5.9 ([#2](../../pull/2))
4
+
5
+ ## 1.0.0 (2017-04-08)
6
+
7
+ * Added jsoneditor assets as part of asset pipeline
8
+ * Added rake task to download latest jsoneditor files to easily do new releases
@@ -1,5 +1,5 @@
1
1
  module Jsoneditor
2
2
  module Rails
3
- VERSION = "1.0.0"
3
+ VERSION = "1.0.1"
4
4
  end
5
5
  end
@@ -24,8 +24,8 @@
24
24
  * Copyright (c) 2011-2017 Jos de Jong, http://jsoneditoronline.org
25
25
  *
26
26
  * @author Jos de Jong, <wjosdejong@gmail.com>
27
- * @version 5.5.11
28
- * @date 2017-01-06
27
+ * @version 5.9.0
28
+ * @date 2017-07-10
29
29
  */
30
30
  (function webpackUniversalModuleDefinition(root, factory) {
31
31
  if(typeof exports === 'object' && typeof module === 'object')
@@ -94,7 +94,7 @@ return /******/ (function(modules) { // webpackBootstrap
94
94
  }
95
95
 
96
96
  var treemode = __webpack_require__(1);
97
- var textmode = __webpack_require__(12);
97
+ var textmode = __webpack_require__(13);
98
98
  var util = __webpack_require__(4);
99
99
 
100
100
  /**
@@ -164,8 +164,8 @@ return /******/ (function(modules) { // webpackBootstrap
164
164
  // validate options
165
165
  if (options) {
166
166
  var VALID_OPTIONS = [
167
- 'ace', 'theme',
168
- 'ajv', 'schema',
167
+ 'ajv', 'schema', 'schemaRefs','templates',
168
+ 'ace', 'theme','autocomplete',
169
169
  'onChange', 'onEditable', 'onError', 'onModeChange',
170
170
  'escapeUnicode', 'history', 'search', 'mode', 'modes', 'name', 'indentation', 'sortObjectKeys'
171
171
  ];
@@ -215,7 +215,7 @@ return /******/ (function(modules) { // webpackBootstrap
215
215
  this.options = options || {};
216
216
  this.json = json || {};
217
217
 
218
- var mode = this.options.mode || 'tree';
218
+ var mode = this.options.mode || (this.options.modes && this.options.modes[0]) || 'tree';
219
219
  this.setMode(mode);
220
220
  };
221
221
 
@@ -358,8 +358,10 @@ return /******/ (function(modules) { // webpackBootstrap
358
358
  * Set a JSON schema for validation of the JSON object.
359
359
  * To remove the schema, call JSONEditor.setSchema(null)
360
360
  * @param {Object | null} schema
361
+ * @param {Object.<string, Object>=} schemaRefs Schemas that are referenced using the `$ref` property from the JSON schema that are set in the `schema` option,
362
+ + the object structure in the form of `{reference_key: schemaObject}`
361
363
  */
362
- JSONEditor.prototype.setSchema = function (schema) {
364
+ JSONEditor.prototype.setSchema = function (schema, schemaRefs) {
363
365
  // compile a JSON schema validator if a JSON schema is provided
364
366
  if (schema) {
365
367
  var ajv;
@@ -373,6 +375,15 @@ return /******/ (function(modules) { // webpackBootstrap
373
375
  }
374
376
 
375
377
  if (ajv) {
378
+ if(schemaRefs) {
379
+ for (var ref in schemaRefs) {
380
+ ajv.removeSchema(ref); // When updating a schema - old refs has to be removed first
381
+ if(schemaRefs[ref]) {
382
+ ajv.addSchema(schemaRefs[ref], ref);
383
+ }
384
+ }
385
+ this.options.schemaRefs = schemaRefs;
386
+ }
376
387
  this.validateSchema = ajv.compile(schema);
377
388
 
378
389
  // add schema to the options, so that when switching to an other mode,
@@ -389,6 +400,7 @@ return /******/ (function(modules) { // webpackBootstrap
389
400
  // remove current schema
390
401
  this.validateSchema = null;
391
402
  this.options.schema = null;
403
+ this.options.schemaRefs = null;
392
404
  this.validate(); // to clear current error messages
393
405
  this.refresh(); // update DOM
394
406
  }
@@ -484,6 +496,7 @@ return /******/ (function(modules) { // webpackBootstrap
484
496
  var Node = __webpack_require__(8);
485
497
  var ModeSwitcher = __webpack_require__(11);
486
498
  var util = __webpack_require__(4);
499
+ var autocomplete = __webpack_require__(12);
487
500
 
488
501
  // create a mixin with the functions for tree mode
489
502
  var treemode = {};
@@ -527,6 +540,9 @@ return /******/ (function(modules) { // webpackBootstrap
527
540
 
528
541
  this._setOptions(options);
529
542
 
543
+ if (options.autocomplete)
544
+ this.autocomplete = new autocomplete(options.autocomplete);
545
+
530
546
  if (this.options.history && this.options.mode !== 'view') {
531
547
  this.history = new History(this);
532
548
  }
@@ -583,7 +599,9 @@ return /******/ (function(modules) { // webpackBootstrap
583
599
  history: true,
584
600
  mode: 'tree',
585
601
  name: undefined, // field name of root node
586
- schema: null
602
+ schema: null,
603
+ schemaRefs: null,
604
+ autocomplete: null
587
605
  };
588
606
 
589
607
  // copy all options
@@ -596,7 +614,7 @@ return /******/ (function(modules) { // webpackBootstrap
596
614
  }
597
615
 
598
616
  // compile a JSON schema validator if a JSON schema is provided
599
- this.setSchema(this.options.schema);
617
+ this.setSchema(this.options.schema, this.options.schemaRefs);
600
618
 
601
619
  // create a debounced validate function
602
620
  this._debouncedValidate = util.debounce(this.validate.bind(this), this.DEBOUNCE_INTERVAL);
@@ -1527,7 +1545,9 @@ return /******/ (function(modules) { // webpackBootstrap
1527
1545
  */
1528
1546
  treemode._onKeyDown = function (event) {
1529
1547
  var keynum = event.which || event.keyCode;
1548
+ var altKey = event.altKey;
1530
1549
  var ctrlKey = event.ctrlKey;
1550
+ var metaKey = event.metaKey;
1531
1551
  var shiftKey = event.shiftKey;
1532
1552
  var handled = false;
1533
1553
 
@@ -1573,6 +1593,41 @@ return /******/ (function(modules) { // webpackBootstrap
1573
1593
  }
1574
1594
  }
1575
1595
 
1596
+ if ((this.options.autocomplete) && (!handled)) {
1597
+ if (!ctrlKey && !altKey && !metaKey && (event.key.length == 1 || keynum == 8 || keynum == 46)) {
1598
+ handled = false;
1599
+ var jsonElementType = "";
1600
+ if (event.target.className.indexOf("jsoneditor-value") >= 0) jsonElementType = "value";
1601
+ if (event.target.className.indexOf("jsoneditor-field") >= 0) jsonElementType = "field";
1602
+
1603
+ var node = Node.getNodeFromTarget(event.target);
1604
+ // Activate autocomplete
1605
+ setTimeout(function (hnode, element) {
1606
+ if (element.innerText.length > 0) {
1607
+ var result = this.options.autocomplete.getOptions(element.innerText, hnode.getPath(), jsonElementType, hnode.editor);
1608
+ if (typeof result.then === 'function') {
1609
+ // probably a promise
1610
+ if (result.then(function (obj) {
1611
+ if (obj.options)
1612
+ this.autocomplete.show(element, obj.startFrom, obj.options);
1613
+ else
1614
+ this.autocomplete.show(element, 0, obj);
1615
+ }.bind(this)));
1616
+ } else {
1617
+ // definitely not a promise
1618
+ if (result.options)
1619
+ this.autocomplete.show(element, result.startFrom, result.options);
1620
+ else
1621
+ this.autocomplete.show(element, 0, result);
1622
+ }
1623
+ }
1624
+ else
1625
+ this.autocomplete.hideDropDown();
1626
+
1627
+ }.bind(this, node, event.target), 50);
1628
+ }
1629
+ }
1630
+
1576
1631
  if (handled) {
1577
1632
  event.preventDefault();
1578
1633
  event.stopPropagation();
@@ -2822,6 +2877,34 @@ return /******/ (function(modules) { // webpackBootstrap
2822
2877
  return {start: start, end: newEnd};
2823
2878
  };
2824
2879
 
2880
+ if (typeof Element !== 'undefined') {
2881
+ // Polyfill for array remove
2882
+ (function (arr) {
2883
+ arr.forEach(function (item) {
2884
+ if (item.hasOwnProperty('remove')) {
2885
+ return;
2886
+ }
2887
+ Object.defineProperty(item, 'remove', {
2888
+ configurable: true,
2889
+ enumerable: true,
2890
+ writable: true,
2891
+ value: function remove() {
2892
+ if (this.parentNode != null)
2893
+ this.parentNode.removeChild(this);
2894
+ }
2895
+ });
2896
+ });
2897
+ })([Element.prototype, CharacterData.prototype, DocumentType.prototype]);
2898
+ }
2899
+
2900
+
2901
+ // Polyfill for startsWith
2902
+ if (!String.prototype.startsWith) {
2903
+ String.prototype.startsWith = function (searchString, position) {
2904
+ position = position || 0;
2905
+ return this.substr(position, searchString.length) === searchString;
2906
+ };
2907
+ }
2825
2908
 
2826
2909
  /***/ },
2827
2910
  /* 5 */
@@ -3895,7 +3978,11 @@ return /******/ (function(modules) { // webpackBootstrap
3895
3978
  var height = ul.clientHeight; // force a reflow in Firefox
3896
3979
  setTimeout(function () {
3897
3980
  if (me.expandedItem == domItem) {
3898
- ul.style.height = (ul.childNodes.length * 24) + 'px';
3981
+ var childsHeight = 0;
3982
+ for (var i = 0; i < ul.childNodes.length; i++) {
3983
+ childsHeight += ul.childNodes[i].clientHeight;
3984
+ }
3985
+ ul.style.height = childsHeight + 'px';
3899
3986
  ul.style.padding = '5px 10px';
3900
3987
  }
3901
3988
  }, 0);
@@ -4412,16 +4499,6 @@ return /******/ (function(modules) { // webpackBootstrap
4412
4499
  return (this.parent ? this.parent.getLevel() + 1 : 0);
4413
4500
  };
4414
4501
 
4415
- /**
4416
- * Get path of the root node till the current node
4417
- * @return {Node[]} Returns an array with nodes
4418
- */
4419
- Node.prototype.getNodePath = function() {
4420
- var path = this.parent ? this.parent.getNodePath() : [];
4421
- path.push(this);
4422
- return path;
4423
- };
4424
-
4425
4502
  /**
4426
4503
  * Create a clone of a node
4427
4504
  * The complete state of a clone is copied, including whether it is expanded or
@@ -4896,7 +4973,11 @@ return /******/ (function(modules) { // webpackBootstrap
4896
4973
 
4897
4974
  case 'value':
4898
4975
  default:
4899
- if (dom.value && !this._hasChilds()) {
4976
+ if (dom.select) {
4977
+ // enum select box
4978
+ dom.select.focus();
4979
+ }
4980
+ else if (dom.value && !this._hasChilds()) {
4900
4981
  dom.value.focus();
4901
4982
  util.selectContentEditable(dom.value);
4902
4983
  }
@@ -7211,6 +7292,32 @@ return /******/ (function(modules) { // webpackBootstrap
7211
7292
  'but always returned as string.'
7212
7293
  };
7213
7294
 
7295
+ Node.prototype.addTemplates = function (menu, append) {
7296
+ var node = this;
7297
+ var templates = node.editor.options.templates;
7298
+ if (templates == null) return;
7299
+ if (templates.length) {
7300
+ // create a separator
7301
+ menu.push({
7302
+ 'type': 'separator'
7303
+ });
7304
+ }
7305
+ var appendData = function (name, data) {
7306
+ node._onAppend(name, data);
7307
+ };
7308
+ var insertData = function (name, data) {
7309
+ node._onInsertBefore(name, data);
7310
+ };
7311
+ templates.forEach(function (template) {
7312
+ menu.push({
7313
+ text: template.text,
7314
+ className: (template.className || 'jsoneditor-type-object'),
7315
+ title: template.title,
7316
+ click: (append ? appendData.bind(this, template.field, template.value) : insertData.bind(this, template.field, template.value))
7317
+ });
7318
+ });
7319
+ };
7320
+
7214
7321
  /**
7215
7322
  * Show a contextmenu for this node
7216
7323
  * @param {HTMLElement} anchor Anchor element to attach the context menu to
@@ -7310,52 +7417,91 @@ return /******/ (function(modules) { // webpackBootstrap
7310
7417
  // create append button (for last child node only)
7311
7418
  var childs = node.parent.childs;
7312
7419
  if (node == childs[childs.length - 1]) {
7313
- items.push({
7314
- text: 'Append',
7315
- title: 'Append a new field with type \'auto\' after this field (Ctrl+Shift+Ins)',
7316
- submenuTitle: 'Select the type of the field to be appended',
7317
- className: 'jsoneditor-append',
7318
- click: function () {
7319
- node._onAppend('', '', 'auto');
7320
- },
7321
- submenu: [
7322
- {
7420
+ var appendSubmenu = [
7421
+ {
7422
+ text: 'Auto',
7423
+ className: 'jsoneditor-type-auto',
7424
+ title: titles.auto,
7425
+ click: function () {
7426
+ node._onAppend('', '', 'auto');
7427
+ }
7428
+ },
7429
+ {
7430
+ text: 'Array',
7431
+ className: 'jsoneditor-type-array',
7432
+ title: titles.array,
7433
+ click: function () {
7434
+ node._onAppend('', []);
7435
+ }
7436
+ },
7437
+ {
7438
+ text: 'Object',
7439
+ className: 'jsoneditor-type-object',
7440
+ title: titles.object,
7441
+ click: function () {
7442
+ node._onAppend('', {});
7443
+ }
7444
+ },
7445
+ {
7446
+ text: 'String',
7447
+ className: 'jsoneditor-type-string',
7448
+ title: titles.string,
7449
+ click: function () {
7450
+ node._onAppend('', '', 'string');
7451
+ }
7452
+ }
7453
+ ];
7454
+ node.addTemplates(appendSubmenu, true);
7455
+ items.push({
7456
+ text: 'Append',
7457
+ title: 'Append a new field with type \'auto\' after this field (Ctrl+Shift+Ins)',
7458
+ submenuTitle: 'Select the type of the field to be appended',
7459
+ className: 'jsoneditor-append',
7460
+ click: function () {
7461
+ node._onAppend('', '', 'auto');
7462
+ },
7463
+ submenu: appendSubmenu
7464
+ });
7465
+ }
7466
+
7467
+
7468
+
7469
+ // create insert button
7470
+ var insertSubmenu = [
7471
+ {
7323
7472
  text: 'Auto',
7324
7473
  className: 'jsoneditor-type-auto',
7325
7474
  title: titles.auto,
7326
7475
  click: function () {
7327
- node._onAppend('', '', 'auto');
7476
+ node._onInsertBefore('', '', 'auto');
7328
7477
  }
7329
- },
7330
- {
7478
+ },
7479
+ {
7331
7480
  text: 'Array',
7332
7481
  className: 'jsoneditor-type-array',
7333
7482
  title: titles.array,
7334
7483
  click: function () {
7335
- node._onAppend('', []);
7484
+ node._onInsertBefore('', []);
7336
7485
  }
7337
- },
7338
- {
7486
+ },
7487
+ {
7339
7488
  text: 'Object',
7340
7489
  className: 'jsoneditor-type-object',
7341
7490
  title: titles.object,
7342
7491
  click: function () {
7343
- node._onAppend('', {});
7492
+ node._onInsertBefore('', {});
7344
7493
  }
7345
- },
7346
- {
7494
+ },
7495
+ {
7347
7496
  text: 'String',
7348
7497
  className: 'jsoneditor-type-string',
7349
7498
  title: titles.string,
7350
7499
  click: function () {
7351
- node._onAppend('', '', 'string');
7500
+ node._onInsertBefore('', '', 'string');
7352
7501
  }
7353
- }
7354
- ]
7355
- });
7356
- }
7357
-
7358
- // create insert button
7502
+ }
7503
+ ];
7504
+ node.addTemplates(insertSubmenu, false);
7359
7505
  items.push({
7360
7506
  text: 'Insert',
7361
7507
  title: 'Insert a new field with type \'auto\' before this field (Ctrl+Ins)',
@@ -7364,40 +7510,7 @@ return /******/ (function(modules) { // webpackBootstrap
7364
7510
  click: function () {
7365
7511
  node._onInsertBefore('', '', 'auto');
7366
7512
  },
7367
- submenu: [
7368
- {
7369
- text: 'Auto',
7370
- className: 'jsoneditor-type-auto',
7371
- title: titles.auto,
7372
- click: function () {
7373
- node._onInsertBefore('', '', 'auto');
7374
- }
7375
- },
7376
- {
7377
- text: 'Array',
7378
- className: 'jsoneditor-type-array',
7379
- title: titles.array,
7380
- click: function () {
7381
- node._onInsertBefore('', []);
7382
- }
7383
- },
7384
- {
7385
- text: 'Object',
7386
- className: 'jsoneditor-type-object',
7387
- title: titles.object,
7388
- click: function () {
7389
- node._onInsertBefore('', {});
7390
- }
7391
- },
7392
- {
7393
- text: 'String',
7394
- className: 'jsoneditor-type-string',
7395
- title: titles.string,
7396
- click: function () {
7397
- node._onInsertBefore('', '', 'string');
7398
- }
7399
- }
7400
- ]
7513
+ submenu: insertSubmenu
7401
7514
  });
7402
7515
 
7403
7516
  if (this.editable.field) {
@@ -7761,50 +7874,52 @@ return /******/ (function(modules) { // webpackBootstrap
7761
7874
  AppendNode.prototype.showContextMenu = function (anchor, onClose) {
7762
7875
  var node = this;
7763
7876
  var titles = Node.TYPE_TITLES;
7877
+ var appendSubmenu = [
7878
+ {
7879
+ text: 'Auto',
7880
+ className: 'jsoneditor-type-auto',
7881
+ title: titles.auto,
7882
+ click: function () {
7883
+ node._onAppend('', '', 'auto');
7884
+ }
7885
+ },
7886
+ {
7887
+ text: 'Array',
7888
+ className: 'jsoneditor-type-array',
7889
+ title: titles.array,
7890
+ click: function () {
7891
+ node._onAppend('', []);
7892
+ }
7893
+ },
7894
+ {
7895
+ text: 'Object',
7896
+ className: 'jsoneditor-type-object',
7897
+ title: titles.object,
7898
+ click: function () {
7899
+ node._onAppend('', {});
7900
+ }
7901
+ },
7902
+ {
7903
+ text: 'String',
7904
+ className: 'jsoneditor-type-string',
7905
+ title: titles.string,
7906
+ click: function () {
7907
+ node._onAppend('', '', 'string');
7908
+ }
7909
+ }
7910
+ ];
7911
+ node.addTemplates(appendSubmenu, true);
7764
7912
  var items = [
7765
7913
  // create append button
7766
7914
  {
7767
- 'text': 'Append',
7915
+ 'text': 'Append!',
7768
7916
  'title': 'Append a new field with type \'auto\' (Ctrl+Shift+Ins)',
7769
7917
  'submenuTitle': 'Select the type of the field to be appended',
7770
7918
  'className': 'jsoneditor-insert',
7771
7919
  'click': function () {
7772
7920
  node._onAppend('', '', 'auto');
7773
7921
  },
7774
- 'submenu': [
7775
- {
7776
- 'text': 'Auto',
7777
- 'className': 'jsoneditor-type-auto',
7778
- 'title': titles.auto,
7779
- 'click': function () {
7780
- node._onAppend('', '', 'auto');
7781
- }
7782
- },
7783
- {
7784
- 'text': 'Array',
7785
- 'className': 'jsoneditor-type-array',
7786
- 'title': titles.array,
7787
- 'click': function () {
7788
- node._onAppend('', []);
7789
- }
7790
- },
7791
- {
7792
- 'text': 'Object',
7793
- 'className': 'jsoneditor-type-object',
7794
- 'title': titles.object,
7795
- 'click': function () {
7796
- node._onAppend('', {});
7797
- }
7798
- },
7799
- {
7800
- 'text': 'String',
7801
- 'className': 'jsoneditor-type-string',
7802
- 'title': titles.string,
7803
- 'click': function () {
7804
- node._onAppend('', '', 'string');
7805
- }
7806
- }
7807
- ]
7922
+ 'submenu': appendSubmenu
7808
7923
  }
7809
7924
  ];
7810
7925
 
@@ -7979,18 +8094,383 @@ return /******/ (function(modules) { // webpackBootstrap
7979
8094
 
7980
8095
  /***/ },
7981
8096
  /* 12 */
7982
- /***/ function(module, exports, __webpack_require__) {
8097
+ /***/ function(module, exports) {
7983
8098
 
7984
8099
  'use strict';
7985
8100
 
7986
- var ace;
7987
- try {
7988
- ace = __webpack_require__(13);
7989
- }
7990
- catch (err) {
7991
- // failed to load ace, no problem, we will fall back to plain text
8101
+ function completely(config) {
8102
+ config = config || {};
8103
+ config.confirmKeys = config.confirmKeys || [39, 35, 9] // right, end, tab
8104
+
8105
+ var fontSize = '';
8106
+ var fontFamily = '';
8107
+
8108
+ var wrapper = document.createElement('div');
8109
+ wrapper.style.position = 'relative';
8110
+ wrapper.style.outline = '0';
8111
+ wrapper.style.border = '0';
8112
+ wrapper.style.margin = '0';
8113
+ wrapper.style.padding = '0';
8114
+
8115
+ var dropDown = document.createElement('div');
8116
+ dropDown.className = 'autocomplete dropdown';
8117
+ dropDown.style.position = 'absolute';
8118
+ dropDown.style.visibility = 'hidden';
8119
+
8120
+ var spacer;
8121
+ var leftSide; // <-- it will contain the leftSide part of the textfield (the bit that was already autocompleted)
8122
+ var createDropDownController = function (elem, rs) {
8123
+ var rows = [];
8124
+ var ix = 0;
8125
+ var oldIndex = -1;
8126
+
8127
+ var onMouseOver = function () { this.style.outline = '1px solid #ddd'; }
8128
+ var onMouseOut = function () { this.style.outline = '0'; }
8129
+ var onMouseDown = function () { p.hide(); p.onmouseselection(this.__hint, p.rs); }
8130
+
8131
+ var p = {
8132
+ rs: rs,
8133
+ hide: function () {
8134
+ elem.style.visibility = 'hidden';
8135
+ //rs.hideDropDown();
8136
+ },
8137
+ refresh: function (token, array) {
8138
+ elem.style.visibility = 'hidden';
8139
+ ix = 0;
8140
+ elem.innerHTML = '';
8141
+ var vph = (window.innerHeight || document.documentElement.clientHeight);
8142
+ var rect = elem.parentNode.getBoundingClientRect();
8143
+ var distanceToTop = rect.top - 6; // heuristic give 6px
8144
+ var distanceToBottom = vph - rect.bottom - 6; // distance from the browser border.
8145
+
8146
+ rows = [];
8147
+ for (var i = 0; i < array.length; i++) {
8148
+ if (array[i].indexOf(token) !== 0) { continue; }
8149
+ var divRow = document.createElement('div');
8150
+ divRow.className = 'item';
8151
+ //divRow.style.color = config.color;
8152
+ divRow.onmouseover = onMouseOver;
8153
+ divRow.onmouseout = onMouseOut;
8154
+ divRow.onmousedown = onMouseDown;
8155
+ divRow.__hint = array[i];
8156
+ divRow.innerHTML = token + '<b>' + array[i].substring(token.length) + '</b>';
8157
+ rows.push(divRow);
8158
+ elem.appendChild(divRow);
8159
+ }
8160
+ if (rows.length === 0) {
8161
+ return; // nothing to show.
8162
+ }
8163
+ if (rows.length === 1 && token === rows[0].__hint) {
8164
+ return; // do not show the dropDown if it has only one element which matches what we have just displayed.
8165
+ }
8166
+
8167
+ if (rows.length < 2) return;
8168
+ p.highlight(0);
8169
+
8170
+ if (distanceToTop > distanceToBottom * 3) { // Heuristic (only when the distance to the to top is 4 times more than distance to the bottom
8171
+ elem.style.maxHeight = distanceToTop + 'px'; // we display the dropDown on the top of the input text
8172
+ elem.style.top = '';
8173
+ elem.style.bottom = '100%';
8174
+ } else {
8175
+ elem.style.top = '100%';
8176
+ elem.style.bottom = '';
8177
+ elem.style.maxHeight = distanceToBottom + 'px';
8178
+ }
8179
+ elem.style.visibility = 'visible';
8180
+ },
8181
+ highlight: function (index) {
8182
+ if (oldIndex != -1 && rows[oldIndex]) {
8183
+ rows[oldIndex].className = "item";
8184
+ }
8185
+ rows[index].className = "item hover";
8186
+ oldIndex = index;
8187
+ },
8188
+ move: function (step) { // moves the selection either up or down (unless it's not possible) step is either +1 or -1.
8189
+ if (elem.style.visibility === 'hidden') return ''; // nothing to move if there is no dropDown. (this happens if the user hits escape and then down or up)
8190
+ if (ix + step === -1 || ix + step === rows.length) return rows[ix].__hint; // NO CIRCULAR SCROLLING.
8191
+ ix += step;
8192
+ p.highlight(ix);
8193
+ return rows[ix].__hint;//txtShadow.value = uRows[uIndex].__hint ;
8194
+ },
8195
+ onmouseselection: function () { } // it will be overwritten.
8196
+ };
8197
+ return p;
8198
+ }
8199
+
8200
+ function setEndOfContenteditable(contentEditableElement) {
8201
+ var range, selection;
8202
+ if (document.createRange)//Firefox, Chrome, Opera, Safari, IE 9+
8203
+ {
8204
+ range = document.createRange();//Create a range (a range is a like the selection but invisible)
8205
+ range.selectNodeContents(contentEditableElement);//Select the entire contents of the element with the range
8206
+ range.collapse(false);//collapse the range to the end point. false means collapse to end rather than the start
8207
+ selection = window.getSelection();//get the selection object (allows you to change selection)
8208
+ selection.removeAllRanges();//remove any selections already made
8209
+ selection.addRange(range);//make the range you have just created the visible selection
8210
+ }
8211
+ else if (document.selection)//IE 8 and lower
8212
+ {
8213
+ range = document.body.createTextRange();//Create a range (a range is a like the selection but invisible)
8214
+ range.moveToElementText(contentEditableElement);//Select the entire contents of the element with the range
8215
+ range.collapse(false);//collapse the range to the end point. false means collapse to end rather than the start
8216
+ range.select();//Select the range (make it the visible selection
8217
+ }
8218
+ }
8219
+
8220
+ function calculateWidthForText(text) {
8221
+ if (spacer === undefined) { // on first call only.
8222
+ spacer = document.createElement('span');
8223
+ spacer.style.visibility = 'hidden';
8224
+ spacer.style.position = 'fixed';
8225
+ spacer.style.outline = '0';
8226
+ spacer.style.margin = '0';
8227
+ spacer.style.padding = '0';
8228
+ spacer.style.border = '0';
8229
+ spacer.style.left = '0';
8230
+ spacer.style.whiteSpace = 'pre';
8231
+ spacer.style.fontSize = fontSize;
8232
+ spacer.style.fontFamily = fontFamily;
8233
+ spacer.style.fontWeight = 'normal';
8234
+ document.body.appendChild(spacer);
8235
+ }
8236
+
8237
+ // Used to encode an HTML string into a plain text.
8238
+ // taken from http://stackoverflow.com/questions/1219860/javascript-jquery-html-encoding
8239
+ spacer.innerHTML = String(text).replace(/&/g, '&amp;')
8240
+ .replace(/"/g, '&quot;')
8241
+ .replace(/'/g, '&#39;')
8242
+ .replace(/</g, '&lt;')
8243
+ .replace(/>/g, '&gt;');
8244
+ return spacer.getBoundingClientRect().right;
8245
+ }
8246
+
8247
+ var rs = {
8248
+ onArrowDown: function () { }, // defaults to no action.
8249
+ onArrowUp: function () { }, // defaults to no action.
8250
+ onEnter: function () { }, // defaults to no action.
8251
+ onTab: function () { }, // defaults to no action.
8252
+ startFrom: 0,
8253
+ options: [],
8254
+ element: null,
8255
+ elementHint: null,
8256
+ elementStyle: null,
8257
+ wrapper: wrapper, // Only to allow easy access to the HTML elements to the final user (possibly for minor customizations)
8258
+ show: function (element, startPos, options) {
8259
+ this.startFrom = startPos;
8260
+ this.wrapper.remove();
8261
+ if (this.elementHint) {
8262
+ this.elementHint.remove();
8263
+ this.elementHint = null;
8264
+ }
8265
+
8266
+ if (fontSize == '') {
8267
+ fontSize = window.getComputedStyle(element).getPropertyValue('font-size');
8268
+ }
8269
+ if (fontFamily == '') {
8270
+ fontFamily = window.getComputedStyle(element).getPropertyValue('font-family');
8271
+ }
8272
+
8273
+ var w = element.getBoundingClientRect().right - element.getBoundingClientRect().left;
8274
+ dropDown.style.marginLeft = '0';
8275
+ dropDown.style.marginTop = element.getBoundingClientRect().height + 'px';
8276
+ this.options = options;
8277
+
8278
+ if (this.element != element) {
8279
+ this.element = element;
8280
+ this.elementStyle = {
8281
+ zIndex: this.element.style.zIndex,
8282
+ position: this.element.style.position,
8283
+ backgroundColor: this.element.style.backgroundColor,
8284
+ borderColor: this.element.style.borderColor
8285
+ }
8286
+ }
8287
+
8288
+ this.element.style.zIndex = 3;
8289
+ this.element.style.position = 'relative';
8290
+ this.element.style.backgroundColor = 'transparent';
8291
+ this.element.style.borderColor = 'transparent';
8292
+
8293
+ this.elementHint = element.cloneNode();
8294
+ this.elementHint.className = 'autocomplete hint';
8295
+ this.elementHint.style.zIndex = 2;
8296
+ this.elementHint.style.position = 'absolute';
8297
+ this.elementHint.onfocus = function () { this.element.focus(); }.bind(this);
8298
+
8299
+
8300
+
8301
+ if (this.element.addEventListener) {
8302
+ this.element.removeEventListener("keydown", keyDownHandler);
8303
+ this.element.addEventListener("keydown", keyDownHandler, false);
8304
+ this.element.removeEventListener("blur", onBlurHandler);
8305
+ this.element.addEventListener("blur", onBlurHandler, false);
8306
+ }
8307
+
8308
+ wrapper.appendChild(this.elementHint);
8309
+ wrapper.appendChild(dropDown);
8310
+ element.parentElement.appendChild(wrapper);
8311
+
8312
+
8313
+ this.repaint(element);
8314
+ },
8315
+ setText: function (text) {
8316
+ this.element.innerText = text;
8317
+ },
8318
+ getText: function () {
8319
+ return this.element.innerText;
8320
+ },
8321
+ hideDropDown: function () {
8322
+ this.wrapper.remove();
8323
+ if (this.elementHint) {
8324
+ this.elementHint.remove();
8325
+ this.elementHint = null;
8326
+ dropDownController.hide();
8327
+ this.element.style.zIndex = this.elementStyle.zIndex;
8328
+ this.element.style.position = this.elementStyle.position;
8329
+ this.element.style.backgroundColor = this.elementStyle.backgroundColor;
8330
+ this.element.style.borderColor = this.elementStyle.borderColor;
8331
+ }
8332
+
8333
+ },
8334
+ repaint: function (element) {
8335
+ var text = element.innerText;
8336
+ text = text.replace('\n', '');
8337
+
8338
+ var startFrom = this.startFrom;
8339
+ var options = this.options;
8340
+ var optionsLength = this.options.length;
8341
+
8342
+ // breaking text in leftSide and token.
8343
+
8344
+ var token = text.substring(this.startFrom);
8345
+ leftSide = text.substring(0, this.startFrom);
8346
+
8347
+ for (var i = 0; i < optionsLength; i++) {
8348
+ var opt = this.options[i];
8349
+ if (opt.indexOf(token) === 0) { // <-- how about upperCase vs. lowercase
8350
+ this.elementHint.innerText = leftSide + opt;
8351
+ break;
8352
+ }
8353
+ }
8354
+ // moving the dropDown and refreshing it.
8355
+ dropDown.style.left = calculateWidthForText(leftSide) + 'px';
8356
+ dropDownController.refresh(token, this.options);
8357
+ this.elementHint.style.width = calculateWidthForText(this.elementHint.innerText) + 10 + 'px'
8358
+ var wasDropDownHidden = (dropDown.style.visibility == 'hidden');
8359
+ if (!wasDropDownHidden)
8360
+ this.elementHint.style.width = calculateWidthForText(this.elementHint.innerText) + dropDown.clientWidth + 'px';
8361
+ }
8362
+ };
8363
+
8364
+ var dropDownController = createDropDownController(dropDown, rs);
8365
+
8366
+ var keyDownHandler = function (e) {
8367
+ //console.log("Keydown:" + e.keyCode);
8368
+ e = e || window.event;
8369
+ var keyCode = e.keyCode;
8370
+
8371
+ if (this.elementHint == null) return;
8372
+
8373
+ if (keyCode == 33) { return; } // page up (do nothing)
8374
+ if (keyCode == 34) { return; } // page down (do nothing);
8375
+
8376
+ if (keyCode == 27) { //escape
8377
+ rs.hideDropDown();
8378
+ rs.element.focus();
8379
+ e.preventDefault();
8380
+ e.stopPropagation();
8381
+ return;
8382
+ }
8383
+
8384
+ if (config.confirmKeys.indexOf(keyCode) >= 0) { // (autocomplete triggered)
8385
+ if (keyCode == 9) {
8386
+ if (this.elementHint.innerText.length == 0) {
8387
+ rs.onTab();
8388
+ }
8389
+ }
8390
+ if (this.elementHint.innerText.length > 0) { // if there is a hint
8391
+ if (this.element.innerText != this.elementHint.innerText) {
8392
+ this.element.innerText = this.elementHint.innerText;
8393
+ rs.hideDropDown();
8394
+ setEndOfContenteditable(this.element);
8395
+ if (keyCode == 9) {
8396
+ rs.element.focus();
8397
+ e.preventDefault();
8398
+ e.stopPropagation();
8399
+ }
8400
+ }
8401
+ }
8402
+ return;
8403
+ }
8404
+
8405
+ if (keyCode == 13) { // enter (autocomplete triggered)
8406
+ if (this.elementHint.innerText.length == 0) { // if there is a hint
8407
+ rs.onEnter();
8408
+ } else {
8409
+ var wasDropDownHidden = (dropDown.style.visibility == 'hidden');
8410
+ dropDownController.hide();
8411
+
8412
+ if (wasDropDownHidden) {
8413
+ rs.hideDropDown();
8414
+ rs.element.focus();
8415
+ rs.onEnter();
8416
+ return;
8417
+ }
8418
+
8419
+ this.element.innerText = this.elementHint.innerText;
8420
+ rs.hideDropDown();
8421
+ setEndOfContenteditable(this.element);
8422
+ e.preventDefault();
8423
+ e.stopPropagation();
8424
+ }
8425
+ return;
8426
+ }
8427
+
8428
+ if (keyCode == 40) { // down
8429
+ var m = dropDownController.move(+1);
8430
+ if (m == '') { rs.onArrowDown(); }
8431
+ this.elementHint.innerText = leftSide + m;
8432
+ e.preventDefault();
8433
+ e.stopPropagation();
8434
+ return;
8435
+ }
8436
+
8437
+ if (keyCode == 38) { // up
8438
+ var m = dropDownController.move(-1);
8439
+ if (m == '') { rs.onArrowUp(); }
8440
+ this.elementHint.innerText = leftSide + m;
8441
+ e.preventDefault();
8442
+ e.stopPropagation();
8443
+ return;
8444
+ }
8445
+
8446
+ }.bind(rs);
8447
+
8448
+ var onBlurHandler = function (e) {
8449
+ rs.hideDropDown();
8450
+ //console.log("Lost focus.");
8451
+ }.bind(rs);
8452
+
8453
+ dropDownController.onmouseselection = function (text, rs) {
8454
+ rs.element.innerText = rs.elementHint.innerText = leftSide + text;
8455
+ rs.hideDropDown();
8456
+ window.setTimeout(function () {
8457
+ rs.element.focus();
8458
+ setEndOfContenteditable(rs.element);
8459
+ }, 1);
8460
+ };
8461
+
8462
+ return rs;
7992
8463
  }
7993
8464
 
8465
+ module.exports = completely;
8466
+
8467
+ /***/ },
8468
+ /* 13 */
8469
+ /***/ function(module, exports, __webpack_require__) {
8470
+
8471
+ 'use strict';
8472
+
8473
+ var ace = __webpack_require__(14);
7994
8474
  var ModeSwitcher = __webpack_require__(11);
7995
8475
  var util = __webpack_require__(4);
7996
8476
 
@@ -8014,6 +8494,8 @@ return /******/ (function(modules) { // webpackBootstrap
8014
8494
  * triggered on change
8015
8495
  * {function} onModeChange Callback method
8016
8496
  * triggered after setMode
8497
+ * {function} onEditable Determine if textarea is readOnly
8498
+ * readOnly defaults true
8017
8499
  * {Object} ace A custom instance of
8018
8500
  * Ace editor.
8019
8501
  * {boolean} escapeUnicode If true, unicode
@@ -8036,6 +8518,7 @@ return /******/ (function(modules) { // webpackBootstrap
8036
8518
 
8037
8519
  // grab ace from options if provided
8038
8520
  var _ace = options.ace ? options.ace : ace;
8521
+ // TODO: make the option options.ace deprecated, it's not needed anymore (see #309)
8039
8522
 
8040
8523
  // determine mode
8041
8524
  this.mode = (options.mode == 'code') ? 'code' : 'text';
@@ -8049,8 +8532,13 @@ return /******/ (function(modules) { // webpackBootstrap
8049
8532
 
8050
8533
  // determine theme
8051
8534
  this.theme = options.theme || DEFAULT_THEME;
8052
- if (this.theme === DEFAULT_THEME && window.ace) {
8053
- __webpack_require__(17);
8535
+ if (this.theme === DEFAULT_THEME && _ace) {
8536
+ try {
8537
+ __webpack_require__(18);
8538
+ }
8539
+ catch (err) {
8540
+ console.error(err);
8541
+ }
8054
8542
  }
8055
8543
 
8056
8544
  var me = this;
@@ -8122,6 +8610,11 @@ return /******/ (function(modules) { // webpackBootstrap
8122
8610
  });
8123
8611
  }
8124
8612
 
8613
+ var emptyNode = {};
8614
+ var isReadOnly = (this.options.onEditable
8615
+ && typeof(this.options.onEditable === 'function')
8616
+ && !this.options.onEditable(emptyNode));
8617
+
8125
8618
  this.content = document.createElement('div');
8126
8619
  this.content.className = 'jsoneditor-outer';
8127
8620
  this.frame.appendChild(this.content);
@@ -8137,6 +8630,7 @@ return /******/ (function(modules) { // webpackBootstrap
8137
8630
  var aceEditor = _ace.edit(this.editorDom);
8138
8631
  aceEditor.$blockScrolling = Infinity;
8139
8632
  aceEditor.setTheme(this.theme);
8633
+ aceEditor.setOptions({ readOnly: isReadOnly });
8140
8634
  aceEditor.setShowPrintMargin(false);
8141
8635
  aceEditor.setFontSize(13);
8142
8636
  aceEditor.getSession().setMode('ace/mode/json');
@@ -8184,6 +8678,7 @@ return /******/ (function(modules) { // webpackBootstrap
8184
8678
  textarea.spellcheck = false;
8185
8679
  this.content.appendChild(textarea);
8186
8680
  this.textarea = textarea;
8681
+ this.textarea.readOnly = isReadOnly;
8187
8682
 
8188
8683
  // register onchange event
8189
8684
  if (this.textarea.oninput === null) {
@@ -8195,7 +8690,7 @@ return /******/ (function(modules) { // webpackBootstrap
8195
8690
  }
8196
8691
  }
8197
8692
 
8198
- this.setSchema(this.options.schema);
8693
+ this.setSchema(this.options.schema, this.options.schemaRefs);
8199
8694
  };
8200
8695
 
8201
8696
  /**
@@ -8480,21 +8975,34 @@ return /******/ (function(modules) { // webpackBootstrap
8480
8975
 
8481
8976
 
8482
8977
  /***/ },
8483
- /* 13 */
8978
+ /* 14 */
8484
8979
  /***/ function(module, exports, __webpack_require__) {
8485
8980
 
8486
- // load brace
8487
- var ace = __webpack_require__(!(function webpackMissingModule() { var e = new Error("Cannot find module \"brace\""); e.code = 'MODULE_NOT_FOUND'; throw e; }()));
8981
+ var ace
8982
+ if (window.ace) {
8983
+ // use the already loaded instance of Ace
8984
+ ace = window.ace
8985
+ }
8986
+ else {
8987
+ try {
8988
+ // load brace
8989
+ ace = __webpack_require__(!(function webpackMissingModule() { var e = new Error("Cannot find module \"brace\""); e.code = 'MODULE_NOT_FOUND'; throw e; }()));
8488
8990
 
8489
- // load required ace modules
8490
- __webpack_require__(14);
8491
- __webpack_require__(16);
8991
+ // load required Ace plugins
8992
+ __webpack_require__(15);
8993
+ __webpack_require__(17);
8994
+ }
8995
+ catch (err) {
8996
+ // failed to load brace (can be minimalist bundle).
8997
+ // No worries, the editor will fall back to plain text if needed.
8998
+ }
8999
+ }
8492
9000
 
8493
9001
  module.exports = ace;
8494
9002
 
8495
9003
 
8496
9004
  /***/ },
8497
- /* 14 */
9005
+ /* 15 */
8498
9006
  /***/ function(module, exports, __webpack_require__) {
8499
9007
 
8500
9008
  ace.define("ace/mode/json_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(acequire, exports, module) {
@@ -8605,363 +9113,6 @@ return /******/ (function(modules) { // webpackBootstrap
8605
9113
  exports.MatchingBraceOutdent = MatchingBraceOutdent;
8606
9114
  });
8607
9115
 
8608
- ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(acequire, exports, module) {
8609
- "use strict";
8610
-
8611
- var oop = acequire("../../lib/oop");
8612
- var Behaviour = acequire("../behaviour").Behaviour;
8613
- var TokenIterator = acequire("../../token_iterator").TokenIterator;
8614
- var lang = acequire("../../lib/lang");
8615
-
8616
- var SAFE_INSERT_IN_TOKENS =
8617
- ["text", "paren.rparen", "punctuation.operator"];
8618
- var SAFE_INSERT_BEFORE_TOKENS =
8619
- ["text", "paren.rparen", "punctuation.operator", "comment"];
8620
-
8621
- var context;
8622
- var contextCache = {};
8623
- var initContext = function(editor) {
8624
- var id = -1;
8625
- if (editor.multiSelect) {
8626
- id = editor.selection.index;
8627
- if (contextCache.rangeCount != editor.multiSelect.rangeCount)
8628
- contextCache = {rangeCount: editor.multiSelect.rangeCount};
8629
- }
8630
- if (contextCache[id])
8631
- return context = contextCache[id];
8632
- context = contextCache[id] = {
8633
- autoInsertedBrackets: 0,
8634
- autoInsertedRow: -1,
8635
- autoInsertedLineEnd: "",
8636
- maybeInsertedBrackets: 0,
8637
- maybeInsertedRow: -1,
8638
- maybeInsertedLineStart: "",
8639
- maybeInsertedLineEnd: ""
8640
- };
8641
- };
8642
-
8643
- var getWrapped = function(selection, selected, opening, closing) {
8644
- var rowDiff = selection.end.row - selection.start.row;
8645
- return {
8646
- text: opening + selected + closing,
8647
- selection: [
8648
- 0,
8649
- selection.start.column + 1,
8650
- rowDiff,
8651
- selection.end.column + (rowDiff ? 0 : 1)
8652
- ]
8653
- };
8654
- };
8655
-
8656
- var CstyleBehaviour = function() {
8657
- this.add("braces", "insertion", function(state, action, editor, session, text) {
8658
- var cursor = editor.getCursorPosition();
8659
- var line = session.doc.getLine(cursor.row);
8660
- if (text == '{') {
8661
- initContext(editor);
8662
- var selection = editor.getSelectionRange();
8663
- var selected = session.doc.getTextRange(selection);
8664
- if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) {
8665
- return getWrapped(selection, selected, '{', '}');
8666
- } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
8667
- if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) {
8668
- CstyleBehaviour.recordAutoInsert(editor, session, "}");
8669
- return {
8670
- text: '{}',
8671
- selection: [1, 1]
8672
- };
8673
- } else {
8674
- CstyleBehaviour.recordMaybeInsert(editor, session, "{");
8675
- return {
8676
- text: '{',
8677
- selection: [1, 1]
8678
- };
8679
- }
8680
- }
8681
- } else if (text == '}') {
8682
- initContext(editor);
8683
- var rightChar = line.substring(cursor.column, cursor.column + 1);
8684
- if (rightChar == '}') {
8685
- var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});
8686
- if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
8687
- CstyleBehaviour.popAutoInsertedClosing();
8688
- return {
8689
- text: '',
8690
- selection: [1, 1]
8691
- };
8692
- }
8693
- }
8694
- } else if (text == "\n" || text == "\r\n") {
8695
- initContext(editor);
8696
- var closing = "";
8697
- if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {
8698
- closing = lang.stringRepeat("}", context.maybeInsertedBrackets);
8699
- CstyleBehaviour.clearMaybeInsertedClosing();
8700
- }
8701
- var rightChar = line.substring(cursor.column, cursor.column + 1);
8702
- if (rightChar === '}') {
8703
- var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}');
8704
- if (!openBracePos)
8705
- return null;
8706
- var next_indent = this.$getIndent(session.getLine(openBracePos.row));
8707
- } else if (closing) {
8708
- var next_indent = this.$getIndent(line);
8709
- } else {
8710
- CstyleBehaviour.clearMaybeInsertedClosing();
8711
- return;
8712
- }
8713
- var indent = next_indent + session.getTabString();
8714
-
8715
- return {
8716
- text: '\n' + indent + '\n' + next_indent + closing,
8717
- selection: [1, indent.length, 1, indent.length]
8718
- };
8719
- } else {
8720
- CstyleBehaviour.clearMaybeInsertedClosing();
8721
- }
8722
- });
8723
-
8724
- this.add("braces", "deletion", function(state, action, editor, session, range) {
8725
- var selected = session.doc.getTextRange(range);
8726
- if (!range.isMultiLine() && selected == '{') {
8727
- initContext(editor);
8728
- var line = session.doc.getLine(range.start.row);
8729
- var rightChar = line.substring(range.end.column, range.end.column + 1);
8730
- if (rightChar == '}') {
8731
- range.end.column++;
8732
- return range;
8733
- } else {
8734
- context.maybeInsertedBrackets--;
8735
- }
8736
- }
8737
- });
8738
-
8739
- this.add("parens", "insertion", function(state, action, editor, session, text) {
8740
- if (text == '(') {
8741
- initContext(editor);
8742
- var selection = editor.getSelectionRange();
8743
- var selected = session.doc.getTextRange(selection);
8744
- if (selected !== "" && editor.getWrapBehavioursEnabled()) {
8745
- return getWrapped(selection, selected, '(', ')');
8746
- } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
8747
- CstyleBehaviour.recordAutoInsert(editor, session, ")");
8748
- return {
8749
- text: '()',
8750
- selection: [1, 1]
8751
- };
8752
- }
8753
- } else if (text == ')') {
8754
- initContext(editor);
8755
- var cursor = editor.getCursorPosition();
8756
- var line = session.doc.getLine(cursor.row);
8757
- var rightChar = line.substring(cursor.column, cursor.column + 1);
8758
- if (rightChar == ')') {
8759
- var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});
8760
- if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
8761
- CstyleBehaviour.popAutoInsertedClosing();
8762
- return {
8763
- text: '',
8764
- selection: [1, 1]
8765
- };
8766
- }
8767
- }
8768
- }
8769
- });
8770
-
8771
- this.add("parens", "deletion", function(state, action, editor, session, range) {
8772
- var selected = session.doc.getTextRange(range);
8773
- if (!range.isMultiLine() && selected == '(') {
8774
- initContext(editor);
8775
- var line = session.doc.getLine(range.start.row);
8776
- var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
8777
- if (rightChar == ')') {
8778
- range.end.column++;
8779
- return range;
8780
- }
8781
- }
8782
- });
8783
-
8784
- this.add("brackets", "insertion", function(state, action, editor, session, text) {
8785
- if (text == '[') {
8786
- initContext(editor);
8787
- var selection = editor.getSelectionRange();
8788
- var selected = session.doc.getTextRange(selection);
8789
- if (selected !== "" && editor.getWrapBehavioursEnabled()) {
8790
- return getWrapped(selection, selected, '[', ']');
8791
- } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
8792
- CstyleBehaviour.recordAutoInsert(editor, session, "]");
8793
- return {
8794
- text: '[]',
8795
- selection: [1, 1]
8796
- };
8797
- }
8798
- } else if (text == ']') {
8799
- initContext(editor);
8800
- var cursor = editor.getCursorPosition();
8801
- var line = session.doc.getLine(cursor.row);
8802
- var rightChar = line.substring(cursor.column, cursor.column + 1);
8803
- if (rightChar == ']') {
8804
- var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row});
8805
- if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
8806
- CstyleBehaviour.popAutoInsertedClosing();
8807
- return {
8808
- text: '',
8809
- selection: [1, 1]
8810
- };
8811
- }
8812
- }
8813
- }
8814
- });
8815
-
8816
- this.add("brackets", "deletion", function(state, action, editor, session, range) {
8817
- var selected = session.doc.getTextRange(range);
8818
- if (!range.isMultiLine() && selected == '[') {
8819
- initContext(editor);
8820
- var line = session.doc.getLine(range.start.row);
8821
- var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
8822
- if (rightChar == ']') {
8823
- range.end.column++;
8824
- return range;
8825
- }
8826
- }
8827
- });
8828
-
8829
- this.add("string_dquotes", "insertion", function(state, action, editor, session, text) {
8830
- if (text == '"' || text == "'") {
8831
- initContext(editor);
8832
- var quote = text;
8833
- var selection = editor.getSelectionRange();
8834
- var selected = session.doc.getTextRange(selection);
8835
- if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) {
8836
- return getWrapped(selection, selected, quote, quote);
8837
- } else if (!selected) {
8838
- var cursor = editor.getCursorPosition();
8839
- var line = session.doc.getLine(cursor.row);
8840
- var leftChar = line.substring(cursor.column-1, cursor.column);
8841
- var rightChar = line.substring(cursor.column, cursor.column + 1);
8842
-
8843
- var token = session.getTokenAt(cursor.row, cursor.column);
8844
- var rightToken = session.getTokenAt(cursor.row, cursor.column + 1);
8845
- if (leftChar == "\\" && token && /escape/.test(token.type))
8846
- return null;
8847
-
8848
- var stringBefore = token && /string|escape/.test(token.type);
8849
- var stringAfter = !rightToken || /string|escape/.test(rightToken.type);
8850
-
8851
- var pair;
8852
- if (rightChar == quote) {
8853
- pair = stringBefore !== stringAfter;
8854
- } else {
8855
- if (stringBefore && !stringAfter)
8856
- return null; // wrap string with different quote
8857
- if (stringBefore && stringAfter)
8858
- return null; // do not pair quotes inside strings
8859
- var wordRe = session.$mode.tokenRe;
8860
- wordRe.lastIndex = 0;
8861
- var isWordBefore = wordRe.test(leftChar);
8862
- wordRe.lastIndex = 0;
8863
- var isWordAfter = wordRe.test(leftChar);
8864
- if (isWordBefore || isWordAfter)
8865
- return null; // before or after alphanumeric
8866
- if (rightChar && !/[\s;,.})\]\\]/.test(rightChar))
8867
- return null; // there is rightChar and it isn't closing
8868
- pair = true;
8869
- }
8870
- return {
8871
- text: pair ? quote + quote : "",
8872
- selection: [1,1]
8873
- };
8874
- }
8875
- }
8876
- });
8877
-
8878
- this.add("string_dquotes", "deletion", function(state, action, editor, session, range) {
8879
- var selected = session.doc.getTextRange(range);
8880
- if (!range.isMultiLine() && (selected == '"' || selected == "'")) {
8881
- initContext(editor);
8882
- var line = session.doc.getLine(range.start.row);
8883
- var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
8884
- if (rightChar == selected) {
8885
- range.end.column++;
8886
- return range;
8887
- }
8888
- }
8889
- });
8890
-
8891
- };
8892
-
8893
-
8894
- CstyleBehaviour.isSaneInsertion = function(editor, session) {
8895
- var cursor = editor.getCursorPosition();
8896
- var iterator = new TokenIterator(session, cursor.row, cursor.column);
8897
- if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) {
8898
- var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);
8899
- if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS))
8900
- return false;
8901
- }
8902
- iterator.stepForward();
8903
- return iterator.getCurrentTokenRow() !== cursor.row ||
8904
- this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS);
8905
- };
8906
-
8907
- CstyleBehaviour.$matchTokenType = function(token, types) {
8908
- return types.indexOf(token.type || token) > -1;
8909
- };
8910
-
8911
- CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) {
8912
- var cursor = editor.getCursorPosition();
8913
- var line = session.doc.getLine(cursor.row);
8914
- if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0]))
8915
- context.autoInsertedBrackets = 0;
8916
- context.autoInsertedRow = cursor.row;
8917
- context.autoInsertedLineEnd = bracket + line.substr(cursor.column);
8918
- context.autoInsertedBrackets++;
8919
- };
8920
-
8921
- CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) {
8922
- var cursor = editor.getCursorPosition();
8923
- var line = session.doc.getLine(cursor.row);
8924
- if (!this.isMaybeInsertedClosing(cursor, line))
8925
- context.maybeInsertedBrackets = 0;
8926
- context.maybeInsertedRow = cursor.row;
8927
- context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;
8928
- context.maybeInsertedLineEnd = line.substr(cursor.column);
8929
- context.maybeInsertedBrackets++;
8930
- };
8931
-
8932
- CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) {
8933
- return context.autoInsertedBrackets > 0 &&
8934
- cursor.row === context.autoInsertedRow &&
8935
- bracket === context.autoInsertedLineEnd[0] &&
8936
- line.substr(cursor.column) === context.autoInsertedLineEnd;
8937
- };
8938
-
8939
- CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) {
8940
- return context.maybeInsertedBrackets > 0 &&
8941
- cursor.row === context.maybeInsertedRow &&
8942
- line.substr(cursor.column) === context.maybeInsertedLineEnd &&
8943
- line.substr(0, cursor.column) == context.maybeInsertedLineStart;
8944
- };
8945
-
8946
- CstyleBehaviour.popAutoInsertedClosing = function() {
8947
- context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1);
8948
- context.autoInsertedBrackets--;
8949
- };
8950
-
8951
- CstyleBehaviour.clearMaybeInsertedClosing = function() {
8952
- if (context) {
8953
- context.maybeInsertedBrackets = 0;
8954
- context.maybeInsertedRow = -1;
8955
- }
8956
- };
8957
-
8958
-
8959
-
8960
- oop.inherits(CstyleBehaviour, Behaviour);
8961
-
8962
- exports.CstyleBehaviour = CstyleBehaviour;
8963
- });
8964
-
8965
9116
  ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(acequire, exports, module) {
8966
9117
  "use strict";
8967
9118
 
@@ -9145,7 +9296,7 @@ return /******/ (function(modules) { // webpackBootstrap
9145
9296
  };
9146
9297
 
9147
9298
  this.createWorker = function(session) {
9148
- var worker = new WorkerClient(["ace"], __webpack_require__(15), "JsonWorker");
9299
+ var worker = new WorkerClient(["ace"], __webpack_require__(16), "JsonWorker");
9149
9300
  worker.attachToDocument(session.getDocument());
9150
9301
 
9151
9302
  worker.on("annotate", function(e) {
@@ -9168,14 +9319,14 @@ return /******/ (function(modules) { // webpackBootstrap
9168
9319
 
9169
9320
 
9170
9321
  /***/ },
9171
- /* 15 */
9322
+ /* 16 */
9172
9323
  /***/ function(module, exports) {
9173
9324
 
9174
9325
  module.exports.id = 'ace/mode/json_worker';
9175
- module.exports.src = "\"no use strict\";(function(window){function resolveModuleId(id,paths){for(var testPath=id,tail=\"\";testPath;){var alias=paths[testPath];if(\"string\"==typeof alias)return alias+tail;if(alias)return alias.location.replace(/\\/*$/,\"/\")+(tail||alias.main||alias.name);if(alias===!1)return\"\";var i=testPath.lastIndexOf(\"/\");if(-1===i)break;tail=testPath.substr(i)+tail,testPath=testPath.slice(0,i)}return id}if(!(void 0!==window.window&&window.document||window.acequire&&window.define)){window.console||(window.console=function(){var msgs=Array.prototype.slice.call(arguments,0);postMessage({type:\"log\",data:msgs})},window.console.error=window.console.warn=window.console.log=window.console.trace=window.console),window.window=window,window.ace=window,window.onerror=function(message,file,line,col,err){postMessage({type:\"error\",data:{message:message,data:err.data,file:file,line:line,col:col,stack:err.stack}})},window.normalizeModule=function(parentId,moduleName){if(-1!==moduleName.indexOf(\"!\")){var chunks=moduleName.split(\"!\");return window.normalizeModule(parentId,chunks[0])+\"!\"+window.normalizeModule(parentId,chunks[1])}if(\".\"==moduleName.charAt(0)){var base=parentId.split(\"/\").slice(0,-1).join(\"/\");for(moduleName=(base?base+\"/\":\"\")+moduleName;-1!==moduleName.indexOf(\".\")&&previous!=moduleName;){var previous=moduleName;moduleName=moduleName.replace(/^\\.\\//,\"\").replace(/\\/\\.\\//,\"/\").replace(/[^\\/]+\\/\\.\\.\\//,\"\")}}return moduleName},window.acequire=function acequire(parentId,id){if(id||(id=parentId,parentId=null),!id.charAt)throw Error(\"worker.js acequire() accepts only (parentId, id) as arguments\");id=window.normalizeModule(parentId,id);var module=window.acequire.modules[id];if(module)return module.initialized||(module.initialized=!0,module.exports=module.factory().exports),module.exports;if(!window.acequire.tlns)return console.log(\"unable to load \"+id);var path=resolveModuleId(id,window.acequire.tlns);return\".js\"!=path.slice(-3)&&(path+=\".js\"),window.acequire.id=id,window.acequire.modules[id]={},importScripts(path),window.acequire(parentId,id)},window.acequire.modules={},window.acequire.tlns={},window.define=function(id,deps,factory){if(2==arguments.length?(factory=deps,\"string\"!=typeof id&&(deps=id,id=window.acequire.id)):1==arguments.length&&(factory=id,deps=[],id=window.acequire.id),\"function\"!=typeof factory)return window.acequire.modules[id]={exports:factory,initialized:!0},void 0;deps.length||(deps=[\"require\",\"exports\",\"module\"]);var req=function(childId){return window.acequire(id,childId)};window.acequire.modules[id]={exports:{},factory:function(){var module=this,returnExports=factory.apply(this,deps.map(function(dep){switch(dep){case\"require\":return req;case\"exports\":return module.exports;case\"module\":return module;default:return req(dep)}}));return returnExports&&(module.exports=returnExports),module}}},window.define.amd={},acequire.tlns={},window.initBaseUrls=function(topLevelNamespaces){for(var i in topLevelNamespaces)acequire.tlns[i]=topLevelNamespaces[i]},window.initSender=function(){var EventEmitter=window.acequire(\"ace/lib/event_emitter\").EventEmitter,oop=window.acequire(\"ace/lib/oop\"),Sender=function(){};return function(){oop.implement(this,EventEmitter),this.callback=function(data,callbackId){postMessage({type:\"call\",id:callbackId,data:data})},this.emit=function(name,data){postMessage({type:\"event\",name:name,data:data})}}.call(Sender.prototype),new Sender};var main=window.main=null,sender=window.sender=null;window.onmessage=function(e){var msg=e.data;if(msg.event&&sender)sender._signal(msg.event,msg.data);else if(msg.command)if(main[msg.command])main[msg.command].apply(main,msg.args);else{if(!window[msg.command])throw Error(\"Unknown command:\"+msg.command);window[msg.command].apply(window,msg.args)}else if(msg.init){window.initBaseUrls(msg.tlns),acequire(\"ace/lib/es5-shim\"),sender=window.sender=window.initSender();var clazz=acequire(msg.module)[msg.classname];main=window.main=new clazz(sender)}}}})(this),ace.define(\"ace/lib/oop\",[\"require\",\"exports\",\"module\"],function(acequire,exports){\"use strict\";exports.inherits=function(ctor,superCtor){ctor.super_=superCtor,ctor.prototype=Object.create(superCtor.prototype,{constructor:{value:ctor,enumerable:!1,writable:!0,configurable:!0}})},exports.mixin=function(obj,mixin){for(var key in mixin)obj[key]=mixin[key];return obj},exports.implement=function(proto,mixin){exports.mixin(proto,mixin)}}),ace.define(\"ace/range\",[\"require\",\"exports\",\"module\"],function(acequire,exports){\"use strict\";var comparePoints=function(p1,p2){return p1.row-p2.row||p1.column-p2.column},Range=function(startRow,startColumn,endRow,endColumn){this.start={row:startRow,column:startColumn},this.end={row:endRow,column:endColumn}};(function(){this.isEqual=function(range){return this.start.row===range.start.row&&this.end.row===range.end.row&&this.start.column===range.start.column&&this.end.column===range.end.column},this.toString=function(){return\"Range: [\"+this.start.row+\"/\"+this.start.column+\"] -> [\"+this.end.row+\"/\"+this.end.column+\"]\"},this.contains=function(row,column){return 0==this.compare(row,column)},this.compareRange=function(range){var cmp,end=range.end,start=range.start;return cmp=this.compare(end.row,end.column),1==cmp?(cmp=this.compare(start.row,start.column),1==cmp?2:0==cmp?1:0):-1==cmp?-2:(cmp=this.compare(start.row,start.column),-1==cmp?-1:1==cmp?42:0)},this.comparePoint=function(p){return this.compare(p.row,p.column)},this.containsRange=function(range){return 0==this.comparePoint(range.start)&&0==this.comparePoint(range.end)},this.intersects=function(range){var cmp=this.compareRange(range);return-1==cmp||0==cmp||1==cmp},this.isEnd=function(row,column){return this.end.row==row&&this.end.column==column},this.isStart=function(row,column){return this.start.row==row&&this.start.column==column},this.setStart=function(row,column){\"object\"==typeof row?(this.start.column=row.column,this.start.row=row.row):(this.start.row=row,this.start.column=column)},this.setEnd=function(row,column){\"object\"==typeof row?(this.end.column=row.column,this.end.row=row.row):(this.end.row=row,this.end.column=column)},this.inside=function(row,column){return 0==this.compare(row,column)?this.isEnd(row,column)||this.isStart(row,column)?!1:!0:!1},this.insideStart=function(row,column){return 0==this.compare(row,column)?this.isEnd(row,column)?!1:!0:!1},this.insideEnd=function(row,column){return 0==this.compare(row,column)?this.isStart(row,column)?!1:!0:!1},this.compare=function(row,column){return this.isMultiLine()||row!==this.start.row?this.start.row>row?-1:row>this.end.row?1:this.start.row===row?column>=this.start.column?0:-1:this.end.row===row?this.end.column>=column?0:1:0:this.start.column>column?-1:column>this.end.column?1:0},this.compareStart=function(row,column){return this.start.row==row&&this.start.column==column?-1:this.compare(row,column)},this.compareEnd=function(row,column){return this.end.row==row&&this.end.column==column?1:this.compare(row,column)},this.compareInside=function(row,column){return this.end.row==row&&this.end.column==column?1:this.start.row==row&&this.start.column==column?-1:this.compare(row,column)},this.clipRows=function(firstRow,lastRow){if(this.end.row>lastRow)var end={row:lastRow+1,column:0};else if(firstRow>this.end.row)var end={row:firstRow,column:0};if(this.start.row>lastRow)var start={row:lastRow+1,column:0};else if(firstRow>this.start.row)var start={row:firstRow,column:0};return Range.fromPoints(start||this.start,end||this.end)},this.extend=function(row,column){var cmp=this.compare(row,column);if(0==cmp)return this;if(-1==cmp)var start={row:row,column:column};else var end={row:row,column:column};return Range.fromPoints(start||this.start,end||this.end)},this.isEmpty=function(){return this.start.row===this.end.row&&this.start.column===this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return Range.fromPoints(this.start,this.end)},this.collapseRows=function(){return 0==this.end.column?new Range(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new Range(this.start.row,0,this.end.row,0)},this.toScreenRange=function(session){var screenPosStart=session.documentToScreenPosition(this.start),screenPosEnd=session.documentToScreenPosition(this.end);return new Range(screenPosStart.row,screenPosStart.column,screenPosEnd.row,screenPosEnd.column)},this.moveBy=function(row,column){this.start.row+=row,this.start.column+=column,this.end.row+=row,this.end.column+=column}}).call(Range.prototype),Range.fromPoints=function(start,end){return new Range(start.row,start.column,end.row,end.column)},Range.comparePoints=comparePoints,Range.comparePoints=function(p1,p2){return p1.row-p2.row||p1.column-p2.column},exports.Range=Range}),ace.define(\"ace/apply_delta\",[\"require\",\"exports\",\"module\"],function(acequire,exports){\"use strict\";exports.applyDelta=function(docLines,delta){var row=delta.start.row,startColumn=delta.start.column,line=docLines[row]||\"\";switch(delta.action){case\"insert\":var lines=delta.lines;if(1===lines.length)docLines[row]=line.substring(0,startColumn)+delta.lines[0]+line.substring(startColumn);else{var args=[row,1].concat(delta.lines);docLines.splice.apply(docLines,args),docLines[row]=line.substring(0,startColumn)+docLines[row],docLines[row+delta.lines.length-1]+=line.substring(startColumn)}break;case\"remove\":var endColumn=delta.end.column,endRow=delta.end.row;row===endRow?docLines[row]=line.substring(0,startColumn)+line.substring(endColumn):docLines.splice(row,endRow-row+1,line.substring(0,startColumn)+docLines[endRow].substring(endColumn))}}}),ace.define(\"ace/lib/event_emitter\",[\"require\",\"exports\",\"module\"],function(acequire,exports){\"use strict\";var EventEmitter={},stopPropagation=function(){this.propagationStopped=!0},preventDefault=function(){this.defaultPrevented=!0};EventEmitter._emit=EventEmitter._dispatchEvent=function(eventName,e){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var listeners=this._eventRegistry[eventName]||[],defaultHandler=this._defaultHandlers[eventName];if(listeners.length||defaultHandler){\"object\"==typeof e&&e||(e={}),e.type||(e.type=eventName),e.stopPropagation||(e.stopPropagation=stopPropagation),e.preventDefault||(e.preventDefault=preventDefault),listeners=listeners.slice();for(var i=0;listeners.length>i&&(listeners[i](e,this),!e.propagationStopped);i++);return defaultHandler&&!e.defaultPrevented?defaultHandler(e,this):void 0}},EventEmitter._signal=function(eventName,e){var listeners=(this._eventRegistry||{})[eventName];if(listeners){listeners=listeners.slice();for(var i=0;listeners.length>i;i++)listeners[i](e,this)}},EventEmitter.once=function(eventName,callback){var _self=this;callback&&this.addEventListener(eventName,function newCallback(){_self.removeEventListener(eventName,newCallback),callback.apply(null,arguments)})},EventEmitter.setDefaultHandler=function(eventName,callback){var handlers=this._defaultHandlers;if(handlers||(handlers=this._defaultHandlers={_disabled_:{}}),handlers[eventName]){var old=handlers[eventName],disabled=handlers._disabled_[eventName];disabled||(handlers._disabled_[eventName]=disabled=[]),disabled.push(old);var i=disabled.indexOf(callback);-1!=i&&disabled.splice(i,1)}handlers[eventName]=callback},EventEmitter.removeDefaultHandler=function(eventName,callback){var handlers=this._defaultHandlers;if(handlers){var disabled=handlers._disabled_[eventName];if(handlers[eventName]==callback)handlers[eventName],disabled&&this.setDefaultHandler(eventName,disabled.pop());else if(disabled){var i=disabled.indexOf(callback);-1!=i&&disabled.splice(i,1)}}},EventEmitter.on=EventEmitter.addEventListener=function(eventName,callback,capturing){this._eventRegistry=this._eventRegistry||{};var listeners=this._eventRegistry[eventName];return listeners||(listeners=this._eventRegistry[eventName]=[]),-1==listeners.indexOf(callback)&&listeners[capturing?\"unshift\":\"push\"](callback),callback},EventEmitter.off=EventEmitter.removeListener=EventEmitter.removeEventListener=function(eventName,callback){this._eventRegistry=this._eventRegistry||{};var listeners=this._eventRegistry[eventName];if(listeners){var index=listeners.indexOf(callback);-1!==index&&listeners.splice(index,1)}},EventEmitter.removeAllListeners=function(eventName){this._eventRegistry&&(this._eventRegistry[eventName]=[])},exports.EventEmitter=EventEmitter}),ace.define(\"ace/anchor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"],function(acequire,exports){\"use strict\";var oop=acequire(\"./lib/oop\"),EventEmitter=acequire(\"./lib/event_emitter\").EventEmitter,Anchor=exports.Anchor=function(doc,row,column){this.$onChange=this.onChange.bind(this),this.attach(doc),column===void 0?this.setPosition(row.row,row.column):this.setPosition(row,column)};(function(){function $pointsInOrder(point1,point2,equalPointsInOrder){var bColIsAfter=equalPointsInOrder?point1.column<=point2.column:point1.column<point2.column;return point1.row<point2.row||point1.row==point2.row&&bColIsAfter}function $getTransformedPoint(delta,point,moveIfEqual){var deltaIsInsert=\"insert\"==delta.action,deltaRowShift=(deltaIsInsert?1:-1)*(delta.end.row-delta.start.row),deltaColShift=(deltaIsInsert?1:-1)*(delta.end.column-delta.start.column),deltaStart=delta.start,deltaEnd=deltaIsInsert?deltaStart:delta.end;return $pointsInOrder(point,deltaStart,moveIfEqual)?{row:point.row,column:point.column}:$pointsInOrder(deltaEnd,point,!moveIfEqual)?{row:point.row+deltaRowShift,column:point.column+(point.row==deltaEnd.row?deltaColShift:0)}:{row:deltaStart.row,column:deltaStart.column}}oop.implement(this,EventEmitter),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.$insertRight=!1,this.onChange=function(delta){if(!(delta.start.row==delta.end.row&&delta.start.row!=this.row||delta.start.row>this.row)){var point=$getTransformedPoint(delta,{row:this.row,column:this.column},this.$insertRight);this.setPosition(point.row,point.column,!0)}},this.setPosition=function(row,column,noClip){var pos;if(pos=noClip?{row:row,column:column}:this.$clipPositionToDocument(row,column),this.row!=pos.row||this.column!=pos.column){var old={row:this.row,column:this.column};this.row=pos.row,this.column=pos.column,this._signal(\"change\",{old:old,value:pos})}},this.detach=function(){this.document.removeEventListener(\"change\",this.$onChange)},this.attach=function(doc){this.document=doc||this.document,this.document.on(\"change\",this.$onChange)},this.$clipPositionToDocument=function(row,column){var pos={};return row>=this.document.getLength()?(pos.row=Math.max(0,this.document.getLength()-1),pos.column=this.document.getLine(pos.row).length):0>row?(pos.row=0,pos.column=0):(pos.row=row,pos.column=Math.min(this.document.getLine(pos.row).length,Math.max(0,column))),0>column&&(pos.column=0),pos}}).call(Anchor.prototype)}),ace.define(\"ace/document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/apply_delta\",\"ace/lib/event_emitter\",\"ace/range\",\"ace/anchor\"],function(acequire,exports){\"use strict\";var oop=acequire(\"./lib/oop\"),applyDelta=acequire(\"./apply_delta\").applyDelta,EventEmitter=acequire(\"./lib/event_emitter\").EventEmitter,Range=acequire(\"./range\").Range,Anchor=acequire(\"./anchor\").Anchor,Document=function(textOrLines){this.$lines=[\"\"],0===textOrLines.length?this.$lines=[\"\"]:Array.isArray(textOrLines)?this.insertMergedLines({row:0,column:0},textOrLines):this.insert({row:0,column:0},textOrLines)};(function(){oop.implement(this,EventEmitter),this.setValue=function(text){var len=this.getLength()-1;this.remove(new Range(0,0,len,this.getLine(len).length)),this.insert({row:0,column:0},text)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(row,column){return new Anchor(this,row,column)},this.$split=0===\"aaa\".split(/a/).length?function(text){return text.replace(/\\r\\n|\\r/g,\"\\n\").split(\"\\n\")}:function(text){return text.split(/\\r\\n|\\r|\\n/)},this.$detectNewLine=function(text){var match=text.match(/^.*?(\\r\\n|\\r|\\n)/m);this.$autoNewLine=match?match[1]:\"\\n\",this._signal(\"changeNewLineMode\")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case\"windows\":return\"\\r\\n\";case\"unix\":return\"\\n\";default:return this.$autoNewLine||\"\\n\"}},this.$autoNewLine=\"\",this.$newLineMode=\"auto\",this.setNewLineMode=function(newLineMode){this.$newLineMode!==newLineMode&&(this.$newLineMode=newLineMode,this._signal(\"changeNewLineMode\"))},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(text){return\"\\r\\n\"==text||\"\\r\"==text||\"\\n\"==text},this.getLine=function(row){return this.$lines[row]||\"\"},this.getLines=function(firstRow,lastRow){return this.$lines.slice(firstRow,lastRow+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(range){return this.getLinesForRange(range).join(this.getNewLineCharacter())},this.getLinesForRange=function(range){var lines;if(range.start.row===range.end.row)lines=[this.getLine(range.start.row).substring(range.start.column,range.end.column)];else{lines=this.getLines(range.start.row,range.end.row),lines[0]=(lines[0]||\"\").substring(range.start.column);var l=lines.length-1;range.end.row-range.start.row==l&&(lines[l]=lines[l].substring(0,range.end.column))}return lines},this.insertLines=function(row,lines){return console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\"),this.insertFullLines(row,lines)},this.removeLines=function(firstRow,lastRow){return console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\"),this.removeFullLines(firstRow,lastRow)},this.insertNewLine=function(position){return console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\"),this.insertMergedLines(position,[\"\",\"\"])},this.insert=function(position,text){return 1>=this.getLength()&&this.$detectNewLine(text),this.insertMergedLines(position,this.$split(text))},this.insertInLine=function(position,text){var start=this.clippedPos(position.row,position.column),end=this.pos(position.row,position.column+text.length);return this.applyDelta({start:start,end:end,action:\"insert\",lines:[text]},!0),this.clonePos(end)},this.clippedPos=function(row,column){var length=this.getLength();void 0===row?row=length:0>row?row=0:row>=length&&(row=length-1,column=void 0);var line=this.getLine(row);return void 0==column&&(column=line.length),column=Math.min(Math.max(column,0),line.length),{row:row,column:column}},this.clonePos=function(pos){return{row:pos.row,column:pos.column}},this.pos=function(row,column){return{row:row,column:column}},this.$clipPosition=function(position){var length=this.getLength();return position.row>=length?(position.row=Math.max(0,length-1),position.column=this.getLine(length-1).length):(position.row=Math.max(0,position.row),position.column=Math.min(Math.max(position.column,0),this.getLine(position.row).length)),position},this.insertFullLines=function(row,lines){row=Math.min(Math.max(row,0),this.getLength());var column=0;this.getLength()>row?(lines=lines.concat([\"\"]),column=0):(lines=[\"\"].concat(lines),row--,column=this.$lines[row].length),this.insertMergedLines({row:row,column:column},lines)},this.insertMergedLines=function(position,lines){var start=this.clippedPos(position.row,position.column),end={row:start.row+lines.length-1,column:(1==lines.length?start.column:0)+lines[lines.length-1].length};return this.applyDelta({start:start,end:end,action:\"insert\",lines:lines}),this.clonePos(end)},this.remove=function(range){var start=this.clippedPos(range.start.row,range.start.column),end=this.clippedPos(range.end.row,range.end.column);return this.applyDelta({start:start,end:end,action:\"remove\",lines:this.getLinesForRange({start:start,end:end})}),this.clonePos(start)},this.removeInLine=function(row,startColumn,endColumn){var start=this.clippedPos(row,startColumn),end=this.clippedPos(row,endColumn);return this.applyDelta({start:start,end:end,action:\"remove\",lines:this.getLinesForRange({start:start,end:end})},!0),this.clonePos(start)},this.removeFullLines=function(firstRow,lastRow){firstRow=Math.min(Math.max(0,firstRow),this.getLength()-1),lastRow=Math.min(Math.max(0,lastRow),this.getLength()-1);var deleteFirstNewLine=lastRow==this.getLength()-1&&firstRow>0,deleteLastNewLine=this.getLength()-1>lastRow,startRow=deleteFirstNewLine?firstRow-1:firstRow,startCol=deleteFirstNewLine?this.getLine(startRow).length:0,endRow=deleteLastNewLine?lastRow+1:lastRow,endCol=deleteLastNewLine?0:this.getLine(endRow).length,range=new Range(startRow,startCol,endRow,endCol),deletedLines=this.$lines.slice(firstRow,lastRow+1);return this.applyDelta({start:range.start,end:range.end,action:\"remove\",lines:this.getLinesForRange(range)}),deletedLines},this.removeNewLine=function(row){this.getLength()-1>row&&row>=0&&this.applyDelta({start:this.pos(row,this.getLine(row).length),end:this.pos(row+1,0),action:\"remove\",lines:[\"\",\"\"]})},this.replace=function(range,text){if(range instanceof Range||(range=Range.fromPoints(range.start,range.end)),0===text.length&&range.isEmpty())return range.start;if(text==this.getTextRange(range))return range.end;this.remove(range);var end;return end=text?this.insert(range.start,text):range.start},this.applyDeltas=function(deltas){for(var i=0;deltas.length>i;i++)this.applyDelta(deltas[i])},this.revertDeltas=function(deltas){for(var i=deltas.length-1;i>=0;i--)this.revertDelta(deltas[i])},this.applyDelta=function(delta,doNotValidate){var isInsert=\"insert\"==delta.action;(isInsert?1>=delta.lines.length&&!delta.lines[0]:!Range.comparePoints(delta.start,delta.end))||(isInsert&&delta.lines.length>2e4&&this.$splitAndapplyLargeDelta(delta,2e4),applyDelta(this.$lines,delta,doNotValidate),this._signal(\"change\",delta))},this.$splitAndapplyLargeDelta=function(delta,MAX){for(var lines=delta.lines,l=lines.length,row=delta.start.row,column=delta.start.column,from=0,to=0;;){from=to,to+=MAX-1;var chunk=lines.slice(from,to);if(to>l){delta.lines=chunk,delta.start.row=row+from,delta.start.column=column;break}chunk.push(\"\"),this.applyDelta({start:this.pos(row+from,column),end:this.pos(row+to,column=0),action:delta.action,lines:chunk},!0)}},this.revertDelta=function(delta){this.applyDelta({start:this.clonePos(delta.start),end:this.clonePos(delta.end),action:\"insert\"==delta.action?\"remove\":\"insert\",lines:delta.lines.slice()})},this.indexToPosition=function(index,startRow){for(var lines=this.$lines||this.getAllLines(),newlineLength=this.getNewLineCharacter().length,i=startRow||0,l=lines.length;l>i;i++)if(index-=lines[i].length+newlineLength,0>index)return{row:i,column:index+lines[i].length+newlineLength};return{row:l-1,column:lines[l-1].length}},this.positionToIndex=function(pos,startRow){for(var lines=this.$lines||this.getAllLines(),newlineLength=this.getNewLineCharacter().length,index=0,row=Math.min(pos.row,lines.length),i=startRow||0;row>i;++i)index+=lines[i].length+newlineLength;return index+pos.column}}).call(Document.prototype),exports.Document=Document}),ace.define(\"ace/lib/lang\",[\"require\",\"exports\",\"module\"],function(acequire,exports){\"use strict\";exports.last=function(a){return a[a.length-1]},exports.stringReverse=function(string){return string.split(\"\").reverse().join(\"\")},exports.stringRepeat=function(string,count){for(var result=\"\";count>0;)1&count&&(result+=string),(count>>=1)&&(string+=string);return result};var trimBeginRegexp=/^\\s\\s*/,trimEndRegexp=/\\s\\s*$/;exports.stringTrimLeft=function(string){return string.replace(trimBeginRegexp,\"\")},exports.stringTrimRight=function(string){return string.replace(trimEndRegexp,\"\")},exports.copyObject=function(obj){var copy={};for(var key in obj)copy[key]=obj[key];return copy},exports.copyArray=function(array){for(var copy=[],i=0,l=array.length;l>i;i++)copy[i]=array[i]&&\"object\"==typeof array[i]?this.copyObject(array[i]):array[i];return copy},exports.deepCopy=function deepCopy(obj){if(\"object\"!=typeof obj||!obj)return obj;var copy;if(Array.isArray(obj)){copy=[];for(var key=0;obj.length>key;key++)copy[key]=deepCopy(obj[key]);return copy}var cons=obj.constructor;if(cons===RegExp)return obj;copy=cons();for(var key in obj)copy[key]=deepCopy(obj[key]);return copy},exports.arrayToMap=function(arr){for(var map={},i=0;arr.length>i;i++)map[arr[i]]=1;return map},exports.createMap=function(props){var map=Object.create(null);for(var i in props)map[i]=props[i];return map},exports.arrayRemove=function(array,value){for(var i=0;array.length>=i;i++)value===array[i]&&array.splice(i,1)},exports.escapeRegExp=function(str){return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g,\"\\\\$1\")},exports.escapeHTML=function(str){return str.replace(/&/g,\"&#38;\").replace(/\"/g,\"&#34;\").replace(/'/g,\"&#39;\").replace(/</g,\"&#60;\")},exports.getMatchOffsets=function(string,regExp){var matches=[];return string.replace(regExp,function(str){matches.push({offset:arguments[arguments.length-2],length:str.length})}),matches},exports.deferredCall=function(fcn){var timer=null,callback=function(){timer=null,fcn()},deferred=function(timeout){return deferred.cancel(),timer=setTimeout(callback,timeout||0),deferred};return deferred.schedule=deferred,deferred.call=function(){return this.cancel(),fcn(),deferred},deferred.cancel=function(){return clearTimeout(timer),timer=null,deferred},deferred.isPending=function(){return timer},deferred},exports.delayedCall=function(fcn,defaultTimeout){var timer=null,callback=function(){timer=null,fcn()},_self=function(timeout){null==timer&&(timer=setTimeout(callback,timeout||defaultTimeout))};return _self.delay=function(timeout){timer&&clearTimeout(timer),timer=setTimeout(callback,timeout||defaultTimeout)},_self.schedule=_self,_self.call=function(){this.cancel(),fcn()},_self.cancel=function(){timer&&clearTimeout(timer),timer=null},_self.isPending=function(){return timer},_self}}),ace.define(\"ace/worker/mirror\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/document\",\"ace/lib/lang\"],function(acequire,exports){\"use strict\";acequire(\"../range\").Range;var Document=acequire(\"../document\").Document,lang=acequire(\"../lib/lang\"),Mirror=exports.Mirror=function(sender){this.sender=sender;var doc=this.doc=new Document(\"\"),deferredUpdate=this.deferredUpdate=lang.delayedCall(this.onUpdate.bind(this)),_self=this;sender.on(\"change\",function(e){var data=e.data;if(data[0].start)doc.applyDeltas(data);else for(var i=0;data.length>i;i+=2){if(Array.isArray(data[i+1]))var d={action:\"insert\",start:data[i],lines:data[i+1]};else var d={action:\"remove\",start:data[i],end:data[i+1]};doc.applyDelta(d,!0)}return _self.$timeout?deferredUpdate.schedule(_self.$timeout):(_self.onUpdate(),void 0)})};(function(){this.$timeout=500,this.setTimeout=function(timeout){this.$timeout=timeout},this.setValue=function(value){this.doc.setValue(value),this.deferredUpdate.schedule(this.$timeout)},this.getValue=function(callbackId){this.sender.callback(this.doc.getValue(),callbackId)},this.onUpdate=function(){},this.isPending=function(){return this.deferredUpdate.isPending()}}).call(Mirror.prototype)}),ace.define(\"ace/mode/json/json_parse\",[\"require\",\"exports\",\"module\"],function(){\"use strict\";var at,ch,text,value,escapee={'\"':'\"',\"\\\\\":\"\\\\\",\"/\":\"/\",b:\"\\b\",f:\"\\f\",n:\"\\n\",r:\"\\r\",t:\"\t\"},error=function(m){throw{name:\"SyntaxError\",message:m,at:at,text:text}},next=function(c){return c&&c!==ch&&error(\"Expected '\"+c+\"' instead of '\"+ch+\"'\"),ch=text.charAt(at),at+=1,ch},number=function(){var number,string=\"\";for(\"-\"===ch&&(string=\"-\",next(\"-\"));ch>=\"0\"&&\"9\">=ch;)string+=ch,next();if(\".\"===ch)for(string+=\".\";next()&&ch>=\"0\"&&\"9\">=ch;)string+=ch;if(\"e\"===ch||\"E\"===ch)for(string+=ch,next(),(\"-\"===ch||\"+\"===ch)&&(string+=ch,next());ch>=\"0\"&&\"9\">=ch;)string+=ch,next();return number=+string,isNaN(number)?(error(\"Bad number\"),void 0):number},string=function(){var hex,i,uffff,string=\"\";if('\"'===ch)for(;next();){if('\"'===ch)return next(),string;if(\"\\\\\"===ch)if(next(),\"u\"===ch){for(uffff=0,i=0;4>i&&(hex=parseInt(next(),16),isFinite(hex));i+=1)uffff=16*uffff+hex;string+=String.fromCharCode(uffff)}else{if(\"string\"!=typeof escapee[ch])break;string+=escapee[ch]}else string+=ch}error(\"Bad string\")},white=function(){for(;ch&&\" \">=ch;)next()},word=function(){switch(ch){case\"t\":return next(\"t\"),next(\"r\"),next(\"u\"),next(\"e\"),!0;case\"f\":return next(\"f\"),next(\"a\"),next(\"l\"),next(\"s\"),next(\"e\"),!1;case\"n\":return next(\"n\"),next(\"u\"),next(\"l\"),next(\"l\"),null}error(\"Unexpected '\"+ch+\"'\")},array=function(){var array=[];if(\"[\"===ch){if(next(\"[\"),white(),\"]\"===ch)return next(\"]\"),array;for(;ch;){if(array.push(value()),white(),\"]\"===ch)return next(\"]\"),array;next(\",\"),white()}}error(\"Bad array\")},object=function(){var key,object={};if(\"{\"===ch){if(next(\"{\"),white(),\"}\"===ch)return next(\"}\"),object;for(;ch;){if(key=string(),white(),next(\":\"),Object.hasOwnProperty.call(object,key)&&error('Duplicate key \"'+key+'\"'),object[key]=value(),white(),\"}\"===ch)return next(\"}\"),object;next(\",\"),white()}}error(\"Bad object\")};return value=function(){switch(white(),ch){case\"{\":return object();case\"[\":return array();case'\"':return string();case\"-\":return number();default:return ch>=\"0\"&&\"9\">=ch?number():word()}},function(source,reviver){var result;return text=source,at=0,ch=\" \",result=value(),white(),ch&&error(\"Syntax error\"),\"function\"==typeof reviver?function walk(holder,key){var k,v,value=holder[key];if(value&&\"object\"==typeof value)for(k in value)Object.hasOwnProperty.call(value,k)&&(v=walk(value,k),void 0!==v?value[k]=v:delete value[k]);return reviver.call(holder,key,value)}({\"\":result},\"\"):result}}),ace.define(\"ace/mode/json_worker\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/worker/mirror\",\"ace/mode/json/json_parse\"],function(acequire,exports){\"use strict\";var oop=acequire(\"../lib/oop\"),Mirror=acequire(\"../worker/mirror\").Mirror,parse=acequire(\"./json/json_parse\"),JsonWorker=exports.JsonWorker=function(sender){Mirror.call(this,sender),this.setTimeout(200)};oop.inherits(JsonWorker,Mirror),function(){this.onUpdate=function(){var value=this.doc.getValue(),errors=[];try{value&&parse(value)}catch(e){var pos=this.doc.indexToPosition(e.at-1);errors.push({row:pos.row,column:pos.column,text:e.message,type:\"error\"})}this.sender.emit(\"annotate\",errors)}}.call(JsonWorker.prototype)}),ace.define(\"ace/lib/es5-shim\",[\"require\",\"exports\",\"module\"],function(){function Empty(){}function doesDefinePropertyWork(object){try{return Object.defineProperty(object,\"sentinel\",{}),\"sentinel\"in object}catch(exception){}}function toInteger(n){return n=+n,n!==n?n=0:0!==n&&n!==1/0&&n!==-(1/0)&&(n=(n>0||-1)*Math.floor(Math.abs(n))),n}Function.prototype.bind||(Function.prototype.bind=function(that){var target=this;if(\"function\"!=typeof target)throw new TypeError(\"Function.prototype.bind called on incompatible \"+target);var args=slice.call(arguments,1),bound=function(){if(this instanceof bound){var result=target.apply(this,args.concat(slice.call(arguments)));return Object(result)===result?result:this}return target.apply(that,args.concat(slice.call(arguments)))};return target.prototype&&(Empty.prototype=target.prototype,bound.prototype=new Empty,Empty.prototype=null),bound});var defineGetter,defineSetter,lookupGetter,lookupSetter,supportsAccessors,call=Function.prototype.call,prototypeOfArray=Array.prototype,prototypeOfObject=Object.prototype,slice=prototypeOfArray.slice,_toString=call.bind(prototypeOfObject.toString),owns=call.bind(prototypeOfObject.hasOwnProperty);if((supportsAccessors=owns(prototypeOfObject,\"__defineGetter__\"))&&(defineGetter=call.bind(prototypeOfObject.__defineGetter__),defineSetter=call.bind(prototypeOfObject.__defineSetter__),lookupGetter=call.bind(prototypeOfObject.__lookupGetter__),lookupSetter=call.bind(prototypeOfObject.__lookupSetter__)),2!=[1,2].splice(0).length)if(function(){function makeArray(l){var a=Array(l+2);return a[0]=a[1]=0,a}var lengthBefore,array=[];return array.splice.apply(array,makeArray(20)),array.splice.apply(array,makeArray(26)),lengthBefore=array.length,array.splice(5,0,\"XXX\"),lengthBefore+1==array.length,lengthBefore+1==array.length?!0:void 0\n}()){var array_splice=Array.prototype.splice;Array.prototype.splice=function(start,deleteCount){return arguments.length?array_splice.apply(this,[void 0===start?0:start,void 0===deleteCount?this.length-start:deleteCount].concat(slice.call(arguments,2))):[]}}else Array.prototype.splice=function(pos,removeCount){var length=this.length;pos>0?pos>length&&(pos=length):void 0==pos?pos=0:0>pos&&(pos=Math.max(length+pos,0)),length>pos+removeCount||(removeCount=length-pos);var removed=this.slice(pos,pos+removeCount),insert=slice.call(arguments,2),add=insert.length;if(pos===length)add&&this.push.apply(this,insert);else{var remove=Math.min(removeCount,length-pos),tailOldPos=pos+remove,tailNewPos=tailOldPos+add-remove,tailCount=length-tailOldPos,lengthAfterRemove=length-remove;if(tailOldPos>tailNewPos)for(var i=0;tailCount>i;++i)this[tailNewPos+i]=this[tailOldPos+i];else if(tailNewPos>tailOldPos)for(i=tailCount;i--;)this[tailNewPos+i]=this[tailOldPos+i];if(add&&pos===lengthAfterRemove)this.length=lengthAfterRemove,this.push.apply(this,insert);else for(this.length=lengthAfterRemove+add,i=0;add>i;++i)this[pos+i]=insert[i]}return removed};Array.isArray||(Array.isArray=function(obj){return\"[object Array]\"==_toString(obj)});var boxedString=Object(\"a\"),splitString=\"a\"!=boxedString[0]||!(0 in boxedString);if(Array.prototype.forEach||(Array.prototype.forEach=function(fun){var object=toObject(this),self=splitString&&\"[object String]\"==_toString(this)?this.split(\"\"):object,thisp=arguments[1],i=-1,length=self.length>>>0;if(\"[object Function]\"!=_toString(fun))throw new TypeError;for(;length>++i;)i in self&&fun.call(thisp,self[i],i,object)}),Array.prototype.map||(Array.prototype.map=function(fun){var object=toObject(this),self=splitString&&\"[object String]\"==_toString(this)?this.split(\"\"):object,length=self.length>>>0,result=Array(length),thisp=arguments[1];if(\"[object Function]\"!=_toString(fun))throw new TypeError(fun+\" is not a function\");for(var i=0;length>i;i++)i in self&&(result[i]=fun.call(thisp,self[i],i,object));return result}),Array.prototype.filter||(Array.prototype.filter=function(fun){var value,object=toObject(this),self=splitString&&\"[object String]\"==_toString(this)?this.split(\"\"):object,length=self.length>>>0,result=[],thisp=arguments[1];if(\"[object Function]\"!=_toString(fun))throw new TypeError(fun+\" is not a function\");for(var i=0;length>i;i++)i in self&&(value=self[i],fun.call(thisp,value,i,object)&&result.push(value));return result}),Array.prototype.every||(Array.prototype.every=function(fun){var object=toObject(this),self=splitString&&\"[object String]\"==_toString(this)?this.split(\"\"):object,length=self.length>>>0,thisp=arguments[1];if(\"[object Function]\"!=_toString(fun))throw new TypeError(fun+\" is not a function\");for(var i=0;length>i;i++)if(i in self&&!fun.call(thisp,self[i],i,object))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(fun){var object=toObject(this),self=splitString&&\"[object String]\"==_toString(this)?this.split(\"\"):object,length=self.length>>>0,thisp=arguments[1];if(\"[object Function]\"!=_toString(fun))throw new TypeError(fun+\" is not a function\");for(var i=0;length>i;i++)if(i in self&&fun.call(thisp,self[i],i,object))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(fun){var object=toObject(this),self=splitString&&\"[object String]\"==_toString(this)?this.split(\"\"):object,length=self.length>>>0;if(\"[object Function]\"!=_toString(fun))throw new TypeError(fun+\" is not a function\");if(!length&&1==arguments.length)throw new TypeError(\"reduce of empty array with no initial value\");var result,i=0;if(arguments.length>=2)result=arguments[1];else for(;;){if(i in self){result=self[i++];break}if(++i>=length)throw new TypeError(\"reduce of empty array with no initial value\")}for(;length>i;i++)i in self&&(result=fun.call(void 0,result,self[i],i,object));return result}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(fun){var object=toObject(this),self=splitString&&\"[object String]\"==_toString(this)?this.split(\"\"):object,length=self.length>>>0;if(\"[object Function]\"!=_toString(fun))throw new TypeError(fun+\" is not a function\");if(!length&&1==arguments.length)throw new TypeError(\"reduceRight of empty array with no initial value\");var result,i=length-1;if(arguments.length>=2)result=arguments[1];else for(;;){if(i in self){result=self[i--];break}if(0>--i)throw new TypeError(\"reduceRight of empty array with no initial value\")}do i in this&&(result=fun.call(void 0,result,self[i],i,object));while(i--);return result}),Array.prototype.indexOf&&-1==[0,1].indexOf(1,2)||(Array.prototype.indexOf=function(sought){var self=splitString&&\"[object String]\"==_toString(this)?this.split(\"\"):toObject(this),length=self.length>>>0;if(!length)return-1;var i=0;for(arguments.length>1&&(i=toInteger(arguments[1])),i=i>=0?i:Math.max(0,length+i);length>i;i++)if(i in self&&self[i]===sought)return i;return-1}),Array.prototype.lastIndexOf&&-1==[0,1].lastIndexOf(0,-3)||(Array.prototype.lastIndexOf=function(sought){var self=splitString&&\"[object String]\"==_toString(this)?this.split(\"\"):toObject(this),length=self.length>>>0;if(!length)return-1;var i=length-1;for(arguments.length>1&&(i=Math.min(i,toInteger(arguments[1]))),i=i>=0?i:length-Math.abs(i);i>=0;i--)if(i in self&&sought===self[i])return i;return-1}),Object.getPrototypeOf||(Object.getPrototypeOf=function(object){return object.__proto__||(object.constructor?object.constructor.prototype:prototypeOfObject)}),!Object.getOwnPropertyDescriptor){var ERR_NON_OBJECT=\"Object.getOwnPropertyDescriptor called on a non-object: \";Object.getOwnPropertyDescriptor=function(object,property){if(\"object\"!=typeof object&&\"function\"!=typeof object||null===object)throw new TypeError(ERR_NON_OBJECT+object);if(owns(object,property)){var descriptor,getter,setter;if(descriptor={enumerable:!0,configurable:!0},supportsAccessors){var prototype=object.__proto__;object.__proto__=prototypeOfObject;var getter=lookupGetter(object,property),setter=lookupSetter(object,property);if(object.__proto__=prototype,getter||setter)return getter&&(descriptor.get=getter),setter&&(descriptor.set=setter),descriptor}return descriptor.value=object[property],descriptor}}}if(Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(object){return Object.keys(object)}),!Object.create){var createEmpty;createEmpty=null===Object.prototype.__proto__?function(){return{__proto__:null}}:function(){var empty={};for(var i in empty)empty[i]=null;return empty.constructor=empty.hasOwnProperty=empty.propertyIsEnumerable=empty.isPrototypeOf=empty.toLocaleString=empty.toString=empty.valueOf=empty.__proto__=null,empty},Object.create=function(prototype,properties){var object;if(null===prototype)object=createEmpty();else{if(\"object\"!=typeof prototype)throw new TypeError(\"typeof prototype[\"+typeof prototype+\"] != 'object'\");var Type=function(){};Type.prototype=prototype,object=new Type,object.__proto__=prototype}return void 0!==properties&&Object.defineProperties(object,properties),object}}if(Object.defineProperty){var definePropertyWorksOnObject=doesDefinePropertyWork({}),definePropertyWorksOnDom=\"undefined\"==typeof document||doesDefinePropertyWork(document.createElement(\"div\"));if(!definePropertyWorksOnObject||!definePropertyWorksOnDom)var definePropertyFallback=Object.defineProperty}if(!Object.defineProperty||definePropertyFallback){var ERR_NON_OBJECT_DESCRIPTOR=\"Property description must be an object: \",ERR_NON_OBJECT_TARGET=\"Object.defineProperty called on non-object: \",ERR_ACCESSORS_NOT_SUPPORTED=\"getters & setters can not be defined on this javascript engine\";Object.defineProperty=function(object,property,descriptor){if(\"object\"!=typeof object&&\"function\"!=typeof object||null===object)throw new TypeError(ERR_NON_OBJECT_TARGET+object);if(\"object\"!=typeof descriptor&&\"function\"!=typeof descriptor||null===descriptor)throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR+descriptor);if(definePropertyFallback)try{return definePropertyFallback.call(Object,object,property,descriptor)}catch(exception){}if(owns(descriptor,\"value\"))if(supportsAccessors&&(lookupGetter(object,property)||lookupSetter(object,property))){var prototype=object.__proto__;object.__proto__=prototypeOfObject,delete object[property],object[property]=descriptor.value,object.__proto__=prototype}else object[property]=descriptor.value;else{if(!supportsAccessors)throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);owns(descriptor,\"get\")&&defineGetter(object,property,descriptor.get),owns(descriptor,\"set\")&&defineSetter(object,property,descriptor.set)}return object}}Object.defineProperties||(Object.defineProperties=function(object,properties){for(var property in properties)owns(properties,property)&&Object.defineProperty(object,property,properties[property]);return object}),Object.seal||(Object.seal=function(object){return object}),Object.freeze||(Object.freeze=function(object){return object});try{Object.freeze(function(){})}catch(exception){Object.freeze=function(freezeObject){return function(object){return\"function\"==typeof object?object:freezeObject(object)}}(Object.freeze)}if(Object.preventExtensions||(Object.preventExtensions=function(object){return object}),Object.isSealed||(Object.isSealed=function(){return!1}),Object.isFrozen||(Object.isFrozen=function(){return!1}),Object.isExtensible||(Object.isExtensible=function(object){if(Object(object)===object)throw new TypeError;for(var name=\"\";owns(object,name);)name+=\"?\";object[name]=!0;var returnValue=owns(object,name);return delete object[name],returnValue}),!Object.keys){var hasDontEnumBug=!0,dontEnums=[\"toString\",\"toLocaleString\",\"valueOf\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"constructor\"],dontEnumsLength=dontEnums.length;for(var key in{toString:null})hasDontEnumBug=!1;Object.keys=function(object){if(\"object\"!=typeof object&&\"function\"!=typeof object||null===object)throw new TypeError(\"Object.keys called on a non-object\");var keys=[];for(var name in object)owns(object,name)&&keys.push(name);if(hasDontEnumBug)for(var i=0,ii=dontEnumsLength;ii>i;i++){var dontEnum=dontEnums[i];owns(object,dontEnum)&&keys.push(dontEnum)}return keys}}Date.now||(Date.now=function(){return(new Date).getTime()});var ws=\"\t\\n\u000b\\f\\r   ᠎              \\u2028\\u2029\";if(!String.prototype.trim||ws.trim()){ws=\"[\"+ws+\"]\";var trimBeginRegexp=RegExp(\"^\"+ws+ws+\"*\"),trimEndRegexp=RegExp(ws+ws+\"*$\");String.prototype.trim=function(){return(this+\"\").replace(trimBeginRegexp,\"\").replace(trimEndRegexp,\"\")}}var toObject=function(o){if(null==o)throw new TypeError(\"can't convert \"+o+\" to object\");return Object(o)}});";
9326
+ module.exports.src = "\"no use strict\";(function(window){function resolveModuleId(id,paths){for(var testPath=id,tail=\"\";testPath;){var alias=paths[testPath];if(\"string\"==typeof alias)return alias+tail;if(alias)return alias.location.replace(/\\/*$/,\"/\")+(tail||alias.main||alias.name);if(alias===!1)return\"\";var i=testPath.lastIndexOf(\"/\");if(-1===i)break;tail=testPath.substr(i)+tail,testPath=testPath.slice(0,i)}return id}if(!(void 0!==window.window&&window.document||window.acequire&&window.define)){window.console||(window.console=function(){var msgs=Array.prototype.slice.call(arguments,0);postMessage({type:\"log\",data:msgs})},window.console.error=window.console.warn=window.console.log=window.console.trace=window.console),window.window=window,window.ace=window,window.onerror=function(message,file,line,col,err){postMessage({type:\"error\",data:{message:message,data:err.data,file:file,line:line,col:col,stack:err.stack}})},window.normalizeModule=function(parentId,moduleName){if(-1!==moduleName.indexOf(\"!\")){var chunks=moduleName.split(\"!\");return window.normalizeModule(parentId,chunks[0])+\"!\"+window.normalizeModule(parentId,chunks[1])}if(\".\"==moduleName.charAt(0)){var base=parentId.split(\"/\").slice(0,-1).join(\"/\");for(moduleName=(base?base+\"/\":\"\")+moduleName;-1!==moduleName.indexOf(\".\")&&previous!=moduleName;){var previous=moduleName;moduleName=moduleName.replace(/^\\.\\//,\"\").replace(/\\/\\.\\//,\"/\").replace(/[^\\/]+\\/\\.\\.\\//,\"\")}}return moduleName},window.acequire=function acequire(parentId,id){if(id||(id=parentId,parentId=null),!id.charAt)throw Error(\"worker.js acequire() accepts only (parentId, id) as arguments\");id=window.normalizeModule(parentId,id);var module=window.acequire.modules[id];if(module)return module.initialized||(module.initialized=!0,module.exports=module.factory().exports),module.exports;if(!window.acequire.tlns)return console.log(\"unable to load \"+id);var path=resolveModuleId(id,window.acequire.tlns);return\".js\"!=path.slice(-3)&&(path+=\".js\"),window.acequire.id=id,window.acequire.modules[id]={},importScripts(path),window.acequire(parentId,id)},window.acequire.modules={},window.acequire.tlns={},window.define=function(id,deps,factory){if(2==arguments.length?(factory=deps,\"string\"!=typeof id&&(deps=id,id=window.acequire.id)):1==arguments.length&&(factory=id,deps=[],id=window.acequire.id),\"function\"!=typeof factory)return window.acequire.modules[id]={exports:factory,initialized:!0},void 0;deps.length||(deps=[\"require\",\"exports\",\"module\"]);var req=function(childId){return window.acequire(id,childId)};window.acequire.modules[id]={exports:{},factory:function(){var module=this,returnExports=factory.apply(this,deps.map(function(dep){switch(dep){case\"require\":return req;case\"exports\":return module.exports;case\"module\":return module;default:return req(dep)}}));return returnExports&&(module.exports=returnExports),module}}},window.define.amd={},acequire.tlns={},window.initBaseUrls=function(topLevelNamespaces){for(var i in topLevelNamespaces)acequire.tlns[i]=topLevelNamespaces[i]},window.initSender=function(){var EventEmitter=window.acequire(\"ace/lib/event_emitter\").EventEmitter,oop=window.acequire(\"ace/lib/oop\"),Sender=function(){};return function(){oop.implement(this,EventEmitter),this.callback=function(data,callbackId){postMessage({type:\"call\",id:callbackId,data:data})},this.emit=function(name,data){postMessage({type:\"event\",name:name,data:data})}}.call(Sender.prototype),new Sender};var main=window.main=null,sender=window.sender=null;window.onmessage=function(e){var msg=e.data;if(msg.event&&sender)sender._signal(msg.event,msg.data);else if(msg.command)if(main[msg.command])main[msg.command].apply(main,msg.args);else{if(!window[msg.command])throw Error(\"Unknown command:\"+msg.command);window[msg.command].apply(window,msg.args)}else if(msg.init){window.initBaseUrls(msg.tlns),acequire(\"ace/lib/es5-shim\"),sender=window.sender=window.initSender();var clazz=acequire(msg.module)[msg.classname];main=window.main=new clazz(sender)}}}})(this),ace.define(\"ace/lib/oop\",[\"require\",\"exports\",\"module\"],function(acequire,exports){\"use strict\";exports.inherits=function(ctor,superCtor){ctor.super_=superCtor,ctor.prototype=Object.create(superCtor.prototype,{constructor:{value:ctor,enumerable:!1,writable:!0,configurable:!0}})},exports.mixin=function(obj,mixin){for(var key in mixin)obj[key]=mixin[key];return obj},exports.implement=function(proto,mixin){exports.mixin(proto,mixin)}}),ace.define(\"ace/range\",[\"require\",\"exports\",\"module\"],function(acequire,exports){\"use strict\";var comparePoints=function(p1,p2){return p1.row-p2.row||p1.column-p2.column},Range=function(startRow,startColumn,endRow,endColumn){this.start={row:startRow,column:startColumn},this.end={row:endRow,column:endColumn}};(function(){this.isEqual=function(range){return this.start.row===range.start.row&&this.end.row===range.end.row&&this.start.column===range.start.column&&this.end.column===range.end.column},this.toString=function(){return\"Range: [\"+this.start.row+\"/\"+this.start.column+\"] -> [\"+this.end.row+\"/\"+this.end.column+\"]\"},this.contains=function(row,column){return 0==this.compare(row,column)},this.compareRange=function(range){var cmp,end=range.end,start=range.start;return cmp=this.compare(end.row,end.column),1==cmp?(cmp=this.compare(start.row,start.column),1==cmp?2:0==cmp?1:0):-1==cmp?-2:(cmp=this.compare(start.row,start.column),-1==cmp?-1:1==cmp?42:0)},this.comparePoint=function(p){return this.compare(p.row,p.column)},this.containsRange=function(range){return 0==this.comparePoint(range.start)&&0==this.comparePoint(range.end)},this.intersects=function(range){var cmp=this.compareRange(range);return-1==cmp||0==cmp||1==cmp},this.isEnd=function(row,column){return this.end.row==row&&this.end.column==column},this.isStart=function(row,column){return this.start.row==row&&this.start.column==column},this.setStart=function(row,column){\"object\"==typeof row?(this.start.column=row.column,this.start.row=row.row):(this.start.row=row,this.start.column=column)},this.setEnd=function(row,column){\"object\"==typeof row?(this.end.column=row.column,this.end.row=row.row):(this.end.row=row,this.end.column=column)},this.inside=function(row,column){return 0==this.compare(row,column)?this.isEnd(row,column)||this.isStart(row,column)?!1:!0:!1},this.insideStart=function(row,column){return 0==this.compare(row,column)?this.isEnd(row,column)?!1:!0:!1},this.insideEnd=function(row,column){return 0==this.compare(row,column)?this.isStart(row,column)?!1:!0:!1},this.compare=function(row,column){return this.isMultiLine()||row!==this.start.row?this.start.row>row?-1:row>this.end.row?1:this.start.row===row?column>=this.start.column?0:-1:this.end.row===row?this.end.column>=column?0:1:0:this.start.column>column?-1:column>this.end.column?1:0},this.compareStart=function(row,column){return this.start.row==row&&this.start.column==column?-1:this.compare(row,column)},this.compareEnd=function(row,column){return this.end.row==row&&this.end.column==column?1:this.compare(row,column)},this.compareInside=function(row,column){return this.end.row==row&&this.end.column==column?1:this.start.row==row&&this.start.column==column?-1:this.compare(row,column)},this.clipRows=function(firstRow,lastRow){if(this.end.row>lastRow)var end={row:lastRow+1,column:0};else if(firstRow>this.end.row)var end={row:firstRow,column:0};if(this.start.row>lastRow)var start={row:lastRow+1,column:0};else if(firstRow>this.start.row)var start={row:firstRow,column:0};return Range.fromPoints(start||this.start,end||this.end)},this.extend=function(row,column){var cmp=this.compare(row,column);if(0==cmp)return this;if(-1==cmp)var start={row:row,column:column};else var end={row:row,column:column};return Range.fromPoints(start||this.start,end||this.end)},this.isEmpty=function(){return this.start.row===this.end.row&&this.start.column===this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return Range.fromPoints(this.start,this.end)},this.collapseRows=function(){return 0==this.end.column?new Range(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new Range(this.start.row,0,this.end.row,0)},this.toScreenRange=function(session){var screenPosStart=session.documentToScreenPosition(this.start),screenPosEnd=session.documentToScreenPosition(this.end);return new Range(screenPosStart.row,screenPosStart.column,screenPosEnd.row,screenPosEnd.column)},this.moveBy=function(row,column){this.start.row+=row,this.start.column+=column,this.end.row+=row,this.end.column+=column}}).call(Range.prototype),Range.fromPoints=function(start,end){return new Range(start.row,start.column,end.row,end.column)},Range.comparePoints=comparePoints,Range.comparePoints=function(p1,p2){return p1.row-p2.row||p1.column-p2.column},exports.Range=Range}),ace.define(\"ace/apply_delta\",[\"require\",\"exports\",\"module\"],function(acequire,exports){\"use strict\";exports.applyDelta=function(docLines,delta){var row=delta.start.row,startColumn=delta.start.column,line=docLines[row]||\"\";switch(delta.action){case\"insert\":var lines=delta.lines;if(1===lines.length)docLines[row]=line.substring(0,startColumn)+delta.lines[0]+line.substring(startColumn);else{var args=[row,1].concat(delta.lines);docLines.splice.apply(docLines,args),docLines[row]=line.substring(0,startColumn)+docLines[row],docLines[row+delta.lines.length-1]+=line.substring(startColumn)}break;case\"remove\":var endColumn=delta.end.column,endRow=delta.end.row;row===endRow?docLines[row]=line.substring(0,startColumn)+line.substring(endColumn):docLines.splice(row,endRow-row+1,line.substring(0,startColumn)+docLines[endRow].substring(endColumn))}}}),ace.define(\"ace/lib/event_emitter\",[\"require\",\"exports\",\"module\"],function(acequire,exports){\"use strict\";var EventEmitter={},stopPropagation=function(){this.propagationStopped=!0},preventDefault=function(){this.defaultPrevented=!0};EventEmitter._emit=EventEmitter._dispatchEvent=function(eventName,e){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var listeners=this._eventRegistry[eventName]||[],defaultHandler=this._defaultHandlers[eventName];if(listeners.length||defaultHandler){\"object\"==typeof e&&e||(e={}),e.type||(e.type=eventName),e.stopPropagation||(e.stopPropagation=stopPropagation),e.preventDefault||(e.preventDefault=preventDefault),listeners=listeners.slice();for(var i=0;listeners.length>i&&(listeners[i](e,this),!e.propagationStopped);i++);return defaultHandler&&!e.defaultPrevented?defaultHandler(e,this):void 0}},EventEmitter._signal=function(eventName,e){var listeners=(this._eventRegistry||{})[eventName];if(listeners){listeners=listeners.slice();for(var i=0;listeners.length>i;i++)listeners[i](e,this)}},EventEmitter.once=function(eventName,callback){var _self=this;callback&&this.addEventListener(eventName,function newCallback(){_self.removeEventListener(eventName,newCallback),callback.apply(null,arguments)})},EventEmitter.setDefaultHandler=function(eventName,callback){var handlers=this._defaultHandlers;if(handlers||(handlers=this._defaultHandlers={_disabled_:{}}),handlers[eventName]){var old=handlers[eventName],disabled=handlers._disabled_[eventName];disabled||(handlers._disabled_[eventName]=disabled=[]),disabled.push(old);var i=disabled.indexOf(callback);-1!=i&&disabled.splice(i,1)}handlers[eventName]=callback},EventEmitter.removeDefaultHandler=function(eventName,callback){var handlers=this._defaultHandlers;if(handlers){var disabled=handlers._disabled_[eventName];if(handlers[eventName]==callback)handlers[eventName],disabled&&this.setDefaultHandler(eventName,disabled.pop());else if(disabled){var i=disabled.indexOf(callback);-1!=i&&disabled.splice(i,1)}}},EventEmitter.on=EventEmitter.addEventListener=function(eventName,callback,capturing){this._eventRegistry=this._eventRegistry||{};var listeners=this._eventRegistry[eventName];return listeners||(listeners=this._eventRegistry[eventName]=[]),-1==listeners.indexOf(callback)&&listeners[capturing?\"unshift\":\"push\"](callback),callback},EventEmitter.off=EventEmitter.removeListener=EventEmitter.removeEventListener=function(eventName,callback){this._eventRegistry=this._eventRegistry||{};var listeners=this._eventRegistry[eventName];if(listeners){var index=listeners.indexOf(callback);-1!==index&&listeners.splice(index,1)}},EventEmitter.removeAllListeners=function(eventName){this._eventRegistry&&(this._eventRegistry[eventName]=[])},exports.EventEmitter=EventEmitter}),ace.define(\"ace/anchor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"],function(acequire,exports){\"use strict\";var oop=acequire(\"./lib/oop\"),EventEmitter=acequire(\"./lib/event_emitter\").EventEmitter,Anchor=exports.Anchor=function(doc,row,column){this.$onChange=this.onChange.bind(this),this.attach(doc),column===void 0?this.setPosition(row.row,row.column):this.setPosition(row,column)};(function(){function $pointsInOrder(point1,point2,equalPointsInOrder){var bColIsAfter=equalPointsInOrder?point1.column<=point2.column:point1.column<point2.column;return point1.row<point2.row||point1.row==point2.row&&bColIsAfter}function $getTransformedPoint(delta,point,moveIfEqual){var deltaIsInsert=\"insert\"==delta.action,deltaRowShift=(deltaIsInsert?1:-1)*(delta.end.row-delta.start.row),deltaColShift=(deltaIsInsert?1:-1)*(delta.end.column-delta.start.column),deltaStart=delta.start,deltaEnd=deltaIsInsert?deltaStart:delta.end;return $pointsInOrder(point,deltaStart,moveIfEqual)?{row:point.row,column:point.column}:$pointsInOrder(deltaEnd,point,!moveIfEqual)?{row:point.row+deltaRowShift,column:point.column+(point.row==deltaEnd.row?deltaColShift:0)}:{row:deltaStart.row,column:deltaStart.column}}oop.implement(this,EventEmitter),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.$insertRight=!1,this.onChange=function(delta){if(!(delta.start.row==delta.end.row&&delta.start.row!=this.row||delta.start.row>this.row)){var point=$getTransformedPoint(delta,{row:this.row,column:this.column},this.$insertRight);this.setPosition(point.row,point.column,!0)}},this.setPosition=function(row,column,noClip){var pos;if(pos=noClip?{row:row,column:column}:this.$clipPositionToDocument(row,column),this.row!=pos.row||this.column!=pos.column){var old={row:this.row,column:this.column};this.row=pos.row,this.column=pos.column,this._signal(\"change\",{old:old,value:pos})}},this.detach=function(){this.document.removeEventListener(\"change\",this.$onChange)},this.attach=function(doc){this.document=doc||this.document,this.document.on(\"change\",this.$onChange)},this.$clipPositionToDocument=function(row,column){var pos={};return row>=this.document.getLength()?(pos.row=Math.max(0,this.document.getLength()-1),pos.column=this.document.getLine(pos.row).length):0>row?(pos.row=0,pos.column=0):(pos.row=row,pos.column=Math.min(this.document.getLine(pos.row).length,Math.max(0,column))),0>column&&(pos.column=0),pos}}).call(Anchor.prototype)}),ace.define(\"ace/document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/apply_delta\",\"ace/lib/event_emitter\",\"ace/range\",\"ace/anchor\"],function(acequire,exports){\"use strict\";var oop=acequire(\"./lib/oop\"),applyDelta=acequire(\"./apply_delta\").applyDelta,EventEmitter=acequire(\"./lib/event_emitter\").EventEmitter,Range=acequire(\"./range\").Range,Anchor=acequire(\"./anchor\").Anchor,Document=function(textOrLines){this.$lines=[\"\"],0===textOrLines.length?this.$lines=[\"\"]:Array.isArray(textOrLines)?this.insertMergedLines({row:0,column:0},textOrLines):this.insert({row:0,column:0},textOrLines)};(function(){oop.implement(this,EventEmitter),this.setValue=function(text){var len=this.getLength()-1;this.remove(new Range(0,0,len,this.getLine(len).length)),this.insert({row:0,column:0},text)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(row,column){return new Anchor(this,row,column)},this.$split=0===\"aaa\".split(/a/).length?function(text){return text.replace(/\\r\\n|\\r/g,\"\\n\").split(\"\\n\")}:function(text){return text.split(/\\r\\n|\\r|\\n/)},this.$detectNewLine=function(text){var match=text.match(/^.*?(\\r\\n|\\r|\\n)/m);this.$autoNewLine=match?match[1]:\"\\n\",this._signal(\"changeNewLineMode\")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case\"windows\":return\"\\r\\n\";case\"unix\":return\"\\n\";default:return this.$autoNewLine||\"\\n\"}},this.$autoNewLine=\"\",this.$newLineMode=\"auto\",this.setNewLineMode=function(newLineMode){this.$newLineMode!==newLineMode&&(this.$newLineMode=newLineMode,this._signal(\"changeNewLineMode\"))},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(text){return\"\\r\\n\"==text||\"\\r\"==text||\"\\n\"==text},this.getLine=function(row){return this.$lines[row]||\"\"},this.getLines=function(firstRow,lastRow){return this.$lines.slice(firstRow,lastRow+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(range){return this.getLinesForRange(range).join(this.getNewLineCharacter())},this.getLinesForRange=function(range){var lines;if(range.start.row===range.end.row)lines=[this.getLine(range.start.row).substring(range.start.column,range.end.column)];else{lines=this.getLines(range.start.row,range.end.row),lines[0]=(lines[0]||\"\").substring(range.start.column);var l=lines.length-1;range.end.row-range.start.row==l&&(lines[l]=lines[l].substring(0,range.end.column))}return lines},this.insertLines=function(row,lines){return console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\"),this.insertFullLines(row,lines)},this.removeLines=function(firstRow,lastRow){return console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\"),this.removeFullLines(firstRow,lastRow)},this.insertNewLine=function(position){return console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\"),this.insertMergedLines(position,[\"\",\"\"])},this.insert=function(position,text){return 1>=this.getLength()&&this.$detectNewLine(text),this.insertMergedLines(position,this.$split(text))},this.insertInLine=function(position,text){var start=this.clippedPos(position.row,position.column),end=this.pos(position.row,position.column+text.length);return this.applyDelta({start:start,end:end,action:\"insert\",lines:[text]},!0),this.clonePos(end)},this.clippedPos=function(row,column){var length=this.getLength();void 0===row?row=length:0>row?row=0:row>=length&&(row=length-1,column=void 0);var line=this.getLine(row);return void 0==column&&(column=line.length),column=Math.min(Math.max(column,0),line.length),{row:row,column:column}},this.clonePos=function(pos){return{row:pos.row,column:pos.column}},this.pos=function(row,column){return{row:row,column:column}},this.$clipPosition=function(position){var length=this.getLength();return position.row>=length?(position.row=Math.max(0,length-1),position.column=this.getLine(length-1).length):(position.row=Math.max(0,position.row),position.column=Math.min(Math.max(position.column,0),this.getLine(position.row).length)),position},this.insertFullLines=function(row,lines){row=Math.min(Math.max(row,0),this.getLength());var column=0;this.getLength()>row?(lines=lines.concat([\"\"]),column=0):(lines=[\"\"].concat(lines),row--,column=this.$lines[row].length),this.insertMergedLines({row:row,column:column},lines)},this.insertMergedLines=function(position,lines){var start=this.clippedPos(position.row,position.column),end={row:start.row+lines.length-1,column:(1==lines.length?start.column:0)+lines[lines.length-1].length};return this.applyDelta({start:start,end:end,action:\"insert\",lines:lines}),this.clonePos(end)},this.remove=function(range){var start=this.clippedPos(range.start.row,range.start.column),end=this.clippedPos(range.end.row,range.end.column);return this.applyDelta({start:start,end:end,action:\"remove\",lines:this.getLinesForRange({start:start,end:end})}),this.clonePos(start)},this.removeInLine=function(row,startColumn,endColumn){var start=this.clippedPos(row,startColumn),end=this.clippedPos(row,endColumn);return this.applyDelta({start:start,end:end,action:\"remove\",lines:this.getLinesForRange({start:start,end:end})},!0),this.clonePos(start)},this.removeFullLines=function(firstRow,lastRow){firstRow=Math.min(Math.max(0,firstRow),this.getLength()-1),lastRow=Math.min(Math.max(0,lastRow),this.getLength()-1);var deleteFirstNewLine=lastRow==this.getLength()-1&&firstRow>0,deleteLastNewLine=this.getLength()-1>lastRow,startRow=deleteFirstNewLine?firstRow-1:firstRow,startCol=deleteFirstNewLine?this.getLine(startRow).length:0,endRow=deleteLastNewLine?lastRow+1:lastRow,endCol=deleteLastNewLine?0:this.getLine(endRow).length,range=new Range(startRow,startCol,endRow,endCol),deletedLines=this.$lines.slice(firstRow,lastRow+1);return this.applyDelta({start:range.start,end:range.end,action:\"remove\",lines:this.getLinesForRange(range)}),deletedLines},this.removeNewLine=function(row){this.getLength()-1>row&&row>=0&&this.applyDelta({start:this.pos(row,this.getLine(row).length),end:this.pos(row+1,0),action:\"remove\",lines:[\"\",\"\"]})},this.replace=function(range,text){if(range instanceof Range||(range=Range.fromPoints(range.start,range.end)),0===text.length&&range.isEmpty())return range.start;if(text==this.getTextRange(range))return range.end;this.remove(range);var end;return end=text?this.insert(range.start,text):range.start},this.applyDeltas=function(deltas){for(var i=0;deltas.length>i;i++)this.applyDelta(deltas[i])},this.revertDeltas=function(deltas){for(var i=deltas.length-1;i>=0;i--)this.revertDelta(deltas[i])},this.applyDelta=function(delta,doNotValidate){var isInsert=\"insert\"==delta.action;(isInsert?1>=delta.lines.length&&!delta.lines[0]:!Range.comparePoints(delta.start,delta.end))||(isInsert&&delta.lines.length>2e4&&this.$splitAndapplyLargeDelta(delta,2e4),applyDelta(this.$lines,delta,doNotValidate),this._signal(\"change\",delta))},this.$splitAndapplyLargeDelta=function(delta,MAX){for(var lines=delta.lines,l=lines.length,row=delta.start.row,column=delta.start.column,from=0,to=0;;){from=to,to+=MAX-1;var chunk=lines.slice(from,to);if(to>l){delta.lines=chunk,delta.start.row=row+from,delta.start.column=column;break}chunk.push(\"\"),this.applyDelta({start:this.pos(row+from,column),end:this.pos(row+to,column=0),action:delta.action,lines:chunk},!0)}},this.revertDelta=function(delta){this.applyDelta({start:this.clonePos(delta.start),end:this.clonePos(delta.end),action:\"insert\"==delta.action?\"remove\":\"insert\",lines:delta.lines.slice()})},this.indexToPosition=function(index,startRow){for(var lines=this.$lines||this.getAllLines(),newlineLength=this.getNewLineCharacter().length,i=startRow||0,l=lines.length;l>i;i++)if(index-=lines[i].length+newlineLength,0>index)return{row:i,column:index+lines[i].length+newlineLength};return{row:l-1,column:lines[l-1].length}},this.positionToIndex=function(pos,startRow){for(var lines=this.$lines||this.getAllLines(),newlineLength=this.getNewLineCharacter().length,index=0,row=Math.min(pos.row,lines.length),i=startRow||0;row>i;++i)index+=lines[i].length+newlineLength;return index+pos.column}}).call(Document.prototype),exports.Document=Document}),ace.define(\"ace/lib/lang\",[\"require\",\"exports\",\"module\"],function(acequire,exports){\"use strict\";exports.last=function(a){return a[a.length-1]},exports.stringReverse=function(string){return string.split(\"\").reverse().join(\"\")},exports.stringRepeat=function(string,count){for(var result=\"\";count>0;)1&count&&(result+=string),(count>>=1)&&(string+=string);return result};var trimBeginRegexp=/^\\s\\s*/,trimEndRegexp=/\\s\\s*$/;exports.stringTrimLeft=function(string){return string.replace(trimBeginRegexp,\"\")},exports.stringTrimRight=function(string){return string.replace(trimEndRegexp,\"\")},exports.copyObject=function(obj){var copy={};for(var key in obj)copy[key]=obj[key];return copy},exports.copyArray=function(array){for(var copy=[],i=0,l=array.length;l>i;i++)copy[i]=array[i]&&\"object\"==typeof array[i]?this.copyObject(array[i]):array[i];return copy},exports.deepCopy=function deepCopy(obj){if(\"object\"!=typeof obj||!obj)return obj;var copy;if(Array.isArray(obj)){copy=[];for(var key=0;obj.length>key;key++)copy[key]=deepCopy(obj[key]);return copy}if(\"[object Object]\"!==Object.prototype.toString.call(obj))return obj;copy={};for(var key in obj)copy[key]=deepCopy(obj[key]);return copy},exports.arrayToMap=function(arr){for(var map={},i=0;arr.length>i;i++)map[arr[i]]=1;return map},exports.createMap=function(props){var map=Object.create(null);for(var i in props)map[i]=props[i];return map},exports.arrayRemove=function(array,value){for(var i=0;array.length>=i;i++)value===array[i]&&array.splice(i,1)},exports.escapeRegExp=function(str){return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g,\"\\\\$1\")},exports.escapeHTML=function(str){return str.replace(/&/g,\"&#38;\").replace(/\"/g,\"&#34;\").replace(/'/g,\"&#39;\").replace(/</g,\"&#60;\")},exports.getMatchOffsets=function(string,regExp){var matches=[];return string.replace(regExp,function(str){matches.push({offset:arguments[arguments.length-2],length:str.length})}),matches},exports.deferredCall=function(fcn){var timer=null,callback=function(){timer=null,fcn()},deferred=function(timeout){return deferred.cancel(),timer=setTimeout(callback,timeout||0),deferred};return deferred.schedule=deferred,deferred.call=function(){return this.cancel(),fcn(),deferred},deferred.cancel=function(){return clearTimeout(timer),timer=null,deferred},deferred.isPending=function(){return timer},deferred},exports.delayedCall=function(fcn,defaultTimeout){var timer=null,callback=function(){timer=null,fcn()},_self=function(timeout){null==timer&&(timer=setTimeout(callback,timeout||defaultTimeout))};return _self.delay=function(timeout){timer&&clearTimeout(timer),timer=setTimeout(callback,timeout||defaultTimeout)},_self.schedule=_self,_self.call=function(){this.cancel(),fcn()},_self.cancel=function(){timer&&clearTimeout(timer),timer=null},_self.isPending=function(){return timer},_self}}),ace.define(\"ace/worker/mirror\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/document\",\"ace/lib/lang\"],function(acequire,exports){\"use strict\";acequire(\"../range\").Range;var Document=acequire(\"../document\").Document,lang=acequire(\"../lib/lang\"),Mirror=exports.Mirror=function(sender){this.sender=sender;var doc=this.doc=new Document(\"\"),deferredUpdate=this.deferredUpdate=lang.delayedCall(this.onUpdate.bind(this)),_self=this;sender.on(\"change\",function(e){var data=e.data;if(data[0].start)doc.applyDeltas(data);else for(var i=0;data.length>i;i+=2){if(Array.isArray(data[i+1]))var d={action:\"insert\",start:data[i],lines:data[i+1]};else var d={action:\"remove\",start:data[i],end:data[i+1]};doc.applyDelta(d,!0)}return _self.$timeout?deferredUpdate.schedule(_self.$timeout):(_self.onUpdate(),void 0)})};(function(){this.$timeout=500,this.setTimeout=function(timeout){this.$timeout=timeout},this.setValue=function(value){this.doc.setValue(value),this.deferredUpdate.schedule(this.$timeout)},this.getValue=function(callbackId){this.sender.callback(this.doc.getValue(),callbackId)},this.onUpdate=function(){},this.isPending=function(){return this.deferredUpdate.isPending()}}).call(Mirror.prototype)}),ace.define(\"ace/mode/json/json_parse\",[\"require\",\"exports\",\"module\"],function(){\"use strict\";var at,ch,text,value,escapee={'\"':'\"',\"\\\\\":\"\\\\\",\"/\":\"/\",b:\"\\b\",f:\"\\f\",n:\"\\n\",r:\"\\r\",t:\"\t\"},error=function(m){throw{name:\"SyntaxError\",message:m,at:at,text:text}},next=function(c){return c&&c!==ch&&error(\"Expected '\"+c+\"' instead of '\"+ch+\"'\"),ch=text.charAt(at),at+=1,ch},number=function(){var number,string=\"\";for(\"-\"===ch&&(string=\"-\",next(\"-\"));ch>=\"0\"&&\"9\">=ch;)string+=ch,next();if(\".\"===ch)for(string+=\".\";next()&&ch>=\"0\"&&\"9\">=ch;)string+=ch;if(\"e\"===ch||\"E\"===ch)for(string+=ch,next(),(\"-\"===ch||\"+\"===ch)&&(string+=ch,next());ch>=\"0\"&&\"9\">=ch;)string+=ch,next();return number=+string,isNaN(number)?(error(\"Bad number\"),void 0):number},string=function(){var hex,i,uffff,string=\"\";if('\"'===ch)for(;next();){if('\"'===ch)return next(),string;if(\"\\\\\"===ch)if(next(),\"u\"===ch){for(uffff=0,i=0;4>i&&(hex=parseInt(next(),16),isFinite(hex));i+=1)uffff=16*uffff+hex;string+=String.fromCharCode(uffff)}else{if(\"string\"!=typeof escapee[ch])break;string+=escapee[ch]}else string+=ch}error(\"Bad string\")},white=function(){for(;ch&&\" \">=ch;)next()},word=function(){switch(ch){case\"t\":return next(\"t\"),next(\"r\"),next(\"u\"),next(\"e\"),!0;case\"f\":return next(\"f\"),next(\"a\"),next(\"l\"),next(\"s\"),next(\"e\"),!1;case\"n\":return next(\"n\"),next(\"u\"),next(\"l\"),next(\"l\"),null}error(\"Unexpected '\"+ch+\"'\")},array=function(){var array=[];if(\"[\"===ch){if(next(\"[\"),white(),\"]\"===ch)return next(\"]\"),array;for(;ch;){if(array.push(value()),white(),\"]\"===ch)return next(\"]\"),array;next(\",\"),white()}}error(\"Bad array\")},object=function(){var key,object={};if(\"{\"===ch){if(next(\"{\"),white(),\"}\"===ch)return next(\"}\"),object;for(;ch;){if(key=string(),white(),next(\":\"),Object.hasOwnProperty.call(object,key)&&error('Duplicate key \"'+key+'\"'),object[key]=value(),white(),\"}\"===ch)return next(\"}\"),object;next(\",\"),white()}}error(\"Bad object\")};return value=function(){switch(white(),ch){case\"{\":return object();case\"[\":return array();case'\"':return string();case\"-\":return number();default:return ch>=\"0\"&&\"9\">=ch?number():word()}},function(source,reviver){var result;return text=source,at=0,ch=\" \",result=value(),white(),ch&&error(\"Syntax error\"),\"function\"==typeof reviver?function walk(holder,key){var k,v,value=holder[key];if(value&&\"object\"==typeof value)for(k in value)Object.hasOwnProperty.call(value,k)&&(v=walk(value,k),void 0!==v?value[k]=v:delete value[k]);return reviver.call(holder,key,value)}({\"\":result},\"\"):result}}),ace.define(\"ace/mode/json_worker\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/worker/mirror\",\"ace/mode/json/json_parse\"],function(acequire,exports){\"use strict\";var oop=acequire(\"../lib/oop\"),Mirror=acequire(\"../worker/mirror\").Mirror,parse=acequire(\"./json/json_parse\"),JsonWorker=exports.JsonWorker=function(sender){Mirror.call(this,sender),this.setTimeout(200)};oop.inherits(JsonWorker,Mirror),function(){this.onUpdate=function(){var value=this.doc.getValue(),errors=[];try{value&&parse(value)}catch(e){var pos=this.doc.indexToPosition(e.at-1);errors.push({row:pos.row,column:pos.column,text:e.message,type:\"error\"})}this.sender.emit(\"annotate\",errors)}}.call(JsonWorker.prototype)}),ace.define(\"ace/lib/es5-shim\",[\"require\",\"exports\",\"module\"],function(){function Empty(){}function doesDefinePropertyWork(object){try{return Object.defineProperty(object,\"sentinel\",{}),\"sentinel\"in object}catch(exception){}}function toInteger(n){return n=+n,n!==n?n=0:0!==n&&n!==1/0&&n!==-(1/0)&&(n=(n>0||-1)*Math.floor(Math.abs(n))),n}Function.prototype.bind||(Function.prototype.bind=function(that){var target=this;if(\"function\"!=typeof target)throw new TypeError(\"Function.prototype.bind called on incompatible \"+target);var args=slice.call(arguments,1),bound=function(){if(this instanceof bound){var result=target.apply(this,args.concat(slice.call(arguments)));return Object(result)===result?result:this}return target.apply(that,args.concat(slice.call(arguments)))};return target.prototype&&(Empty.prototype=target.prototype,bound.prototype=new Empty,Empty.prototype=null),bound});var defineGetter,defineSetter,lookupGetter,lookupSetter,supportsAccessors,call=Function.prototype.call,prototypeOfArray=Array.prototype,prototypeOfObject=Object.prototype,slice=prototypeOfArray.slice,_toString=call.bind(prototypeOfObject.toString),owns=call.bind(prototypeOfObject.hasOwnProperty);if((supportsAccessors=owns(prototypeOfObject,\"__defineGetter__\"))&&(defineGetter=call.bind(prototypeOfObject.__defineGetter__),defineSetter=call.bind(prototypeOfObject.__defineSetter__),lookupGetter=call.bind(prototypeOfObject.__lookupGetter__),lookupSetter=call.bind(prototypeOfObject.__lookupSetter__)),2!=[1,2].splice(0).length)if(function(){function makeArray(l){var a=Array(l+2);return a[0]=a[1]=0,a}var lengthBefore,array=[];return array.splice.apply(array,makeArray(20)),array.splice.apply(array,makeArray(26)),lengthBefore=array.length,array.splice(5,0,\"XXX\"),lengthBefore+1==array.length,lengthBefore+1==array.length?!0:void 0\n}()){var array_splice=Array.prototype.splice;Array.prototype.splice=function(start,deleteCount){return arguments.length?array_splice.apply(this,[void 0===start?0:start,void 0===deleteCount?this.length-start:deleteCount].concat(slice.call(arguments,2))):[]}}else Array.prototype.splice=function(pos,removeCount){var length=this.length;pos>0?pos>length&&(pos=length):void 0==pos?pos=0:0>pos&&(pos=Math.max(length+pos,0)),length>pos+removeCount||(removeCount=length-pos);var removed=this.slice(pos,pos+removeCount),insert=slice.call(arguments,2),add=insert.length;if(pos===length)add&&this.push.apply(this,insert);else{var remove=Math.min(removeCount,length-pos),tailOldPos=pos+remove,tailNewPos=tailOldPos+add-remove,tailCount=length-tailOldPos,lengthAfterRemove=length-remove;if(tailOldPos>tailNewPos)for(var i=0;tailCount>i;++i)this[tailNewPos+i]=this[tailOldPos+i];else if(tailNewPos>tailOldPos)for(i=tailCount;i--;)this[tailNewPos+i]=this[tailOldPos+i];if(add&&pos===lengthAfterRemove)this.length=lengthAfterRemove,this.push.apply(this,insert);else for(this.length=lengthAfterRemove+add,i=0;add>i;++i)this[pos+i]=insert[i]}return removed};Array.isArray||(Array.isArray=function(obj){return\"[object Array]\"==_toString(obj)});var boxedString=Object(\"a\"),splitString=\"a\"!=boxedString[0]||!(0 in boxedString);if(Array.prototype.forEach||(Array.prototype.forEach=function(fun){var object=toObject(this),self=splitString&&\"[object String]\"==_toString(this)?this.split(\"\"):object,thisp=arguments[1],i=-1,length=self.length>>>0;if(\"[object Function]\"!=_toString(fun))throw new TypeError;for(;length>++i;)i in self&&fun.call(thisp,self[i],i,object)}),Array.prototype.map||(Array.prototype.map=function(fun){var object=toObject(this),self=splitString&&\"[object String]\"==_toString(this)?this.split(\"\"):object,length=self.length>>>0,result=Array(length),thisp=arguments[1];if(\"[object Function]\"!=_toString(fun))throw new TypeError(fun+\" is not a function\");for(var i=0;length>i;i++)i in self&&(result[i]=fun.call(thisp,self[i],i,object));return result}),Array.prototype.filter||(Array.prototype.filter=function(fun){var value,object=toObject(this),self=splitString&&\"[object String]\"==_toString(this)?this.split(\"\"):object,length=self.length>>>0,result=[],thisp=arguments[1];if(\"[object Function]\"!=_toString(fun))throw new TypeError(fun+\" is not a function\");for(var i=0;length>i;i++)i in self&&(value=self[i],fun.call(thisp,value,i,object)&&result.push(value));return result}),Array.prototype.every||(Array.prototype.every=function(fun){var object=toObject(this),self=splitString&&\"[object String]\"==_toString(this)?this.split(\"\"):object,length=self.length>>>0,thisp=arguments[1];if(\"[object Function]\"!=_toString(fun))throw new TypeError(fun+\" is not a function\");for(var i=0;length>i;i++)if(i in self&&!fun.call(thisp,self[i],i,object))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(fun){var object=toObject(this),self=splitString&&\"[object String]\"==_toString(this)?this.split(\"\"):object,length=self.length>>>0,thisp=arguments[1];if(\"[object Function]\"!=_toString(fun))throw new TypeError(fun+\" is not a function\");for(var i=0;length>i;i++)if(i in self&&fun.call(thisp,self[i],i,object))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(fun){var object=toObject(this),self=splitString&&\"[object String]\"==_toString(this)?this.split(\"\"):object,length=self.length>>>0;if(\"[object Function]\"!=_toString(fun))throw new TypeError(fun+\" is not a function\");if(!length&&1==arguments.length)throw new TypeError(\"reduce of empty array with no initial value\");var result,i=0;if(arguments.length>=2)result=arguments[1];else for(;;){if(i in self){result=self[i++];break}if(++i>=length)throw new TypeError(\"reduce of empty array with no initial value\")}for(;length>i;i++)i in self&&(result=fun.call(void 0,result,self[i],i,object));return result}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(fun){var object=toObject(this),self=splitString&&\"[object String]\"==_toString(this)?this.split(\"\"):object,length=self.length>>>0;if(\"[object Function]\"!=_toString(fun))throw new TypeError(fun+\" is not a function\");if(!length&&1==arguments.length)throw new TypeError(\"reduceRight of empty array with no initial value\");var result,i=length-1;if(arguments.length>=2)result=arguments[1];else for(;;){if(i in self){result=self[i--];break}if(0>--i)throw new TypeError(\"reduceRight of empty array with no initial value\")}do i in this&&(result=fun.call(void 0,result,self[i],i,object));while(i--);return result}),Array.prototype.indexOf&&-1==[0,1].indexOf(1,2)||(Array.prototype.indexOf=function(sought){var self=splitString&&\"[object String]\"==_toString(this)?this.split(\"\"):toObject(this),length=self.length>>>0;if(!length)return-1;var i=0;for(arguments.length>1&&(i=toInteger(arguments[1])),i=i>=0?i:Math.max(0,length+i);length>i;i++)if(i in self&&self[i]===sought)return i;return-1}),Array.prototype.lastIndexOf&&-1==[0,1].lastIndexOf(0,-3)||(Array.prototype.lastIndexOf=function(sought){var self=splitString&&\"[object String]\"==_toString(this)?this.split(\"\"):toObject(this),length=self.length>>>0;if(!length)return-1;var i=length-1;for(arguments.length>1&&(i=Math.min(i,toInteger(arguments[1]))),i=i>=0?i:length-Math.abs(i);i>=0;i--)if(i in self&&sought===self[i])return i;return-1}),Object.getPrototypeOf||(Object.getPrototypeOf=function(object){return object.__proto__||(object.constructor?object.constructor.prototype:prototypeOfObject)}),!Object.getOwnPropertyDescriptor){var ERR_NON_OBJECT=\"Object.getOwnPropertyDescriptor called on a non-object: \";Object.getOwnPropertyDescriptor=function(object,property){if(\"object\"!=typeof object&&\"function\"!=typeof object||null===object)throw new TypeError(ERR_NON_OBJECT+object);if(owns(object,property)){var descriptor,getter,setter;if(descriptor={enumerable:!0,configurable:!0},supportsAccessors){var prototype=object.__proto__;object.__proto__=prototypeOfObject;var getter=lookupGetter(object,property),setter=lookupSetter(object,property);if(object.__proto__=prototype,getter||setter)return getter&&(descriptor.get=getter),setter&&(descriptor.set=setter),descriptor}return descriptor.value=object[property],descriptor}}}if(Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(object){return Object.keys(object)}),!Object.create){var createEmpty;createEmpty=null===Object.prototype.__proto__?function(){return{__proto__:null}}:function(){var empty={};for(var i in empty)empty[i]=null;return empty.constructor=empty.hasOwnProperty=empty.propertyIsEnumerable=empty.isPrototypeOf=empty.toLocaleString=empty.toString=empty.valueOf=empty.__proto__=null,empty},Object.create=function(prototype,properties){var object;if(null===prototype)object=createEmpty();else{if(\"object\"!=typeof prototype)throw new TypeError(\"typeof prototype[\"+typeof prototype+\"] != 'object'\");var Type=function(){};Type.prototype=prototype,object=new Type,object.__proto__=prototype}return void 0!==properties&&Object.defineProperties(object,properties),object}}if(Object.defineProperty){var definePropertyWorksOnObject=doesDefinePropertyWork({}),definePropertyWorksOnDom=\"undefined\"==typeof document||doesDefinePropertyWork(document.createElement(\"div\"));if(!definePropertyWorksOnObject||!definePropertyWorksOnDom)var definePropertyFallback=Object.defineProperty}if(!Object.defineProperty||definePropertyFallback){var ERR_NON_OBJECT_DESCRIPTOR=\"Property description must be an object: \",ERR_NON_OBJECT_TARGET=\"Object.defineProperty called on non-object: \",ERR_ACCESSORS_NOT_SUPPORTED=\"getters & setters can not be defined on this javascript engine\";Object.defineProperty=function(object,property,descriptor){if(\"object\"!=typeof object&&\"function\"!=typeof object||null===object)throw new TypeError(ERR_NON_OBJECT_TARGET+object);if(\"object\"!=typeof descriptor&&\"function\"!=typeof descriptor||null===descriptor)throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR+descriptor);if(definePropertyFallback)try{return definePropertyFallback.call(Object,object,property,descriptor)}catch(exception){}if(owns(descriptor,\"value\"))if(supportsAccessors&&(lookupGetter(object,property)||lookupSetter(object,property))){var prototype=object.__proto__;object.__proto__=prototypeOfObject,delete object[property],object[property]=descriptor.value,object.__proto__=prototype}else object[property]=descriptor.value;else{if(!supportsAccessors)throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);owns(descriptor,\"get\")&&defineGetter(object,property,descriptor.get),owns(descriptor,\"set\")&&defineSetter(object,property,descriptor.set)}return object}}Object.defineProperties||(Object.defineProperties=function(object,properties){for(var property in properties)owns(properties,property)&&Object.defineProperty(object,property,properties[property]);return object}),Object.seal||(Object.seal=function(object){return object}),Object.freeze||(Object.freeze=function(object){return object});try{Object.freeze(function(){})}catch(exception){Object.freeze=function(freezeObject){return function(object){return\"function\"==typeof object?object:freezeObject(object)}}(Object.freeze)}if(Object.preventExtensions||(Object.preventExtensions=function(object){return object}),Object.isSealed||(Object.isSealed=function(){return!1}),Object.isFrozen||(Object.isFrozen=function(){return!1}),Object.isExtensible||(Object.isExtensible=function(object){if(Object(object)===object)throw new TypeError;for(var name=\"\";owns(object,name);)name+=\"?\";object[name]=!0;var returnValue=owns(object,name);return delete object[name],returnValue}),!Object.keys){var hasDontEnumBug=!0,dontEnums=[\"toString\",\"toLocaleString\",\"valueOf\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"constructor\"],dontEnumsLength=dontEnums.length;for(var key in{toString:null})hasDontEnumBug=!1;Object.keys=function(object){if(\"object\"!=typeof object&&\"function\"!=typeof object||null===object)throw new TypeError(\"Object.keys called on a non-object\");var keys=[];for(var name in object)owns(object,name)&&keys.push(name);if(hasDontEnumBug)for(var i=0,ii=dontEnumsLength;ii>i;i++){var dontEnum=dontEnums[i];owns(object,dontEnum)&&keys.push(dontEnum)}return keys}}Date.now||(Date.now=function(){return(new Date).getTime()});var ws=\"\t\\n\u000b\\f\\r   ᠎              \\u2028\\u2029\";if(!String.prototype.trim||ws.trim()){ws=\"[\"+ws+\"]\";var trimBeginRegexp=RegExp(\"^\"+ws+ws+\"*\"),trimEndRegexp=RegExp(ws+ws+\"*$\");String.prototype.trim=function(){return(this+\"\").replace(trimBeginRegexp,\"\").replace(trimEndRegexp,\"\")}}var toObject=function(o){if(null==o)throw new TypeError(\"can't convert \"+o+\" to object\");return Object(o)}});";
9176
9327
 
9177
9328
  /***/ },
9178
- /* 16 */
9329
+ /* 17 */
9179
9330
  /***/ function(module, exports) {
9180
9331
 
9181
9332
  ace.define("ace/ext/searchbox",["require","exports","module","ace/lib/dom","ace/lib/lang","ace/lib/event","ace/keyboard/hash_handler","ace/lib/keys"], function(acequire, exports, module) {
@@ -9222,6 +9373,7 @@ return /******/ (function(modules) { // webpackBootstrap
9222
9373
  }\
9223
9374
  .ace_search_field {\
9224
9375
  background-color: white;\
9376
+ color: black;\
9225
9377
  border-right: 1px solid #cbcbcb;\
9226
9378
  border: 0 none;\
9227
9379
  -webkit-box-sizing: border-box;\
@@ -9596,7 +9748,7 @@ return /******/ (function(modules) { // webpackBootstrap
9596
9748
 
9597
9749
 
9598
9750
  /***/ },
9599
- /* 17 */
9751
+ /* 18 */
9600
9752
  /***/ function(module, exports) {
9601
9753
 
9602
9754
  /* ***** BEGIN LICENSE BLOCK *****
@@ -9641,6 +9793,7 @@ return /******/ (function(modules) { // webpackBootstrap
9641
9793
  .ace-jsoneditor.ace_editor {\
9642
9794
  font-family: droid sans mono, consolas, monospace, courier new, courier, sans-serif;\
9643
9795
  line-height: 1.3;\
9796
+ background-color: #fff;\
9644
9797
  }\
9645
9798
  .ace-jsoneditor .ace_print-margin {\
9646
9799
  width: 1px;\