Publish v5.28.0

This commit is contained in:
jos 2019-01-21 21:06:23 +01:00
parent db9f5480c7
commit 3334241ab9
9 changed files with 175 additions and 63 deletions

View File

@ -3,7 +3,7 @@
https://github.com/josdejong/jsoneditor https://github.com/josdejong/jsoneditor
## not yet released, version 5.28.0 ## 2019-01-21, version 5.28.0
- Implemented new option `maxVisibleChilds` to customize the maximum number - Implemented new option `maxVisibleChilds` to customize the maximum number
childs that is rendered by default. Thanks @20goto10. childs that is rendered by default. Thanks @20goto10.

View File

@ -24,8 +24,8 @@
* Copyright (c) 2011-2019 Jos de Jong, http://jsoneditoronline.org * Copyright (c) 2011-2019 Jos de Jong, http://jsoneditoronline.org
* *
* @author Jos de Jong, <wjosdejong@gmail.com> * @author Jos de Jong, <wjosdejong@gmail.com>
* @version 5.27.1 * @version 5.28.0
* @date 2019-01-16 * @date 2019-01-21
*/ */
(function webpackUniversalModuleDefinition(root, factory) { (function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object') if(typeof exports === 'object' && typeof module === 'object')
@ -167,6 +167,17 @@ return /******/ (function(modules) { // webpackBootstrap
* Only applicable for * Only applicable for
* modes 'form', 'tree' and * modes 'form', 'tree' and
* 'view' * 'view'
* {function} onClassName Callback method, triggered
* when a Node DOM is rendered. Function returns
* a css class name to be set on a node.
* Only applicable for
* modes 'form', 'tree' and
* 'view'
* {Number} maxVisibleChilds Number of children allowed for a node
* in 'tree', 'view', or 'form' mode before
* the "show more/show all" buttons appear.
* 100 by default.
*
* @param {Object | undefined} json JSON object * @param {Object | undefined} json JSON object
*/ */
function JSONEditor (container, options, json) { function JSONEditor (container, options, json) {
@ -248,11 +259,12 @@ return /******/ (function(modules) { // webpackBootstrap
'ace', 'theme', 'autocomplete', 'ace', 'theme', 'autocomplete',
'onChange', 'onChangeJSON', 'onChangeText', 'onChange', 'onChangeJSON', 'onChangeText',
'onEditable', 'onError', 'onEvent', 'onModeChange', 'onNodeName', 'onValidate', 'onEditable', 'onError', 'onEvent', 'onModeChange', 'onNodeName', 'onValidate',
'onSelectionChange', 'onTextSelectionChange', 'onSelectionChange', 'onTextSelectionChange', 'onClassName',
'colorPicker', 'onColorPicker', 'colorPicker', 'onColorPicker',
'timestampTag', 'timestampTag',
'escapeUnicode', 'history', 'search', 'mode', 'modes', 'name', 'indentation', 'escapeUnicode', 'history', 'search', 'mode', 'modes', 'name', 'indentation',
'sortObjectKeys', 'navigationBar', 'statusBar', 'mainMenuBar', 'languages', 'language', 'enableSort', 'enableTransform' 'sortObjectKeys', 'navigationBar', 'statusBar', 'mainMenuBar', 'languages', 'language', 'enableSort', 'enableTransform',
'maxVisibleChilds'
]; ];
/** /**
@ -2001,6 +2013,11 @@ return /******/ (function(modules) { // webpackBootstrap
} }
} }
// trigger the onClassName callback
if(this.options.onClassName) {
this.node.recursivelyUpdateCssClassesOnNodes();
}
// trigger the onNodeName callback // trigger the onNodeName callback
if (this.options.onNodeName && this.node.childs) { if (this.options.onNodeName && this.node.childs) {
try { try {
@ -4964,6 +4981,14 @@ return /******/ (function(modules) { // webpackBootstrap
} }
}; };
/**
* remove all classes from the given elements style
* @param {Element} elem
*/
exports.removeAllClassNames = function removeAllClassNames(elem) {
elem.className = "";
};
/** /**
* add a className to the given elements style * add a className to the given elements style
* @param {Element} elem * @param {Element} elem
@ -6986,6 +7011,8 @@ return /******/ (function(modules) { // webpackBootstrap
this._debouncedOnChangeValue = util.debounce(this._onChangeValue.bind(this), Node.prototype.DEBOUNCE_INTERVAL); this._debouncedOnChangeValue = util.debounce(this._onChangeValue.bind(this), Node.prototype.DEBOUNCE_INTERVAL);
this._debouncedOnChangeField = util.debounce(this._onChangeField.bind(this), Node.prototype.DEBOUNCE_INTERVAL); this._debouncedOnChangeField = util.debounce(this._onChangeField.bind(this), Node.prototype.DEBOUNCE_INTERVAL);
// starting value for visible children
this.visibleChilds = this.getMaxVisibleChilds();
} }
// debounce interval for keyboard input in milliseconds // debounce interval for keyboard input in milliseconds
@ -6994,11 +7021,14 @@ return /******/ (function(modules) { // webpackBootstrap
// search will stop iterating as soon as the max is reached // search will stop iterating as soon as the max is reached
Node.prototype.MAX_SEARCH_RESULTS = 999; Node.prototype.MAX_SEARCH_RESULTS = 999;
// number of visible childs rendered initially in large arrays/objects (with a "show more" button to show more) // default number of child nodes to display
Node.prototype.MAX_VISIBLE_CHILDS = 100; var DEFAULT_MAX_VISIBLE_CHILDS = 100;
// default value for the max visible childs of large arrays Node.prototype.getMaxVisibleChilds = function() {
Node.prototype.visibleChilds = Node.prototype.MAX_VISIBLE_CHILDS; return (this.editor && this.editor.options && this.editor.options.maxVisibleChilds)
? this.editor.options.maxVisibleChilds
: DEFAULT_MAX_VISIBLE_CHILDS;
}
/** /**
* Determine whether the field and/or value of this node are editable * Determine whether the field and/or value of this node are editable
@ -7365,7 +7395,7 @@ return /******/ (function(modules) { // webpackBootstrap
child = new Node(this.editor, { child = new Node(this.editor, {
value: childValue value: childValue
}); });
visible = i < this.MAX_VISIBLE_CHILDS; visible = i < this.getMaxVisibleChilds();
this.appendChild(child, visible, notUpdateDom); this.appendChild(child, visible, notUpdateDom);
} }
} }
@ -7409,7 +7439,7 @@ return /******/ (function(modules) { // webpackBootstrap
field: childField, field: childField,
value: childValue value: childValue
}); });
visible = i < this.MAX_VISIBLE_CHILDS; visible = i < this.getMaxVisibleChilds();
this.appendChild(child, visible, notUpdateDom); this.appendChild(child, visible, notUpdateDom);
} }
} }
@ -7482,7 +7512,7 @@ return /******/ (function(modules) { // webpackBootstrap
child = new Node(this.editor, { child = new Node(this.editor, {
internalValue: childValue internalValue: childValue
}); });
visible = i < this.MAX_VISIBLE_CHILDS; visible = i < this.getMaxVisibleChilds();
this.appendChild(child, visible, notUpdateDom); this.appendChild(child, visible, notUpdateDom);
} }
} }
@ -7517,7 +7547,7 @@ return /******/ (function(modules) { // webpackBootstrap
field: childValue.field, field: childValue.field,
internalValue: childValue.value internalValue: childValue.value
}); });
visible = i < this.MAX_VISIBLE_CHILDS; visible = i < this.getMaxVisibleChilds();
this.appendChild(child, visible, notUpdateDom); this.appendChild(child, visible, notUpdateDom);
} }
} }
@ -7846,7 +7876,31 @@ return /******/ (function(modules) { // webpackBootstrap
delete this.visibleChilds; delete this.visibleChilds;
} }
}; };
/**
* set custom css classes on a node
*/
Node.prototype._updateCssClassName = function () {
if(this.dom.field
&& this.editor
&& this.editor.options
&& typeof this.editor.options.onClassName ==='function'
&& this.dom.tree){
util.removeAllClassNames(this.dom.tree);
const addClasses = this.editor.options.onClassName({ path: this.getPath(), field: this.field, value: this.value }) || "";
util.addClassName(this.dom.tree, "jsoneditor-values " + addClasses);
}
}
Node.prototype.recursivelyUpdateCssClassesOnNodes = function () {
this._updateCssClassName();
if (this.childs !== 'undefined') {
var i;
for (i in this.childs) {
this.childs[i].recursivelyUpdateCssClassesOnNodes();
}
}
}
/** /**
* Goes through the path from the node to the root and ensures that it is expanded * Goes through the path from the node to the root and ensures that it is expanded
@ -8113,7 +8167,7 @@ return /******/ (function(modules) { // webpackBootstrap
? node.index ? node.index
: node.parent.childs.indexOf(node); : node.parent.childs.indexOf(node);
while (node.parent.visibleChilds < index + 1) { while (node.parent.visibleChilds < index + 1) {
node.parent.visibleChilds += Node.prototype.MAX_VISIBLE_CHILDS; node.parent.visibleChilds += this.getMaxVisibleChilds();
} }
// expand the parent itself // expand the parent itself
@ -9418,6 +9472,8 @@ return /******/ (function(modules) { // webpackBootstrap
this._updateDomField(); this._updateDomField();
this._updateDomValue(); this._updateDomValue();
this._updateCssClassName();
// update childs indexes // update childs indexes
if (options && options.updateIndexes === true) { if (options && options.updateIndexes === true) {
// updateIndexes is true or undefined // updateIndexes is true or undefined
@ -13504,8 +13560,8 @@ return /******/ (function(modules) { // webpackBootstrap
showMoreButton.href = '#'; showMoreButton.href = '#';
showMoreButton.onclick = function (event) { showMoreButton.onclick = function (event) {
// TODO: use callback instead of accessing a method of the parent // TODO: use callback instead of accessing a method of the parent
parent.visibleChilds = Math.floor(parent.visibleChilds / parent.MAX_VISIBLE_CHILDS + 1) * parent.visibleChilds = Math.floor(parent.visibleChilds / parent.getMaxVisibleChilds() + 1) *
parent.MAX_VISIBLE_CHILDS; parent.getMaxVisibleChilds();
me.updateDom(); me.updateDom();
parent.showChilds(); parent.showChilds();

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

86
dist/jsoneditor.js vendored
View File

@ -24,8 +24,8 @@
* Copyright (c) 2011-2019 Jos de Jong, http://jsoneditoronline.org * Copyright (c) 2011-2019 Jos de Jong, http://jsoneditoronline.org
* *
* @author Jos de Jong, <wjosdejong@gmail.com> * @author Jos de Jong, <wjosdejong@gmail.com>
* @version 5.27.1 * @version 5.28.0
* @date 2019-01-16 * @date 2019-01-21
*/ */
(function webpackUniversalModuleDefinition(root, factory) { (function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object') if(typeof exports === 'object' && typeof module === 'object')
@ -167,6 +167,17 @@ return /******/ (function(modules) { // webpackBootstrap
* Only applicable for * Only applicable for
* modes 'form', 'tree' and * modes 'form', 'tree' and
* 'view' * 'view'
* {function} onClassName Callback method, triggered
* when a Node DOM is rendered. Function returns
* a css class name to be set on a node.
* Only applicable for
* modes 'form', 'tree' and
* 'view'
* {Number} maxVisibleChilds Number of children allowed for a node
* in 'tree', 'view', or 'form' mode before
* the "show more/show all" buttons appear.
* 100 by default.
*
* @param {Object | undefined} json JSON object * @param {Object | undefined} json JSON object
*/ */
function JSONEditor (container, options, json) { function JSONEditor (container, options, json) {
@ -248,11 +259,12 @@ return /******/ (function(modules) { // webpackBootstrap
'ace', 'theme', 'autocomplete', 'ace', 'theme', 'autocomplete',
'onChange', 'onChangeJSON', 'onChangeText', 'onChange', 'onChangeJSON', 'onChangeText',
'onEditable', 'onError', 'onEvent', 'onModeChange', 'onNodeName', 'onValidate', 'onEditable', 'onError', 'onEvent', 'onModeChange', 'onNodeName', 'onValidate',
'onSelectionChange', 'onTextSelectionChange', 'onSelectionChange', 'onTextSelectionChange', 'onClassName',
'colorPicker', 'onColorPicker', 'colorPicker', 'onColorPicker',
'timestampTag', 'timestampTag',
'escapeUnicode', 'history', 'search', 'mode', 'modes', 'name', 'indentation', 'escapeUnicode', 'history', 'search', 'mode', 'modes', 'name', 'indentation',
'sortObjectKeys', 'navigationBar', 'statusBar', 'mainMenuBar', 'languages', 'language', 'enableSort', 'enableTransform' 'sortObjectKeys', 'navigationBar', 'statusBar', 'mainMenuBar', 'languages', 'language', 'enableSort', 'enableTransform',
'maxVisibleChilds'
]; ];
/** /**
@ -30643,6 +30655,11 @@ return /******/ (function(modules) { // webpackBootstrap
} }
} }
// trigger the onClassName callback
if(this.options.onClassName) {
this.node.recursivelyUpdateCssClassesOnNodes();
}
// trigger the onNodeName callback // trigger the onNodeName callback
if (this.options.onNodeName && this.node.childs) { if (this.options.onNodeName && this.node.childs) {
try { try {
@ -33606,6 +33623,14 @@ return /******/ (function(modules) { // webpackBootstrap
} }
}; };
/**
* remove all classes from the given elements style
* @param {Element} elem
*/
exports.removeAllClassNames = function removeAllClassNames(elem) {
elem.className = "";
};
/** /**
* add a className to the given elements style * add a className to the given elements style
* @param {Element} elem * @param {Element} elem
@ -35628,6 +35653,8 @@ return /******/ (function(modules) { // webpackBootstrap
this._debouncedOnChangeValue = util.debounce(this._onChangeValue.bind(this), Node.prototype.DEBOUNCE_INTERVAL); this._debouncedOnChangeValue = util.debounce(this._onChangeValue.bind(this), Node.prototype.DEBOUNCE_INTERVAL);
this._debouncedOnChangeField = util.debounce(this._onChangeField.bind(this), Node.prototype.DEBOUNCE_INTERVAL); this._debouncedOnChangeField = util.debounce(this._onChangeField.bind(this), Node.prototype.DEBOUNCE_INTERVAL);
// starting value for visible children
this.visibleChilds = this.getMaxVisibleChilds();
} }
// debounce interval for keyboard input in milliseconds // debounce interval for keyboard input in milliseconds
@ -35636,11 +35663,14 @@ return /******/ (function(modules) { // webpackBootstrap
// search will stop iterating as soon as the max is reached // search will stop iterating as soon as the max is reached
Node.prototype.MAX_SEARCH_RESULTS = 999; Node.prototype.MAX_SEARCH_RESULTS = 999;
// number of visible childs rendered initially in large arrays/objects (with a "show more" button to show more) // default number of child nodes to display
Node.prototype.MAX_VISIBLE_CHILDS = 100; var DEFAULT_MAX_VISIBLE_CHILDS = 100;
// default value for the max visible childs of large arrays Node.prototype.getMaxVisibleChilds = function() {
Node.prototype.visibleChilds = Node.prototype.MAX_VISIBLE_CHILDS; return (this.editor && this.editor.options && this.editor.options.maxVisibleChilds)
? this.editor.options.maxVisibleChilds
: DEFAULT_MAX_VISIBLE_CHILDS;
}
/** /**
* Determine whether the field and/or value of this node are editable * Determine whether the field and/or value of this node are editable
@ -36007,7 +36037,7 @@ return /******/ (function(modules) { // webpackBootstrap
child = new Node(this.editor, { child = new Node(this.editor, {
value: childValue value: childValue
}); });
visible = i < this.MAX_VISIBLE_CHILDS; visible = i < this.getMaxVisibleChilds();
this.appendChild(child, visible, notUpdateDom); this.appendChild(child, visible, notUpdateDom);
} }
} }
@ -36051,7 +36081,7 @@ return /******/ (function(modules) { // webpackBootstrap
field: childField, field: childField,
value: childValue value: childValue
}); });
visible = i < this.MAX_VISIBLE_CHILDS; visible = i < this.getMaxVisibleChilds();
this.appendChild(child, visible, notUpdateDom); this.appendChild(child, visible, notUpdateDom);
} }
} }
@ -36124,7 +36154,7 @@ return /******/ (function(modules) { // webpackBootstrap
child = new Node(this.editor, { child = new Node(this.editor, {
internalValue: childValue internalValue: childValue
}); });
visible = i < this.MAX_VISIBLE_CHILDS; visible = i < this.getMaxVisibleChilds();
this.appendChild(child, visible, notUpdateDom); this.appendChild(child, visible, notUpdateDom);
} }
} }
@ -36159,7 +36189,7 @@ return /******/ (function(modules) { // webpackBootstrap
field: childValue.field, field: childValue.field,
internalValue: childValue.value internalValue: childValue.value
}); });
visible = i < this.MAX_VISIBLE_CHILDS; visible = i < this.getMaxVisibleChilds();
this.appendChild(child, visible, notUpdateDom); this.appendChild(child, visible, notUpdateDom);
} }
} }
@ -36488,7 +36518,31 @@ return /******/ (function(modules) { // webpackBootstrap
delete this.visibleChilds; delete this.visibleChilds;
} }
}; };
/**
* set custom css classes on a node
*/
Node.prototype._updateCssClassName = function () {
if(this.dom.field
&& this.editor
&& this.editor.options
&& typeof this.editor.options.onClassName ==='function'
&& this.dom.tree){
util.removeAllClassNames(this.dom.tree);
const addClasses = this.editor.options.onClassName({ path: this.getPath(), field: this.field, value: this.value }) || "";
util.addClassName(this.dom.tree, "jsoneditor-values " + addClasses);
}
}
Node.prototype.recursivelyUpdateCssClassesOnNodes = function () {
this._updateCssClassName();
if (this.childs !== 'undefined') {
var i;
for (i in this.childs) {
this.childs[i].recursivelyUpdateCssClassesOnNodes();
}
}
}
/** /**
* Goes through the path from the node to the root and ensures that it is expanded * Goes through the path from the node to the root and ensures that it is expanded
@ -36755,7 +36809,7 @@ return /******/ (function(modules) { // webpackBootstrap
? node.index ? node.index
: node.parent.childs.indexOf(node); : node.parent.childs.indexOf(node);
while (node.parent.visibleChilds < index + 1) { while (node.parent.visibleChilds < index + 1) {
node.parent.visibleChilds += Node.prototype.MAX_VISIBLE_CHILDS; node.parent.visibleChilds += this.getMaxVisibleChilds();
} }
// expand the parent itself // expand the parent itself
@ -38060,6 +38114,8 @@ return /******/ (function(modules) { // webpackBootstrap
this._updateDomField(); this._updateDomField();
this._updateDomValue(); this._updateDomValue();
this._updateCssClassName();
// update childs indexes // update childs indexes
if (options && options.updateIndexes === true) { if (options && options.updateIndexes === true) {
// updateIndexes is true or undefined // updateIndexes is true or undefined
@ -42146,8 +42202,8 @@ return /******/ (function(modules) { // webpackBootstrap
showMoreButton.href = '#'; showMoreButton.href = '#';
showMoreButton.onclick = function (event) { showMoreButton.onclick = function (event) {
// TODO: use callback instead of accessing a method of the parent // TODO: use callback instead of accessing a method of the parent
parent.visibleChilds = Math.floor(parent.visibleChilds / parent.MAX_VISIBLE_CHILDS + 1) * parent.visibleChilds = Math.floor(parent.visibleChilds / parent.getMaxVisibleChilds() + 1) *
parent.MAX_VISIBLE_CHILDS; parent.getMaxVisibleChilds();
me.updateDom(); me.updateDom();
parent.showChilds(); parent.showChilds();

2
dist/jsoneditor.map vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

2
package-lock.json generated
View File

@ -1,6 +1,6 @@
{ {
"name": "jsoneditor", "name": "jsoneditor",
"version": "5.27.1", "version": "5.28.0",
"lockfileVersion": 1, "lockfileVersion": 1,
"requires": true, "requires": true,
"dependencies": { "dependencies": {

View File

@ -1,6 +1,6 @@
{ {
"name": "jsoneditor", "name": "jsoneditor",
"version": "5.27.1", "version": "5.28.0",
"main": "./index", "main": "./index",
"description": "A web-based tool to view, edit, format, and validate JSON", "description": "A web-based tool to view, edit, format, and validate JSON",
"tags": [ "tags": [