Quick fix in CM.
[redakcja.git] / project / static / js / lib / codemirror / codemirror.js
index 97e2657..25da6f7 100644 (file)
@@ -55,20 +55,34 @@ var CodeMirror = (function(){
 
   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";
+      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"
+
       place(container);
-      container.appendChild(node);
+      container.appendChild(node);     
       container.appendChild(nums);
       scroller.className = "CodeMirror-line-numbers";
       nums.appendChild(scroller);
@@ -77,7 +91,7 @@ var CodeMirror = (function(){
 
   function applyLineNumbers(frame) {
     var win = frame.contentWindow, doc = win.document,
-        nums = frame.nextSibling, scroller = nums.firstChild;
+        nums = frame.parentNode.nextSibling, scroller = nums.firstChild;
 
     var nextNum = 1, barWidth = null;
     function sizeBar() {
@@ -92,7 +106,7 @@ var CodeMirror = (function(){
 
       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() {
@@ -125,8 +139,8 @@ var CodeMirror = (function(){
     frame.frameBorder = 0;
     frame.src = "javascript:false;";
     frame.style.border = "0";
-    frame.style.width = options.width;
-    frame.style.height = options.height;
+    frame.style.width = "100%";
+    frame.style.height = "100%";
     // display: block occasionally suppresses some Firefox bugs, so we
     // always add it, redundant as it sounds.
     frame.style.display = "block";
@@ -135,8 +149,44 @@ var CodeMirror = (function(){
       var node = place;
       place = function(n){node.appendChild(n);};
     }
-    if (options.lineNumbers) place = wrapLineNumberDiv(place);
-    place(frame);
+
+    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);
 
     // Link back to this object, so that the editor can fetch options
     // and add a reference to itself.