DataObjects/Core_domain.php
[Pman.Core] / Pman.Gnumeric.js
index c0721ef..d46cb95 100644 (file)
@@ -58,7 +58,7 @@ Pman.Gnumeric = function (cfg)
             * Fires when source document has been loaded
             * @param {Pman.Gnumerci} this
             */
-           "load" : true
+           'load' : true
     }); 
     
     Roo.util.Observable.call(this,cfg);
@@ -311,17 +311,19 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, {
 
         Roo.each(merge, function(c) {
             var rc = _t.rangeToRC(c.textContent);
-            //Roo.log(JSON.stringify(rc))
+            //Roo.log(JSON.stringify(rc));
             if (typeof(_t.grid[rc[0].r][rc[0].c]) == 'undefined') {
-                _t.grid[rc[0].r][rc[0].c] =  Roo.applyIf({ r : rc[0].r, c : rc[0].c }, _t.defaultCell);
+                //Roo.log(["creating empty cell for  ",rc[0].r,  rc[0].c ]);
+                 _t.createCell(rc[0].r,  rc[0].c );
+                //_t.grid[rc[0].r][rc[0].c] =  //Roo.applyIf({ r : rc[0].r, c : rc[0].c }, _t.defaultCell);
             }
                 
             _t.grid[rc[0].r][rc[0].c].colspan = (rc[1].c - rc[0].c) + 1;
             _t.grid[rc[0].r][rc[0].c].rowspan = (rc[1].r - rc[0].r) + 1;
             for(var r = (rc[0].r); r < (rc[1].r+1); r++) {
-               for(var c = rc[0].c; c < (rc[1].c+1); c++) {
+               for(var cc = rc[0].c; cc < (rc[1].c+1); cc++) {
                     //Roo.log('adding alias : ' + r+','+c);
-                   _t.grid[r][c] = _t.grid[rc[0].r][rc[0].c];
+                   _t.grid[r][cc] = _t.grid[rc[0].r][rc[0].c];
                }
            }
             
@@ -378,15 +380,22 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, {
                    continue;
                 }
                 for (var c = s.c; c < s.c1;c++) {
-                    if (c > _t.cmax) continue;
+                    if (c > _t.cmax) {
+                        continue;
+                    }
     
-                    if (typeof(_t.grid[r][c]) == 'undefined') _t.grid[r][c] = Roo.applyIf({ r: r , c : c }, _t.defaultCell);
+                    if (typeof(_t.grid[r][c]) == 'undefined') {
+                        _t.createCell(r,c);
+                        //_t.grid[r][c] = Roo.applyIf({ r: r , c : c }, _t.defaultCell);
+                    }
                     var g=_t.grid[r][c];
                     if (typeof(g.cls) =='undefined') {
                         g.cls = [];
                         g.styles = [];
                     }
-                    if (g.cls.indexOf(s.name)  > -1) continue;
+                    if (g.cls.indexOf(s.name)  > -1) {
+                       continue;
+                    }
                     g.cls.push(s.name);
                     g.styles.push(s.dom);
                     
@@ -416,23 +425,23 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, {
             },
             Fore : function(ent,v) { 
                 var col=[];
-                Roo.each(v.split(':'), function(c) { col.push(Math.round(parseInt(c,16)/256)); })
+                Roo.each(v.split(':'), function(c) { col.push(Math.round(parseInt(c,16)/256)); });
                 ent['color'] = 'rgb(' + col.join(',') + ')';
             },
             Back : function(ent,v) { 
                 var col=[];
-                Roo.each(v.split(':'), function(c) { col.push(Math.round(parseInt(c,16)/256)); })
+                Roo.each(v.split(':'), function(c) { col.push(Math.round(parseInt(c,16)/256)); });
                 ent['background-color'] = 'rgb(' + col.join(',') + ')';
             },
             FontUnit : function(ent,v) { 
                 ent['font-size'] = v + 'px';
             },
             FontBold : function(ent,v) { 
-                if (v*1 < 1) return;
+                if (v*1 < 1) { return; }
                 ent['font-weight'] = 'bold';
             },
             FontItalic : function(ent,v) { 
-                if (v*0 < 1) return;
+                if (v*0 < 1) { return; }
                 //ent['font-weight'] = 'bold';
             },
             FontName : function(ent,v) { 
@@ -446,10 +455,10 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, {
             BorderColor : function(ent,v) { 
                 var vv  = v.split('-');
                 var col=[];
-                Roo.each(vv[1].split(':'), function(c) { col.push(Math.round(parseInt(c,16)/256)); })
+                Roo.each(vv[1].split(':'), function(c) { col.push(Math.round(parseInt(c,16)/256)); });
                 ent['border-'+vv[0]+'-color'] = 'rgb(' + col.join(',') + ')';
             }
-        }
+        };
         function add(e, k, v) {
             //Roo.log(k,v);
             e.gstyle[k] = v;
@@ -529,7 +538,9 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, {
     set : function(cell, v, vt, vf) {
         
         var cs= typeof(cell) == 'string' ? this.toRC(cell) : cell;
-        //Roo.log( cs.r+ ',' + cs.c + ' = '+ v);
+        
+        
+        Roo.log( cs.r+ ',' + cs.c + ' = '+ v);
         // need to generate clell if it doe
         if (typeof(this.grid[cs.r]) == 'undefined') {
             Roo.log('no row:' + cell);
@@ -537,16 +548,23 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, {
             //return;
         }
         if (typeof(this.grid[cs.r][cs.c]) == 'undefined') {
-            //Roo.log('cell not defined:' + cell);
+            Roo.log('cell not defined:' + cell);
             this.createCell(cs.r,cs.c);
         }
+        // cell might not be rendered yet... so if we try and create a cell, it overrides the default formating..
+        
         if (typeof(this.grid[cs.r][cs.c].dom) == 'undefined') {
-            ///Roo.log('no default content for cell:' + cell);
-            this.createCell(cs.r,cs.c);
+            Roo.log('no default content for cell:' + cell);
+            Roo.log(this.grid[cs.r][cs.c]);
+            //this.createCell(cs.r,cs.c);
             //return;
         }
         this.grid[cs.r][cs.c].value=  v;
-        this.grid[cs.r][cs.c].dom.textContent=  v;
+        if (this.grid[cs.r][cs.c].dom) {
+            this.grid[cs.r][cs.c].dom.textContent=  v;
+        }
+        
+        
         if (typeof(vt) != 'undefined') {
             this.grid[cs.r][cs.c].valueType = vt;
             this.grid[cs.r][cs.c].dom.setAttribute('ValueType', vt);
@@ -682,7 +700,9 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, {
         
         data = data || this.data;
         for (var r = 0; r < this.rmax;r++) {
-            if (typeof(this.grid[r]) == 'undefined') continue;
+            if (typeof(this.grid[r]) == 'undefined') {
+                continue;
+            }
             for (var c = 0; c < this.cmax;c++) {  
                 if (typeof(this.grid[r][c]) == 'undefined') {
                     continue;
@@ -712,26 +732,37 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, {
     {
         // read the first row.
         var tds = Roo.get(table).select('tr').item(0).select('td');
-        var nc = 0;
-        tds.each(function(td) {
-            var cs = td.dom.getAttribute('colspan');
-            cs = cs ? cs * 1 : 1;
-            nc += cs;
+        var maxnc = 0;
+        
+        Roo.get(table).select('tr').each(function(trs) {
+            var nc = 0;
+           
+            trs.select('td').each(function(td) {
+                var cs = td.dom.getAttribute('colspan');
+                cs = cs ? cs * 1 : 1;
+                nc += cs;
+            });
+            maxnc = Math.max(nc, maxnc);
         });
+        
         var tr = document.createElement('tr');
         table.appendChild(tr);
-        var ar = {}
-        for (i =0; i < nc; i++) {
+        var ar = {};
+        for (i =0; i < maxnc; i++) {
             ar[i] = document.createElement('td');
             tr.appendChild(ar[i]);
         }
         // find the left.
-        var ret = { cols : nc, pos : {} };
-        for (i =0; i < nc; i++) {
+        var ret = { cols : maxnc, pos : {} };
+        for (i =0; i < maxnc; i++) {
             ret.pos[ Roo.get(ar[i]).getLeft()] =i;
         }
         ret.near = function(p) {
             // which one is nearest..
+            
+            if (this.pos[p]) {
+                return this.pos[p];
+            }
             var prox = 100000;
             var match = 0;
             for(var i in this.pos) {
@@ -929,7 +960,7 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, {
             var rcs = [];
             ar = ar.slice(0,3);
             Roo.each(ar, function(c) { 
-                rcs.push((c*c).toString(16)) ;  // can we do this? - gnumeric expects bytes.
+                rcs.push((c*c).toString(16)) ;   
             });
             return rcs.join(':');
             
@@ -957,7 +988,7 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, {
                  
             }
             
-        }
+        };
        
         var ent = {
                 HAlign:"1",
@@ -1000,14 +1031,18 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, {
                 ent['Unit'] = v.replace(/px/, '');
             },
             'font-weight' : function(ent,v) { 
-                if (v != 'bold') return;
+                if (v != 'bold') {
+                   return;
+                }
                 ent['Bold'] = 1;
             },
             'font-style' : function(ent,v) { 
-                if (v != 'italic') return;
+                if (v != 'italic') {
+                    return;
+                }
                 ent['Italic'] = 1;
             } 
-        }
+        };
        
         var fent = {
             Unit:"10",
@@ -1080,7 +1115,7 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, {
         // start adding them all together..
         
         if (sb) {
-            st.appendChild(sb)
+            st.appendChild(sb);
         }
         
         
@@ -1107,6 +1142,9 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, {
     writeImage : function (row, col, data, width, height) 
     {
         
+        if (!data) {
+            throw "write Image called with missing data";
+        }
         // our default height width is 50/50 ?!
         //console.log('w='+width+',height='+height);
                 //        <gmr:Objects>
@@ -1139,7 +1177,7 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, {
         // step 1 - work out how many columns it will span..
         // lets hope the spreadsheet is big enought..
         var colwidth = 0;
-        var endcol=col
+        var endcol=col;
         for ( endcol=col;endcol <100; endcol++) {
             if (!this.colInfo[endcol]) {
                 this.colInfo[endcol] = 100; // eak fudge
@@ -1203,7 +1241,7 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, {
        //     return;
         //}
         
-        cell.textContent = this.RCtoCell(row1,col1) + ':' + this.RCtoCell(row2,col2)
+        cell.textContent = this.RCtoCell(row1,col1) + ':' + this.RCtoCell(row2,col2);
         
         //var merges = this.gnumeric.getElementsByTagNameNS('*','MergedRegions');
         var merges = this.sheet.getElementsByTagNameNS('*','MergedRegions');
@@ -1213,7 +1251,7 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, {
             this.sheet.insertBefore(merges,sl);
         } else {
             merges = merges[0];
-           }
+        }
         merges.appendChild(cell);
     
     },
@@ -1276,7 +1314,7 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, {
             sheetnames = this.doc.getElementsByTagNameNS('*','Sheet');
             sheetnames[0].parentNode.appendChild(sheetnames[sheetnames.length-1].cloneNode(true));
             var sn = this.doc.getElementsByTagNameNS('*','Sheet')[sheet];
-            var cls = sn.getElementsByTagNameNS('*','Cells')[0]
+            var cls = sn.getElementsByTagNameNS('*','Cells')[0];
             while (cls.childNodes.length) {
                 cls.removeChild(cls.firstChild);
             }
@@ -1347,12 +1385,35 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, {
         for (var r = 0; r < this.rmax;r++) {
             out += '<tr style="height:'+this.rowInfo[r]+'px;">';
             for (var c = 0; c < this.cmax;c++) {
-                var g = (typeof(grid[r][c]) == 'undefined') ? defaultCell  : grid[r][c];
+                if (typeof(grid[r][c]) == 'undefined')  {
+                    this.createCell(r,c);
+                    
+                }
+                var g = grid[r][c];
                 
-                if (typeof(g.cls) =='undefined') g.cls = [];
+                if (typeof(g.cls) =='undefined') {
+                    g.cls = [];
+                }
                 var w= calcWidth(c,g.colspan);
+                
+                var value = g.value[0] == '=' ? 'CALCULATED' : g.value;
+                
+                try {
+                    if(
+                        g.styles[0].firstElementChild.getAttribute('Format') == "D\\-MMM\\-YYYY;@" &&
+                        g.value[0] != '=' &&
+                        !isNaN(value * 1) && 
+                        value != 0
+                    ){
+                        value = new Date(value * 24 * 60 * 60 * 1000 + new Date('1899-12-30').getTime()).format('d-M-Y');
+                    }
+                    
+                } catch(e) {
+                    
+                }
+                
                 out+=String.format('<td colspan="{0}" rowspan="{1}"  class="{4}"><div style="{3}">{2}</div></td>', 
-                    g.colspan, g.rowspan, g.value,
+                    g.colspan, g.rowspan, value,
                     'overflow:hidden;' + 
                     'width:'+w+'px;' +
                    
@@ -1381,13 +1442,14 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, {
     {
         name = name || "Missing_download_filename";
         
-        if (this.downloadURL && this.downloadURL.charAt(this.downloadURL .length-1) != '/') {
+        if (this.downloadURL && this.downloadURL.charAt(this.downloadURL.length-1) != '/') {
             this.downloadURL += '/';
         }
         
         var ser = new XMLSerializer();
         var x = new Pman.Download({
             method: 'POST',
+            timeout : 120000, // quite a long wait.. 2 minutes.
             params : {
                xml : ser.serializeToString(this.doc),
                format : 'xls', //xml