// Copyright 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. function toggleEnabled(event) { if (!document.body) return; if (document.body.hasAttribute('show-alt')) document.body.removeAttribute('show-alt'); else document.body.setAttribute('show-alt', ''); } function processImage(image) { image.style.setProperty('min-height', image.height + 'px'); image.style.setProperty('min-width', image.width + 'px'); var style = window.getComputedStyle(image, null); var contrastRatio = axs.utils.getContrastRatioForElementWithComputedStyle(style, image); if (contrastRatio != null && axs.utils.isLowContrast(contrastRatio, style)) { var bgColor = axs.utils.getBgColor(style, image); var fgColor = axs.utils.getFgColor(style, image, bgColor); var suggestedColors = axs.utils.suggestColors( bgColor, fgColor, contrastRatio, style); var suggestedColorsAA = suggestedColors['AA']; image.style.setProperty('color', suggestedColorsAA['fg']); image.style.setProperty( 'background-color', suggestedColorsAA['bg'], 'important'); } if (!image.hasAttribute('alt')) { if (image.hasAttribute('_repaired')) return; var filename = image.src.split('/').pop(); image.setAttribute('_repaired', filename); } } var observer = new MutationObserver(function(mutations) { mutations.forEach(function(mutation) { if (!mutation.addedNodes || mutation.addedNodes.length == 0) return; for (var i = 0; i < mutation.addedNodes.length; i++) { var addedNode = mutation.addedNodes[i]; if (!(addedNode instanceof addedNode.ownerDocument.defaultView.HTMLImageElement)) { continue; } processImage(addedNode); } }); }); observer.observe(document, { childList: true, subtree: true }); var images = document.querySelectorAll('img'); for (var i = 0; i < images.length; i++) { processImage(images[i]); } if (!infobarDismissed) var infobarDismissed = false; function createInfobar() { if (infobarDismissed) return; if (!document.body) return; if (document.querySelector('.show-alt-infobar')) return; var showAltInfobar = document.createElement('div'); showAltInfobar.className = 'show-alt-infobar'; var showAltInfoControls = document.createElement('div'); showAltInfoControls.className = 'controls'; var showAltInfoCloseButton = document.createElement('button'); showAltInfoCloseButton.className = 'close-button-gray'; showAltInfoCloseButton.addEventListener('click', function() { document.body.removeChild(showAltInfobar); infobarDismissed = true; }); showAltInfoControls.appendChild(showAltInfoCloseButton); showAltInfobar.appendChild(showAltInfoControls); var showAltInfoContent = document.createElement('div'); showAltInfoContent.className = 'content'; var showAltInfoText = document.createElement('span'); showAltInfoText.textContent = chrome.i18n.getMessage('alt_infobar'); showAltInfoText.setAttribute('role', 'status'); showAltInfoContent.appendChild(showAltInfoText); var undoButton = document.createElement('button'); undoButton.className = 'link-button'; undoButton.textContent = chrome.i18n.getMessage('alt_undo'); undoButton.addEventListener('click', toggleEnabled); var closeButton = document.createElement('button'); showAltInfoContent.appendChild(undoButton); showAltInfobar.appendChild(showAltInfoContent); document.body.insertBefore(showAltInfobar, document.body.firstChild); }