|
17 | 17 | wrapLongText: false, |
18 | 18 | maxColumnWidthPx: null, // number | null |
19 | 19 | jsonMode: "raw", // raw | wrapped | pretty |
| 20 | + jsonMaxLines: 10, // number (limits cell height when JSON is shown) |
20 | 21 | stickyHeader: false, |
21 | 22 | pageLength: 10 // 10 | 25 | 50 | 100 |
22 | 23 | }; |
|
112 | 113 | } |
113 | 114 | } |
114 | 115 |
|
| 116 | + var jsonMaxLinesRaw = raw.jsonMaxLines; |
| 117 | + if (jsonMaxLinesRaw === "" || jsonMaxLinesRaw === null || typeof jsonMaxLinesRaw === "undefined") { |
| 118 | + settings.jsonMaxLines = DEFAULT_SETTINGS.jsonMaxLines; |
| 119 | + } else { |
| 120 | + var parsedJsonMaxLines = parseInt(jsonMaxLinesRaw, 10); |
| 121 | + if (!isNaN(parsedJsonMaxLines)) { |
| 122 | + settings.jsonMaxLines = clampInt(parsedJsonMaxLines, 1, 200); |
| 123 | + } |
| 124 | + } |
| 125 | + |
115 | 126 | return settings; |
116 | 127 | } |
117 | 128 |
|
|
206 | 217 | } |
207 | 218 | } |
208 | 219 |
|
| 220 | + function applyJsonMaxLines(settings) { |
| 221 | + var jsonMaxLines = |
| 222 | + typeof settings.jsonMaxLines === "number" && settings.jsonMaxLines > 0 |
| 223 | + ? settings.jsonMaxLines |
| 224 | + : DEFAULT_SETTINGS.jsonMaxLines; |
| 225 | + |
| 226 | + document.documentElement.style.setProperty("--addb-json-max-lines", String(jsonMaxLines)); |
| 227 | + } |
| 228 | + |
209 | 229 | function looksLikeJson(value) { |
210 | 230 | if (typeof value !== "string") return false; |
211 | 231 | var trimmed = value.trim(); |
|
372 | 392 | }, 0); |
373 | 393 | } |
374 | 394 |
|
| 395 | + function renderWrappedJsonCell(td, jsonText) { |
| 396 | + if ( |
| 397 | + td.childNodes.length === 1 && |
| 398 | + td.firstChild && |
| 399 | + td.firstChild.nodeType === 1 && |
| 400 | + td.firstChild.classList && |
| 401 | + td.firstChild.classList.contains("addb-json-text") && |
| 402 | + td.firstChild.textContent === jsonText |
| 403 | + ) { |
| 404 | + return false; |
| 405 | + } |
| 406 | + |
| 407 | + td.textContent = ""; |
| 408 | + var wrapper = document.createElement("div"); |
| 409 | + wrapper.className = "addb-json-text"; |
| 410 | + wrapper.textContent = jsonText; |
| 411 | + td.appendChild(wrapper); |
| 412 | + return true; |
| 413 | + } |
| 414 | + |
375 | 415 | function applyJsonFormattingToCurrentPage(dataTableApi, settings) { |
376 | 416 | if (!dataTableApi) return; |
377 | 417 |
|
|
404 | 444 |
|
405 | 445 | if (mode === "wrapped") { |
406 | 446 | // Keep raw JSON text, but apply JSON cell styling. |
407 | | - if (td.textContent !== cellData || td.childNodes.length !== 1 || td.firstChild.nodeType !== 3) { |
408 | | - td.textContent = cellData; |
409 | | - didMutateDom = true; |
410 | | - } |
| 447 | + if (renderWrappedJsonCell(td, cellData)) didMutateDom = true; |
411 | 448 | continue; |
412 | 449 | } |
413 | 450 |
|
|
460 | 497 | applySidebarWidth(currentSettings); |
461 | 498 | applyBodyClasses(currentSettings); |
462 | 499 | applyMaxColumnWidth(currentSettings); |
| 500 | + applyJsonMaxLines(currentSettings); |
463 | 501 |
|
464 | 502 | var dataTableReason = reason; |
465 | 503 | if (previousSettings.jsonMode !== currentSettings.jsonMode) dataTableReason = "jsonMode"; |
|
583 | 621 |
|
584 | 622 | function readDraftFromForm() { |
585 | 623 | var maxWidthRaw = $("#addb-max-column-width").val(); |
| 624 | + var jsonMaxLinesRaw = $("#addb-json-max-lines").val(); |
586 | 625 | var settings = { |
587 | 626 | tableWidth: $("input[name='addb-table-width']:checked").val(), |
588 | 627 | sidebarWidth: $("input[name='addb-sidebar-width']:checked").val(), |
589 | 628 | rowDensity: $("input[name='addb-row-density']:checked").val(), |
590 | 629 | wrapLongText: $("#addb-wrap-long-text").is(":checked"), |
591 | 630 | maxColumnWidthPx: maxWidthRaw === "" ? null : maxWidthRaw, |
592 | 631 | jsonMode: $("#addb-json-mode").val(), |
| 632 | + jsonMaxLines: jsonMaxLinesRaw, |
593 | 633 | stickyHeader: $("#addb-sticky-header").is(":checked"), |
594 | 634 | pageLength: $("#addb-page-length").val() |
595 | 635 | }; |
|
603 | 643 | $("#addb-wrap-long-text").prop("checked", !!settings.wrapLongText); |
604 | 644 | $("#addb-max-column-width").val(settings.maxColumnWidthPx === null ? "" : settings.maxColumnWidthPx); |
605 | 645 | $("#addb-json-mode").val(settings.jsonMode); |
| 646 | + $("#addb-json-max-lines").val(String(settings.jsonMaxLines)); |
606 | 647 | $("#addb-sticky-header").prop("checked", !!settings.stickyHeader); |
607 | 648 | $("#addb-page-length").val(String(settings.pageLength)); |
608 | 649 | } |
|
0 commit comments