<!DOCTYPE html>
<!--
 * 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.
-->

<html>
<head>
<script>"use strict"</script>
<meta name="viewport" content="user-scalable=no, width=device-width, height=device-height">
<title>weinre non-minified strict demo</title>
<link rel="stylesheet" href="weinre-demo.css">
<script>try {window.WeinreServerId = location.hash.split("#")[1]} catch(e) {window.WeinreServerId = "anonymous"}</script>
<script src="/target/target-script.js"></script>
<script src="weinre-demo-strict.js"></script>
</head>

<body onload="onLoad()">
<input id="button-start-stuff" type="button" value="start stuff">

<h1>this is a green h1</h1>
<h1 class="blue">this is a blue h1</h1>
<h1 style="color:red">this is a red h1</h1>
<p>Some text, <i>some italic text</i>, and <b>some bold text</b>.

<hr>
<p><input id="button-clear-output" type="button" value="clear output">
<div id="output"></div>
</body>

</html>
