/usr/lib/ruby/vendor_ruby/web_console/templates/error_page.js.erb is in ruby-web-console 2.2.1-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | // Try intercept traces links in Rails 4.2.
var traceFrames = document.getElementsByClassName('trace-frames');
var selectedFrame, currentSource = document.getElementById('frame-source-0');
// Add click listeners for all stack frames
for (var i = 0; i < traceFrames.length; i++) {
traceFrames[i].addEventListener('click', function(e) {
e.preventDefault();
var target = e.target;
var frameId = target.dataset.frameId;
// Change the binding of the console.
changeBinding(frameId, function() {
if (selectedFrame) {
selectedFrame.className = selectedFrame.className.replace("selected", "");
}
target.className += " selected";
selectedFrame = target;
});
// Change the extracted source code
changeSourceExtract(frameId);
});
}
function changeBinding(frameId, callback) {
REPLConsole.currentSession.switchBindingTo(frameId, callback);
}
function changeSourceExtract(frameId) {
var el = document.getElementById('frame-source-' + frameId);
if (currentSource && el) {
currentSource.className += " hidden";
el.className = el.className.replace(" hidden", "");
currentSource = el;
}
}
// Push the error page body upwards the size of the console.
//
// While, I wouldn't like to do that on every custom page (so I don't screw
// user's layouts), I think a lot of developers want to see all of the content
// on the default Rails error page.
//
// Since it's quite special as is now, being a bit more special in the name of
// better user experience, won't hurt.
document.addEventListener('DOMContentLoaded', function() {
var consoleElement = document.getElementById('console');
var resizerElement = consoleElement.getElementsByClassName('resizer')[0];
var containerElement = document.getElementById('container');
function setContainerElementBottomMargin(pixels) {
containerElement.style.marginBottom = pixels + 'px';
}
var currentConsoleElementHeight = consoleElement.offsetHeight;
setContainerElementBottomMargin(currentConsoleElementHeight);
resizerElement.addEventListener('mousedown', function(event) {
function recordConsoleElementHeight(event) {
resizerElement.removeEventListener('mouseup', recordConsoleElementHeight);
var currentConsoleElementHeight = consoleElement.offsetHeight;
setContainerElementBottomMargin(currentConsoleElementHeight);
}
resizerElement.addEventListener('mouseup', recordConsoleElementHeight);
});
});
|