<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
-->

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
</head>
<body>
<div id="app" style="display: none">
    <iframe :src="url" id="test-view"></iframe>
    <div id="recording-status">
        <el-button
            :icon="recordingAction ? 'el-icon-video-camera' : 'el-icon-video-camera'"
            class="recording-button" circle :type="recordingAction ? 'danger' : 'info'"
        >
        </el-button>
        <div class="hint"><span class="emphasis">ALT + R</span>to {{recordingAction ? 'stop' : 'start'}} recording</div>
        <div class="hint" v-if="recordingAction"><span class="emphasis">ALT + S</span>to take screenshot</div>
        <div class="recording-time" v-if="recordingAction">{{(recordingTimeElapsed / 1000).toFixed(0)}} s</div>
    </div>
    <div id="actions">
        <el-card class="box-card">
            <div slot="header" class="clearfix">
                <span>Actions</span>
                <div class="toolbar">
                    <i style="font-size: 18px;cursor:pointer;" class="el-icon-refresh" title="Refresh Page" @click="refreshPage"></i>
                    <el-button type="primary" size="mini" icon="el-icon-caret-right" circle @click="run"></el-button>
                    <el-button type="primary" size="mini" icon="el-icon-circle-plus" @click="newAction">New</el-button>

                    <el-popover title="Configuration" class="configuration">
                        <div class="config-item">
                            <el-checkbox v-model="config.screenshotAfterMouseUp">Auto screenshot after mouse up</el-checkbox>
                        </div>
                        <div class="config-item">
                            <span>Delay</span>
                            <el-slider style="width: 180px;" v-model="config.screenshotDelay" :step="100" :max="2000"></el-slider>
                        </div>
                        <i slot="reference" class="el-icon-setting"></i>
                    </el-popover>
                </div>
            </div>
            <div v-for="action in actions" :class="{'action-item': true, 'active': action.name === currentAction.name}" @click.self="select(action.name)">
                {{action.name}}
                <div style="float:right" class="operations">
                    <el-popover>
                        <div style="text-align: center">{ scrollX: {{action.scrollX}}, scrollY: {{action.scrollY}} }</div>
                        <div v-for="op in action.ops" style="text-align: center">{{op}}</div>
                        <div slot="reference">
                            <span>Data ({{action.ops.length}})</span>
                            <i slot="reference" class="el-icon-caret-bottom"></i>
                        </div>
                    </el-popover>
                    <i class="el-icon-delete" @click="doDelete(action.name)"></i>
                    <i class="el-icon-refresh-left" @click="clearOps(action.name)"></i>
                </div>
            </div>
        </el-card>
    </div>
    <div
        id="tests-nav"
        v-show="drawerVisible"
    >
        <ul>
            <li v-for="test in tests">
                <a :href="'#' + test.name" :class="{active: test.name === currentTestName}">
                    {{test.name}}
                    <i v-if="test.actions" class="el-icon-video-camera-solid"></i>
                    <span v-if="test.actions" style="font-size: 14px;">({{test.actions}})</span>
                </a>
            </li>
        </ul>
        <i class="el-icon-circle-close" @click="drawerVisible=false"></i>
    </div>
    <el-button icon="el-icon-menu" type="info" plain id="open-nav" @click="drawerVisible=true"></el-button>
</div>

<script src="../../../node_modules/socket.io-client/dist/socket.io.js"></script>
<script src="https://unpkg.com/vue@2.6.10/dist/vue.js"></script>

<!-- Element UI -->
<link rel="stylesheet" href="https://unpkg.com/element-ui@2.11.1/lib/theme-chalk/index.css">
<script src="https://unpkg.com/element-ui@2.11.1/lib/index.js"></script>
<script src="https://unpkg.com/lodash@4.17.15/lodash.js"></script>

<script src="recorder.js"></script>

<link rel="stylesheet" href="recorder.css">

</body>
</html>