<!DOCTYPE html>
<html>

<head>
    <script src="../resources/runner.js"></script>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<style>
html, body, #gridContainer { height: 100%; }

ui-pane#main {
    contain: strict;
    min-width: 100% !important;
    width: 100% !important;
    max-width: 100% !important;
    min-height: 100% !important;
    height: 100% !important;
    max-height: 100% !important;
    overflow: hidden;
}

[row1] {
    grid-row-start: 1;
    grid-row-end: auto;
}

[row2] {
    grid-row-start: 2;
    grid-row-end: auto;
}


[col2] {
    grid-column-start: 2;
    grid-column-end: auto;
}

ui-pane {
    display: grid;
    height: 100%;
    contain: content;
}

[hgrid] {
    grid-template-rows: 1fr;
}

[vgrid] {
    grid-template-columns: 1fr;
}

ui-icon {
    display: inline-block;
}

[collapsed ] { display: none; }

.eventChildrenWrap {
    grid-column: 1/span 3;
    contain: content;
}

.eventChildrenContainer {
    display: grid;
    grid-template-columns: 3em 0px 1fr;
    contain: content;
}

.actionBlockWrap {
    grid-column: 3;
    align-self: start;
    contain: layout style;
    position: relative;
}

.actionBlock {
    display: grid;
    grid-template-columns: 1fr;
    overflow: hidden;
    contain: content;
}

</style>

</head>

<body>
    <pre id="log"></pre>

    <div id="gridContainer">
        <ui-pane id="main" vgrid="" style="grid-template-rows: 1fr;">
            <ui-pane id="middle" row1="" hgrid="" style="grid-template-columns: 320px 1fr 300px;">
                <ui-pane col2="">
                    <ui-body row2="">
                        <ui-pane class="eventSheetViewPane">
                            <ui-body row2="" class="eventSheetView">
                                    <div id="thisistheone" class="eventChildrenWrap">
                                        <div class="eventChildrenContainer">
                                            <div class="actionBlockWrap">
                                                <div class="actionBlock" id="inserthere">
                                                </div>
                                            </div>
                                        </div>
                                    </div>
                                </div>
                            </ui-body>
                        </ui-pane>
                    </ui-body>
                </ui-pane>

            </ui-pane>
        </ui-pane>
    </div>

    <script>
        var target = document.getElementById('thisistheone');
        var gridContainer = document.getElementById('gridContainer');

        function setup() {
          let insert = document.getElementById('inserthere');
          for (let i = 0; i < 50; ++i) {
            let name = document.createElement('div');
            name.className = 'actionNameCell';
            name.innerHTML = '<ui-icon style="width: 20px; height: 20px; "></ui-icon><span class="actionObjectNameSpan">Button</span>';
            let desc = document.createElement('div');
            desc.className = 'actionDescCell';
            desc.innerHTML = 'Set position to <event-parameter data-index="0"> <ui-icon class="objectParameterIcon" style="width: 20px; height: 20px; "></ui-icon><span class="objectParameterObjectName">Sprite</span> </event-parameter> <em>(image point <event-parameter data-index="1">3213213</event-parameter>)</em>';
            insert.appendChild(name);
            insert.appendChild(desc);
          }
        }

        function test() {
            target.setAttribute('collapsed', '');
            gridContainer.offsetHeight;

            target.removeAttribute('collapsed');
            gridContainer.offsetHeight;
        }

        function done() {
          let insert = document.getElementById('inserthere');
          insert.innerHTML = "";
        }

        setup();
        PerfTestRunner.measureRunsPerSecond({
            description: "Measures performance of getting offsetHeight of a large grid container.",
            run: test,
            done: done
        });
    </script>
</body>

</html>
