2014-05-16 00:33:34 +00:00
|
|
|
/* 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"
|
|
|
|
};
|
|
|
|
|
|
|
|
function parse_rels(data, currentFilePath) {
|
|
|
|
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('/');
|
|
|
|
};
|
|
|
|
|
2014-06-29 18:29:45 +00:00
|
|
|
data.match(tagregex).forEach(function(x) {
|
2014-05-16 00:33:34 +00:00
|
|
|
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) {
|
|
|
|
var o = [];
|
2014-06-29 18:29:45 +00:00
|
|
|
o[o.length] = (XML_HEADER);
|
|
|
|
o[o.length] = (RELS_ROOT);
|
2014-05-16 00:33:34 +00:00
|
|
|
keys(rels['!id']).forEach(function(rid) { var rel = rels['!id'][rid];
|
2014-06-29 18:29:45 +00:00
|
|
|
o[o.length] = (writextag('Relationship', null, rel));
|
2014-05-16 00:33:34 +00:00
|
|
|
});
|
2014-06-29 18:29:45 +00:00
|
|
|
if(o.length>2){ o[o.length] = ('</Relationships>'); o[1]=o[1].replace("/>",">"); }
|
2014-05-16 00:33:34 +00:00
|
|
|
return o.join("");
|
|
|
|
}
|