forked from sheetjs/sheetjs
		
	
		
			
	
	
		
			62 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			62 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | /* 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(/<[^>]*>/g).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.push(XML_HEADER); | ||
|  | 	o.push(RELS_ROOT); | ||
|  | 	keys(rels['!id']).forEach(function(rid) { var rel = rels['!id'][rid]; | ||
|  | 		o.push(writextag('Relationship', null, rel)); | ||
|  | 	}); | ||
|  | 	if(o.length>2){ o.push('</Relationships>'); o[1]=o[1].replace("/>",">"); } | ||
|  | 	return o.join(""); | ||
|  | } |