Skip to content

Commit 867aa6e

Browse files
committed
Merge pull request #146 from Ognian/options_for_adaptive_table
- static options for adaptive table: pagingRows
2 parents ba43f48 + 58516fe commit 867aa6e

File tree

1 file changed

+134
-134
lines changed

1 file changed

+134
-134
lines changed

renderers/contributed/adaptive-table.js

Lines changed: 134 additions & 134 deletions
Original file line numberDiff line numberDiff line change
@@ -1,164 +1,164 @@
11
// Generic renderer for arrays
22
// Requires "render.table" and "render.generator" plugins
33
Jsonary.render.register(Jsonary.plugins.Generator({
4-
name: "Adaptive table",
5-
// Part of the generator plugin - this function returns a renderer based on the data/schema requirements
6-
rendererForData: function (data) {
7-
var FancyTableRenderer = Jsonary.plugins.FancyTableRenderer;
4+
name: "Adaptive table",
5+
// Part of the generator plugin - this function returns a renderer based on the data/schema requirements
6+
rendererForData: function (data) {
7+
var FancyTableRenderer = Jsonary.plugins.FancyTableRenderer;
88

9-
var detectedPagingLinks = !!(data.getLink('next') || data.getLink('prev'));
10-
var isShort = data.readOnly() && data.length() < 15;
9+
var detectedPagingLinks = !!(data.getLink('next') || data.getLink('prev'));
10+
var isShort = data.readOnly() && data.length() < (Jsonary && Jsonary.options && Jsonary.options.adaptive_table && Jsonary.options.adaptive_table.pagingRows ? Jsonary.options.adaptive_table.pagingRows : 15);
1111

12-
var renderer = new FancyTableRenderer({
13-
sort: {},
14-
rowsPerPage: (isShort || detectedPagingLinks) ? null : [15, 5, 30, 100]
15-
});
16-
var columnsObj = {};
17-
18-
function addColumnsFromSchemas(schemas, pathPrefix, depthRemaining) {
19-
schemas = schemas.getFull();
12+
var renderer = new FancyTableRenderer({
13+
sort: {},
14+
rowsPerPage: (isShort || detectedPagingLinks) ? null : [15, 5, 30, 100]
15+
});
16+
var columnsObj = {};
17+
18+
function addColumnsFromSchemas(schemas, pathPrefix, depthRemaining) {
19+
schemas = schemas.getFull();
2020

21-
pathPrefix = pathPrefix || "";
22-
var basicTypes = schemas.basicTypes();
21+
pathPrefix = pathPrefix || "";
22+
var basicTypes = schemas.basicTypes();
2323

24-
// If the data might not be an object, add a column for it
25-
if ((basicTypes.length != 1 || basicTypes[0] != "object" || depthRemaining <= 0) && !schemas.hidden()) {
26-
var column = pathPrefix;
27-
if (!columnsObj[column]) {
28-
columnsObj[column] = true;
29-
renderer.addColumn(column, schemas.title() || column, function (data, context) {
30-
if (data.basicType() == "object" && depthRemaining < 0) {
31-
return '<td class="jsonary-recursion-limit-reached">...</td>';
24+
// If the data might not be an object, add a column for it
25+
if ((basicTypes.length != 1 || basicTypes[0] != "object" || depthRemaining <= 0) && !schemas.hidden()) {
26+
var column = pathPrefix;
27+
if (!columnsObj[column]) {
28+
columnsObj[column] = true;
29+
renderer.addColumn(column, schemas.title() || column, function (data, context) {
30+
if (data.basicType() == "object" && depthRemaining < 0) {
31+
return '<td class="jsonary-recursion-limit-reached">...</td>';
3232
} else {
33-
return this.defaultCellRenderHtml(data, context, column);
34-
}
35-
});
36-
var isScalar = basicTypes.length == 1 && basicTypes[0] !== 'object' && basicTypes[0] !== 'array';
37-
if (!detectedPagingLinks && isScalar) {
38-
// add sorting
39-
renderer.config.sort[column] = true;
40-
}
41-
}
42-
}
33+
return this.defaultCellRenderHtml(data, context, column);
34+
}
35+
});
36+
var isScalar = basicTypes.length == 1 && basicTypes[0] !== 'object' && basicTypes[0] !== 'array';
37+
if (!detectedPagingLinks && isScalar) {
38+
// add sorting
39+
renderer.config.sort[column] = true;
40+
}
41+
}
42+
}
4343

44-
// If the data might be an object, add columns for its links/properties
45-
if (basicTypes.indexOf('object') != -1 && depthRemaining > 0) {
46-
if (data.readOnly()) {
47-
var links = schemas.links();
48-
for (var i = 0; i < links.length; i++) {
49-
var link = links[i];
50-
addColumnsFromLink(link, i);
51-
}
52-
}
53-
var knownProperties = schemas.knownProperties();
54-
var knownPropertyIndices = [];
55-
// Sort object properties by displayOrder
56-
var knownPropertyOrder = {};
57-
for (var i = 0; i < knownProperties.length; i++) {
58-
knownPropertyIndices.push(i);
59-
var key = knownProperties[i];
60-
knownPropertyOrder[key] = schemas.propertySchemas(key).displayOrder();
61-
}
62-
knownPropertyIndices.sort(function (indexA, indexB) {
63-
var keyA = knownProperties[indexA];
64-
var keyB = knownProperties[indexB];
65-
if (knownPropertyOrder[keyA] == null) {
66-
if (knownPropertyOrder[keyB] == null) {
67-
return indexA - indexB;
68-
}
69-
return 1;
70-
} else if (knownPropertyOrder[keyB] == null) {
71-
return -1;
72-
}
73-
return knownPropertyOrder[keyA] - knownPropertyOrder[keyB];
74-
});
75-
// Iterate over the potential properties
76-
for (var i = 0; i < knownPropertyIndices.length; i++) {
77-
var key = knownProperties[knownPropertyIndices[i]];
78-
if (!schemas.propertySchemas(key).hidden()){
44+
// If the data might be an object, add columns for its links/properties
45+
if (basicTypes.indexOf('object') != -1 && depthRemaining > 0) {
46+
if (data.readOnly()) {
47+
var links = schemas.links();
48+
for (var i = 0; i < links.length; i++) {
49+
var link = links[i];
50+
addColumnsFromLink(link, i);
51+
}
52+
}
53+
var knownProperties = schemas.knownProperties();
54+
var knownPropertyIndices = [];
55+
// Sort object properties by displayOrder
56+
var knownPropertyOrder = {};
57+
for (var i = 0; i < knownProperties.length; i++) {
58+
knownPropertyIndices.push(i);
59+
var key = knownProperties[i];
60+
knownPropertyOrder[key] = schemas.propertySchemas(key).displayOrder();
61+
}
62+
knownPropertyIndices.sort(function (indexA, indexB) {
63+
var keyA = knownProperties[indexA];
64+
var keyB = knownProperties[indexB];
65+
if (knownPropertyOrder[keyA] == null) {
66+
if (knownPropertyOrder[keyB] == null) {
67+
return indexA - indexB;
68+
}
69+
return 1;
70+
} else if (knownPropertyOrder[keyB] == null) {
71+
return -1;
72+
}
73+
return knownPropertyOrder[keyA] - knownPropertyOrder[keyB];
74+
});
75+
// Iterate over the potential properties
76+
for (var i = 0; i < knownPropertyIndices.length; i++) {
77+
var key = knownProperties[knownPropertyIndices[i]];
78+
if (!schemas.propertySchemas(key).hidden()) {
7979
addColumnsFromSchemas(schemas.propertySchemas(key), pathPrefix + Jsonary.joinPointer([key]), depthRemaining - 1);
8080
}
81-
}
82-
}
83-
}
81+
}
82+
}
83+
}
8484

85-
function addColumnsFromLink(linkDefinition, index) {
86-
var columnName = "link$" + index + "$" + linkDefinition.rel();
85+
function addColumnsFromLink(linkDefinition, index) {
86+
var columnName = "link$" + index + "$" + linkDefinition.rel();
8787

88-
var columnTitle = Jsonary.escapeHtml(linkDefinition.data.property("title").value()|| linkDefinition.rel());
89-
var linkText = columnTitle;
90-
var activeText = null, isConfirm = true;
91-
if (linkDefinition.rel() == 'edit') {
92-
activeText = 'save';
93-
}
88+
var columnTitle = Jsonary.escapeHtml(linkDefinition.data.property("title").value() || linkDefinition.rel());
89+
var linkText = columnTitle;
90+
var activeText = null, isConfirm = true;
91+
if (linkDefinition.rel() == 'edit') {
92+
activeText = 'save';
93+
}
9494

95-
renderer.addLinkColumn(linkDefinition, linkDefinition.rel(), columnTitle, linkText, activeText, isConfirm);
96-
}
95+
renderer.addLinkColumn(linkDefinition, linkDefinition.rel(), columnTitle, linkText, activeText, isConfirm);
96+
}
9797

98-
var itemSchemas = data.schemas().indexSchemas(0).getFull();
99-
var recursionLimit = (itemSchemas.knownProperties().length >= 8) ? 0 : 1;
100-
if (data.schemas().displayAsTable()) {
101-
recursionLimit = 2;
102-
}
103-
addColumnsFromSchemas(itemSchemas, '', recursionLimit);
104-
return renderer;
105-
},
106-
filter: function (data, schemas) {
107-
if (data.basicType() == "array") {
108-
if (schemas.displayAsTable()) {
109-
return true;
110-
}
111-
// Array full of objects
112-
if (!schemas.tupleTyping()) {
113-
var indexSchemas = schemas.indexSchemas(0).getFull();
114-
var itemTypes = indexSchemas.basicTypes();
115-
if (itemTypes.length == 1 && itemTypes[0] == "object") {
116-
if (indexSchemas.additionalPropertySchemas().length > 0) {
117-
return false;
118-
}
119-
if (indexSchemas.knownProperties().length < 20) {
120-
return true;
121-
}
122-
}
123-
}
124-
}
125-
return false;
126-
}
98+
var itemSchemas = data.schemas().indexSchemas(0).getFull();
99+
var recursionLimit = (itemSchemas.knownProperties().length >= 8) ? 0 : 1;
100+
if (data.schemas().displayAsTable()) {
101+
recursionLimit = 2;
102+
}
103+
addColumnsFromSchemas(itemSchemas, '', recursionLimit);
104+
return renderer;
105+
},
106+
filter: function (data, schemas) {
107+
if (data.basicType() == "array") {
108+
if (schemas.displayAsTable()) {
109+
return true;
110+
}
111+
// Array full of objects
112+
if (!schemas.tupleTyping()) {
113+
var indexSchemas = schemas.indexSchemas(0).getFull();
114+
var itemTypes = indexSchemas.basicTypes();
115+
if (itemTypes.length == 1 && itemTypes[0] == "object") {
116+
if (indexSchemas.additionalPropertySchemas().length > 0) {
117+
return false;
118+
}
119+
if (indexSchemas.knownProperties().length < 20) {
120+
return true;
121+
}
122+
}
123+
}
124+
}
125+
return false;
126+
}
127127
}));
128128

129129
// Display-order extension (non-standard keyword)
130130
Jsonary.extendSchema({
131-
displayOrder: function () {
132-
return this.data.propertyValue("displayOrder");
133-
}
131+
displayOrder: function () {
132+
return this.data.propertyValue("displayOrder");
133+
}
134134
});
135135
Jsonary.extendSchemaList({
136-
displayOrder: function () {
137-
var displayOrder = null;
138-
this.each(function (index, schema) {
139-
var value = schema.displayOrder();
140-
if (value != null && (displayOrder == null || value < displayOrder)) {
141-
displayOrder = value;
142-
}
143-
});
144-
return displayOrder;
145-
}
136+
displayOrder: function () {
137+
var displayOrder = null;
138+
this.each(function (index, schema) {
139+
var value = schema.displayOrder();
140+
if (value != null && (displayOrder == null || value < displayOrder)) {
141+
displayOrder = value;
142+
}
143+
});
144+
return displayOrder;
145+
}
146146
});
147147

148148
// displayAsTable extension (non-standard keyword, suggested by Ognian)
149149
Jsonary.extendSchema({
150-
displayAsTable: function () {
151-
return !!this.data.propertyValue("displayAsTable");
152-
}
150+
displayAsTable: function () {
151+
return !!this.data.propertyValue("displayAsTable");
152+
}
153153
});
154154
Jsonary.extendSchemaList({
155-
displayAsTable: function () {
156-
var displayAsTable = false;
157-
this.each(function (index, schema) {
158-
displayAsTable = displayAsTable || schema.displayAsTable();
159-
});
160-
return displayAsTable;
161-
}
155+
displayAsTable: function () {
156+
var displayAsTable = false;
157+
this.each(function (index, schema) {
158+
displayAsTable = displayAsTable || schema.displayAsTable();
159+
});
160+
return displayAsTable;
161+
}
162162
});
163163

164164
// hidden extension (non-standard keyword, suggested by Ognian)

0 commit comments

Comments
 (0)