<!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/>
    <input type='submit'/>
</form>
<div id='invisible-div' style='display: none; background-color: red'>
    some not displayed text
    <div id='inner-div'>
      inner div should not be displayed either.
    </div>
</div>
<a id='settable' href="test_page.html" target="_new">
    Open copy in other window</a>
<br/>
<iframe src="frame.html" id="frame" width="100%"/>
</body>
</html>
