jsoneditor-rails 1.0.2 → 1.0.3
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 +4 -4
- data/CHANGELOG.md +4 -0
- data/lib/jsoneditor/rails/version.rb +1 -1
- data/vendor/assets/javascripts/jsoneditor-minimalist.js +341 -251
- data/vendor/assets/javascripts/jsoneditor-minimalist.map +1 -1
- data/vendor/assets/javascripts/jsoneditor.js +344 -254
- data/vendor/assets/javascripts/jsoneditor.map +1 -1
- data/vendor/assets/stylesheets/jsoneditor.scss +16 -6
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 1b1f64b68e6fe24fd9e7b5cb600dd2289b8a05d14db957eb3844661c012e9d50
         | 
| 4 | 
            +
              data.tar.gz: d55f4e5c69896922118ec5072adfa9332f4c40cc41f35c2a0c8bd5064c332c5c
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: ff175b3f9a234a5016ef93e0a570bf41192ba517568cce22ccb478f1821b683dfa96e949665c11411b99526cd9e3dc4676e697030759df526ad7c63766d95351
         | 
| 7 | 
            +
              data.tar.gz: fc2923853f7dea9b731b3d01a4ba019e7e5d20edf172f879b12a9651477167544bf4997e4850cb0987f5a446fd3878e4ce164766432f20e4941df8588a184334
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    
| @@ -21,11 +21,11 @@ | |
| 21 21 | 
             
             * License for the specific language governing permissions and limitations under
         | 
| 22 22 | 
             
             * the License.
         | 
| 23 23 | 
             
             *
         | 
| 24 | 
            -
             * Copyright (c) 2011- | 
| 24 | 
            +
             * Copyright (c) 2011-2018 Jos de Jong, http://jsoneditoronline.org
         | 
| 25 25 | 
             
             *
         | 
| 26 26 | 
             
             * @author  Jos de Jong, <wjosdejong@gmail.com>
         | 
| 27 | 
            -
             * @version 5. | 
| 28 | 
            -
             * @date    2018- | 
| 27 | 
            +
             * @version 5.26.3
         | 
| 28 | 
            +
             * @date    2018-12-06
         | 
| 29 29 | 
             
             */
         | 
