blob: d10b8588f2112a5ceae0b4bde032e994c4095304 [file] [log] [blame]
<html>
<head>
<title>Inspectable pages</title>
<style>
body {
color: #222;
font-family: Helvetica, Arial, sans-serif;
margin: 0;
text-shadow: rgba(255, 255, 255, 0.496094) 0px 1px 0px;
}
#caption {
font-size: 16px;
margin-top: 15px;
margin-bottom: 10px;
margin-left: 20px;
height: 20px;
text-align: left;
}
#items {
display: flex;
flex-direction: column;
margin: 10px;
}
.item {
color: #222;
display: flex;
flex-direction: row;
text-decoration: none;
padding: 10px;
transition-property: background-color, border-color;
transition: background-color 0.15s, 0.15s;
transition-delay: 0ms, 0ms;
}
.item:not(.connected):hover {
background-color: rgba(242, 242, 242, 1);
border-color: rgba(110, 116, 128, 1);
color: black;
}
.item.connected:hover {
border-color: rgba(184, 184, 184, 1);
color: rgb(110, 116, 128);
}
.item.custom {
cursor: pointer;
}
.description {
display: flex;
flex-direction: column;
}
.title, .subtitle, .custom-url {
font-size: 13px;
margin: 4px 0px 0px 6px;
overflow: hidden;
padding-left: 20px;
}
.title {
background-repeat: no-repeat;
background-size: 16px;
font-size: 15px;
}
.custom-url {
display: flex;
}
.custom-url-label {
flex: 0 0 auto;
}
.custom-url-value {
font-family: monospace;
margin-left: 1em;
}
</style>
<script>
function onLoad() {
var tabsListRequest = new XMLHttpRequest();
tabsListRequest.open('GET', '/json/list', true);
tabsListRequest.onreadystatechange = onReady;
tabsListRequest.send();
}
function onReady() {
if(this.readyState == 4 && this.status == 200) {
if(this.response != null)
var responseJSON = JSON.parse(this.response);
for (var i = 0; i < responseJSON.length; ++i)
appendItem(responseJSON[i]);
}
}
function customFrontendURL(url) {
if (!url || !window.location.hash)
return null;
var hashParams = new URLSearchParams(location.hash.substring(1));
if (!hashParams.get("custom"))
return null;
var searchIndex = url.indexOf("?");
if (searchIndex === -1)
return null;
var originalParams = url.substring(searchIndex + 1);
if (hashParams.get("experiments"))
originalParams += "&experiments=true";
return "chrome-devtools://devtools/custom/inspector.html?" + originalParams;
}
function appendItem(item_object) {
var item_element;
var customURL = customFrontendURL(item_object.devtoolsFrontendUrl);
if (customURL) {
item_element = document.createElement('div');
item_element.title = item_object.title;
item_element.className = 'custom';
} else if (item_object.devtoolsFrontendUrl) {
item_element = document.createElement('a');
item_element.href = item_object.devtoolsFrontendUrl;
item_element.title = item_object.title;
} else {
item_element = document.createElement('div');
item_element.className = 'connected';
item_element.title = 'The tab already has an active debug session';
}
item_element.classList.add('item');
var description = document.createElement('div');
description.className = 'description';
var title = document.createElement('div');
title.className = 'title';
title.textContent = item_object.description || item_object.title;
if (item_object.faviconUrl) {
title.style.cssText = 'background-image:url(' +
item_object.faviconUrl + ')';
}
description.appendChild(title);
var subtitle = document.createElement('div');
subtitle.className = 'subtitle';
subtitle.textContent = (item_object.url || '').substring(0, 300);
description.appendChild(subtitle);
if (customURL) {
var urlContainer = document.createElement('div');
urlContainer.classList.add("custom-url");
var urlLabel = document.createElement('div');
urlLabel.classList.add("custom-url-label");
urlLabel.textContent = "Click to copy URL:";
urlContainer.appendChild(urlLabel);
var urlValue = document.createElement('div');
urlValue.classList.add("custom-url-value");
urlValue.textContent = customURL;
urlContainer.appendChild(urlValue);
description.appendChild(urlContainer);
item_element.addEventListener('click', selectNodeText.bind(null, urlValue));
}
item_element.appendChild(description);
document.getElementById('items').appendChild(item_element);
}
function selectNodeText(selectElement, event)
{
var selection = window.getSelection();
if (!selection.isCollapsed)
return;
var range = document.createRange();
range.selectNode(selectElement);
selection.removeAllRanges();
selection.addRange(range);
event.stopPropagation();
event.preventDefault();
}
</script>
</head>
<body onload='onLoad()'>
<div id='caption'>Inspectable pages</div>
<hr>
<div id='items'>
</div>
</body>
</html>