@@ -17,6 +17,22 @@ Jsonary.extendSchemaList({
1717}
1818} ) ;
1919
20+ // hidden extension (non-standard keyword, suggested by Ognian)
21+ Jsonary . extendSchema ( {
22+ hidden : function ( ) {
23+ return ! ! this . data . propertyValue ( "hidden" ) ;
24+ }
25+ } ) ;
26+ Jsonary . extendSchemaList ( {
27+ hidden : function ( ) {
28+ var hidden = false ;
29+ this . each ( function ( index , schema ) {
30+ hidden = hidden || schema . hidden ( ) ;
31+ } ) ;
32+ return hidden ;
33+ }
34+ } ) ;
35+
2036// Display/edit objects, using displayOrder for ordering
2137Jsonary . render . register ( {
2238renderHtml : function ( data , context ) {
@@ -27,8 +43,10 @@ Jsonary.render.register({
2743var keysDisplayOrder = { } ;
2844var guaranteedKeys = data . readOnly ( ) ? [ ] : schemas . definedProperties ( ) ;
2945data . properties ( guaranteedKeys , function ( key , subData ) {
30- keysList . push ( key ) ;
31- keysDisplayOrder [ key ] = ( subData . schemas ( ) . displayOrder ( ) || schemas . propertySchemas ( key ) . displayOrder ( ) ) ;
46+ if ( ! ( subData . schemas ( ) . hidden ( ) || schemas . propertySchemas ( key ) . hidden ( ) ) ) {
47+ keysList . push ( key ) ;
48+ keysDisplayOrder [ key ] = ( subData . schemas ( ) . displayOrder ( ) || schemas . propertySchemas ( key ) . displayOrder ( ) ) ;
49+ }
3250} , true ) ;
3351keysList . sort ( function ( keyA , keyB ) {
3452if ( keysDisplayOrder [ keyA ] == null ) {
@@ -50,19 +68,21 @@ Jsonary.render.register({
5068}
5169result += '<table class="json-object"><tbody>' ;
5270var drawProperty = function ( key , subData ) {
53- result += '<tr class="json-object-pair">' ;
54- if ( subData . defined ( ) ) {
55- var title = subData . schemas ( ) . title ( ) ;
56- } else {
57- var title = subData . parent ( ) . schemas ( ) . propertySchemas ( subData . parentKey ( ) ) . title ( ) ;
58- }
59- if ( title == "" ) {
60- result += '<td class="json-object-key"><div class="json-object-key-title">' + escapeHtml ( key ) + '</div></td>' ;
61- } else {
62- result += '<td class="json-object-key"><div class="json-object-key-title">' + escapeHtml ( key ) + '</div><div class="json-object-key-text">' + escapeHtml ( title ) + '</div></td>' ;
63- }
64- result += '<td class="json-object-value">' + context . renderHtml ( subData ) + '</td>' ;
65- result += '</tr>' ;
71+ if ( ! subData . schemas ( ) . hidden ( ) ) {
72+ result += '<tr class="json-object-pair">' ;
73+ if ( subData . defined ( ) ) {
74+ var title = subData . schemas ( ) . title ( ) ;
75+ } else {
76+ var title = subData . parent ( ) . schemas ( ) . propertySchemas ( subData . parentKey ( ) ) . title ( ) ;
77+ }
78+ if ( title == "" ) {
79+ result += '<td class="json-object-key"><div class="json-object-key-title">' + escapeHtml ( key ) + '</div></td>' ;
80+ } else {
81+ result += '<td class="json-object-key"><div class="json-object-key-title">' + escapeHtml ( key ) + '</div><div class="json-object-key-text">' + escapeHtml ( title ) + '</div></td>' ;
82+ }
83+ result += '<td class="json-object-value">' + context . renderHtml ( subData ) + '</td>' ;
84+ result += '</tr>' ;
85+ }
6686}
6787if ( ! data . readOnly ( ) ) {
6888var maxProperties = schemas . maxProperties ( ) ;
@@ -72,6 +92,9 @@ Jsonary.render.register({
7292drawProperty ( key , subData ) ;
7393}
7494} , drawProperty ) ;
95+ // There are 2 callbacks the first one is called for the properties of the object defined in the schema or provided as the very first argumen
96+ // the second one is called for properties in the data NOT defined in the schema
97+ // so if we want to exclude a property only if it is defined as hidden in the schema we have to change the draw property function to try to see if this item is hidden and only if it is hidden to disable it otherwise it has to be displayed.
7598
7699if ( canAdd && schemas . allowedAdditionalProperties ( ) ) {
77100result += '<tr class="json-object-pair"><td class="json-object-key"><div class="json-object-key-text">' ;
0 commit comments