forked from sheetjs/sheetjs
		
	- eliminated functional constructs in hot functions - format try-catch block extracted into new function - cpexcel + codepage updated to 1.2.0 - more efficient (and correct) clean implementation of RGB/HSL/tint algorithms - xlsx binary --all option enables every extra formatting and saving option - column widths parsed and saved (requires cellStyles:true)
		
			
				
	
	
		
			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("");
 | |
| }
 |