Update dev-tools.js
Browse files- dev-tools.js +108 -109
dev-tools.js
CHANGED
@@ -1696,7 +1696,27 @@ loadWebVitals().then(() => {
|
|
1696 |
|
1697 |
return panel;
|
1698 |
}
|
1699 |
-
//
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1700 |
function refreshElementsPanel() {
|
1701 |
let tree = document.getElementById('dom-tree');
|
1702 |
|
@@ -1731,115 +1751,8 @@ function refreshElementsPanel() {
|
|
1731 |
}
|
1732 |
}
|
1733 |
}
|
1734 |
-
// Elementsパネル作成
|
1735 |
-
function createElementsPanel() {
|
1736 |
-
const panel = document.createElement('div');
|
1737 |
-
panel.className = 'devtools-panel';
|
1738 |
-
panel.id = 'elements-panel';
|
1739 |
-
|
1740 |
-
const container = document.createElement('div');
|
1741 |
-
container.className = 'elements-container';
|
1742 |
-
|
1743 |
-
const tree = document.createElement('div');
|
1744 |
-
tree.className = 'dom-tree';
|
1745 |
-
tree.id = 'dom-tree';
|
1746 |
-
|
1747 |
-
const cssPanel = document.createElement('div');
|
1748 |
-
cssPanel.className = 'css-panel';
|
1749 |
-
cssPanel.id = 'css-panel';
|
1750 |
|
1751 |
-
|
1752 |
-
container.appendChild(cssPanel);
|
1753 |
-
panel.appendChild(container);
|
1754 |
-
|
1755 |
-
// CSSパネル更新関数
|
1756 |
-
function updateCSSPanel(element) {
|
1757 |
-
const cssPanel = document.getElementById('css-panel');
|
1758 |
-
cssPanel.innerHTML = '';
|
1759 |
-
|
1760 |
-
if (!element) return;
|
1761 |
-
|
1762 |
-
if (element.style.length > 0) {
|
1763 |
-
const inlineRule = document.createElement('div');
|
1764 |
-
inlineRule.className = 'css-rule';
|
1765 |
-
|
1766 |
-
const selector = document.createElement('div');
|
1767 |
-
selector.className = 'css-selector';
|
1768 |
-
selector.textContent = 'インラインスタイル';
|
1769 |
-
inlineRule.appendChild(selector);
|
1770 |
-
|
1771 |
-
for (let i = 0; i < element.style.length; i++) {
|
1772 |
-
const propName = element.style[i];
|
1773 |
-
const propValue = element.style[propName];
|
1774 |
-
|
1775 |
-
const propDiv = document.createElement('div');
|
1776 |
-
propDiv.className = 'css-property';
|
1777 |
-
|
1778 |
-
const nameSpan = document.createElement('span');
|
1779 |
-
nameSpan.className = 'css-property-name editable';
|
1780 |
-
nameSpan.textContent = propName;
|
1781 |
-
nameSpan.onclick = () => editCSSProperty(element, propName, 'style');
|
1782 |
-
|
1783 |
-
const valueSpan = document.createElement('span');
|
1784 |
-
valueSpan.className = 'css-property-value editable';
|
1785 |
-
valueSpan.textContent = propValue;
|
1786 |
-
valueSpan.onclick = () => editCSSProperty(element, propName, 'style');
|
1787 |
-
|
1788 |
-
const toggleSpan = document.createElement('span');
|
1789 |
-
toggleSpan.className = 'css-toggle';
|
1790 |
-
toggleSpan.textContent = '×';
|
1791 |
-
toggleSpan.title = 'プロパティを無効化';
|
1792 |
-
toggleSpan.onclick = () => {
|
1793 |
-
element.style[propName] = '';
|
1794 |
-
updateCSSPanel(element);
|
1795 |
-
};
|
1796 |
-
|
1797 |
-
propDiv.appendChild(nameSpan);
|
1798 |
-
propDiv.appendChild(valueSpan);
|
1799 |
-
propDiv.appendChild(toggleSpan);
|
1800 |
-
inlineRule.appendChild(propDiv);
|
1801 |
-
}
|
1802 |
-
|
1803 |
-
cssPanel.appendChild(inlineRule);
|
1804 |
-
}
|
1805 |
-
|
1806 |
-
const computedStyles = window.getComputedStyle(element);
|
1807 |
-
const computedRule = document.createElement('div');
|
1808 |
-
computedRule.className = 'css-rule';
|
1809 |
-
|
1810 |
-
const computedSelector = document.createElement('div');
|
1811 |
-
computedSelector.className = 'css-selector';
|
1812 |
-
computedSelector.textContent = '計算されたスタイル';
|
1813 |
-
computedRule.appendChild(computedSelector);
|
1814 |
-
|
1815 |
-
const importantProps = [
|
1816 |
-
'display', 'position', 'width', 'height', 'margin', 'padding',
|
1817 |
-
'color', 'background', 'border', 'font', 'flex', 'grid'
|
1818 |
-
];
|
1819 |
-
|
1820 |
-
importantProps.forEach(prop => {
|
1821 |
-
const value = computedStyles[prop];
|
1822 |
-
|
1823 |
-
const propDiv = document.createElement('div');
|
1824 |
-
propDiv.className = 'css-property';
|
1825 |
-
|
1826 |
-
const nameSpan = document.createElement('span');
|
1827 |
-
nameSpan.className = 'css-property-name';
|
1828 |
-
nameSpan.textContent = prop;
|
1829 |
-
|
1830 |
-
const valueSpan = document.createElement('span');
|
1831 |
-
valueSpan.className = 'css-property-value';
|
1832 |
-
valueSpan.textContent = value;
|
1833 |
-
|
1834 |
-
propDiv.appendChild(nameSpan);
|
1835 |
-
propDiv.appendChild(valueSpan);
|
1836 |
-
computedRule.appendChild(propDiv);
|
1837 |
-
});
|
1838 |
-
|
1839 |
-
cssPanel.appendChild(computedRule);
|
1840 |
-
}
|
1841 |
-
|
1842 |
-
// DOMツリー構築
|
1843 |
function buildDOMTree(node, parentElement, depth = 0, isRoot = false) {
|
1844 |
if (node.nodeType === Node.ELEMENT_NODE) {
|
1845 |
const element = document.createElement('div');
|
@@ -1984,6 +1897,92 @@ function refreshElementsPanel() {
|
|
1984 |
parentElement.appendChild(text);
|
1985 |
}
|
1986 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1987 |
|
1988 |
// CSSプロパティ編集
|
1989 |
function editCSSProperty(element, propName, styleType) {
|
|
|
1696 |
|
1697 |
return panel;
|
1698 |
}
|
1699 |
+
// Elementsパネル作成
|
1700 |
+
function createElementsPanel() {
|
1701 |
+
const panel = document.createElement('div');
|
1702 |
+
panel.className = 'devtools-panel';
|
1703 |
+
panel.id = 'elements-panel';
|
1704 |
+
|
1705 |
+
const container = document.createElement('div');
|
1706 |
+
container.className = 'elements-container';
|
1707 |
+
|
1708 |
+
const tree = document.createElement('div');
|
1709 |
+
tree.className = 'dom-tree';
|
1710 |
+
tree.id = 'dom-tree';
|
1711 |
+
|
1712 |
+
const cssPanel = document.createElement('div');
|
1713 |
+
cssPanel.className = 'css-panel';
|
1714 |
+
cssPanel.id = 'css-panel';
|
1715 |
+
|
1716 |
+
container.appendChild(tree);
|
1717 |
+
container.appendChild(cssPanel);
|
1718 |
+
panel.appendChild(container);
|
1719 |
+
// この関数を createElementsPanel() の外に移動し、最初に定義する
|
1720 |
function refreshElementsPanel() {
|
1721 |
let tree = document.getElementById('dom-tree');
|
1722 |
|
|
|
1751 |
}
|
1752 |
}
|
1753 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1754 |
|
1755 |
+
// DOMツリー構築
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1756 |
function buildDOMTree(node, parentElement, depth = 0, isRoot = false) {
|
1757 |
if (node.nodeType === Node.ELEMENT_NODE) {
|
1758 |
const element = document.createElement('div');
|
|
|
1897 |
parentElement.appendChild(text);
|
1898 |
}
|
1899 |
}
|
1900 |
+
// CSSパネル更新関数
|
1901 |
+
function updateCSSPanel(element) {
|
1902 |
+
const cssPanel = document.getElementById('css-panel');
|
1903 |
+
cssPanel.innerHTML = '';
|
1904 |
+
|
1905 |
+
if (!element) return;
|
1906 |
+
|
1907 |
+
if (element.style.length > 0) {
|
1908 |
+
const inlineRule = document.createElement('div');
|
1909 |
+
inlineRule.className = 'css-rule';
|
1910 |
+
|
1911 |
+
const selector = document.createElement('div');
|
1912 |
+
selector.className = 'css-selector';
|
1913 |
+
selector.textContent = 'インラインスタイル';
|
1914 |
+
inlineRule.appendChild(selector);
|
1915 |
+
|
1916 |
+
for (let i = 0; i < element.style.length; i++) {
|
1917 |
+
const propName = element.style[i];
|
1918 |
+
const propValue = element.style[propName];
|
1919 |
+
|
1920 |
+
const propDiv = document.createElement('div');
|
1921 |
+
propDiv.className = 'css-property';
|
1922 |
+
|
1923 |
+
const nameSpan = document.createElement('span');
|
1924 |
+
nameSpan.className = 'css-property-name editable';
|
1925 |
+
nameSpan.textContent = propName;
|
1926 |
+
nameSpan.onclick = () => editCSSProperty(element, propName, 'style');
|
1927 |
+
|
1928 |
+
const valueSpan = document.createElement('span');
|
1929 |
+
valueSpan.className = 'css-property-value editable';
|
1930 |
+
valueSpan.textContent = propValue;
|
1931 |
+
valueSpan.onclick = () => editCSSProperty(element, propName, 'style');
|
1932 |
+
|
1933 |
+
const toggleSpan = document.createElement('span');
|
1934 |
+
toggleSpan.className = 'css-toggle';
|
1935 |
+
toggleSpan.textContent = '×';
|
1936 |
+
toggleSpan.title = 'プロパティを無効化';
|
1937 |
+
toggleSpan.onclick = () => {
|
1938 |
+
element.style[propName] = '';
|
1939 |
+
updateCSSPanel(element);
|
1940 |
+
};
|
1941 |
+
|
1942 |
+
propDiv.appendChild(nameSpan);
|
1943 |
+
propDiv.appendChild(valueSpan);
|
1944 |
+
propDiv.appendChild(toggleSpan);
|
1945 |
+
inlineRule.appendChild(propDiv);
|
1946 |
+
}
|
1947 |
+
|
1948 |
+
cssPanel.appendChild(inlineRule);
|
1949 |
+
}
|
1950 |
+
|
1951 |
+
const computedStyles = window.getComputedStyle(element);
|
1952 |
+
const computedRule = document.createElement('div');
|
1953 |
+
computedRule.className = 'css-rule';
|
1954 |
+
|
1955 |
+
const computedSelector = document.createElement('div');
|
1956 |
+
computedSelector.className = 'css-selector';
|
1957 |
+
computedSelector.textContent = '計算されたスタイル';
|
1958 |
+
computedRule.appendChild(computedSelector);
|
1959 |
+
|
1960 |
+
const importantProps = [
|
1961 |
+
'display', 'position', 'width', 'height', 'margin', 'padding',
|
1962 |
+
'color', 'background', 'border', 'font', 'flex', 'grid'
|
1963 |
+
];
|
1964 |
+
|
1965 |
+
importantProps.forEach(prop => {
|
1966 |
+
const value = computedStyles[prop];
|
1967 |
+
|
1968 |
+
const propDiv = document.createElement('div');
|
1969 |
+
propDiv.className = 'css-property';
|
1970 |
+
|
1971 |
+
const nameSpan = document.createElement('span');
|
1972 |
+
nameSpan.className = 'css-property-name';
|
1973 |
+
nameSpan.textContent = prop;
|
1974 |
+
|
1975 |
+
const valueSpan = document.createElement('span');
|
1976 |
+
valueSpan.className = 'css-property-value';
|
1977 |
+
valueSpan.textContent = value;
|
1978 |
+
|
1979 |
+
propDiv.appendChild(nameSpan);
|
1980 |
+
propDiv.appendChild(valueSpan);
|
1981 |
+
computedRule.appendChild(propDiv);
|
1982 |
+
});
|
1983 |
+
|
1984 |
+
cssPanel.appendChild(computedRule);
|
1985 |
+
}
|
1986 |
|
1987 |
// CSSプロパティ編集
|
1988 |
function editCSSProperty(element, propName, styleType) {
|