| 30 30 | 
             
            (function webpackUniversalModuleDefinition(root, factory) {
         | 
| 31 31 | 
             
            	if(typeof exports === 'object' && typeof module === 'object')
         | 
| @@ -252,7 +252,7 @@ return /******/ (function(modules) { // webpackBootstrap | |
| 252 252 | 
             
            	  'colorPicker', 'onColorPicker',
         | 
| 253 253 | 
             
            	  'timestampTag',
         | 
| 254 254 | 
             
            	  'escapeUnicode', 'history', 'search', 'mode', 'modes', 'name', 'indentation',
         | 
| 255 | 
            -
            	  'sortObjectKeys', 'navigationBar', 'statusBar', 'languages', 'language'
         | 
| 255 | 
            +
            	  'sortObjectKeys', 'navigationBar', 'statusBar', 'mainMenuBar', 'languages', 'language', 'enableSort', 'enableTransform'
         | 
| 256 256 | 
             
            	];
         | 
| 257 257 |  | 
| 258 258 | 
             
            	/**
         | 
| @@ -1580,8 +1580,6 @@ return /******/ (function(modules) { // webpackBootstrap | |
| 1580 1580 | 
             
            	 * @private
         | 
| 1581 1581 | 
             
            	 */
         | 
| 1582 1582 | 
             
            	treemode._setOptions = function (options) {
         | 
| 1583 | 
            -
            	  var editor = this;
         | 
| 1584 | 
            -
             | 
| 1585 1583 | 
             
            	  this.options = {
         | 
| 1586 1584 | 
             
            	    search: true,
         | 
| 1587 1585 | 
             
            	    history: true,
         | 
| @@ -1591,6 +1589,7 @@ return /******/ (function(modules) { // webpackBootstrap | |
| 1591 1589 | 
             
            	    schemaRefs: null,
         | 
| 1592 1590 | 
             
            	    autocomplete: null,
         | 
| 1593 1591 | 
             
            	    navigationBar : true,
         | 
| 1592 | 
            +
            	    mainMenuBar: true,
         | 
| 1594 1593 | 
             
            	    onSelectionChange: null,
         | 
| 1595 1594 | 
             
            	    colorPicker: true,
         | 
| 1596 1595 | 
             
            	    onColorPicker: function (parent, color, onChange) {
         | 
| @@ -1600,11 +1599,11 @@ return /******/ (function(modules) { // webpackBootstrap | |
| 1600 1599 | 
             
            	          color: color,
         | 
| 1601 1600 | 
             
            	          popup: 'bottom',
         | 
| 1602 1601 | 
             
            	          onDone: function (color) {
         | 
| 1603 | 
            -
            	            var alpha = color.rgba[3]
         | 
| 1602 | 
            +
            	            var alpha = color.rgba[3];
         | 
| 1604 1603 | 
             
            	            var hex = (alpha === 1)
         | 
| 1605 1604 | 
             
            	                ? color.hex.substr(0, 7)  // return #RRGGBB
         | 
| 1606 | 
            -
            	                : color.hex               // return #RRGGBBAA
         | 
| 1607 | 
            -
            	            onChange(hex)
         | 
| 1605 | 
            +
            	                : color.hex;               // return #RRGGBBAA
         | 
| 1606 | 
            +
            	            onChange(hex);
         | 
| 1608 1607 | 
             
            	          }
         | 
| 1609 1608 | 
             
            	        }).show();
         | 
| 1610 1609 | 
             
            	      }
         | 
| @@ -1614,7 +1613,9 @@ return /******/ (function(modules) { // webpackBootstrap | |
| 1614 1613 | 
             
            	      }
         | 
| 1615 1614 | 
             
            	    },
         | 
| 1616 1615 | 
             
            	    timestampTag: true,
         | 
| 1617 | 
            -
            	    onEvent: null
         | 
| 1616 | 
            +
            	    onEvent: null,
         | 
| 1617 | 
            +
            	    enableSort: true,
         | 
| 1618 | 
            +
            	    enableTransform: true
         | 
| 1618 1619 | 
             
            	  };
         | 
| 1619 1620 |  | 
| 1620 1621 | 
             
            	  // copy all options
         | 
| @@ -1949,9 +1950,27 @@ return /******/ (function(modules) { // webpackBootstrap | |
| 1949 1950 | 
             
            	    return;
         | 
| 1950 1951 | 
             
            	  }
         | 
| 1951 1952 |  | 
| 1953 | 
            +
            	  // selection can be changed after undo/redo
         | 
| 1954 | 
            +
            	  this.selection = this.getDomSelection();
         | 
| 1955 | 
            +
             | 
| 1952 1956 | 
             
            	  // validate JSON schema (if configured)
         | 
| 1953 1957 | 
             
            	  this._debouncedValidate();
         | 
| 1954 1958 |  | 
| 1959 | 
            +
            	  if (this.treePath) {
         | 
| 1960 | 
            +
            	    var selectedNode = this.selection
         | 
| 1961 | 
            +
            	        ?  this.node.findNodeByInternalPath(this.selection.path)
         | 
| 1962 | 
            +
            	        : this.multiselection
         | 
| 1963 | 
            +
            	            ? this.multiselection.nodes[0]
         | 
| 1964 | 
            +
            	            : undefined;
         | 
| 1965 | 
            +
             | 
| 1966 | 
            +
            	    if (selectedNode) {
         | 
| 1967 | 
            +
            	      this._updateTreePath(selectedNode.getNodePath())
         | 
| 1968 | 
            +
            	    }
         | 
| 1969 | 
            +
            	    else {
         | 
| 1970 | 
            +
            	      this.treePath.reset()
         | 
| 1971 | 
            +
            	    }
         | 
| 1972 | 
            +
            	  }
         | 
| 1973 | 
            +
             | 
| 1955 1974 | 
             
            	  // trigger the onChange callback
         | 
| 1956 1975 | 
             
            	  if (this.options.onChange) {
         | 
| 1957 1976 | 
             
            	    try {
         | 
| @@ -2373,6 +2392,9 @@ return /******/ (function(modules) { // webpackBootstrap | |
| 2373 2392 | 
             
            	  this.frame.className = 'jsoneditor jsoneditor-mode-' + this.options.mode;
         | 
| 2374 2393 | 
             
            	  this.container.appendChild(this.frame);
         | 
| 2375 2394 |  | 
| 2395 | 
            +
            	  this.contentOuter = document.createElement('div');
         | 
| 2396 | 
            +
            	  this.contentOuter.className = 'jsoneditor-outer';
         | 
| 2397 | 
            +
             | 
| 2376 2398 | 
             
            	  // create one global event listener to handle all events from all nodes
         | 
| 2377 2399 | 
             
            	  var editor = this;
         | 
| 2378 2400 | 
             
            	  function onEvent(event) {
         | 
| @@ -2411,107 +2433,115 @@ return /******/ (function(modules) { // webpackBootstrap | |
| 2411 2433 | 
             
            	  this.frame.onfocusin = onEvent;  // for IE
         | 
| 2412 2434 | 
             
            	  this.frame.onfocusout = onEvent; // for IE
         | 
| 2413 2435 |  | 
| 2414 | 
            -
            	   | 
| 2415 | 
            -
             | 
| 2416 | 
            -
             | 
| 2417 | 
            -
             | 
| 2418 | 
            -
             | 
| 2419 | 
            -
             | 
| 2420 | 
            -
             | 
| 2421 | 
            -
             | 
| 2422 | 
            -
             | 
| 2423 | 
            -
             | 
| 2424 | 
            -
             | 
| 2425 | 
            -
            	     | 
| 2426 | 
            -
             | 
| 2427 | 
            -
             | 
| 2428 | 
            -
             | 
| 2429 | 
            -
            	  // create collapse all button
         | 
| 2430 | 
            -
            	  var collapseAll = document.createElement('button');
         | 
| 2431 | 
            -
            	  collapseAll.type = 'button';
         | 
| 2432 | 
            -
            	  collapseAll.title = translate('collapseAll');
         | 
| 2433 | 
            -
            	  collapseAll.className = 'jsoneditor-collapse-all';
         | 
| 2434 | 
            -
            	  collapseAll.onclick = function () {
         | 
| 2435 | 
            -
            	    editor.collapseAll();
         | 
| 2436 | 
            -
            	  };
         | 
| 2437 | 
            -
            	  this.menu.appendChild(collapseAll);
         | 
| 2438 | 
            -
             | 
| 2439 | 
            -
            	  // create sort button
         | 
| 2440 | 
            -
            	  var sort = document.createElement('button');
         | 
| 2441 | 
            -
            	  sort.type = 'button';
         | 
| 2442 | 
            -
            	  sort.className = 'jsoneditor-sort';
         | 
| 2443 | 
            -
            	  sort.title = translate('sortTitleShort');
         | 
| 2444 | 
            -
            	  sort.onclick = function () {
         | 
| 2445 | 
            -
            	    var anchor = editor.options.modalAnchor || DEFAULT_MODAL_ANCHOR;
         | 
| 2446 | 
            -
            	    showSortModal(editor.node, anchor)
         | 
| 2447 | 
            -
            	  };
         | 
| 2448 | 
            -
            	  this.menu.appendChild(sort);
         | 
| 2449 | 
            -
             | 
| 2450 | 
            -
            	  // create transform button
         | 
| 2451 | 
            -
            	  var transform = document.createElement('button');
         | 
| 2452 | 
            -
            	  transform.type = 'button';
         | 
| 2453 | 
            -
            	  transform.title = translate('transformTitleShort');
         | 
| 2454 | 
            -
            	  transform.className = 'jsoneditor-transform';
         | 
| 2455 | 
            -
            	  transform.onclick = function () {
         | 
| 2456 | 
            -
            	    var anchor = editor.options.modalAnchor || DEFAULT_MODAL_ANCHOR;
         | 
| 2457 | 
            -
            	    showTransformModal(editor.node, anchor)
         | 
| 2458 | 
            -
            	  };
         | 
| 2459 | 
            -
            	  this.menu.appendChild(transform);
         | 
| 2460 | 
            -
             | 
| 2461 | 
            -
            	  // create undo/redo buttons
         | 
| 2462 | 
            -
            	  if (this.history) {
         | 
| 2463 | 
            -
            	    // create undo button
         | 
| 2464 | 
            -
            	    var undo = document.createElement('button');
         | 
| 2465 | 
            -
            	    undo.type = 'button';
         | 
| 2466 | 
            -
            	    undo.className = 'jsoneditor-undo jsoneditor-separator';
         | 
| 2467 | 
            -
            	    undo.title = translate('undo');
         | 
| 2468 | 
            -
            	    undo.onclick = function () {
         | 
| 2469 | 
            -
            	      editor._onUndo();
         | 
| 2436 | 
            +
            	  if (this.options.mainMenuBar) {
         | 
| 2437 | 
            +
            	    util.addClassName(this.contentOuter, 'has-main-menu-bar');
         | 
| 2438 | 
            +
             | 
| 2439 | 
            +
            	    // create menu
         | 
| 2440 | 
            +
            	    this.menu = document.createElement('div');
         | 
| 2441 | 
            +
            	    this.menu.className = 'jsoneditor-menu';
         | 
| 2442 | 
            +
            	    this.frame.appendChild(this.menu);
         | 
| 2443 | 
            +
             | 
| 2444 | 
            +
            	    // create expand all button
         | 
| 2445 | 
            +
            	    var expandAll = document.createElement('button');
         | 
| 2446 | 
            +
            	    expandAll.type = 'button';
         | 
| 2447 | 
            +
            	    expandAll.className = 'jsoneditor-expand-all';
         | 
| 2448 | 
            +
            	    expandAll.title = translate('expandAll');
         | 
| 2449 | 
            +
            	    expandAll.onclick = function () {
         | 
| 2450 | 
            +
            	      editor.expandAll();
         | 
| 2470 2451 | 
             
            	    };
         | 
| 2471 | 
            -
            	    this.menu.appendChild( | 
| 2472 | 
            -
             | 
| 2473 | 
            -
             | 
| 2474 | 
            -
            	     | 
| 2475 | 
            -
            	     | 
| 2476 | 
            -
            	     | 
| 2477 | 
            -
            	     | 
| 2478 | 
            -
            	     | 
| 2479 | 
            -
             | 
| 2480 | 
            -
            	      editor._onRedo();
         | 
| 2452 | 
            +
            	    this.menu.appendChild(expandAll);
         | 
| 2453 | 
            +
             | 
| 2454 | 
            +
            	    // create collapse all button
         | 
| 2455 | 
            +
            	    var collapseAll = document.createElement('button');
         | 
| 2456 | 
            +
            	    collapseAll.type = 'button';
         | 
| 2457 | 
            +
            	    collapseAll.title = translate('collapseAll');
         | 
| 2458 | 
            +
            	    collapseAll.className = 'jsoneditor-collapse-all';
         | 
| 2459 | 
            +
            	    collapseAll.onclick = function () {
         | 
| 2460 | 
            +
            	      editor.collapseAll();
         | 
| 2481 2461 | 
             
            	    };
         | 
| 2482 | 
            -
            	    this.menu.appendChild( | 
| 2483 | 
            -
             | 
| 2462 | 
            +
            	    this.menu.appendChild(collapseAll);
         | 
| 2463 | 
            +
             | 
| 2464 | 
            +
            	    // create sort button
         | 
| 2465 | 
            +
            	    if (this.options.enableSort) {
         | 
| 2466 | 
            +
            	      var sort = document.createElement('button');
         | 
| 2467 | 
            +
            	      sort.type = 'button';
         | 
| 2468 | 
            +
            	      sort.className = 'jsoneditor-sort';
         | 
| 2469 | 
            +
            	      sort.title = translate('sortTitleShort');
         | 
| 2470 | 
            +
            	      sort.onclick = function () {
         | 
| 2471 | 
            +
            	        var anchor = editor.options.modalAnchor || DEFAULT_MODAL_ANCHOR;
         | 
| 2472 | 
            +
            	        showSortModal(editor.node, anchor)
         | 
| 2473 | 
            +
            	      };
         | 
| 2474 | 
            +
            	      this.menu.appendChild(sort);
         | 
| 2475 | 
            +
            	    }
         | 
| 2476 | 
            +
             | 
| 2477 | 
            +
            	    // create transform button
         | 
| 2478 | 
            +
            	    if (this.options.enableTransform) {
         | 
| 2479 | 
            +
            	      var transform = document.createElement('button');
         | 
| 2480 | 
            +
            	      transform.type = 'button';
         | 
| 2481 | 
            +
            	      transform.title = translate('transformTitleShort');
         | 
| 2482 | 
            +
            	      transform.className = 'jsoneditor-transform';
         | 
| 2483 | 
            +
            	      transform.onclick = function () {
         | 
| 2484 | 
            +
            	        var anchor = editor.options.modalAnchor || DEFAULT_MODAL_ANCHOR;
         | 
| 2485 | 
            +
            	        showTransformModal(editor.node, anchor)
         | 
| 2486 | 
            +
            	      };
         | 
| 2487 | 
            +
            	      this.menu.appendChild(transform);
         | 
| 2488 | 
            +
            	    }
         | 
| 2489 | 
            +
             | 
| 2490 | 
            +
            	    // create undo/redo buttons
         | 
| 2491 | 
            +
            	    if (this.history) {
         | 
| 2492 | 
            +
            	      // create undo button
         | 
| 2493 | 
            +
            	      var undo = document.createElement('button');
         | 
| 2494 | 
            +
            	      undo.type = 'button';
         | 
| 2495 | 
            +
            	      undo.className = 'jsoneditor-undo jsoneditor-separator';
         | 
| 2496 | 
            +
            	      undo.title = translate('undo');
         | 
| 2497 | 
            +
            	      undo.onclick = function () {
         | 
| 2498 | 
            +
            	        editor._onUndo();
         | 
| 2499 | 
            +
            	      };
         | 
| 2500 | 
            +
            	      this.menu.appendChild(undo);
         | 
| 2501 | 
            +
            	      this.dom.undo = undo;
         | 
| 2502 | 
            +
             | 
| 2503 | 
            +
            	      // create redo button
         | 
| 2504 | 
            +
            	      var redo = document.createElement('button');
         | 
| 2505 | 
            +
            	      redo.type = 'button';
         | 
| 2506 | 
            +
            	      redo.className = 'jsoneditor-redo';
         | 
| 2507 | 
            +
            	      redo.title = translate('redo');
         | 
| 2508 | 
            +
            	      redo.onclick = function () {
         | 
| 2509 | 
            +
            	        editor._onRedo();
         | 
| 2510 | 
            +
            	      };
         | 
| 2511 | 
            +
            	      this.menu.appendChild(redo);
         | 
| 2512 | 
            +
            	      this.dom.redo = redo;
         | 
| 2484 2513 |  | 
| 2485 | 
            -
             | 
| 2486 | 
            -
             | 
| 2487 | 
            -
             | 
| 2488 | 
            -
             | 
| 2489 | 
            -
             | 
| 2490 | 
            -
             | 
| 2491 | 
            -
             | 
| 2514 | 
            +
            	      // register handler for onchange of history
         | 
| 2515 | 
            +
            	      this.history.onChange = function () {
         | 
| 2516 | 
            +
            	        undo.disabled = !editor.history.canUndo();
         | 
| 2517 | 
            +
            	        redo.disabled = !editor.history.canRedo();
         | 
| 2518 | 
            +
            	      };
         | 
| 2519 | 
            +
            	      this.history.onChange();
         | 
| 2520 | 
            +
            	    }
         | 
| 2492 2521 |  | 
| 2493 | 
            -
             | 
| 2494 | 
            -
             | 
| 2495 | 
            -
             | 
| 2496 | 
            -
             | 
| 2497 | 
            -
             | 
| 2498 | 
            -
             | 
| 2499 | 
            -
             | 
| 2500 | 
            -
             | 
| 2501 | 
            -
             | 
| 2522 | 
            +
            	    // create mode box
         | 
| 2523 | 
            +
            	    if (this.options && this.options.modes && this.options.modes.length) {
         | 
| 2524 | 
            +
            	      var me = this;
         | 
| 2525 | 
            +
            	      this.modeSwitcher = new ModeSwitcher(this.menu, this.options.modes, this.options.mode, function onSwitch(mode) {
         | 
| 2526 | 
            +
            	        // switch mode and restore focus
         | 
| 2527 | 
            +
            	        me.setMode(mode);
         | 
| 2528 | 
            +
            	        me.modeSwitcher.focus();
         | 
| 2529 | 
            +
            	      });
         | 
| 2530 | 
            +
            	    }
         | 
| 2502 2531 |  | 
| 2503 | 
            -
             | 
| 2504 | 
            -
             | 
| 2505 | 
            -
             | 
| 2532 | 
            +
            	    // create search box
         | 
| 2533 | 
            +
            	    if (this.options.search) {
         | 
| 2534 | 
            +
            	      this.searchBox = new SearchBox(this, this.menu);
         | 
| 2535 | 
            +
            	    }
         | 
| 2506 2536 | 
             
            	  }
         | 
| 2507 2537 |  | 
| 2508 | 
            -
            	  if(this.options.navigationBar) {
         | 
| 2538 | 
            +
            	  if (this.options.navigationBar) {
         | 
| 2509 2539 | 
             
            	    // create second menu row for treepath
         | 
| 2510 2540 | 
             
            	    this.navBar = document.createElement('div');
         | 
| 2511 2541 | 
             
            	    this.navBar.className = 'jsoneditor-navigation-bar nav-bar-empty';
         | 
| 2512 2542 | 
             
            	    this.frame.appendChild(this.navBar);
         | 
| 2513 2543 |  | 
| 2514 | 
            -
            	    this.treePath = new TreePath(this.navBar);
         | 
| 2544 | 
            +
            	    this.treePath = new TreePath(this.navBar, this.frame);
         | 
| 2515 2545 | 
             
            	    this.treePath.onSectionSelected(this._onTreePathSectionSelected.bind(this));
         | 
| 2516 2546 | 
             
            	    this.treePath.onContextMenuItemSelected(this._onTreePathMenuItemSelected.bind(this));
         | 
| 2517 2547 | 
             
            	  }
         | 
| @@ -2602,7 +2632,8 @@ return /******/ (function(modules) { // webpackBootstrap | |
| 2602 2632 | 
             
            	    }
         | 
| 2603 2633 | 
             
            	  }
         | 
| 2604 2634 | 
             
            	  else {
         | 
| 2605 | 
            -
            	     | 
| 2635 | 
            +
            	    // filter mouse events in the contents part of the editor (not the main menu)
         | 
| 2636 | 
            +
            	    if (event.type === 'mousedown' && util.hasParentNode(event.target, this.content)) {
         | 
| 2606 2637 | 
             
            	      this.deselect();
         | 
| 2607 2638 |  | 
| 2608 2639 | 
             
            	      if (node && event.target === node.dom.drag) {
         | 
| @@ -2636,7 +2667,7 @@ return /******/ (function(modules) { // webpackBootstrap | |
| 2636 2667 | 
             
            	        name: getName(node),
         | 
| 2637 2668 | 
             
            	        node: node,
         | 
| 2638 2669 | 
             
            	        children: []
         | 
| 2639 | 
            -
            	      }
         | 
| 2670 | 
            +
            	      };
         | 
| 2640 2671 | 
             
            	      if (node.childs && node.childs.length) {
         | 
| 2641 2672 | 
             
            	        node.childs.forEach(function (childNode) {
         | 
| 2642 2673 | 
             
            	          pathObj.children.push({
         | 
| @@ -2752,6 +2783,7 @@ return /******/ (function(modules) { // webpackBootstrap | |
| 2752 2783 | 
             
            	    });
         | 
| 2753 2784 | 
             
            	  }
         | 
| 2754 2785 |  | 
| 2786 | 
            +
            	  event.preventDefault();
         | 
| 2755 2787 | 
             
            	};
         | 
| 2756 2788 |  | 
| 2757 2789 | 
             
            	/**
         | 
| @@ -2799,10 +2831,9 @@ return /******/ (function(modules) { // webpackBootstrap | |
| 2799 2831 |  | 
| 2800 2832 | 
             
            	/**
         | 
| 2801 2833 | 
             
            	 * End of multiselect nodes by dragging
         | 
| 2802 | 
            -
            	 * @param event
         | 
| 2803 2834 | 
             
            	 * @private
         | 
| 2804 2835 | 
             
            	 */
         | 
| 2805 | 
            -
            	treemode._onMultiSelectEnd = function ( | 
| 2836 | 
            +
            	treemode._onMultiSelectEnd = function () {
         | 
| 2806 2837 | 
             
            	  // set focus to the context menu button of the first node
         | 
| 2807 2838 | 
             
            	  if (this.multiselection.nodes[0]) {
         | 
| 2808 2839 | 
             
            	    this.multiselection.nodes[0].dom.menu.focus();
         | 
| @@ -3026,16 +3057,13 @@ return /******/ (function(modules) { // webpackBootstrap | |
| 3026 3057 | 
             
            	 * @private
         | 
| 3027 3058 | 
             
            	 */
         | 
| 3028 3059 | 
             
            	treemode._createTable = function () {
         | 
| 3029 | 
            -
            	   | 
| 3030 | 
            -
             | 
| 3031 | 
            -
            	  if(this.options.navigationBar) {
         | 
| 3032 | 
            -
            	    util.addClassName(contentOuter, 'has-nav-bar');
         | 
| 3060 | 
            +
            	  if (this.options.navigationBar) {
         | 
| 3061 | 
            +
            	    util.addClassName(this.contentOuter, 'has-nav-bar');
         | 
| 3033 3062 | 
             
            	  }
         | 
| 3034 | 
            -
            	  this.contentOuter = contentOuter;
         | 
| 3035 3063 |  | 
| 3036 3064 | 
             
            	  this.scrollableContent = document.createElement('div');
         | 
| 3037 3065 | 
             
            	  this.scrollableContent.className = 'jsoneditor-tree';
         | 
| 3038 | 
            -
            	  contentOuter.appendChild(this.scrollableContent);
         | 
| 3066 | 
            +
            	  this.contentOuter.appendChild(this.scrollableContent);
         | 
| 3039 3067 |  | 
| 3040 3068 | 
             
            	  // the jsoneditor-tree-inner div with bottom padding is here to
         | 
| 3041 3069 | 
             
            	  // keep space for the action menu dropdown. It's created as a
         | 
| @@ -3069,7 +3097,7 @@ return /******/ (function(modules) { // webpackBootstrap | |
| 3069 3097 | 
             
            	  this.tbody = document.createElement('tbody');
         | 
| 3070 3098 | 
             
            	  this.table.appendChild(this.tbody);
         | 
| 3071 3099 |  | 
| 3072 | 
            -
            	  this.frame.appendChild(contentOuter);
         | 
| 3100 | 
            +
            	  this.frame.appendChild(this.contentOuter);
         | 
| 3073 3101 | 
             
            	};
         | 
| 3074 3102 |  | 
| 3075 3103 | 
             
            	/**
         | 
| @@ -3081,7 +3109,7 @@ return /******/ (function(modules) { // webpackBootstrap | |
| 3081 3109 | 
             
            	 */
         | 
| 3082 3110 | 
             
            	treemode.showContextMenu = function (anchor, onClose) {
         | 
| 3083 3111 | 
             
            	  var items = [];
         | 
| 3084 | 
            -
            	  var  | 
| 3112 | 
            +
            	  var selectedNodes = this.multiselection.nodes.slice();
         | 
| 3085 3113 |  | 
| 3086 3114 | 
             
            	  // create duplicate button
         | 
| 3087 3115 | 
             
            	  items.push({
         | 
| @@ -3089,7 +3117,7 @@ return /******/ (function(modules) { // webpackBootstrap | |
| 3089 3117 | 
             
            	    title: translate('duplicateTitle'),
         | 
| 3090 3118 | 
             
            	    className: 'jsoneditor-duplicate',
         | 
| 3091 3119 | 
             
            	    click: function () {
         | 
| 3092 | 
            -
            	      Node.onDuplicate( | 
| 3120 | 
            +
            	      Node.onDuplicate(selectedNodes );
         | 
| 3093 3121 | 
             
            	    }
         | 
| 3094 3122 | 
             
            	  });
         | 
| 3095 3123 |  | 
| @@ -3099,12 +3127,12 @@ return /******/ (function(modules) { // webpackBootstrap | |
| 3099 3127 | 
             
            	    title: translate('removeTitle'),
         | 
| 3100 3128 | 
             
            	    className: 'jsoneditor-remove',
         | 
| 3101 3129 | 
             
            	    click: function () {
         | 
| 3102 | 
            -
            	      Node.onRemove( | 
| 3130 | 
            +
            	      Node.onRemove(selectedNodes);
         | 
| 3103 3131 | 
             
            	    }
         | 
| 3104 3132 | 
             
            	  });
         | 
| 3105 3133 |  | 
| 3106 3134 | 
             
            	  var menu = new ContextMenu(items, {close: onClose});
         | 
| 3107 | 
            -
            	  menu.show(anchor,  | 
| 3135 | 
            +
            	  menu.show(anchor, this.frame);
         | 
| 3108 3136 | 
             
            	};
         | 
| 3109 3137 |  | 
| 3110 3138 | 
             
            	/**
         | 
| @@ -3133,12 +3161,10 @@ return /******/ (function(modules) { // webpackBootstrap | |
| 3133 3161 | 
             
            	};
         | 
| 3134 3162 |  | 
| 3135 3163 | 
             
            	/**
         | 
| 3136 | 
            -
            	 * Callback  | 
| 3164 | 
            +
            	 * Callback registration for selection change
         | 
| 3137 3165 | 
             
            	 * @param {selectionCallback} callback 
         | 
| 3138 3166 | 
             
            	 * 
         | 
| 3139 3167 | 
             
            	 * @callback selectionCallback
         | 
| 3140 | 
            -
            	 * @param {SerializableNode=} start
         | 
| 3141 | 
            -
            	 * @param {SerializableNode=} end
         | 
| 3142 3168 | 
             
            	 */
         | 
| 3143 3169 | 
             
            	treemode.onSelectionChange = function (callback) {
         | 
| 3144 3170 | 
             
            	  if (typeof callback === 'function') {
         | 
| @@ -3157,7 +3183,7 @@ return /******/ (function(modules) { // webpackBootstrap | |
| 3157 3183 | 
             
            	treemode.setSelection = function (start, end) {
         | 
| 3158 3184 | 
             
            	  // check for old usage
         | 
| 3159 3185 | 
             
            	  if (start && start.dom && start.range) {
         | 
| 3160 | 
            -
            	    console.warn('setSelection/getSelection usage for text selection is  | 
| 3186 | 
            +
            	    console.warn('setSelection/getSelection usage for text selection is deprecated and should not be used, see documentation for supported selection options');
         | 
| 3161 3187 | 
             
            	    this.setDomSelection(start);
         | 
| 3162 3188 | 
             
            	  }
         | 
| 3163 3189 |  | 
| @@ -3173,7 +3199,7 @@ return /******/ (function(modules) { // webpackBootstrap | |
| 3173 3199 | 
             
            	 * Returns a set of Nodes according to a range of selection
         | 
| 3174 3200 | 
             
            	 * @param {{path: Array.<String>}} start object contains the path for range start 
         | 
| 3175 3201 | 
             
            	 * @param {{path: Array.<String>}=} end object contains the path for range end
         | 
| 3176 | 
            -
            	 * @return {Array.<Node>} Node  | 
| 3202 | 
            +
            	 * @return {Array.<Node>} Node instances on the given range
         | 
| 3177 3203 | 
             
            	 * @private
         | 
| 3178 3204 | 
             
            	 */
         | 
| 3179 3205 | 
             
            	treemode._getNodeInstancesByRange = function (start, end) {
         | 
| @@ -4632,13 +4658,17 @@ return /******/ (function(modules) { // webpackBootstrap | |
| 4632 4658 | 
             
            	  function next()  { return jsString.charAt(i + 1); }
         | 
| 4633 4659 | 
             
            	  function prev()  { return jsString.charAt(i - 1); }
         | 
| 4634 4660 |  | 
| 4661 | 
            +
            	  function isWhiteSpace(c) {
         | 
| 4662 | 
            +
            	    return c === ' ' || c === '\n' || c === '\r' || c === '\t';
         | 
| 4663 | 
            +
            	  }
         | 
| 4664 | 
            +
             | 
| 4635 4665 | 
             
            	  // get the last parsed non-whitespace character
         | 
| 4636 4666 | 
             
            	  function lastNonWhitespace () {
         | 
| 4637 4667 | 
             
            	    var p = chars.length - 1;
         | 
| 4638 4668 |  | 
| 4639 4669 | 
             
            	    while (p >= 0) {
         | 
| 4640 4670 | 
             
            	      var pp = chars[p];
         | 
| 4641 | 
            -
            	      if (pp | 
| 4671 | 
            +
            	      if (!isWhiteSpace(pp)) {
         | 
| 4642 4672 | 
             
            	        return pp;
         | 
| 4643 4673 | 
             
            	      }
         | 
| 4644 4674 | 
             
            	      p--;
         | 
| @@ -4647,6 +4677,16 @@ return /******/ (function(modules) { // webpackBootstrap | |
| 4647 4677 | 
             
            	    return '';
         | 
| 4648 4678 | 
             
            	  }
         | 
| 4649 4679 |  | 
| 4680 | 
            +
            	  // get at the first next non-white space character
         | 
| 4681 | 
            +
            	  function nextNonWhiteSpace() {
         | 
| 4682 | 
            +
            	    var iNext = i + 1;
         | 
| 4683 | 
            +
            	    while (iNext < jsString.length && isWhiteSpace(jsString[iNext])) {
         | 
| 4684 | 
            +
            	      iNext++;
         | 
| 4685 | 
            +
            	    }
         | 
| 4686 | 
            +
             | 
| 4687 | 
            +
            	    return jsString[iNext];
         | 
| 4688 | 
            +
            	  }
         | 
| 4689 | 
            +
             | 
| 4650 4690 | 
             
            	  // skip a block comment '/* ... */'
         | 
| 4651 4691 | 
             
            	  function skipBlockComment () {
         | 
| 4652 4692 | 
             
            	    i += 2;
         | 
| @@ -4733,7 +4773,7 @@ return /******/ (function(modules) { // webpackBootstrap | |
| 4733 4773 | 
             
            	    }
         | 
| 4734 4774 | 
             
            	    else if (c === '\u00A0' || (c >= '\u2000' && c <= '\u200A') || c === '\u202F' || c === '\u205F' || c === '\u3000') {
         | 
| 4735 4775 | 
             
            	      // special white spaces (like non breaking space)
         | 
| 4736 | 
            -
            	      chars.push(' ')
         | 
| 4776 | 
            +
            	      chars.push(' ');
         | 
| 4737 4777 | 
             
            	      i++
         | 
| 4738 4778 | 
             
            	    }
         | 
| 4739 4779 | 
             
            	    else if (c === quote) {
         | 
| @@ -4751,6 +4791,10 @@ return /******/ (function(modules) { // webpackBootstrap | |
| 4751 4791 | 
             
            	    else if (c === quoteDblLeft) {
         | 
| 4752 4792 | 
             
            	      parseString(quoteDblRight);
         | 
| 4753 4793 | 
             
            	    }
         | 
| 4794 | 
            +
            	    else if (c === ',' && [']', '}'].indexOf(nextNonWhiteSpace()) !== -1) {
         | 
| 4795 | 
            +
            	      // skip trailing commas
         | 
| 4796 | 
            +
            	      i++;
         | 
| 4797 | 
            +
            	    }
         | 
| 4754 4798 | 
             
            	    else if (/[a-zA-Z_$]/.test(c) && ['{', ','].indexOf(lastNonWhitespace()) !== -1) {
         | 
| 4755 4799 | 
             
            	      // an unquoted object key (like a in '{a:2}')
         | 
| 4756 4800 | 
             
            	      parseKey();
         | 
| @@ -5147,6 +5191,25 @@ return /******/ (function(modules) { // webpackBootstrap | |
| 5147 5191 | 
             
            	  return '';
         | 
| 5148 5192 | 
             
            	};
         | 
| 5149 5193 |  | 
| 5194 | 
            +
            	/**
         | 
| 5195 | 
            +
            	 * Test whether an element has the provided parent node somewhere up the node tree.
         | 
| 5196 | 
            +
            	 * @param {Element} elem
         | 
| 5197 | 
            +
            	 * @param {Element} parent
         | 
| 5198 | 
            +
            	 * @return {boolean}
         | 
| 5199 | 
            +
            	 */
         | 
| 5200 | 
            +
            	exports.hasParentNode = function (elem, parent) {
         | 
| 5201 | 
            +
            	  var e = elem ? elem.parentNode : undefined;
         | 
| 5202 | 
            +
             | 
| 5203 | 
            +
            	  while (e) {
         | 
| 5204 | 
            +
            	    if (e === parent) {
         | 
| 5205 | 
            +
            	      return true;
         | 
| 5206 | 
            +
            	    }
         | 
| 5207 | 
            +
            	    e = e.parentNode;
         | 
| 5208 | 
            +
            	  }
         | 
| 5209 | 
            +
             | 
| 5210 | 
            +
            	  return false;
         | 
| 5211 | 
            +
            	}
         | 
| 5212 | 
            +
             | 
| 5150 5213 | 
             
            	/**
         | 
| 5151 5214 | 
             
            	 * Returns the version of Internet Explorer or a -1
         | 
| 5152 5215 | 
             
            	 * (indicating the use of another browser).
         | 
| @@ -6714,10 +6777,12 @@ return /******/ (function(modules) { // webpackBootstrap | |
| 6714 6777 | 
             
            	/**
         | 
| 6715 6778 | 
             
            	 * Creates a component that visualize path selection in tree based editors
         | 
| 6716 6779 | 
             
            	 * @param {HTMLElement} container 
         | 
| 6780 | 
            +
            	 * @param {HTMLElement} root
         | 
| 6717 6781 | 
             
            	 * @constructor
         | 
| 6718 6782 | 
             
            	 */
         | 
| 6719 | 
            -
            	function TreePath(container) {
         | 
| 6783 | 
            +
            	function TreePath(container, root) {
         | 
| 6720 6784 | 
             
            	  if (container) {
         | 
| 6785 | 
            +
            	    this.root = root;
         | 
| 6721 6786 | 
             
            	    this.path = document.createElement('div');
         | 
| 6722 6787 | 
             
            	    this.path.className = 'jsoneditor-treepath';
         | 
| 6723 6788 | 
             
            	    container.appendChild(this.path);
         | 
| @@ -6767,10 +6832,10 @@ return /******/ (function(modules) { // webpackBootstrap | |
| 6767 6832 | 
             
            	            });
         | 
| 6768 6833 | 
             
            	          });
         | 
| 6769 6834 | 
             
            	          var menu = new ContextMenu(items);
         | 
| 6770 | 
            -
            	          menu.show(sepEl);
         | 
| 6835 | 
            +
            	          menu.show(sepEl, me.root);
         | 
| 6771 6836 | 
             
            	        };
         | 
| 6772 6837 |  | 
| 6773 | 
            -
            	        me.path.appendChild(sepEl | 
| 6838 | 
            +
            	        me.path.appendChild(sepEl);
         | 
| 6774 6839 | 
             
            	      }
         | 
| 6775 6840 |  | 
| 6776 6841 | 
             
            	      if(idx === pathObjs.length - 1) {
         | 
| @@ -6967,7 +7032,7 @@ return /******/ (function(modules) { // webpackBootstrap | |
| 6967 7032 |  | 
| 6968 7033 | 
             
            	/**
         | 
| 6969 7034 | 
             
            	 * Find child node by serializable path
         | 
| 6970 | 
            -
            	 * @param {Array<String>} path | 
| 7035 | 
            +
            	 * @param {Array<String>} path
         | 
| 6971 7036 | 
             
            	 */
         | 
| 6972 7037 | 
             
            	Node.prototype.findNodeByPath = function (path) {
         | 
| 6973 7038 | 
             
            	  if (!path) {
         | 
| @@ -7009,7 +7074,7 @@ return /******/ (function(modules) { // webpackBootstrap | |
| 7009 7074 |  | 
| 7010 7075 | 
             
            	/**
         | 
| 7011 7076 | 
             
            	 * @typedef {{value: String|Object|Number|Boolean, path: Array.<String|Number>}} SerializableNode
         | 
| 7012 | 
            -
            	 * | 
| 7077 | 
            +
            	 *
         | 
| 7013 7078 | 
             
            	 * Returns serializable representation for the node
         | 
| 7014 7079 | 
             
            	 * @return {SerializableNode}
         | 
| 7015 7080 | 
             
            	 */
         | 
| @@ -8219,7 +8284,7 @@ return /******/ (function(modules) { // webpackBootstrap | |
| 8219 8284 | 
             
            	        this.childs = [];
         | 
| 8220 8285 | 
             
            	      }
         | 
| 8221 8286 |  | 
| 8222 | 
            -
            	      this.childs.forEach(function (child | 
| 8287 | 
            +
            	      this.childs.forEach(function (child) {
         | 
| 8223 8288 | 
             
            	        child.clearDom();
         | 
| 8224 8289 | 
             
            	        delete child.index;
         | 
| 8225 8290 | 
             
            	        child.fieldEditable = true;
         | 
| @@ -8292,7 +8357,7 @@ return /******/ (function(modules) { // webpackBootstrap | |
| 8292 8357 | 
             
            	    }
         | 
| 8293 8358 | 
             
            	  }
         | 
| 8294 8359 | 
             
            	  else if (this.type === 'object') {
         | 
| 8295 | 
            -
            	    if (typeof json !== 'object') {
         | 
| 8360 | 
            +
            	    if (typeof json !== 'object' || !json) {
         | 
| 8296 8361 | 
             
            	      return false;
         | 
| 8297 8362 | 
             
            	    }
         | 
| 8298 8363 |  | 
| @@ -9339,7 +9404,7 @@ return /******/ (function(modules) { // webpackBootstrap | |
| 9339 9404 | 
             
            	  //Locating the schema of the node and checking for any enum type
         | 
| 9340 9405 | 
             
            	  if(this.editor && this.editor.options) {
         | 
| 9341 9406 | 
             
            	    // find the part of the json schema matching this nodes path
         | 
| 9342 | 
            -
            	    this.schema = this.editor.options.schema | 
| 9407 | 
            +
            	    this.schema = this.editor.options.schema
         | 
| 9343 9408 | 
             
            	        ? Node._findSchema(this.editor.options.schema, this.getPath())
         | 
| 9344 9409 | 
             
            	        : null;
         | 
| 9345 9410 | 
             
            	    if (this.schema) {
         | 
| @@ -9780,7 +9845,7 @@ return /******/ (function(modules) { // webpackBootstrap | |
| 9780 9845 | 
             
            	    };
         | 
| 9781 9846 | 
             
            	    // For leaf values, include value
         | 
| 9782 9847 | 
             
            	    if (!this._hasChilds() &&element === this.dom.value) {
         | 
| 9783 | 
            -
            	      info.value = this.getValue(); | 
| 9848 | 
            +
            	      info.value = this.getValue();
         | 
| 9784 9849 | 
             
            	    }
         | 
| 9785 9850 | 
             
            	    this.editor.options.onEvent(info, event);
         | 
| 9786 9851 | 
             
            	  }
         | 
| @@ -10195,7 +10260,7 @@ return /******/ (function(modules) { // webpackBootstrap | |
| 10195 10260 | 
             
            	      }
         | 
| 10196 10261 | 
             
            	    });
         | 
| 10197 10262 | 
             
            	  }
         | 
| 10198 | 
            -
            	}
         | 
| 10263 | 
            +
            	};
         | 
| 10199 10264 |  | 
| 10200 10265 | 
             
            	/**
         | 
| 10201 10266 | 
             
            	 * Remove nodes
         | 
| @@ -10693,7 +10758,7 @@ return /******/ (function(modules) { // webpackBootstrap | |
| 10693 10758 | 
             
            	  }
         | 
| 10694 10759 |  | 
| 10695 10760 | 
             
            	  return false;
         | 
| 10696 | 
            -
            	}
         | 
| 10761 | 
            +
            	};
         | 
| 10697 10762 |  | 
| 10698 10763 | 
             
            	/**
         | 
| 10699 10764 | 
             
            	 * Remove the focus of given nodes, and move the focus to the (a) node before,
         | 
| @@ -10991,25 +11056,29 @@ return /******/ (function(modules) { // webpackBootstrap | |
| 10991 11056 | 
             
            	  }
         | 
| 10992 11057 |  | 
| 10993 11058 | 
             
            	  if (this._hasChilds()) {
         | 
| 10994 | 
            -
            	     | 
| 10995 | 
            -
            	       | 
| 10996 | 
            -
             | 
| 10997 | 
            -
             | 
| 10998 | 
            -
             | 
| 10999 | 
            -
            	         | 
| 11000 | 
            -
             | 
| 11001 | 
            -
             | 
| 11002 | 
            -
             | 
| 11059 | 
            +
            	    if (this.editor.options.enableSort) {
         | 
| 11060 | 
            +
            	      items.push({
         | 
| 11061 | 
            +
            	        text: translate('sort'),
         | 
| 11062 | 
            +
            	        title: translate('sortTitle', {type: this.type}),
         | 
| 11063 | 
            +
            	        className: 'jsoneditor-sort-asc',
         | 
| 11064 | 
            +
            	        click: function () {
         | 
| 11065 | 
            +
            	          var anchor = node.editor.options.modalAnchor || DEFAULT_MODAL_ANCHOR;
         | 
| 11066 | 
            +
            	          showSortModal(node, anchor)
         | 
| 11067 | 
            +
            	        }
         | 
| 11068 | 
            +
            	      });
         | 
| 11069 | 
            +
            	    }
         | 
| 11003 11070 |  | 
| 11004 | 
            -
            	     | 
| 11005 | 
            -
            	       | 
| 11006 | 
            -
             | 
| 11007 | 
            -
             | 
| 11008 | 
            -
             | 
| 11009 | 
            -
            	         | 
| 11010 | 
            -
             | 
| 11011 | 
            -
             | 
| 11012 | 
            -
             | 
| 11071 | 
            +
            	    if (this.editor.options.enableTransform) {
         | 
| 11072 | 
            +
            	      items.push({
         | 
| 11073 | 
            +
            	        text: translate('transform'),
         | 
| 11074 | 
            +
            	        title: translate('transformTitle', {type: this.type}),
         | 
| 11075 | 
            +
            	        className: 'jsoneditor-transform',
         | 
| 11076 | 
            +
            	        click: function () {
         | 
| 11077 | 
            +
            	          var anchor = node.editor.options.modalAnchor || DEFAULT_MODAL_ANCHOR;
         | 
| 11078 | 
            +
            	          showTransformModal(node, anchor)
         | 
| 11079 | 
            +
            	        }
         | 
| 11080 | 
            +
            	      });
         | 
| 11081 | 
            +
            	    }
         | 
| 11013 11082 | 
             
            	  }
         | 
| 11014 11083 |  | 
| 11015 11084 | 
             
            	  if (this.parent && this.parent._hasChilds()) {
         | 
| @@ -17213,10 +17282,13 @@ return /******/ (function(modules) { // webpackBootstrap | |
| 17213 17282 | 
             
            	  // read options
         | 
| 17214 17283 | 
             
            	  options = options || {};
         | 
| 17215 17284 |  | 
| 17216 | 
            -
            	  if(typeof options.statusBar === 'undefined') {
         | 
| 17285 | 
            +
            	  if (typeof options.statusBar === 'undefined') {
         | 
| 17217 17286 | 
             
            	    options.statusBar = true;
         | 
| 17218 17287 | 
             
            	  }
         | 
| 17219 17288 |  | 
| 17289 | 
            +
            	  // setting default for textmode
         | 
| 17290 | 
            +
            	  options.mainMenuBar = options.mainMenuBar !== false;
         | 
| 17291 | 
            +
             | 
| 17220 17292 | 
             
            	  this.options = options;
         | 
| 17221 17293 |  | 
| 17222 17294 | 
             
            	  // indentation
         | 
| @@ -17280,67 +17352,89 @@ return /******/ (function(modules) { // webpackBootstrap | |
| 17280 17352 | 
             
            	  this.frame.onkeydown = function (event) {
         | 
| 17281 17353 | 
             
            	    me._onKeyDown(event);
         | 
| 17282 17354 | 
             
            	  };
         | 
| 17283 | 
            -
            	  
         | 
| 17284 | 
            -
            	  // create menu
         | 
| 17285 | 
            -
            	  this.menu = document.createElement('div');
         | 
| 17286 | 
            -
            	  this.menu.className = 'jsoneditor-menu';
         | 
| 17287 | 
            -
            	  this.frame.appendChild(this.menu);
         | 
| 17288 | 
            -
             | 
| 17289 | 
            -
            	  // create format button
         | 
| 17290 | 
            -
            	  var buttonFormat = document.createElement('button');
         | 
| 17291 | 
            -
            	  buttonFormat.type = 'button';
         | 
| 17292 | 
            -
            	  buttonFormat.className = 'jsoneditor-format';
         | 
| 17293 | 
            -
            	  buttonFormat.title = 'Format JSON data, with proper indentation and line feeds (Ctrl+\\)';
         | 
| 17294 | 
            -
            	  this.menu.appendChild(buttonFormat);
         | 
| 17295 | 
            -
            	  buttonFormat.onclick = function () {
         | 
| 17296 | 
            -
            	    try {
         | 
| 17297 | 
            -
            	      me.format();
         | 
| 17298 | 
            -
            	      me._onChange();
         | 
| 17299 | 
            -
            	    }
         | 
| 17300 | 
            -
            	    catch (err) {
         | 
| 17301 | 
            -
            	      me._onError(err);
         | 
| 17302 | 
            -
            	    }
         | 
| 17303 | 
            -
            	  };
         | 
| 17304 17355 |  | 
| 17305 | 
            -
            	   | 
| 17306 | 
            -
            	   | 
| 17307 | 
            -
            	  buttonCompact.type = 'button';
         | 
| 17308 | 
            -
            	  buttonCompact.className = 'jsoneditor-compact';
         | 
| 17309 | 
            -
            	  buttonCompact.title = 'Compact JSON data, remove all whitespaces (Ctrl+Shift+\\)';
         | 
| 17310 | 
            -
            	  this.menu.appendChild(buttonCompact);
         | 
| 17311 | 
            -
            	  buttonCompact.onclick = function () {
         | 
| 17312 | 
            -
            	    try {
         | 
| 17313 | 
            -
            	      me.compact();
         | 
| 17314 | 
            -
            	      me._onChange();
         | 
| 17315 | 
            -
            	    }
         | 
| 17316 | 
            -
            	    catch (err) {
         | 
| 17317 | 
            -
            	      me._onError(err);
         | 
| 17318 | 
            -
            	    }
         | 
| 17319 | 
            -
            	  };
         | 
| 17356 | 
            +
            	  this.content = document.createElement('div');
         | 
| 17357 | 
            +
            	  this.content.className = 'jsoneditor-outer';
         | 
| 17320 17358 |  | 
| 17321 | 
            -
            	   | 
| 17322 | 
            -
             | 
| 17323 | 
            -
             | 
| 17324 | 
            -
             | 
| 17325 | 
            -
             | 
| 17326 | 
            -
             | 
| 17327 | 
            -
             | 
| 17328 | 
            -
             | 
| 17329 | 
            -
             | 
| 17330 | 
            -
             | 
| 17331 | 
            -
            	     | 
| 17332 | 
            -
            	     | 
| 17333 | 
            -
             | 
| 17359 | 
            +
            	  if (this.options.mainMenuBar) {
         | 
| 17360 | 
            +
            	    util.addClassName(this.content, 'has-main-menu-bar');
         | 
| 17361 | 
            +
             | 
| 17362 | 
            +
            	    // create menu
         | 
| 17363 | 
            +
            	    this.menu = document.createElement('div');
         | 
| 17364 | 
            +
            	    this.menu.className = 'jsoneditor-menu';
         | 
| 17365 | 
            +
            	    this.frame.appendChild(this.menu);
         | 
| 17366 | 
            +
             | 
| 17367 | 
            +
            	    // create format button
         | 
| 17368 | 
            +
            	    var buttonFormat = document.createElement('button');
         | 
| 17369 | 
            +
            	    buttonFormat.type = 'button';
         | 
| 17370 | 
            +
            	    buttonFormat.className = 'jsoneditor-format';
         | 
| 17371 | 
            +
            	    buttonFormat.title = 'Format JSON data, with proper indentation and line feeds (Ctrl+\\)';
         | 
| 17372 | 
            +
            	    this.menu.appendChild(buttonFormat);
         | 
| 17373 | 
            +
            	    buttonFormat.onclick = function () {
         | 
| 17374 | 
            +
            	      try {
         | 
| 17375 | 
            +
            	        me.format();
         | 
| 17376 | 
            +
            	        me._onChange();
         | 
| 17377 | 
            +
            	      }
         | 
| 17378 | 
            +
            	      catch (err) {
         | 
| 17379 | 
            +
            	        me._onError(err);
         | 
| 17380 | 
            +
            	      }
         | 
| 17381 | 
            +
            	    };
         | 
| 17382 | 
            +
             | 
| 17383 | 
            +
            	    // create compact button
         | 
| 17384 | 
            +
            	    var buttonCompact = document.createElement('button');
         | 
| 17385 | 
            +
            	    buttonCompact.type = 'button';
         | 
| 17386 | 
            +
            	    buttonCompact.className = 'jsoneditor-compact';
         | 
| 17387 | 
            +
            	    buttonCompact.title = 'Compact JSON data, remove all whitespaces (Ctrl+Shift+\\)';
         | 
| 17388 | 
            +
            	    this.menu.appendChild(buttonCompact);
         | 
| 17389 | 
            +
            	    buttonCompact.onclick = function () {
         | 
| 17390 | 
            +
            	      try {
         | 
| 17391 | 
            +
            	        me.compact();
         | 
| 17392 | 
            +
            	        me._onChange();
         | 
| 17393 | 
            +
            	      }
         | 
| 17394 | 
            +
            	      catch (err) {
         | 
| 17395 | 
            +
            	        me._onError(err);
         | 
| 17396 | 
            +
            	      }
         | 
| 17397 | 
            +
            	    };
         | 
| 17398 | 
            +
             | 
| 17399 | 
            +
            	    // create repair button
         | 
| 17400 | 
            +
            	    var buttonRepair = document.createElement('button');
         | 
| 17401 | 
            +
            	    buttonRepair.type = 'button';
         | 
| 17402 | 
            +
            	    buttonRepair.className = 'jsoneditor-repair';
         | 
| 17403 | 
            +
            	    buttonRepair.title = 'Repair JSON: fix quotes and escape characters, remove comments and JSONP notation, turn JavaScript objects into JSON.';
         | 
| 17404 | 
            +
            	    this.menu.appendChild(buttonRepair);
         | 
| 17405 | 
            +
            	    buttonRepair.onclick = function () {
         | 
| 17406 | 
            +
            	      try {
         | 
| 17407 | 
            +
            	        me.repair();
         | 
| 17408 | 
            +
            	        me._onChange();
         | 
| 17409 | 
            +
            	      }
         | 
| 17410 | 
            +
            	      catch (err) {
         | 
| 17411 | 
            +
            	        me._onError(err);
         | 
| 17412 | 
            +
            	      }
         | 
| 17413 | 
            +
            	    };
         | 
| 17414 | 
            +
             | 
| 17415 | 
            +
            	    // create mode box
         | 
| 17416 | 
            +
            	    if (this.options && this.options.modes && this.options.modes.length) {
         | 
| 17417 | 
            +
            	      this.modeSwitcher = new ModeSwitcher(this.menu, this.options.modes, this.options.mode, function onSwitch(mode) {
         | 
| 17418 | 
            +
            	        // switch mode and restore focus
         | 
| 17419 | 
            +
            	        me.setMode(mode);
         | 
| 17420 | 
            +
            	        me.modeSwitcher.focus();
         | 
| 17421 | 
            +
            	      });
         | 
| 17334 17422 | 
             
            	    }
         | 
| 17335 | 
            -
            	  };
         | 
| 17336 17423 |  | 
| 17337 | 
            -
             | 
| 17338 | 
            -
             | 
| 17339 | 
            -
             | 
| 17340 | 
            -
            	       | 
| 17341 | 
            -
            	       | 
| 17342 | 
            -
            	       | 
| 17343 | 
            -
             | 
| 17424 | 
            +
            	    if (this.mode == 'code') {
         | 
| 17425 | 
            +
            	      var poweredBy = document.createElement('a');
         | 
| 17426 | 
            +
            	      poweredBy.appendChild(document.createTextNode('powered by ace'));
         | 
| 17427 | 
            +
            	      poweredBy.href = 'http://ace.ajax.org';
         | 
| 17428 | 
            +
            	      poweredBy.target = '_blank';
         | 
| 17429 | 
            +
            	      poweredBy.className = 'jsoneditor-poweredBy';
         | 
| 17430 | 
            +
            	      poweredBy.onclick = function () {
         | 
| 17431 | 
            +
            	        // TODO: this anchor falls below the margin of the content,
         | 
| 17432 | 
            +
            	        // therefore the normal a.href does not work. We use a click event
         | 
| 17433 | 
            +
            	        // for now, but this should be fixed.
         | 
| 17434 | 
            +
            	        window.open(poweredBy.href, poweredBy.target);
         | 
| 17435 | 
            +
            	      };
         | 
| 17436 | 
            +
            	      this.menu.appendChild(poweredBy);
         | 
| 17437 | 
            +
            	    }
         | 
| 17344 17438 | 
             
            	  }
         | 
| 17345 17439 |  | 
| 17346 17440 | 
             
            	  var emptyNode = {};
         | 
| @@ -17348,10 +17442,7 @@ return /******/ (function(modules) { // webpackBootstrap | |
| 17348 17442 | 
             
            	  && typeof(this.options.onEditable === 'function')
         | 
| 17349 17443 | 
             
            	  && !this.options.onEditable(emptyNode));
         | 
| 17350 17444 |  | 
| 17351 | 
            -
            	  this.content = document.createElement('div');
         | 
| 17352 | 
            -
            	  this.content.className = 'jsoneditor-outer';
         | 
| 17353 17445 | 
             
            	  this.frame.appendChild(this.content);
         | 
| 17354 | 
            -
             | 
| 17355 17446 | 
             
            	  this.container.appendChild(this.frame);
         | 
| 17356 17447 |  | 
| 17357 17448 | 
             
            	  if (this.mode == 'code') {
         | 
| @@ -17396,19 +17487,6 @@ return /******/ (function(modules) { // webpackBootstrap | |
| 17396 17487 | 
             
            	      });
         | 
| 17397 17488 | 
             
            	    }
         | 
| 17398 17489 |  | 
| 17399 | 
            -
            	    var poweredBy = document.createElement('a');
         | 
| 17400 | 
            -
            	    poweredBy.appendChild(document.createTextNode('powered by ace'));
         | 
| 17401 | 
            -
            	    poweredBy.href = 'http://ace.ajax.org';
         | 
| 17402 | 
            -
            	    poweredBy.target = '_blank';
         | 
| 17403 | 
            -
            	    poweredBy.className = 'jsoneditor-poweredBy';
         | 
| 17404 | 
            -
            	    poweredBy.onclick = function () {
         | 
| 17405 | 
            -
            	      // TODO: this anchor falls below the margin of the content,
         | 
| 17406 | 
            -
            	      // therefore the normal a.href does not work. We use a click event
         | 
| 17407 | 
            -
            	      // for now, but this should be fixed.
         | 
| 17408 | 
            -
            	      window.open(poweredBy.href, poweredBy.target);
         | 
| 17409 | 
            -
            	    };
         | 
| 17410 | 
            -
            	    this.menu.appendChild(poweredBy);
         | 
| 17411 | 
            -
             | 
| 17412 17490 | 
             
            	    // register onchange event
         | 
| 17413 17491 | 
             
            	    aceEditor.on('change', this._onChange.bind(this));
         | 
| 17414 17492 | 
             
            	    aceEditor.on('changeSelection', this._onSelect.bind(this));
         | 
| @@ -17441,12 +17519,12 @@ return /******/ (function(modules) { // webpackBootstrap | |
| 17441 17519 | 
             
            	  this.dom.validationErrorsContainer = validationErrorsContainer;
         | 
| 17442 17520 | 
             
            	  this.frame.appendChild(validationErrorsContainer);
         | 
| 17443 17521 |  | 
| 17444 | 
            -
            	  var  | 
| 17445 | 
            -
            	   | 
| 17446 | 
            -
            	   | 
| 17447 | 
            -
            	   | 
| 17448 | 
            -
            	  this.dom. | 
| 17449 | 
            -
            	  validationErrorsContainer.appendChild( | 
| 17522 | 
            +
            	  var additionalErrorsIndication = document.createElement('div');
         | 
| 17523 | 
            +
            	  additionalErrorsIndication.style.display = 'none';
         | 
| 17524 | 
            +
            	  additionalErrorsIndication.className = "jsoneditor-additional-errors fadein";
         | 
| 17525 | 
            +
            	  additionalErrorsIndication.innerHTML = "Scroll for more ▿";
         | 
| 17526 | 
            +
            	  this.dom.additionalErrorsIndication = additionalErrorsIndication;
         | 
| 17527 | 
            +
            	  validationErrorsContainer.appendChild(additionalErrorsIndication);
         | 
| 17450 17528 |  | 
| 17451 17529 | 
             
            	  if (options.statusBar) {
         | 
| 17452 17530 | 
             
            	    util.addClassName(this.content, 'has-status-bar');
         | 
| @@ -17600,20 +17678,18 @@ return /******/ (function(modules) { // webpackBootstrap | |
| 17600 17678 |  | 
| 17601 17679 | 
             
            	/**
         | 
| 17602 17680 | 
             
            	 * Event handler for mousedown.
         | 
| 17603 | 
            -
            	 * @param {Event} event
         | 
| 17604 17681 | 
             
            	 * @private
         | 
| 17605 17682 | 
             
            	 */
         | 
| 17606 | 
            -
            	textmode._onMouseDown = function ( | 
| 17683 | 
            +
            	textmode._onMouseDown = function () {
         | 
| 17607 17684 | 
             
            	  this._updateCursorInfo();
         | 
| 17608 17685 | 
             
            	  this._emitSelectionChange();
         | 
| 17609 17686 | 
             
            	};
         | 
| 17610 17687 |  | 
| 17611 17688 | 
             
            	/**
         | 
| 17612 17689 | 
             
            	 * Event handler for blur.
         | 
| 17613 | 
            -
            	 * @param {Event} event
         | 
| 17614 17690 | 
             
            	 * @private
         | 
| 17615 17691 | 
             
            	 */
         | 
| 17616 | 
            -
            	textmode._onBlur = function ( | 
| 17692 | 
            +
            	textmode._onBlur = function () {
         | 
| 17617 17693 | 
             
            	  var me = this;
         | 
| 17618 17694 | 
             
            	  // this allows to avoid blur when clicking inner elements (like the errors panel)
         | 
| 17619 17695 | 
             
            	  // just make sure to set the isFocused to true on the inner element onclick callback
         | 
| @@ -17653,7 +17729,7 @@ return /******/ (function(modules) { // webpackBootstrap | |
| 17653 17729 | 
             
            	        line: line,
         | 
| 17654 17730 | 
             
            	        column: col,
         | 
| 17655 17731 | 
             
            	        count: count
         | 
| 17656 | 
            -
            	      }
         | 
| 17732 | 
            +
            	      };
         | 
| 17657 17733 |  | 
| 17658 17734 | 
             
            	      if(me.options.statusBar) {
         | 
| 17659 17735 | 
             
            	        updateDisplay();
         | 
| @@ -17672,7 +17748,7 @@ return /******/ (function(modules) { // webpackBootstrap | |
| 17672 17748 | 
             
            	      line: line,
         | 
| 17673 17749 | 
             
            	      column: col,
         | 
| 17674 17750 | 
             
            	      count: count
         | 
| 17675 | 
            -
            	    }
         | 
| 17751 | 
            +
            	    };
         | 
| 17676 17752 |  | 
| 17677 17753 | 
             
            	    if(this.options.statusBar) {
         | 
| 17678 17754 | 
             
            	      updateDisplay();
         | 
| @@ -17700,11 +17776,22 @@ return /******/ (function(modules) { // webpackBootstrap | |
| 17700 17776 | 
             
            	    var currentSelection = this.getTextSelection();
         | 
| 17701 17777 | 
             
            	    this._selectionChangedHandler(currentSelection.start, currentSelection.end, currentSelection.text);
         | 
| 17702 17778 | 
             
            	  }
         | 
| 17703 | 
            -
            	}
         | 
| 17779 | 
            +
            	};
         | 
| 17704 17780 |  | 
| 17705 | 
            -
            	 | 
| 17706 | 
            -
             | 
| 17707 | 
            -
             | 
| 17781 | 
            +
            	/**
         | 
| 17782 | 
            +
            	 * refresh ERROR annotations state
         | 
| 17783 | 
            +
            	 * error annotations are handled by the ace json mode (ace/mode/json)
         | 
| 17784 | 
            +
            	 * validation annotations are handled by this mode
         | 
| 17785 | 
            +
            	 * therefore in order to refresh we send only the annotations of error type in order to maintain its state 
         | 
| 17786 | 
            +
            	 * @private
         | 
| 17787 | 
            +
            	 */
         | 
| 17788 | 
            +
            	textmode._refreshAnnotations = function () {  
         | 
| 17789 | 
            +
            	  var session = this.aceEditor && this.aceEditor.getSession();
         | 
| 17790 | 
            +
            	  if (session) {
         | 
| 17791 | 
            +
            	    var errEnnotations = session.getAnnotations().filter(function(annotation) {return annotation.type === 'error' });
         | 
| 17792 | 
            +
            	    session.setAnnotations(errEnnotations);
         | 
| 17793 | 
            +
            	  }
         | 
| 17794 | 
            +
            	};
         | 
| 17708 17795 |  | 
| 17709 17796 | 
             
            	/**
         | 
| 17710 17797 | 
             
            	 * Destroy the editor. Clean up DOM, event listeners, and web workers.
         | 
| @@ -17886,19 +17973,25 @@ return /******/ (function(modules) { // webpackBootstrap | |
| 17886 17973 | 
             
            	  var json;
         | 
| 17887 17974 | 
             
            	  try {
         | 
| 17888 17975 | 
             
            	    json = this.get(); // this can fail when there is no valid json
         | 
| 17889 | 
            -
            	    this.parseErrorIndication | 
| 17976 | 
            +
            	    if (this.parseErrorIndication) {
         | 
| 17977 | 
            +
            	      this.parseErrorIndication.style.display = 'none';
         | 
| 17978 | 
            +
            	    }
         | 
| 17890 17979 | 
             
            	    doValidate = true;
         | 
| 17891 17980 | 
             
            	  }
         | 
| 17892 17981 | 
             
            	  catch (err) {
         | 
| 17893 17982 | 
             
            	    if (this.getText()) {
         | 
| 17894 | 
            -
            	      this.parseErrorIndication | 
| 17983 | 
            +
            	      if (this.parseErrorIndication) {
         | 
| 17984 | 
            +
            	        this.parseErrorIndication.style.display = 'block';
         | 
| 17985 | 
            +
            	      }
         | 
| 17895 17986 | 
             
            	      // try to extract the line number from the jsonlint error message
         | 
| 17896 17987 | 
             
            	      var match = /\w*line\s*(\d+)\w*/g.exec(err.message);
         | 
| 17897 17988 | 
             
            	      var line;
         | 
| 17898 17989 | 
             
            	      if (match) {
         | 
| 17899 17990 | 
             
            	        line = +match[1];
         | 
| 17900 17991 | 
             
            	      }
         | 
| 17901 | 
            -
            	      this.parseErrorIndication | 
| 17992 | 
            +
            	      if (this.parseErrorIndication) {
         | 
| 17993 | 
            +
            	        this.parseErrorIndication.title = !isNaN(line) ? ('parse error on line ' + line) : 'parse error - check that the json is valid';
         | 
| 17994 | 
            +
            	      }
         | 
| 17902 17995 | 
             
            	      parseErrors.push({
         | 
| 17903 17996 | 
             
            	        type: 'error',
         | 
| 17904 17997 | 
             
            	        message: err.message.replace(/\n/g, '<br>'),
         | 
| @@ -18003,7 +18096,7 @@ return /******/ (function(modules) { // webpackBootstrap | |
| 18003 18096 | 
             
            	  if (this.dom.validationErrors) {
         | 
| 18004 18097 | 
             
            	    this.dom.validationErrors.parentNode.removeChild(this.dom.validationErrors);
         | 
| 18005 18098 | 
             
            	    this.dom.validationErrors = null;
         | 
| 18006 | 
            -
            	    this.dom. | 
| 18099 | 
            +
            	    this.dom.additionalErrorsIndication.style.display = 'none';
         | 
| 18007 18100 |  | 
| 18008 18101 | 
             
            	    this.content.style.marginBottom = '';
         | 
| 18009 18102 | 
             
            	    this.content.style.paddingBottom = '';
         | 
| @@ -18088,12 +18181,12 @@ return /******/ (function(modules) { // webpackBootstrap | |
| 18088 18181 |  | 
| 18089 18182 | 
             
            	      this.dom.validationErrors = validationErrors;
         | 
| 18090 18183 | 
             
            	      this.dom.validationErrorsContainer.appendChild(validationErrors);
         | 
| 18091 | 
            -
            	      this.dom. | 
| 18184 | 
            +
            	      this.dom.additionalErrorsIndication.title = errors.length + " errors total";
         | 
| 18092 18185 |  | 
| 18093 18186 | 
             
            	      if (this.dom.validationErrorsContainer.clientHeight < this.dom.validationErrorsContainer.scrollHeight) {
         | 
| 18094 | 
            -
            	        this.dom. | 
| 18187 | 
            +
            	        this.dom.additionalErrorsIndication.style.display = 'block';
         | 
| 18095 18188 | 
             
            	        this.dom.validationErrorsContainer.onscroll = function () {
         | 
| 18096 | 
            -
            	          me.dom. | 
| 18189 | 
            +
            	          me.dom.additionalErrorsIndication.style.display =
         | 
| 18097 18190 | 
             
            	            (me.dom.validationErrorsContainer.clientHeight > 0 && me.dom.validationErrorsContainer.scrollTop === 0) ? 'block' : 'none';
         | 
| 18098 18191 | 
             
            	        }
         | 
| 18099 18192 | 
             
            	      } else {
         | 
| @@ -18182,13 +18275,10 @@ return /******/ (function(modules) { // webpackBootstrap | |
| 18182 18275 | 
             
            	};
         | 
| 18183 18276 |  | 
| 18184 18277 | 
             
            	/**
         | 
| 18185 | 
            -
            	 * Callback  | 
| 18278 | 
            +
            	 * Callback registration for selection change
         | 
| 18186 18279 | 
             
            	 * @param {selectionCallback} callback
         | 
| 18187 18280 | 
             
            	 * 
         | 
| 18188 18281 | 
             
            	 * @callback selectionCallback
         | 
| 18189 | 
            -
            	 * @param {{row:Number, column:Number}} startPos selection start position
         | 
| 18190 | 
            -
            	 * @param {{row:Number, column:Number}} endPos selected end position
         | 
| 18191 | 
            -
            	 * @param {String} text selected text
         | 
| 18192 18282 | 
             
            	 */
         | 
| 18193 18283 | 
             
            	textmode.onTextSelectionChange = function (callback) {
         | 
| 18194 18284 | 
             
            	  if (typeof callback === 'function') {
         |