<!DOCTYPE html>

<!--
Copyright 2013 Google Inc. All Rights Reserved.

Licensed 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.
-->

<html>
<head>
    <title>test_page</title>
    <script>
        function promptForText() {
            var val = prompt('button clicked');
            if (val == null) {
                document.getElementById('settable').textContent = 'dismissed';
            } else {
                document.getElementById('settable').textContent = 'accepted ' + val;
            }
        }
    </script>
</head>

<body>
<table id='table1' non-standard='a non standard attr'>
    <tr>
        <td>r1c1</td>
        <td>r1c2</td>
    </tr>
    <tr>
        <td>r2c1</td>
        <td>r2c2</td>
    </tr>
</table>
<button onclick='promptForText();'>button</button>
<form onsubmit='alert("form submitted")'>
    <input type='text'/>
    <input type='checkbox'/>
    <input type='password' disabled/>
</form>
<div id='div' style='display: none; background-color: red'>
    some not displayed text
</div>
<a id='settable' href="test_page.html" target="_new">
    Open copy in other window</a>
<br/>
<iframe src="frame.html" name="frame" width="100%"/>
</body>
</html>
