summaryrefslogtreecommitdiffstats
path: root/devtools/client/webconsole/test/browser/test-console-custom-formatters.html
blob: 68fcda8ad2c949c7c017a25ffa8c9e66baa87507 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8"/>
    <title>Webconsole custom formatters test page</title>
  </head>
  <body>
    <p>Custom formatters test page</p>
    <script>
      "use strict";

      const proxy = new Proxy({}, {foo: "bar"});

      const variables = [
        "string",
        1337,
        { noFormat: true },
        { customFormatHeader: "header" },
        { customFormatHeaderAndBody: "body" },
        { customFormatObjectAndConfig: true },
        proxy,
      ];

      window.devtoolsFormatters = [
        {
          header: (obj, config) => {
            if (obj.hasOwnProperty("customFormatHeader")) {
              return [
                "span",
                {"style": "font-size: 3rem;"},
                config ? `~${JSON.stringify(config)}~` : "custom formatted header",
              ];
            }
            return null;
          },
          hasBody: obj => false
        },
        {
          header: obj => {
            if (obj.hasOwnProperty("customFormatHeaderAndBody")) {
              return ["span", {"style": "font-style: italic;"}, "custom formatted body"];
            }
            return null;
          },
          hasBody: obj => true,
          body: obj => ["span", {"style": "font-family: serif; font-size: 2rem;"}, obj.customFormatHeaderAndBody]
        },
        {
          header: (obj, config) => {
            if (obj.hasOwnProperty("customFormatObjectAndConfig")) {
              return [
                "span",
                {"style": "color: purple;"},
                `object tag`,
                [
                  "object",
                  {
                    // This will trigger the "customFormatHeader" custom formatter
                    object: {customFormatHeader: true},
                    config: config || [1, "a"]
                  }
                ],
                // This should print the `config` object, not formatted
                [
                  "object",
                  {
                    object: config || null,
                  }
                ],
                [
                  "span",
                  " | serialized: ",
                  42n,
                  " ",
                  undefined,
                  " ",
                  null,
                  " ",
                  Infinity,
                  " ",
                  {foo: "bar"}
                ]
              ];
            }
            return null;
          },
          hasBody: (obj, config) => obj.hasOwnProperty("customFormatObjectAndConfig") || !!config,
          body: (obj, config) => {
            if (!config) {
              config = [1, "a"];
            }
            return [
            "span",
            {"style": "font-family: serif; font-size: 2rem;"},
            "body",
            [
              "object",
              {
                object: {
                  customFormatObjectAndConfig: true,
                },
                config: [
                  config[0]  + 1,
                  String.fromCharCode(config[1].charCodeAt(0) + 1)
                ]
              }
            ]
          ]}
        },
        {
          header: (obj, config) => {
            if (obj === proxy) {
              return [
                "span",
                {"style": "font-weight: bold;"},
                "Formatted Proxy",
              ];
            }
            return null;
          },
          hasBody: obj => false
        },
      ];

      variables.forEach(variable => console.log(variable));
    </script>
  </body>
</html>