/* 9.3.2 OPC Relationships Markup */ var RELS = ({ WB: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument", SHEET: "http://sheetjs.openxmlformats.org/officeDocument/2006/relationships/officeDocument" }/*:any*/); function parse_rels(data/*:?string*/, currentFilePath/*:string*/) { if (!data) return data; if (currentFilePath.charAt(0) !== '/') { currentFilePath = '/'+currentFilePath; } var rels = {}; var hash = {}; var resolveRelativePathIntoAbsolute = function (to) { var toksFrom = currentFilePath.split('/'); toksFrom.pop(); // folder path var toksTo = to.split('/'); var reversed = []; while (toksTo.length !== 0) { var tokTo = toksTo.shift(); if (tokTo === '..') { toksFrom.pop(); } else if (tokTo !== '.') { toksFrom.push(tokTo); } } return toksFrom.join('/'); }; (data.match(tagregex)||[]).forEach(function(x) { var y = parsexmltag(x); /* 9.3.2.2 OPC_Relationships */ if (y[0] === '<Relationship') { var rel = {}; rel.Type = y.Type; rel.Target = y.Target; rel.Id = y.Id; rel.TargetMode = y.TargetMode; var canonictarget = y.TargetMode === 'External' ? y.Target : resolveRelativePathIntoAbsolute(y.Target); rels[canonictarget] = rel; hash[y.Id] = rel; } }); rels["!id"] = hash; return rels; } XMLNS.RELS = 'http://schemas.openxmlformats.org/package/2006/relationships'; var RELS_ROOT = writextag('Relationships', null, { //'xmlns:ns0': XMLNS.RELS, 'xmlns': XMLNS.RELS }); /* TODO */ function write_rels(rels)/*:string*/ { var o = []; o[o.length] = (XML_HEADER); o[o.length] = (RELS_ROOT); keys(rels['!id']).forEach(function(rid) { var rel = rels['!id'][rid]; o[o.length] = (writextag('Relationship', null, rel)); }); if(o.length>2){ o[o.length] = ('</Relationships>'); o[1]=o[1].replace("/>",">"); } return o.join(""); }