/** * @private */Ext.define('Ext.exporter.file.ooxml.Relationship', { extend: 'Ext.exporter.file.Base', isRelationship: true, config: { idPrefix: 'rId', schema: '', target: '', /** * @private * All relationships targets should be relative paths to this parent folder. */ parentFolder: null, /** * @private * Calculated as the `target` path relative to the parent folder */ path: null }, tpl: [ '<Relationship Id="{id}" Type="{schema}" Target="{path}"/>' ], updateTarget: function(target) { this.calculatePath(); }, applyParentFolder: function(folder) { folder = folder || ''; if (folder[folder.length - 1] === '/') { folder = folder.slice(0, folder.length - 1); } return folder; }, updateParentFolder: function(folder) { this.calculatePath(); }, calculatePath: function() { var from = String(this.getParentFolder() || ''), to = String(this.getTarget() || ''), fromParts = from.split('/'), toParts = to.split('/'), length = Math.min(fromParts.length, toParts.length), samePartsLength = length, path = '', outputParts = [], i; for (i = 0; i < length; i++) { if (fromParts[i] !== toParts[i]) { samePartsLength = i; break; } } if (samePartsLength === 0) { path = to; } else { for (i = samePartsLength; i < fromParts.length; i++) { outputParts.push('..'); } outputParts = outputParts.concat(toParts.slice(samePartsLength)); path = outputParts.join('/'); } this.setPath(path); }});