View | Details | Raw Unified | Return to bug 36698
Collapse All | Expand All

(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/viewlog.tt (-1 / +28 lines)
Lines 60-65 Link Here
60
            overflow: scroll;
60
            overflow: scroll;
61
            padding: 10px;
61
            padding: 10px;
62
        }
62
        }
63
        /* Struct::Diff renderer */
64
        table.struct-diff {
65
            border-collapse: collapse;
66
            font-size: 0.85em;
67
            width: 100%;
68
        }
69
        table.struct-diff th,
70
        table.struct-diff td {
71
            border: 1px solid #ccc;
72
            padding: 2px 6px;
73
            vertical-align: top;
74
        }
75
        table.struct-diff th {
76
            background-color: #f5f5f5;
77
            white-space: nowrap;
78
        }
79
        table.struct-diff td.diff-key {
80
            font-family: monospace;
81
            white-space: nowrap;
82
        }
83
        table.struct-diff del,
84
        table.struct-diff ins {
85
            font-family: monospace;
86
            text-decoration: none;
87
            padding: 1px 3px;
88
            display: inline-block;
89
        }
63
    </style>
90
    </style>
64
[% END %]
91
[% END %]
65
</head>
92
</head>
Lines 410-416 Link Here
410
                                    [% END %]
437
                                    [% END %]
411
                                </td>
438
                                </td>
412
                                <td>[% PROCESS translate_log_interface log_interface=loopro.interface %]</td>
439
                                <td>[% PROCESS translate_log_interface log_interface=loopro.interface %]</td>
413
                                <td>[% loopro.diff | html %]</td>
440
                                <td class="diff-col">[% loopro.diff | html %]</td>
414
                            </tr>
441
                            </tr>
415
                        [% END %]
442
                        [% END %]
416
                    </tbody>
443
                    </tbody>
(-)a/koha-tmpl/intranet-tmpl/prog/js/viewlog.js (-1 / +99 lines)
Lines 1-3 Link Here
1
/**
2
 * Recursively collect changed entries from a Struct::Diff node.
3
 * Returns an array of { key, before, after } objects.
4
 * Nested diffs are flattened with dot-separated keys.
5
 */
6
function collectDiffEntries(node, prefix) {
7
    var entries = [];
8
    Object.keys(node).forEach(function (key) {
9
        var change = node[key];
10
        var fullKey = prefix ? prefix + "." + key : key;
11
        if ("O" in change || "N" in change) {
12
            entries.push({ key: fullKey, before: change.O, after: change.N });
13
        } else if ("A" in change) {
14
            entries.push({ key: fullKey, before: undefined, after: change.A });
15
        } else if ("R" in change) {
16
            entries.push({ key: fullKey, before: change.R, after: undefined });
17
        } else if ("D" in change) {
18
            entries = entries.concat(collectDiffEntries(change.D, fullKey));
19
        }
20
    });
21
    return entries;
22
}
23
24
/**
25
 * Render Struct::Diff JSON as a human-readable before/after table.
26
 * Falls back to a <pre> block for non-Struct::Diff JSON or plain text.
27
 */
28
function renderStructDiff(raw) {
29
    if (!raw) return "";
30
    var diff;
31
    try {
32
        diff = JSON.parse(raw);
33
    } catch (e) {
34
        return $("<pre>").text(raw)[0].outerHTML;
35
    }
36
    if (!diff || !diff.D || typeof diff.D !== "object") {
37
        return $("<pre>").text(raw)[0].outerHTML;
38
    }
39
40
    var entries = collectDiffEntries(diff.D, "");
41
    if (!entries.length) return "";
42
43
    function fmt(v) {
44
        if (v === undefined) return "";
45
        var s = typeof v === "object" ? JSON.stringify(v) : String(v);
46
        return $("<span>").text(s).html();
47
    }
48
49
    var rows = entries
50
        .map(function (e) {
51
            var before =
52
                e.before !== undefined
53
                    ? "<del>" + fmt(e.before) + "</del>"
54
                    : "";
55
            var after =
56
                e.after !== undefined ? "<ins>" + fmt(e.after) + "</ins>" : "";
57
            return (
58
                "<tr>" +
59
                '<td class="diff-key">' +
60
                $("<span>").text(e.key).html() +
61
                "</td>" +
62
                '<td class="diff-before">' +
63
                before +
64
                "</td>" +
65
                '<td class="diff-after">' +
66
                after +
67
                "</td>" +
68
                "</tr>"
69
            );
70
        })
71
        .join("");
72
73
    return (
74
        '<table class="struct-diff">' +
75
        "<thead><tr>" +
76
        "<th>" +
77
        __("Field") +
78
        "</th>" +
79
        "<th>" +
80
        __("Before") +
81
        "</th>" +
82
        "<th>" +
83
        __("After") +
84
        "</th>" +
85
        "</tr></thead>" +
86
        "<tbody>" +
87
        rows +
88
        "</tbody>" +
89
        "</table>"
90
    );
91
}
92
1
function tickAll(section) {
93
function tickAll(section) {
2
    $("input[type='checkbox'][name='" + section + "']").prop("checked", true);
94
    $("input[type='checkbox'][name='" + section + "']").prop("checked", true);
3
    $("#" + section.slice(0, -1) + "ALL").prop("checked", true);
95
    $("#" + section.slice(0, -1) + "ALL").prop("checked", true);
Lines 151-156 $(document).ready(function () { Link Here
151
        e.preventDefault();
243
        e.preventDefault();
152
        $(".compare:checked").prop("checked", false).change();
244
        $(".compare:checked").prop("checked", false).change();
153
    });
245
    });
246
247
    $("td.diff-col").each(function () {
248
        var raw = $(this).text().trim();
249
        if (raw) {
250
            $(this).html(renderStructDiff(raw));
251
        }
252
    });
154
    patron_autocomplete($("#user"), {
253
    patron_autocomplete($("#user"), {
155
        "on-select-callback": function (event, ui) {
254
        "on-select-callback": function (event, ui) {
156
            $("#user").val(ui.item.patron_id);
255
            $("#user").val(ui.item.patron_id);
157
- 

Return to bug 36698