| OLD | NEW |
| (Empty) |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 function toggleEnabled(event) { | |
| 6 if (!document.body) | |
| 7 return; | |
| 8 if (document.body.hasAttribute('show-alt')) | |
| 9 document.body.removeAttribute('show-alt'); | |
| 10 else | |
| 11 document.body.setAttribute('show-alt', ''); | |
| 12 } | |
| 13 | |
| 14 function processImage(image) { | |
| 15 image.style.setProperty('min-height', image.height + 'px'); | |
| 16 image.style.setProperty('min-width', image.width + 'px'); | |
| 17 var style = window.getComputedStyle(image, null); | |
| 18 var contrastRatio = | |
| 19 axs.utils.getContrastRatioForElementWithComputedStyle(style, image); | |
| 20 if (contrastRatio != null && axs.utils.isLowContrast(contrastRatio, style)) { | |
| 21 var bgColor = axs.utils.getBgColor(style, image); | |
| 22 var fgColor = axs.utils.getFgColor(style, image, bgColor); | |
| 23 var suggestedColors = axs.utils.suggestColors( | |
| 24 bgColor, fgColor, contrastRatio, style); | |
| 25 var suggestedColorsAA = suggestedColors['AA']; | |
| 26 image.style.setProperty('color', suggestedColorsAA['fg']); | |
| 27 image.style.setProperty( | |
| 28 'background-color', suggestedColorsAA['bg'], 'important'); | |
| 29 } | |
| 30 if (!image.hasAttribute('alt')) { | |
| 31 if (image.hasAttribute('_repaired')) | |
| 32 return; | |
| 33 var filename = image.src.split('/').pop(); | |
| 34 image.setAttribute('_repaired', filename); | |
| 35 } | |
| 36 } | |
| 37 | |
| 38 var observer = new MutationObserver(function(mutations) { | |
| 39 mutations.forEach(function(mutation) { | |
| 40 if (!mutation.addedNodes || mutation.addedNodes.length == 0) | |
| 41 return; | |
| 42 for (var i = 0; i < mutation.addedNodes.length; i++) { | |
| 43 var addedNode = mutation.addedNodes[i]; | |
| 44 if (!(addedNode instanceof | |
| 45 addedNode.ownerDocument.defaultView.HTMLImageElement)) { | |
| 46 continue; | |
| 47 } | |
| 48 processImage(addedNode); | |
| 49 } | |
| 50 }); | |
| 51 }); | |
| 52 observer.observe(document, { childList: true, subtree: true }); | |
| 53 | |
| 54 var images = document.querySelectorAll('img'); | |
| 55 for (var i = 0; i < images.length; i++) { | |
| 56 processImage(images[i]); | |
| 57 } | |
| 58 | |
| 59 if (!infobarDismissed) | |
| 60 var infobarDismissed = false; | |
| 61 | |
| 62 function createInfobar() { | |
| 63 if (infobarDismissed) | |
| 64 return; | |
| 65 | |
| 66 if (!document.body) | |
| 67 return; | |
| 68 | |
| 69 if (document.querySelector('.show-alt-infobar')) | |
| 70 return; | |
| 71 | |
| 72 var showAltInfobar = document.createElement('div'); | |
| 73 showAltInfobar.className = 'show-alt-infobar'; | |
| 74 | |
| 75 var showAltInfoControls = document.createElement('div'); | |
| 76 showAltInfoControls.className = 'controls'; | |
| 77 | |
| 78 var showAltInfoCloseButton = document.createElement('button'); | |
| 79 showAltInfoCloseButton.className = 'close-button-gray'; | |
| 80 showAltInfoCloseButton.addEventListener('click', function() { | |
| 81 document.body.removeChild(showAltInfobar); | |
| 82 infobarDismissed = true; | |
| 83 }); | |
| 84 | |
| 85 showAltInfoControls.appendChild(showAltInfoCloseButton); | |
| 86 showAltInfobar.appendChild(showAltInfoControls); | |
| 87 | |
| 88 var showAltInfoContent = document.createElement('div'); | |
| 89 showAltInfoContent.className = 'content'; | |
| 90 // TODO(aboxhall): i18n | |
| 91 var showAltInfoText = document.createElement('span'); | |
| 92 showAltInfoText.textContent = 'Images have been replaced by their alt text.'; | |
| 93 showAltInfoText.setAttribute('role', 'status'); | |
| 94 showAltInfoContent.appendChild(showAltInfoText); | |
| 95 | |
| 96 var undoButton = document.createElement('button'); | |
| 97 undoButton.className = 'link-button'; | |
| 98 undoButton.textContent = 'Undo'; | |
| 99 undoButton.addEventListener('click', toggleEnabled); | |
| 100 | |
| 101 var closeButton = document.createElement('button'); | |
| 102 | |
| 103 showAltInfoContent.appendChild(undoButton); | |
| 104 showAltInfobar.appendChild(showAltInfoContent); | |
| 105 | |
| 106 document.body.insertBefore(showAltInfobar, document.body.firstChild); | |
| 107 } | |
| OLD | NEW |