diff options
| author | Michael Howell <michael@notriddle.com> | 2021-10-04 13:01:50 -0700 |
|---|---|---|
| committer | Michael Howell <michael@notriddle.com> | 2021-10-04 15:04:52 -0700 |
| commit | ccd2be5b91a5536bc18a90d20a77f10ac052e54c (patch) | |
| tree | 70a76ce0a5fbd1e6af3f3e8aec57622ce68d47ef | |
| parent | 175b8db73bfd078b4bcd3c28c8d6f51d5895ebf3 (diff) | |
| download | rust-ccd2be5b91a5536bc18a90d20a77f10ac052e54c.tar.gz rust-ccd2be5b91a5536bc18a90d20a77f10ac052e54c.zip | |
fix busted JavaScript in error index generator
The old JavaScript didn't work. It filled the browser console with "e.previousElementSibling not defined" errors, because it didn't account for the example-wrap div that a newer version of rustdoc added. Additionally, it had copied versions of utility functions that had been optimized in rustdoc main.js. This version updates those.
| -rw-r--r-- | src/tools/error_index_generator/main.rs | 53 |
1 files changed, 19 insertions, 34 deletions
diff --git a/src/tools/error_index_generator/main.rs b/src/tools/error_index_generator/main.rs index 01a3fc812b2..0386d8be167 100644 --- a/src/tools/error_index_generator/main.rs +++ b/src/tools/error_index_generator/main.rs @@ -143,56 +143,41 @@ impl Formatter for HTMLFormatter { r##"<script> function onEach(arr, func) {{ if (arr && arr.length > 0 && func) {{ - for (var i = 0; i < arr.length; i++) {{ - func(arr[i]); + var length = arr.length; + var i; + for (i = 0; i < length; ++i) {{ + if (func(arr[i])) {{ + return true; + }} }} }} + return false; +}} + +function onEachLazy(lazyArray, func) {{ + return onEach( + Array.prototype.slice.call(lazyArray), + func); }} function hasClass(elem, className) {{ - if (elem && className && elem.className) {{ - var elemClass = elem.className; - var start = elemClass.indexOf(className); - if (start === -1) {{ - return false; - }} else if (elemClass.length === className.length) {{ - return true; - }} else {{ - if (start > 0 && elemClass[start - 1] !== ' ') {{ - return false; - }} - var end = start + className.length; - if (end < elemClass.length && elemClass[end] !== ' ') {{ - return false; - }} - return true; - }} - if (start > 0 && elemClass[start - 1] !== ' ') {{ - return false; - }} - var end = start + className.length; - if (end < elemClass.length && elemClass[end] !== ' ') {{ - return false; - }} - return true; - }} - return false; + return elem && elem.classList && elem.classList.contains(className); }} -onEach(document.getElementsByClassName('rust-example-rendered'), function(e) {{ +onEachLazy(document.getElementsByClassName('rust-example-rendered'), function(e) {{ if (hasClass(e, 'compile_fail')) {{ e.addEventListener("mouseover", function(event) {{ - e.previousElementSibling.childNodes[0].style.color = '#f00'; + e.parentElement.previousElementSibling.childNodes[0].style.color = '#f00'; }}); e.addEventListener("mouseout", function(event) {{ - e.previousElementSibling.childNodes[0].style.color = ''; + e.parentElement.previousElementSibling.childNodes[0].style.color = ''; }}); }} else if (hasClass(e, 'ignore')) {{ e.addEventListener("mouseover", function(event) {{ - e.previousElementSibling.childNodes[0].style.color = '#ff9200'; + e.parentElement.previousElementSibling.childNodes[0].style.color = '#ff9200'; }}); e.addEventListener("mouseout", function(event) {{ - e.previousElementSibling.childNodes[0].style.color = ''; + e.parentElement.previousElementSibling.childNodes[0].style.color = ''; }}); }} }}); |
