88 lines
3.6 KiB
HTML
88 lines
3.6 KiB
HTML
<html>
|
|
<head>
|
|
<style>
|
|
:visited:before, :visited *:before {
|
|
content: "visited";
|
|
color: red;
|
|
border: lime 10px solid;
|
|
fill: red;
|
|
stroke: red;
|
|
}
|
|
</style>
|
|
</head>
|
|
<body onload="init()">
|
|
<script>
|
|
if (window.testRunner) {
|
|
window.testRunner.keepWebHistory();
|
|
window.testRunner.dumpAsText();
|
|
window.testRunner.waitUntilDone();
|
|
}
|
|
var oVisitedLink, oUnvisitedLink;
|
|
function init() {
|
|
oVisitedLink = createInvisibleLink(location.href);
|
|
oUnvisitedLink = createInvisibleLink('http://example.com/' + Math.random());
|
|
setTimeout(function () {
|
|
asDifferences = compareStyles(oUnvisitedLink, oVisitedLink);
|
|
var sDifferent = asDifferences.length == 0 ?
|
|
'No differences noted.' :
|
|
'Differences noted.';
|
|
document.body.appendChild(document.createElement('strong')).appendChild(document.createTextNode(sDifferent));
|
|
oVisitedLink.style.display = 'none';
|
|
oUnvisitedLink.style.display = 'none';
|
|
if (window.testRunner)
|
|
window.testRunner.notifyDone();
|
|
}, 0);
|
|
}
|
|
function createInvisibleLink(sUrl) {
|
|
var oDiv = document.body.appendChild(document.createElement("div"));
|
|
var oLink = oDiv.appendChild(document.createElement('a'));
|
|
oLink.href = sUrl;
|
|
oLink.appendChild(document.createTextNode(sUrl));
|
|
oLink.onclick = function () { return false;}
|
|
return oLink
|
|
}
|
|
function readStyleProperties(oStyleDeclaration) {
|
|
var dxStyleProperties = {};
|
|
for (var i = 0; i < oStyleDeclaration.length; i++) {
|
|
var sPropertyName = oStyleDeclaration.item(i);
|
|
var dxPropertyAttributes = {
|
|
'value': oStyleDeclaration.getPropertyValue(sPropertyName),
|
|
// 'CSS value': oStyleDeclaration.getPropertyCSSValue(sPropertyName),
|
|
'priority': oStyleDeclaration.getPropertyPriority(sPropertyName)
|
|
};
|
|
dxStyleProperties[sPropertyName] = dxPropertyAttributes;
|
|
}
|
|
return dxStyleProperties;
|
|
}
|
|
function compareStyles(oLink1, oLink2) {
|
|
var dxStyleProperties1 = readStyleProperties(getComputedStyle(oLink1, "::before"));
|
|
var dxStyleProperties2 = readStyleProperties(getComputedStyle(oLink2, "::before"));
|
|
var asExtraProperties = [], asDifferentProperties = [], asMissingProperties = [];
|
|
for (sProperty in dxStyleProperties1) {
|
|
if (!(sProperty in dxStyleProperties2)) {
|
|
asExtraProperties.push(sProperty);
|
|
} else {
|
|
var dxPropertyAttributes1 = dxStyleProperties1[sProperty];
|
|
var dxPropertyAttributes2 = dxStyleProperties2[sProperty];
|
|
for (sAttribute in dxPropertyAttributes1) {
|
|
if (dxPropertyAttributes1[sAttribute] != dxPropertyAttributes2[sAttribute]) {
|
|
asDifferentProperties.push(sProperty + ' (' + sAttribute + ')');
|
|
}
|
|
}
|
|
}
|
|
}
|
|
for (sProperty in dxStyleProperties2) {
|
|
if (!(sProperty in dxStyleProperties1)) {
|
|
asMissingProperties.push(sProperty);
|
|
}
|
|
}
|
|
asDifferences = [];
|
|
if (asExtraProperties.length > 0) asDifferences.push('Extra properties: ' + asExtraProperties.join(', ') + '.');
|
|
if (asMissingProperties.length > 0) asDifferences.push('Missing properties: ' + asMissingProperties.join(', ') + '.');
|
|
if (asDifferentProperties.length > 0) asDifferences.push('Different properties: ' + asDifferentProperties.join(', ') + '.');
|
|
return asDifferences;
|
|
}
|
|
</script>
|
|
</body>
|
|
</html>
|