function wrapLineNumberDiv(place) {
return function(node) {
-
var container = document.createElement("DIV"),
nums = document.createElement("DIV"),
scroller = document.createElement("DIV");
-
+ container.style.position = "relative";
nums.style.position = "absolute";
- nums.style.height = "100%";
+ nums.style.height = "100%";
if (nums.style.setExpression) {
try {nums.style.setExpression("height", "this.previousSibling.offsetHeight + 'px'");}
catch(e) {} // Seems to throw 'Not Implemented' on some IE8 versions
}
nums.style.top = "0px";
- nums.style.overflow = "hidden";
-
- container.style.position = "absolute";
- container.style.left = "0px";
- container.style.right = "0px";
- container.style.bottom = "0px";
- container.style.top = "0px";
-
- node.style.position = "absolute";
- node.style.top = "0px";
- node.style.right = "0px";
- node.style.bottom = "0px";
- node.style.left = "16px"
-
+ nums.style.overflow = "hidden";
place(container);
- container.appendChild(node);
+ container.appendChild(node);
container.appendChild(nums);
scroller.className = "CodeMirror-line-numbers";
nums.appendChild(scroller);
function applyLineNumbers(frame) {
var win = frame.contentWindow, doc = win.document,
- nums = frame.parentNode.nextSibling, scroller = nums.firstChild;
+ nums = frame.nextSibling, scroller = nums.firstChild;
var nextNum = 1, barWidth = null;
function sizeBar() {
if (nums.offsetWidth != barWidth) {
barWidth = nums.offsetWidth;
- // nums.style.left = "-" + (frame.parentNode.style.marginLeft = barWidth + "px");
+ nums.style.left = "-" + (frame.parentNode.style.marginLeft = barWidth + "px");
}
}
function update() {
frame.frameBorder = 0;
frame.src = "javascript:false;";
frame.style.border = "0";
- frame.style.width = "100%";
- frame.style.height = "100%";
+ frame.style.width = options.width;
+ frame.style.height = options.height;
// display: block occasionally suppresses some Firefox bugs, so we
// always add it, redundant as it sounds.
frame.style.display = "block";
var node = place;
place = function(n){node.appendChild(n);};
}
-
- var iframe_container = document.createElement("DIV");
- iframe_container.appendChild(frame);
-
- var content_wrapper = document.createElement("DIV");
- content_wrapper.appendChild(iframe_container);
- content_wrapper.style.position = 'relative';
- content_wrapper.className = 'CodeMirror-content-wrapper';
- content_wrapper.style.width = options.width;
- content_wrapper.style.height = options.height;
-
- iframe_container.style.position = 'absolute';
- iframe_container.style.top = '0px';
- iframe_container.style.right = '0px';
- iframe_container.style.bottom = '0px';
- iframe_container.style.left = '0px';
-
- if (options.lineNumbers) {
- iframe_container.style.left = '28px';
-
- var nums = document.createElement("DIV"),
- scroller = document.createElement("DIV");
-
- nums.style.position = "absolute";
- nums.style.height = "100%";
-
- nums.style.top = "0px";
- nums.style.left = "0px";
- nums.style.overflow = "hidden";
-
- scroller.className = "CodeMirror-line-numbers";
- nums.appendChild(scroller);
- content_wrapper.appendChild(nums);
-
- iframe_container.style.right = nums.width;
- }
-
- place(content_wrapper);
+ if (options.lineNumbers) place = wrapLineNumberDiv(place);
+ place(frame);
// Link back to this object, so that the editor can fetch options
// and add a reference to itself.