|  | <!-- | 
|  | 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> |