feat: when rolling, also copy the wwwroot over (#1756)
|
@ -27,7 +27,9 @@ jobs:
|
|||
dotnet-version: 5.0.x
|
||||
- name: Install prerequisites and download drivers
|
||||
shell: pwsh
|
||||
run: .\build.ps1 driver -prereqs
|
||||
run: |
|
||||
.\build.ps1 driver -prereqs
|
||||
.\build.ps1 wwwroot
|
||||
- name: Install Playwright CLI
|
||||
run: dotnet tool install --global Microsoft.Playwright.CLI
|
||||
- name: Build NUnit Package
|
||||
|
|
|
@ -26,7 +26,9 @@ jobs:
|
|||
dotnet-version: 5.0.x
|
||||
- name: Install prerequisites and download drivers
|
||||
shell: pwsh
|
||||
run: ./build.ps1 driver
|
||||
run: |
|
||||
./build.ps1 driver
|
||||
./build.ps1 wwwroot
|
||||
- name: Building...
|
||||
run: dotnet build ./src
|
||||
- name: Installing Browsers and dependencies...
|
||||
|
|
|
@ -31,7 +31,9 @@ jobs:
|
|||
dotnet-version: 5.0.x
|
||||
- name: Install prerequisites and download drivers
|
||||
shell: pwsh
|
||||
run: ./build.ps1 driver
|
||||
run: |
|
||||
./build.ps1 driver
|
||||
./build.ps1 wwwroot
|
||||
- name: Building...
|
||||
run: dotnet build ./src
|
||||
- name: Installing Browsers and dependencies...
|
||||
|
@ -69,7 +71,9 @@ jobs:
|
|||
dotnet-version: 5.0.x
|
||||
- name: Install prerequisites and download drivers
|
||||
shell: pwsh
|
||||
run: ./build.ps1 driver
|
||||
run: |
|
||||
./build.ps1 driver
|
||||
./build.ps1 wwwroot
|
||||
- name: Building...
|
||||
run: |
|
||||
dotnet build -f netstandard2.0 ./src/Playwright/Playwright.csproj
|
||||
|
|
|
@ -359,4 +359,6 @@ src/Playwright/Microsoft.Playwright.xml
|
|||
|
||||
dotnet-format/
|
||||
.runsettings
|
||||
testCert.cer
|
||||
testCert.cer
|
||||
|
||||
src/Playwright.Tests.TestServer/wwwroot/
|
10
build.ps1
|
@ -18,12 +18,14 @@ function Get-Help() {
|
|||
Write-Host " downloads the new driver."
|
||||
Write-Host " driver Downloads the driver."
|
||||
Write-Host " help Prints this message."
|
||||
Write-Host " wwwroot Copies over the wwwroot."
|
||||
}
|
||||
|
||||
function Invoke-Init() {
|
||||
Invoke-InitializeSubmodule
|
||||
if ($prereqs) { Invoke-InstallRequirements }
|
||||
Invoke-DownloadDriver
|
||||
Invoke-WWWRoot
|
||||
}
|
||||
|
||||
function Get-SubmoduleStatus() {
|
||||
|
@ -56,6 +58,12 @@ function Invoke-DownloadDriver() {
|
|||
dotnet run --project ./src/tools/Playwright.Tooling/Playwright.Tooling.csproj -- download-drivers --basepath .
|
||||
}
|
||||
|
||||
function Invoke-WWWRoot() {
|
||||
Write-Host "🌐 Synchronizing wwwroot folder..."
|
||||
Remove-Item -Path .\src\Playwright.Tests.TestServer\wwwroot\ -Recurse -ErrorAction Ignore
|
||||
Copy-Item -Path .\playwright\tests\assets -Destination .\src\Playwright.Tests.TestServer\wwwroot\ -Recurse
|
||||
}
|
||||
|
||||
function Invoke-Roll() {
|
||||
if ($verbs.Length -eq 2) {
|
||||
if ((Get-SubmoduleStatus).StartsWith("+")) {
|
||||
|
@ -94,6 +102,7 @@ function Invoke-Roll() {
|
|||
Write-Host "🚀 Generating API..."
|
||||
node "playwright/utils/doclint/generateDotnetApi.js" "src/Playwright"
|
||||
Invoke-DownloadDriver
|
||||
Invoke-WWWRoot
|
||||
}
|
||||
|
||||
if ($verbs.Length -eq 0) {
|
||||
|
@ -106,4 +115,5 @@ switch ($verbs[0]) {
|
|||
"help" { Get-Help }
|
||||
"roll" { Invoke-Roll }
|
||||
"driver" { Invoke-DownloadDriver }
|
||||
"wwwroot" { Invoke-WWWRoot }
|
||||
}
|
|
@ -18,4 +18,10 @@
|
|||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
<ItemGroup>
|
||||
<Folder Include="wwwroot\" />
|
||||
</ItemGroup>
|
||||
<Target Name="CheckWwwRootExists" BeforeTargets="Build">
|
||||
<Error Text="wwwroot prerequisites are missing. Ensure you've ran `.\build.ps1 wwwroot` from the root of the solution." Condition="!Exists('$(MSBuildProjectDirectory)\wwwroot\background-color.html')" />
|
||||
</Target>
|
||||
</Project>
|
|
@ -1,10 +0,0 @@
|
|||
<html>
|
||||
<script>
|
||||
function changeBackground() {
|
||||
const color = location.hash.substr(1);
|
||||
document.body.style.backgroundColor = color;
|
||||
}
|
||||
</script>
|
||||
<body onload='changeBackground()'>
|
||||
</body>
|
||||
</html>
|
|
@ -1,10 +0,0 @@
|
|||
<div>beforeunload demo.</div>
|
||||
<script>
|
||||
window.addEventListener('beforeunload', event => {
|
||||
// Chromium & WebKit way.
|
||||
event.returnValue = 'Leave?';
|
||||
// Firefox way.
|
||||
event.preventDefault();
|
||||
});
|
||||
</script>
|
||||
|
|
@ -1,39 +0,0 @@
|
|||
<style>
|
||||
* {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
iframe {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 500px;
|
||||
height: 500px;
|
||||
}
|
||||
|
||||
button {
|
||||
position: absolute;
|
||||
top: 150px;
|
||||
left: 150px;
|
||||
width: 200px;
|
||||
height: 200px;
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
window.addEventListener('DOMContentLoaded', () => {
|
||||
const iframe = document.createElement('iframe');
|
||||
const url = new URL(location.href);
|
||||
url.hostname = url.hostname === 'localhost' ? '127.0.0.1' : 'localhost';
|
||||
url.pathname = '/grid.html';
|
||||
iframe.src = url.toString();
|
||||
document.body.append(iframe);
|
||||
|
||||
const button = document.createElement('button');
|
||||
button.textContent = 'CLICK ME';
|
||||
button.addEventListener('click', () => {
|
||||
window.BUTTON_CLICKED = true;
|
||||
}, false);
|
||||
document.body.append(button);
|
||||
}, false);
|
||||
</script>
|
|
@ -1,3 +0,0 @@
|
|||
body {
|
||||
background-color: pink;
|
||||
}
|
|
@ -1,2 +0,0 @@
|
|||
<link rel='stylesheet' href='./one-style.css'>
|
||||
<div>hello, world!</div>
|
|
@ -1,43 +0,0 @@
|
|||
<html>
|
||||
<script>
|
||||
function changeBackground() {
|
||||
const color = location.hash.substr(1);
|
||||
document.body.style.backgroundColor = color;
|
||||
}
|
||||
</script>
|
||||
<style>
|
||||
body {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.container {
|
||||
display: grid;
|
||||
background-color: rgb(0, 0, 0);
|
||||
grid-template-columns: auto auto;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.cell {
|
||||
border: none;
|
||||
font-size: 30px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.cell.grey {
|
||||
background-color: rgb(100, 100, 100);
|
||||
}
|
||||
|
||||
.cell.red {
|
||||
background-color: rgb(255, 0, 0);
|
||||
}
|
||||
</style>
|
||||
<body>
|
||||
<div class="container">
|
||||
<div class="cell red"></div>
|
||||
<div class="cell grey"></div>
|
||||
<div class="cell grey"></div>
|
||||
<div class="cell red"></div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
Двоичные данные
src/Playwright.Tests.TestServer/wwwroot/chromium-linux.zip
|
@ -1,11 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>console.log test</title>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
console.log('yellow')
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -1 +0,0 @@
|
|||
<meta http-equiv="Content-Security-Policy" content="default-src 'self'">
|
|
@ -1,95 +0,0 @@
|
|||
Copyright (c) 2011, Edgar Tolentino and Pablo Impallari (www.impallari.com|impallari@gmail.com),
|
||||
Copyright (c) 2011, Igino Marini. (www.ikern.com|mail@iginomarini.com),
|
||||
with Reserved Font Names "Dosis".
|
||||
|
||||
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||
This license is copied below, and is also available with a FAQ at:
|
||||
http://scripts.sil.org/OFL
|
||||
|
||||
|
||||
-----------------------------------------------------------
|
||||
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||
-----------------------------------------------------------
|
||||
|
||||
PREAMBLE
|
||||
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||
development of collaborative font projects, to support the font creation
|
||||
efforts of academic and linguistic communities, and to provide a free and
|
||||
open framework in which fonts may be shared and improved in partnership
|
||||
with others.
|
||||
|
||||
The OFL allows the licensed fonts to be used, studied, modified and
|
||||
redistributed freely as long as they are not sold by themselves. The
|
||||
fonts, including any derivative works, can be bundled, embedded,
|
||||
redistributed and/or sold with any software provided that any reserved
|
||||
names are not used by derivative works. The fonts and derivatives,
|
||||
however, cannot be released under any other type of license. The
|
||||
requirement for fonts to remain under this license does not apply
|
||||
to any document created using the fonts or their derivatives.
|
||||
|
||||
DEFINITIONS
|
||||
"Font Software" refers to the set of files released by the Copyright
|
||||
Holder(s) under this license and clearly marked as such. This may
|
||||
include source files, build scripts and documentation.
|
||||
|
||||
"Reserved Font Name" refers to any names specified as such after the
|
||||
copyright statement(s).
|
||||
|
||||
"Original Version" refers to the collection of Font Software components as
|
||||
distributed by the Copyright Holder(s).
|
||||
|
||||
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||
or substituting -- in part or in whole -- any of the components of the
|
||||
Original Version, by changing formats or by porting the Font Software to a
|
||||
new environment.
|
||||
|
||||
"Author" refers to any designer, engineer, programmer, technical
|
||||
writer or other person who contributed to the Font Software.
|
||||
|
||||
PERMISSION & CONDITIONS
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||
redistribute, and sell modified and unmodified copies of the Font
|
||||
Software, subject to the following conditions:
|
||||
|
||||
1) Neither the Font Software nor any of its individual components,
|
||||
in Original or Modified Versions, may be sold by itself.
|
||||
|
||||
2) Original or Modified Versions of the Font Software may be bundled,
|
||||
redistributed and/or sold with any software, provided that each copy
|
||||
contains the above copyright notice and this license. These can be
|
||||
included either as stand-alone text files, human-readable headers or
|
||||
in the appropriate machine-readable metadata fields within text or
|
||||
binary files as long as those fields can be easily viewed by the user.
|
||||
|
||||
3) No Modified Version of the Font Software may use the Reserved Font
|
||||
Name(s) unless explicit written permission is granted by the corresponding
|
||||
Copyright Holder. This restriction only applies to the primary font name as
|
||||
presented to the users.
|
||||
|
||||
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||
Software shall not be used to promote, endorse or advertise any
|
||||
Modified Version, except to acknowledge the contribution(s) of the
|
||||
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||
permission.
|
||||
|
||||
5) The Font Software, modified or unmodified, in part or in whole,
|
||||
must be distributed entirely under this license, and must not be
|
||||
distributed under any other license. The requirement for fonts to
|
||||
remain under this license does not apply to any document created
|
||||
using the Font Software.
|
||||
|
||||
TERMINATION
|
||||
This license becomes null and void if any of the above conditions are
|
||||
not met.
|
||||
|
||||
DISCLAIMER
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||
OTHER DEALINGS IN THE FONT SOFTWARE.
|
|
@ -1,26 +0,0 @@
|
|||
<style>
|
||||
@charset "utf-8";
|
||||
@namespace svg url(http://www.w3.org/2000/svg);
|
||||
@font-face {
|
||||
font-family: "Example Font";
|
||||
src: url("./Dosis-Regular.ttf");
|
||||
}
|
||||
|
||||
#fluffy {
|
||||
border: 1px solid black;
|
||||
z-index: 1;
|
||||
/* -webkit-disabled-property: rgb(1, 2, 3) */
|
||||
-lol-cats: "dogs" /* non-existing property */
|
||||
}
|
||||
|
||||
@media (min-width: 1px) {
|
||||
span {
|
||||
-webkit-border-radius: 10px;
|
||||
font-family: "Example Font";
|
||||
animation: 1s identifier;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<div id="fluffy">woof!</div>
|
||||
<span>fancy text</span>
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
<style>
|
||||
@media screen { div { color: green; } } </style>
|
||||
<div>hello, world</div>
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
<link rel="stylesheet" href="stylesheet1.css">
|
||||
<link rel="stylesheet" href="stylesheet2.css">
|
||||
<script>
|
||||
window.addEventListener('DOMContentLoaded', () => {
|
||||
// Force stylesheets to load.
|
||||
console.log(window.getComputedStyle(document.body).color);
|
||||
}, false);
|
||||
</script>
|
|
@ -1,6 +0,0 @@
|
|||
<style>
|
||||
div { color: green; }
|
||||
a { color: blue; }
|
||||
</style>
|
||||
<div>hello, world</div>
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
<style>
|
||||
body {
|
||||
padding: 10px;
|
||||
}
|
||||
/*# sourceURL=nicename.css */
|
||||
</style>
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
body {
|
||||
color: red;
|
||||
}
|
|
@ -1,4 +0,0 @@
|
|||
html {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
|
@ -1,7 +0,0 @@
|
|||
<style>
|
||||
@media screen {
|
||||
a { color: green; }
|
||||
}
|
||||
/*# sourceURL=unused.css */
|
||||
</style>
|
||||
|
|
@ -1,36 +0,0 @@
|
|||
<script>
|
||||
window.addEventListener('DOMContentLoaded', () => {
|
||||
const outer = document.createElement('section');
|
||||
document.body.appendChild(outer);
|
||||
|
||||
const root1 = document.createElement('div');
|
||||
root1.setAttribute('id', 'root1');
|
||||
outer.appendChild(root1);
|
||||
const shadowRoot1 = root1.attachShadow({mode: 'open'});
|
||||
const span1 = document.createElement('span');
|
||||
span1.setAttribute('data-testid', 'foo');
|
||||
span1.textContent = 'Hello from root1';
|
||||
shadowRoot1.appendChild(span1);
|
||||
|
||||
const root2 = document.createElement('div');
|
||||
shadowRoot1.appendChild(root2);
|
||||
const shadowRoot2 = root2.attachShadow({mode: 'open'});
|
||||
const span2 = document.createElement('span');
|
||||
span2.setAttribute('data-testid', 'foo');
|
||||
span2.setAttribute('id', 'target');
|
||||
span2.textContent = 'Hello from root2';
|
||||
shadowRoot2.appendChild(span2);
|
||||
|
||||
const root3 = document.createElement('div');
|
||||
shadowRoot1.appendChild(root3);
|
||||
const shadowRoot3 = root3.attachShadow({mode: 'open'});
|
||||
const span3 = document.createElement('span');
|
||||
span3.setAttribute('data-testid', 'foo');
|
||||
span3.textContent = 'Hello from root3';
|
||||
shadowRoot3.appendChild(span3);
|
||||
const span4 = document.createElement('span');
|
||||
span4.textContent = 'Hello from root3 #2';
|
||||
span4.setAttribute('attr', 'value space');
|
||||
shadowRoot3.appendChild(span4);
|
||||
});
|
||||
</script>
|
|
@ -1,12 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Detect Touch Test</title>
|
||||
<script src='modernizr.js'></script>
|
||||
</head>
|
||||
<body style="font-size:30vmin">
|
||||
<script>
|
||||
document.body.textContent = Modernizr.touchevents ? 'YES' : 'NO';
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
Двоичные данные
src/Playwright.Tests.TestServer/wwwroot/digits/0.png
До Ширина: | Высота: | Размер: 434 B |
Двоичные данные
src/Playwright.Tests.TestServer/wwwroot/digits/1.png
До Ширина: | Высота: | Размер: 346 B |
Двоичные данные
src/Playwright.Tests.TestServer/wwwroot/digits/2.png
До Ширина: | Высота: | Размер: 413 B |
Двоичные данные
src/Playwright.Tests.TestServer/wwwroot/digits/3.png
До Ширина: | Высота: | Размер: 434 B |
Двоичные данные
src/Playwright.Tests.TestServer/wwwroot/digits/4.png
До Ширина: | Высота: | Размер: 403 B |
Двоичные данные
src/Playwright.Tests.TestServer/wwwroot/digits/5.png
До Ширина: | Высота: | Размер: 422 B |
Двоичные данные
src/Playwright.Tests.TestServer/wwwroot/digits/6.png
До Ширина: | Высота: | Размер: 445 B |
Двоичные данные
src/Playwright.Tests.TestServer/wwwroot/digits/7.png
До Ширина: | Высота: | Размер: 387 B |
Двоичные данные
src/Playwright.Tests.TestServer/wwwroot/digits/8.png
До Ширина: | Высота: | Размер: 447 B |
Двоичные данные
src/Playwright.Tests.TestServer/wwwroot/digits/9.png
До Ширина: | Высота: | Размер: 437 B |
|
@ -1,5 +0,0 @@
|
|||
<div id="outer" name="value"><div id="inner">Text,
|
||||
more text</div></div><input id="check" type=checkbox checked foo="bar"">
|
||||
<input id="input"></input>
|
||||
<textarea id="textarea"></textarea>
|
||||
<select id="select"><option></option><option value="foo"></option></select>
|
|
@ -1,29 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Blob Download Example</title>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
const download = (data, filename) => {
|
||||
const a = document.createElement("a");
|
||||
a.style = "display: none";
|
||||
document.body.appendChild(a);
|
||||
a.style = "display: none";
|
||||
|
||||
const blob = new Blob([data], { type: "octet/stream" });
|
||||
const url = window.URL.createObjectURL(blob);
|
||||
a.href = url;
|
||||
a.download = filename;
|
||||
a.click();
|
||||
window.URL.revokeObjectURL(url);
|
||||
document.body.removeChild(a);
|
||||
};
|
||||
|
||||
const downloadIt = () => {
|
||||
download("Hello world", "example.txt");
|
||||
}
|
||||
</script>
|
||||
<a onclick="javascipt:downloadIt();">Download</a>
|
||||
</body>
|
||||
</html>
|
|
@ -1,40 +0,0 @@
|
|||
<style>
|
||||
div:not(.mouse-helper) {
|
||||
margin: 0em;
|
||||
padding: 2em;
|
||||
}
|
||||
#source {
|
||||
color: blue;
|
||||
border: 1px solid black;
|
||||
}
|
||||
#target {
|
||||
border: 1px solid black;
|
||||
}
|
||||
</style>
|
||||
|
||||
<script>
|
||||
|
||||
function dragstart_handler(ev) {
|
||||
ev.currentTarget.style.border = "dashed";
|
||||
ev.dataTransfer.setData("text/plain", ev.target.id);
|
||||
}
|
||||
|
||||
function dragover_handler(ev) {
|
||||
ev.preventDefault();
|
||||
}
|
||||
|
||||
function drop_handler(ev) {
|
||||
console.log("Drop");
|
||||
ev.preventDefault();
|
||||
var data = ev.dataTransfer.getData("text");
|
||||
ev.target.appendChild(document.getElementById(data));
|
||||
}
|
||||
</script>
|
||||
|
||||
<body>
|
||||
<div>
|
||||
<p id="source" ondragstart="dragstart_handler(event);" draggable="true">
|
||||
Select this element, drag it to the Drop Zone and then release the selection to move the element.</p>
|
||||
</div>
|
||||
<div id="target" ondrop="drop_handler(event);" ondragover="dragover_handler(event);">Drop Zone</div>
|
||||
</body>
|
|
@ -1,3 +0,0 @@
|
|||
#!/usr/bin/env node
|
||||
|
||||
process.exit(1);
|
|
@ -1,31 +0,0 @@
|
|||
<style>
|
||||
body, html {
|
||||
margin: 0;
|
||||
}
|
||||
iframe {
|
||||
width: 300px;
|
||||
height: 300px;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
function goLocal() {
|
||||
document.querySelector('iframe').src = location.href.replace('dynamic-oopif.html', 'grid.html');
|
||||
}
|
||||
|
||||
function goRemote(iframe) {
|
||||
iframe = iframe || document.querySelector('iframe');
|
||||
const url = new URL(location.href);
|
||||
url.hostname = url.hostname === 'localhost' ? '127.0.0.1' : 'localhost';
|
||||
url.pathname = '/grid.html';
|
||||
iframe.src = url.toString();
|
||||
}
|
||||
|
||||
window.addEventListener('DOMContentLoaded', () => {
|
||||
const iframe = document.createElement('iframe');
|
||||
goRemote(iframe);
|
||||
document.body.appendChild(iframe);
|
||||
}, false);
|
||||
</script>
|
|
@ -1,17 +0,0 @@
|
|||
<script>
|
||||
console.error('Not a JS error');
|
||||
a();
|
||||
|
||||
function a() {
|
||||
b();
|
||||
}
|
||||
|
||||
function b() {
|
||||
c();
|
||||
}
|
||||
|
||||
function c() {
|
||||
throw new Error('Fancy error!');
|
||||
}
|
||||
//# sourceURL=myscript.js
|
||||
</script>
|
|
@ -1,5 +0,0 @@
|
|||
{
|
||||
"parserOptions": {
|
||||
"sourceType": "module"
|
||||
}
|
||||
}
|
|
@ -1,2 +0,0 @@
|
|||
import num from './es6module.js';
|
||||
window.__es6injected = num;
|
|
@ -1 +0,0 @@
|
|||
export default 42;
|
|
@ -1,2 +0,0 @@
|
|||
import num from './es6/es6module.js';
|
||||
window.__es6injected = num;
|
|
@ -1 +0,0 @@
|
|||
contents of the file
|
|
@ -1,4 +0,0 @@
|
|||
<script>
|
||||
window.result = (1000000.50).toLocaleString().replace(/\s/g, ' ');
|
||||
window.initialNavigatorLanguage = navigator.language;
|
||||
</script>
|
|
@ -1 +0,0 @@
|
|||
<iframe src='./redirect-my-parent.html'></iframe>
|
|
@ -1,15 +0,0 @@
|
|||
<link rel='stylesheet' href='./style.css'>
|
||||
<script src='./script.js' type='text/javascript'></script>
|
||||
<style>
|
||||
body {
|
||||
height: 100px;
|
||||
margin: 8px;
|
||||
border: 0;
|
||||
background-color: #555;
|
||||
|
||||
}
|
||||
div {
|
||||
line-height: 18px;
|
||||
}
|
||||
</style>
|
||||
<div>Hi, I'm frame</div>
|
|
@ -1,8 +0,0 @@
|
|||
<frameset>
|
||||
<frameset>
|
||||
<frame src='./frame.html'></frame>
|
||||
<frame src='about:blank'></frame>
|
||||
</frameset>
|
||||
<frame src='/empty.html'></frame>
|
||||
<frame></frame>
|
||||
</frameset>
|
|
@ -1,6 +0,0 @@
|
|||
<div style="height: 1000px; width: 1000px; background: red">One</div>
|
||||
<div style="height: 1000px; width: 1000px; background: blue">Two</div>
|
||||
<div style="height: 1000px; width: 1000px; background: red">Three</div>
|
||||
<div style="height: 1000px; width: 1000px; background: blue">Four</div>
|
||||
<div style="height: 1000px; width: 1000px; background: red">Five</div>
|
||||
<iframe loading="lazy" src='./frame.html'></iframe>
|
|
@ -1,30 +0,0 @@
|
|||
<style>
|
||||
body {
|
||||
display: flex;
|
||||
height: 500px;
|
||||
margin: 8px;
|
||||
}
|
||||
|
||||
body iframe {
|
||||
flex-grow: 1;
|
||||
flex-shrink: 1;
|
||||
border: 0;
|
||||
background-color: green;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar{
|
||||
display: none;
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
async function attachFrame(frameId, url) {
|
||||
var frame = document.createElement('iframe');
|
||||
frame.src = url;
|
||||
frame.id = frameId;
|
||||
document.body.appendChild(frame);
|
||||
await new Promise(x => frame.onload = x);
|
||||
return 'kazakh';
|
||||
}
|
||||
</script>
|
||||
<iframe src='./two-frames.html' name='2frames'></iframe>
|
||||
<iframe src='./frame.html' name='aframe'></iframe>
|
|
@ -1 +0,0 @@
|
|||
<iframe src='./frame.html'></iframe>
|
|
@ -1,3 +0,0 @@
|
|||
<script>
|
||||
window.parent.location = './one-frame.html';
|
||||
</script>
|
|
@ -1 +0,0 @@
|
|||
console.log('Cheers!');
|
|
@ -1,3 +0,0 @@
|
|||
div {
|
||||
color: blue;
|
||||
}
|
|
@ -1,16 +0,0 @@
|
|||
<style>
|
||||
body {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: 400px;
|
||||
margin: 8px;
|
||||
}
|
||||
|
||||
body iframe {
|
||||
flex-grow: 1;
|
||||
flex-shrink: 1;
|
||||
border: 0;
|
||||
}
|
||||
</style>
|
||||
<iframe src='./frame.html' name='uno'></iframe>
|
||||
<iframe src='./frame.html' name='dos'></iframe>
|
|
@ -1,7 +0,0 @@
|
|||
<script>
|
||||
window.geolocationPromise = new Promise(resolve => {
|
||||
navigator.geolocation.getCurrentPosition(position => {
|
||||
resolve({latitude: position.coords.latitude, longitude: position.coords.longitude});
|
||||
});
|
||||
});
|
||||
</script>
|
|
@ -1,3 +0,0 @@
|
|||
<script>
|
||||
var globalVar = 123;
|
||||
</script>
|
|
@ -1,16 +0,0 @@
|
|||
<style>
|
||||
body, html {
|
||||
margin: 0;
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
window.addEventListener('DOMContentLoaded', () => {
|
||||
const container = document.createElement('div');
|
||||
document.body.appendChild(container);
|
||||
const shadow = container.attachShadow({mode: 'open'});
|
||||
const iframe = document.createElement('iframe');
|
||||
iframe.src = './grid.html';
|
||||
iframe.style.cssText = 'width: 300px; height: 300px; margin: 0; padding: 0; border: 0;';
|
||||
shadow.appendChild(iframe);
|
||||
});
|
||||
</script>
|
|
@ -1,62 +0,0 @@
|
|||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
function generatePalette(amount) {
|
||||
var result = [];
|
||||
var hueStep = 360 / amount;
|
||||
for (var i = 0; i < amount; ++i)
|
||||
result.push('hsl(' + (hueStep * i) + ', 100%, 90%)');
|
||||
return result;
|
||||
}
|
||||
|
||||
var palette = generatePalette(100);
|
||||
for (var i = 0; i < 200; ++i) {
|
||||
var box = document.createElement('div');
|
||||
box.classList.add('box');
|
||||
box.style.setProperty('background-color', palette[i % palette.length]);
|
||||
var x = i;
|
||||
do {
|
||||
var digit = x % 10;
|
||||
x = (x / 10)|0;
|
||||
var img = document.createElement('img');
|
||||
img.src = `./digits/${digit}.png`;
|
||||
box.insertBefore(img, box.firstChild);
|
||||
} while (x);
|
||||
document.body.appendChild(box);
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<style>
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.box {
|
||||
font-family: arial;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
box-sizing: border-box;
|
||||
border: 1px solid darkgray;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar {
|
||||
display: none;
|
||||
}
|
||||
|
||||
@keyframes move {
|
||||
from { left: -500px; background-color: cyan; }
|
||||
to { left: 0; background-color: rgb(255, 210, 204); }
|
||||
}
|
||||
.box.animation {
|
||||
position: relative;
|
||||
animation: 2s linear 0s move forwards;
|
||||
}
|
||||
|
||||
</style>
|
|
@ -1,3 +0,0 @@
|
|||
<title>HAR Page</title>
|
||||
<link rel='stylesheet' href='./one-style.css'>
|
||||
<div>hello, world!</div>
|
|
@ -1,7 +0,0 @@
|
|||
<style>
|
||||
html { background-image: url(image1x.jpg); }
|
||||
|
||||
@media(-webkit-min-device-pixel-ratio: 1.5) {
|
||||
html { background-image: url(image2x.jpg); }
|
||||
}
|
||||
</style>
|
|
@ -1,5 +0,0 @@
|
|||
<script>
|
||||
window.addEventListener('DOMContentLoaded', () => {
|
||||
history.pushState({}, '', '#1');
|
||||
});
|
||||
</script>
|
|
@ -1,3 +0,0 @@
|
|||
window.__injected = 42;
|
||||
window.injected = 123;
|
||||
window.__injectedError = new Error('hi');
|
|
@ -1,3 +0,0 @@
|
|||
body {
|
||||
background-color: red;
|
||||
}
|
|
@ -1,42 +0,0 @@
|
|||
<style>
|
||||
body, html { margin: 0; padding: 0; }
|
||||
@keyframes move {
|
||||
from { marign-left: 0; }
|
||||
to { margin-left: 100px; }
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
function addButton() {
|
||||
const button = document.createElement('button');
|
||||
button.textContent = 'Click me';
|
||||
button.style.animation = '3s linear move';
|
||||
button.style.animationIterationCount = 'infinite';
|
||||
button.addEventListener('click', () => window.clicked = true);
|
||||
document.body.appendChild(button);
|
||||
}
|
||||
|
||||
function stopButton(remove) {
|
||||
const button = document.querySelector('button');
|
||||
button.style.marginLeft = button.getBoundingClientRect().left + 'px';
|
||||
button.style.animation = '';
|
||||
if (remove)
|
||||
button.remove();
|
||||
}
|
||||
|
||||
let x = 0;
|
||||
function jump() {
|
||||
x += 300;
|
||||
const button = document.querySelector('button');
|
||||
button.style.marginLeft = x + 'px';
|
||||
}
|
||||
|
||||
function startJumping() {
|
||||
x = 0;
|
||||
const moveIt = () => {
|
||||
jump();
|
||||
requestAnimationFrame(moveIt);
|
||||
};
|
||||
setInterval(jump, 0);
|
||||
moveIt();
|
||||
}
|
||||
</script>
|
|
@ -1,32 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Button test</title>
|
||||
</head>
|
||||
<body>
|
||||
<script src="mouse-helper.js"></script>
|
||||
<button>Click target</button>
|
||||
<script>
|
||||
window.result = 'Was not clicked';
|
||||
window.offsetX = undefined;
|
||||
window.offsetY = undefined;
|
||||
window.pageX = undefined;
|
||||
window.pageY = undefined;
|
||||
window.shiftKey = undefined;
|
||||
window.pageX = undefined;
|
||||
window.pageY = undefined;
|
||||
window.bubbles = undefined;
|
||||
document.querySelector('button').addEventListener('click', e => {
|
||||
result = 'Clicked';
|
||||
offsetX = e.offsetX;
|
||||
offsetY = e.offsetY;
|
||||
pageX = e.pageX;
|
||||
pageY = e.pageY;
|
||||
shiftKey = e.shiftKey;
|
||||
bubbles = e.bubbles;
|
||||
cancelable = e.cancelable;
|
||||
composed = e.composed;
|
||||
}, false);
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -1,42 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Selection Test</title>
|
||||
</head>
|
||||
<body>
|
||||
<label for="agree">Remember Me</label>
|
||||
<input id="agree" type="checkbox">
|
||||
<script>
|
||||
window.result = {
|
||||
check: null,
|
||||
events: [],
|
||||
};
|
||||
|
||||
let checkbox = document.querySelector('input');
|
||||
|
||||
const events = [
|
||||
'change',
|
||||
'click',
|
||||
'dblclick',
|
||||
'input',
|
||||
'mousedown',
|
||||
'mouseenter',
|
||||
'mouseleave',
|
||||
'mousemove',
|
||||
'mouseout',
|
||||
'mouseover',
|
||||
'mouseup',
|
||||
];
|
||||
|
||||
for (let event of events) {
|
||||
checkbox.addEventListener(event, () => {
|
||||
if (['change', 'click', 'dblclick', 'input'].includes(event) === true) {
|
||||
result.check = checkbox.checked;
|
||||
}
|
||||
|
||||
result.events.push(event);
|
||||
}, false);
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -1,12 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>File upload test</title>
|
||||
</head>
|
||||
<body>
|
||||
<form action="/input/fileupload.html">
|
||||
<input type="file">
|
||||
<input type="submit">
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
|
@ -1,42 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Keyboard test</title>
|
||||
</head>
|
||||
<body>
|
||||
<textarea></textarea>
|
||||
<script>
|
||||
window.result = "";
|
||||
let textarea = document.querySelector('textarea');
|
||||
textarea.focus();
|
||||
textarea.addEventListener('keydown', event => {
|
||||
log('Keydown:', event.key, event.code, event.which, modifiers(event));
|
||||
});
|
||||
textarea.addEventListener('keypress', event => {
|
||||
log('Keypress:', event.key, event.code, event.which, event.charCode, modifiers(event));
|
||||
});
|
||||
textarea.addEventListener('keyup', event => {
|
||||
log('Keyup:', event.key, event.code, event.which, modifiers(event));
|
||||
});
|
||||
function modifiers(event) {
|
||||
let m = [];
|
||||
if (event.altKey)
|
||||
m.push('Alt')
|
||||
if (event.ctrlKey)
|
||||
m.push('Control');
|
||||
if (event.shiftKey)
|
||||
m.push('Shift')
|
||||
return '[' + m.join(' ') + ']';
|
||||
}
|
||||
function log(...args) {
|
||||
console.log.apply(console, args);
|
||||
result += args.join(' ') + '\n';
|
||||
}
|
||||
function getResult() {
|
||||
let temp = result.trim();
|
||||
result = "";
|
||||
return temp;
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -1,62 +0,0 @@
|
|||
// This injects a box into the page that moves with the mouse;
|
||||
// Useful for debugging
|
||||
(function(){
|
||||
const box = document.createElement('div');
|
||||
box.classList.add('mouse-helper');
|
||||
const styleElement = document.createElement('style');
|
||||
styleElement.innerHTML = `
|
||||
.mouse-helper {
|
||||
pointer-events: none;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
background: rgba(0,0,0,.4);
|
||||
border: 1px solid white;
|
||||
border-radius: 10px;
|
||||
margin-left: -10px;
|
||||
margin-top: -10px;
|
||||
transition: background .2s, border-radius .2s, border-color .2s;
|
||||
}
|
||||
.mouse-helper.button-1 {
|
||||
transition: none;
|
||||
background: rgba(0,0,0,0.9);
|
||||
}
|
||||
.mouse-helper.button-2 {
|
||||
transition: none;
|
||||
border-color: rgba(0,0,255,0.9);
|
||||
}
|
||||
.mouse-helper.button-3 {
|
||||
transition: none;
|
||||
border-radius: 4px;
|
||||
}
|
||||
.mouse-helper.button-4 {
|
||||
transition: none;
|
||||
border-color: rgba(255,0,0,0.9);
|
||||
}
|
||||
.mouse-helper.button-5 {
|
||||
transition: none;
|
||||
border-color: rgba(0,255,0,0.9);
|
||||
}
|
||||
`;
|
||||
document.head.appendChild(styleElement);
|
||||
document.body.appendChild(box);
|
||||
document.addEventListener('mousemove', event => {
|
||||
box.style.left = event.pageX + 'px';
|
||||
box.style.top = event.pageY + 'px';
|
||||
updateButtons(event.buttons);
|
||||
}, true);
|
||||
document.addEventListener('mousedown', event => {
|
||||
updateButtons(event.buttons);
|
||||
box.classList.add('button-' + event.which);
|
||||
}, true);
|
||||
document.addEventListener('mouseup', event => {
|
||||
updateButtons(event.buttons);
|
||||
box.classList.remove('button-' + event.which);
|
||||
}, true);
|
||||
function updateButtons(buttons) {
|
||||
for (let i = 0; i < 5; i++)
|
||||
box.classList.toggle('button-' + i, buttons & (1 << i));
|
||||
}
|
||||
})();
|
|
@ -1,21 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Rotated button test</title>
|
||||
</head>
|
||||
<body>
|
||||
<script src="mouse-helper.js"></script>
|
||||
<button onclick="clicked();">Click target</button>
|
||||
<style>
|
||||
button {
|
||||
transform: rotateY(180deg);
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
window.result = 'Was not clicked';
|
||||
function clicked() {
|
||||
result = 'Clicked';
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -1,23 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Scrollable test</title>
|
||||
</head>
|
||||
<body>
|
||||
<script src='mouse-helper.js'></script>
|
||||
<script>
|
||||
for (let i = 0; i < 100; i++) {
|
||||
let button = document.createElement('button');
|
||||
button.textContent = i + ': not clicked';
|
||||
button.id = 'button-' + i;
|
||||
button.onclick = () => button.textContent = 'clicked';
|
||||
button.oncontextmenu = event => {
|
||||
event.preventDefault();
|
||||
button.textContent = 'context menu';
|
||||
}
|
||||
document.body.appendChild(button);
|
||||
document.body.appendChild(document.createElement('br'));
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -1,69 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Selection Test</title>
|
||||
</head>
|
||||
<body>
|
||||
<select>
|
||||
<option value="black">Black</option>
|
||||
<option value="blue">Blue</option>
|
||||
<option value="brown">Brown</option>
|
||||
<option value="cyan">Cyan</option>
|
||||
<option value="gray">Gray</option>
|
||||
<option value="green">Green</option>
|
||||
<option value="indigo">Indigo</option>
|
||||
<option value="magenta">Magenta</option>
|
||||
<option value="orange">Orange</option>
|
||||
<option value="pink">Pink</option>
|
||||
<option value="purple">Purple</option>
|
||||
<option value="red">Red</option>
|
||||
<option value="violet">Violet</option>
|
||||
<option value="white" id="whiteOption">White</option>
|
||||
<option value="yellow">Yellow</option>
|
||||
</select>
|
||||
<script>
|
||||
window.result = {
|
||||
onInput: null,
|
||||
onChange: null,
|
||||
onBubblingChange: null,
|
||||
onBubblingInput: null,
|
||||
};
|
||||
|
||||
let select = document.querySelector('select');
|
||||
|
||||
function makeEmpty() {
|
||||
for (let i = select.options.length - 1; i >= 0; --i) {
|
||||
select.remove(i);
|
||||
}
|
||||
}
|
||||
|
||||
function makeMultiple() {
|
||||
select.setAttribute('multiple', true);
|
||||
}
|
||||
|
||||
select.addEventListener('input', () => {
|
||||
result.onInput = Array.from(select.querySelectorAll('option:checked')).map((option) => {
|
||||
return option.value;
|
||||
});
|
||||
}, false);
|
||||
|
||||
select.addEventListener('change', () => {
|
||||
result.onChange = Array.from(select.querySelectorAll('option:checked')).map((option) => {
|
||||
return option.value;
|
||||
});
|
||||
}, false);
|
||||
|
||||
document.body.addEventListener('input', () => {
|
||||
result.onBubblingInput = Array.from(select.querySelectorAll('option:checked')).map((option) => {
|
||||
return option.value;
|
||||
});
|
||||
}, false);
|
||||
|
||||
document.body.addEventListener('change', () => {
|
||||
result.onBubblingChange = Array.from(select.querySelectorAll('option:checked')).map((option) => {
|
||||
return option.value;
|
||||
});
|
||||
}, false);
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -1,20 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Textarea test</title>
|
||||
</head>
|
||||
<body>
|
||||
<textarea spellcheck="false"></textarea>
|
||||
<input></input>
|
||||
<div contenteditable="true"></div>
|
||||
<div class="plain">Plain div</div>
|
||||
<script src='mouse-helper.js'></script>
|
||||
<script>
|
||||
window.result = '';
|
||||
let textarea = document.querySelector('textarea');
|
||||
textarea.addEventListener('input', () => result = textarea.value, false);
|
||||
let input = document.querySelector('input');
|
||||
input.addEventListener('input', () => result = input.value, false);
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -1,35 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Touch test</title>
|
||||
</head>
|
||||
<body>
|
||||
<script src="mouse-helper.js"></script>
|
||||
<button onclick="clicked();">Click target</button>
|
||||
<script>
|
||||
window.result = [];
|
||||
const button = document.querySelector('button');
|
||||
button.style.height = '200px';
|
||||
button.style.width = '200px';
|
||||
button.focus();
|
||||
button.addEventListener('touchstart', event => {
|
||||
log('Touchstart:', ...Array.from(event.changedTouches).map(touch => touch.identifier));
|
||||
});
|
||||
button.addEventListener('touchend', event => {
|
||||
log('Touchend:', ...Array.from(event.changedTouches).map(touch => touch.identifier));
|
||||
});
|
||||
button.addEventListener('touchmove', event => {
|
||||
log('Touchmove:', ...Array.from(event.changedTouches).map(touch => touch.identifier));
|
||||
});
|
||||
function log(...args) {
|
||||
console.log.apply(console, args);
|
||||
result.push(args.join(' '));
|
||||
}
|
||||
function getResult() {
|
||||
let temp = result;
|
||||
result = [];
|
||||
return temp;
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -1 +0,0 @@
|
|||
<script>eval('console.log("foo")')</script>
|
|
@ -1,15 +0,0 @@
|
|||
<script>
|
||||
function foo() {
|
||||
if (1 > 2)
|
||||
console.log(1);
|
||||
if (1 < 2)
|
||||
console.log(2);
|
||||
let x = 1 > 2 ? 'foo' : 'bar';
|
||||
let y = 1 < 2 ? 'foo' : 'bar';
|
||||
let z = () => {};
|
||||
let q = () => {};
|
||||
q();
|
||||
}
|
||||
|
||||
foo();
|
||||
</script>
|
|
@ -1,2 +0,0 @@
|
|||
<script src='script1.js'></script>
|
||||
<script src='script2.js'></script>
|
|
@ -1,2 +0,0 @@
|
|||
<script>
|
||||
function unused(){}console.log('used!');</script>
|
|
@ -1 +0,0 @@
|
|||
console.log(3);
|
|
@ -1 +0,0 @@
|
|||
console.log(3);
|
|
@ -1,2 +0,0 @@
|
|||
<script>
|
||||
function foo() {function bar() { } console.log(1); } foo(); </script>
|
|
@ -1,4 +0,0 @@
|
|||
<script>
|
||||
console.log(1);
|
||||
//# sourceURL=nicename.js
|
||||
</script>
|
|
@ -1 +0,0 @@
|
|||
<script>function foo() { }</script>
|
|
@ -1 +0,0 @@
|
|||
<meta name = "viewport" content = "initial-scale = 1, user-scalable = no">
|
|
@ -1,3 +0,0 @@
|
|||
/*! modernizr 3.5.0 (Custom Build) | MIT *
|
||||
* https://modernizr.com/download/?-touchevents-setclasses !*/
|
||||
!function(e,n,t){function o(e,n){return typeof e===n}function s(){var e,n,t,s,a,i,r;for(var l in c)if(c.hasOwnProperty(l)){if(e=[],n=c[l],n.name&&(e.push(n.name.toLowerCase()),n.options&&n.options.aliases&&n.options.aliases.length))for(t=0;t<n.options.aliases.length;t++)e.push(n.options.aliases[t].toLowerCase());for(s=o(n.fn,"function")?n.fn():n.fn,a=0;a<e.length;a++)i=e[a],r=i.split("."),1===r.length?Modernizr[r[0]]=s:(!Modernizr[r[0]]||Modernizr[r[0]]instanceof Boolean||(Modernizr[r[0]]=new Boolean(Modernizr[r[0]])),Modernizr[r[0]][r[1]]=s),f.push((s?"":"no-")+r.join("-"))}}function a(e){var n=u.className,t=Modernizr._config.classPrefix||"";if(p&&(n=n.baseVal),Modernizr._config.enableJSClass){var o=new RegExp("(^|\\s)"+t+"no-js(\\s|$)");n=n.replace(o,"$1"+t+"js$2")}Modernizr._config.enableClasses&&(n+=" "+t+e.join(" "+t),p?u.className.baseVal=n:u.className=n)}function i(){return"function"!=typeof n.createElement?n.createElement(arguments[0]):p?n.createElementNS.call(n,"http://www.w3.org/2000/svg",arguments[0]):n.createElement.apply(n,arguments)}function r(){var e=n.body;return e||(e=i(p?"svg":"body"),e.fake=!0),e}function l(e,t,o,s){var a,l,f,c,d="modernizr",p=i("div"),h=r();if(parseInt(o,10))for(;o--;)f=i("div"),f.id=s?s[o]:d+(o+1),p.appendChild(f);return a=i("style"),a.type="text/css",a.id="s"+d,(h.fake?h:p).appendChild(a),h.appendChild(p),a.styleSheet?a.styleSheet.cssText=e:a.appendChild(n.createTextNode(e)),p.id=d,h.fake&&(h.style.background="",h.style.overflow="hidden",c=u.style.overflow,u.style.overflow="hidden",u.appendChild(h)),l=t(p,e),h.fake?(h.parentNode.removeChild(h),u.style.overflow=c,u.offsetHeight):p.parentNode.removeChild(p),!!l}var f=[],c=[],d={_version:"3.5.0",_config:{classPrefix:"",enableClasses:!0,enableJSClass:!0,usePrefixes:!0},_q:[],on:function(e,n){var t=this;setTimeout(function(){n(t[e])},0)},addTest:function(e,n,t){c.push({name:e,fn:n,options:t})},addAsyncTest:function(e){c.push({name:null,fn:e})}},Modernizr=function(){};Modernizr.prototype=d,Modernizr=new Modernizr;var u=n.documentElement,p="svg"===u.nodeName.toLowerCase(),h=d._config.usePrefixes?" -webkit- -moz- -o- -ms- ".split(" "):["",""];d._prefixes=h;var m=d.testStyles=l;Modernizr.addTest("touchevents",function(){var t;if("ontouchstart"in e||e.DocumentTouch&&n instanceof DocumentTouch)t=!0;else{var o=["@media (",h.join("touch-enabled),("),"heartz",")","{#modernizr{top:9px;position:absolute}}"].join("");m(o,function(e){t=9===e.offsetTop})}return t}),s(),a(f),delete d.addTest,delete d.addAsyncTest;for(var v=0;v<Modernizr._q.length;v++)Modernizr._q[v]();e.Modernizr=Modernizr}(window,document);
|
Двоичные данные
src/Playwright.Tests.TestServer/wwwroot/movie.mp4
Двоичные данные
src/Playwright.Tests.TestServer/wwwroot/movie.ogv
|
@ -1 +0,0 @@
|
|||
<iframe src='networkidle.html'></iframe>
|
|
@ -1 +0,0 @@
|
|||
<script src='networkidle.js'></script>
|
|
@ -1,12 +0,0 @@
|
|||
async function main() {
|
||||
window.ws = new WebSocket('ws://localhost:' + window.location.port + '/ws');
|
||||
window.ws.addEventListener('message', message => {});
|
||||
|
||||
fetch('fetch-request-a.js');
|
||||
window.top.fetchSecond = () => {
|
||||
// Do not return the promise here.
|
||||
fetch('fetch-request-b.js');
|
||||
};
|
||||
}
|
||||
|
||||
main();
|
|
@ -1,55 +0,0 @@
|
|||
<style>
|
||||
button {
|
||||
position: absolute;
|
||||
width: 100px;
|
||||
height: 20px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
body, html {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
div {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
}
|
||||
|
||||
#btn0 { right: 0px; top: 0; }
|
||||
#btn1 { right: -10px; top: 25px; }
|
||||
#btn2 { right: -20px; top: 50px; }
|
||||
#btn3 { right: -30px; top: 75px; }
|
||||
#btn4 { right: -40px; top: 100px; }
|
||||
#btn5 { right: -50px; top: 125px; }
|
||||
#btn6 { right: -60px; top: 150px; }
|
||||
#btn7 { right: -70px; top: 175px; }
|
||||
#btn8 { right: -80px; top: 200px; }
|
||||
#btn9 { right: -90px; top: 225px; }
|
||||
#btn10 { right: -100px; top: 250px; }
|
||||
</style>
|
||||
<div>
|
||||
<button id=btn0>0</button>
|
||||
<button id=btn1>1</button>
|
||||
<button id=btn2>2</button>
|
||||
<button id=btn3>3</button>
|
||||
<button id=btn4>4</button>
|
||||
<button id=btn5>5</button>
|
||||
<button id=btn6>6</button>
|
||||
<button id=btn7>7</button>
|
||||
<button id=btn8>8</button>
|
||||
<button id=btn9>9</button>
|
||||
<button id=btn10>10</button>
|
||||
</div>
|
||||
<script>
|
||||
window.addEventListener('DOMContentLoaded', () => {
|
||||
for (const button of Array.from(document.querySelectorAll('button')))
|
||||
button.addEventListener('click', () => console.log('button #' + button.textContent + ' clicked'), false);
|
||||
}, false);
|
||||
</script>
|
|
@ -1,3 +0,0 @@
|
|||
body {
|
||||
background-color: pink;
|
||||
}
|
|
@ -1,2 +0,0 @@
|
|||
<link rel='stylesheet' href='./one-style.css'>
|
||||
<div>hello, world!</div>
|
|
@ -1,22 +0,0 @@
|
|||
<style>
|
||||
body { margin: 0; padding: 0; }
|
||||
|
||||
div {
|
||||
display: inline-flex;
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
border-right: 1px solid black;
|
||||
border-bottom: 1px solid black;
|
||||
}
|
||||
</style>
|
||||
|
||||
<body></body>
|
||||
|
||||
<script>
|
||||
const colors = ['#222', '#444', '#666', '#888', '#aaa'];
|
||||
for (let i = 0; i < 1000; ++i) {
|
||||
const div = document.createElement('div');
|
||||
div.style.setProperty('background-color', colors[i % 5]);
|
||||
document.body.appendChild(div);
|
||||
}
|
||||
</script>
|