ludc
2023-08-24 56c45e1f4be85d6bbfb3a03437021c6742b32ad9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
/* 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('/');
    };
 
    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) {
    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("");
}