Files
Yajbir Singh f1b860b25c
Some checks failed
check / markdownlint (push) Has been cancelled
check / spellchecker (push) Has been cancelled
updated
2025-12-11 19:03:17 +05:30

838 lines
52 KiB
JavaScript

/*
* (c) Copyright Ascensio System SIA 2010-2024
*
* This program is a free software product. You can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License (AGPL)
* version 3 as published by the Free Software Foundation. In accordance with
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
* that Ascensio System SIA expressly excludes the warranty of non-infringement
* of any third-party rights.
*
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
*
* You can contact Ascensio System SIA at 20A-6 Ernesta Birznieka-Upish
* street, Riga, Latvia, EU, LV-1050.
*
* The interactive user interfaces in modified source and object code versions
* of the Program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU AGPL version 3.
*
* Pursuant to Section 7(b) of the License you must retain the original Product
* logo when distributing the program. Pursuant to Section 7(e) we decline to
* grant you any rights under trademark law for use of our trademarks.
*
* All the Product's GUI elements, including illustrations and icon sets, as
* well as technical writing content are licensed under the terms of the
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
*
*/
"use strict";
(function(window, undefined) {
var openXml = {};
function SaxParserBase() {
this.depth = 0;
this.depthSkip = null;
this.context = null;
this.contextStack = [];
}
SaxParserBase.prototype.onError = function(msg) {
throw new Error(msg);
};
SaxParserBase.prototype.onStartNode = function(elem, getAttrs, isTagEnd, getStringNode) {
this.depth++;
if (!this.isSkip()) {
var newContext;
if (this.context.onStartNode) {
newContext = this.context.onStartNode.call(this.context, elem, getAttrs, EasySAXParser.entityDecode, isTagEnd, getStringNode);
if (!newContext) {
this.skip();
}
}
if (!this.isSkip() && !isTagEnd) {
this.context = newContext ? newContext : this.context;
this.contextStack.push(this.context);
}
}
};
SaxParserBase.prototype.onTextNode = function(text) {
if (this.context && this.context.onTextNode) {
this.context.onTextNode.call(this.context, text, EasySAXParser.entityDecode);
}
};
SaxParserBase.prototype.onEndNode = function(elem, isTagStart, getStringNode) {
this.depth--;
var isSkip = this.isSkip();
if (isSkip && this.depth <= this.depthSkip) {
this.depthSkip = null;
}
if (!isSkip){
var prevContext = this.context;
if(!isTagStart){
this.contextStack.pop();
this.context = this.contextStack[this.contextStack.length - 1];
}
if (this.context && this.context.onEndNode) {
this.context.onEndNode.call(this.context, prevContext, elem, EasySAXParser.entityDecode, isTagStart, getStringNode);
}
}
};
SaxParserBase.prototype.skip = function() {
this.depthSkip = this.depth - 1;
};
SaxParserBase.prototype.isSkip = function() {
return null !== this.depthSkip
};
SaxParserBase.prototype.parse = function(xml, context) {
var t = this;
this.context = context;
var parser = new EasySAXParser({'autoEntity': false});
parser.on('error', function() {
t.onError.apply(t, arguments);
});
parser.on('startNode', function() {
t.onStartNode.apply(t, arguments);
});
parser.on('textNode', function() {
t.onTextNode.apply(t, arguments);
});
parser.on('endNode', function() {
t.onEndNode.apply(t, arguments);
});
parser.parse(xml);
};
openXml.SaxParserBase = SaxParserBase;
openXml.SaxParserDataTransfer = {};
function ContentTypes(){
this.Defaults = {};
this.Overrides = {};
}
ContentTypes.prototype.onStartNode = function(elem, attr, uq, tagend, getStrNode) {
var attrVals;
if ('Default' === elem) {
if (attr()) {
attrVals = attr();
this.Defaults[attrVals['Extension']] = attrVals['ContentType'];
}
} else if ('Override' === elem) {
if (attr()) {
attrVals = attr();
this.Overrides[attrVals['PartName']] = attrVals['ContentType'];
}
}
return this;
};
ContentTypes.prototype.toXml = function(writer) {
writer.WriteXmlString("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n");
writer.WriteXmlNodeStart("Types");
writer.WriteXmlString(" xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\"");
writer.WriteXmlAttributesEnd();
for (var ext in this.Defaults) {
if (this.Defaults.hasOwnProperty(ext)) {
writer.WriteXmlNodeStart("Default");
writer.WriteXmlAttributeStringEncode("Extension", ext);
writer.WriteXmlAttributeStringEncode("ContentType", this.Defaults[ext]);
writer.WriteXmlAttributesEnd(true);
}
}
for (var partName in this.Overrides) {
if (this.Overrides.hasOwnProperty(partName)) {
writer.WriteXmlNodeStart("Override");
writer.WriteXmlAttributeStringEncode("PartName", partName);
writer.WriteXmlAttributeStringEncode("ContentType", this.Overrides[partName]);
writer.WriteXmlAttributesEnd(true);
}
}
writer.WriteXmlNodeEnd("Types");
};
ContentTypes.prototype.add = function(partName, contentType) {
var exti = partName.lastIndexOf(".");
var ext = partName.substring(exti + 1);
var res = !(this.Overrides[partName] && this.Defaults[ext]);
if (contentType) {
this.Overrides[partName] = contentType;
}
if (!this.Defaults[ext]) {
var mime = openXml.GetMimeType(ext);
this.Defaults[ext] = mime;
}
return res;
};
function Rels(pkg, part){
this.pkg = pkg;
this.part = part;
this.rels = [];
this.nextRId = 1;
}
Rels.prototype.onStartNode = function(elem, attr, uq, tagend, getStrNode) {
var attrVals;
if ('Relationships' === elem) {
} else if ('Relationship' === elem) {
if (attr()) {
attrVals = attr();
var rId = attrVals["Id"] || "";
var targetMode = attrVals["TargetMode"] || null;
var theRel = new openXml.OpenXmlRelationship(this.pkg, this.part, rId, attrVals["Type"],
attrVals["Target"], targetMode);
this.rels.push(theRel);
if (rId.startsWith("rId")) {
this.nextRId = Math.max(this.nextRId, parseInt(rId.substring("rId".length)) + 1 || 1);
}
}
}
return this;
};
Rels.prototype.toXml = function(writer) {
writer.WriteXmlString("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>");
writer.WriteXmlNodeStart("Relationships");
writer.WriteXmlString(" xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\"");
writer.WriteXmlAttributesEnd();
this.rels.forEach(function(elem){
elem.toXml(writer, "Relationship");
});
writer.WriteXmlNodeEnd("Relationships");
};
Rels.prototype.getNextRId = function() {
return "rId" + (this.nextRId++);
};
/******************************** OpenXmlPackage ********************************/
function openFromZip(zip, pkg) {
let ctfBytes = zip.getFile("[Content_Types].xml");
if (ctfBytes) {
let ctfText = AscCommon.UTF8ArrayToString(ctfBytes, 0, ctfBytes.length);
new SaxParserBase().parse(ctfText, pkg.cntTypes);
}
zip.files.forEach(function(path){
if (!path.endsWith("/")) {
var f2 = path;
var contentType = null;
if (path !== "[Content_Types].xml") {
f2 = "/" + path;
contentType = pkg.getContentType(f2);
}
pkg.parts[f2] = new openXml.OpenXmlPart(pkg, f2, contentType);
}
});
}
openXml.OpenXmlPackage = function(zip, xmlWriter) {
this.zip = zip;
this.xmlWriter = xmlWriter;
this.parts = {};
this.cntTypes = new ContentTypes();
this.fileNameIndexes = {};
this.openFromZip();
};
openXml.OpenXmlPackage.prototype.openFromZip = function(){
openFromZip(this.zip, this);
};
openXml.OpenXmlPackage.prototype.removePart = function (uri) {
var removePart = this.parts[uri];
if(removePart) {
delete this.parts[uri];
this.zip.removeFile(removePart.getUriRelative());
}
return removePart;
};
openXml.OpenXmlPackage.prototype.generateNextFilename = function (type) {
if (-1 === type.filename.indexOf("[N]")) {
return type.filename;
} else {
let sIndexKey = type.enumerateType || type.relationType;
var nextIndex = 1;
if (!this.fileNameIndexes[sIndexKey]) {
this.fileNameIndexes[sIndexKey] = nextIndex + 1;
} else {
nextIndex = this.fileNameIndexes[sIndexKey]++;
}
return type.filename.replace(/\[N\]/g, nextIndex.toString());
}
};
openXml.OpenXmlPackage.prototype.generateTargetByType = function (type) {
if (type.dir) {
return type.dir + "/" + this.generateNextFilename(type);
} else {
return this.generateNextFilename(type);
}
};
openXml.OpenXmlPackage.prototype.generateUriByType = function (target, base) {
var baseSplit = base.split('/');
baseSplit.pop();
var targetSplit = target.split('/');
for (var i = 0; i < targetSplit.length; ++i) {
if ('..' === targetSplit[i]) {
baseSplit.pop();
} else {
baseSplit.push(targetSplit[i]);
}
}
return baseSplit.join('/');
};
openXml.OpenXmlPackage.prototype.addPartWithoutRels = function (uri, contentType) {
//add part
var newPart = new openXml.OpenXmlPart(this, uri, contentType);
this.parts[uri] = newPart;
// update [Content_Types].xml
var changed = this.cntTypes.add(uri, contentType);
if(changed) {
this.zip.removeFile("[Content_Types].xml");
this.zip.addFile("[Content_Types].xml", this.getXmlBytes(this.getRootPart(), this.cntTypes, this.xmlWriter));
}
return newPart;
};
openXml.OpenXmlPackage.prototype.addPart = function (type) {
return this.getRootPart().addPart(type);
};
openXml.OpenXmlPackage.prototype.addRelationship = function (relationshipType, target, targetMode) {
return this.getRootPart().addRelationship(relationshipType, target, targetMode);
};
openXml.OpenXmlPackage.prototype.getParts = function() {
var parts = [];
for (var part in this.parts) {
if (this.parts[part].contentType !== openXml.Types.relationships.contentType && part !== "[Content_Types].xml") {
parts.push(this.parts[part]);
}
}
return parts;
};
openXml.OpenXmlPackage.prototype.getRootPart = function() {
return new openXml.OpenXmlPart(this, "/", openXml.Types.relationships.contentType);
};
openXml.OpenXmlPackage.prototype.getRels = function() {
return this.getRootPart().getRels();
};
openXml.OpenXmlPackage.prototype.getRelationships = function() {
return this.getRootPart().getRelationships();
};
openXml.OpenXmlPackage.prototype.getRelationship = function(rId) {
return this.getRootPart().getRelationship(rId);
};
openXml.OpenXmlPackage.prototype.getRelationshipsByRelationshipType = function(relationshipType) {
return this.getRootPart().getRelationshipsByRelationshipType(relationshipType);
};
openXml.OpenXmlPackage.prototype.getPartsByRelationshipType = function(relationshipType) {
return this.getRootPart().getPartsByRelationshipType(relationshipType);
};
openXml.OpenXmlPackage.prototype.getPartByRelationshipType = function(relationshipType) {
return this.getRootPart().getPartByRelationshipType(relationshipType);
};
openXml.OpenXmlPackage.prototype.getRelationshipsByContentType = function(contentType) {
return this.getRootPart().getRelationshipsByContentType(contentType);
};
openXml.OpenXmlPackage.prototype.getPartsByContentType = function(contentType) {
return this.getRootPart().getPartsByContentType(contentType);
};
openXml.OpenXmlPackage.prototype.getRelationshipById = function(rId) {
return this.getRootPart().getRelationshipById(rId);
};
openXml.OpenXmlPackage.prototype.getPartById = function(rId) {
return this.getRootPart().getPartById(rId);
};
openXml.OpenXmlPackage.prototype.getPartByUri = function(uri) {
var part = this.parts[uri];
return part;
};
openXml.OpenXmlPackage.prototype.getContentType = function(uri) {
var ct = this.cntTypes.Overrides[uri];
if (!ct) {
var exti = uri.lastIndexOf(".");
var ext = uri.substring(exti + 1);
ct = this.cntTypes.Defaults[ext];
}
return ct;
};
openXml.OpenXmlPackage.prototype.getXmlBytes = function(part, data, writer) {
var oldPart = writer.context.part;
writer.context.part = part;
var oldPos = writer.GetCurPosition();
data.toXml(writer);
var pos = writer.GetCurPosition();
var res = writer.GetDataUint8(oldPos, pos - oldPos);
writer.Seek(oldPos);
writer.context.part = oldPart;
return res;
};
/*********** OpenXmlPart ***********/
openXml.OpenXmlPart = function(pkg, uri, contentType) {
this.pkg = pkg; // reference to the parent package
this.uri = uri; // the part is also indexed by uri in the package
this.contentType = contentType;
};
openXml.OpenXmlPart.prototype.getUriRelative = function() {
return this.uri.substring(1);
};
openXml.OpenXmlPart.prototype.getDocumentContent = function(type) {
type = type || "string";
var data = this.pkg.zip.getFile(this.getUriRelative());
if (!data) {
data = new Uint8Array(0);
}
if ("string" === type) {
return AscCommon.UTF8ArrayToString(data, 0, data.length);
} else {
return data;
}
};
openXml.OpenXmlPart.prototype.addPart = function (type) {
var target = this.pkg.generateTargetByType(type);
var uri = this.pkg.generateUriByType(target, this.uri);
var newPart = this.pkg.addPartWithoutRels(uri, type.contentType);
//update rels
var rId = this.addRelationship(type.relationType, target);
return {part: newPart, rId: rId};
};
openXml.OpenXmlPart.prototype.addPartWithoutRels = function (type) {
var target = this.pkg.generateTargetByType(type);
var uri = this.pkg.generateUriByType(target, this.uri);
return this.pkg.addPartWithoutRels(uri, type.contentType);
};
openXml.OpenXmlPart.prototype.setData = function (data) {
this.pkg.zip.addFile(this.getUriRelative(), data);
};
openXml.OpenXmlPart.prototype.setDataXml = function (xmlObj, writer) {
writer.context.clearCurrentPartDataMaps();
var data = this.pkg.getXmlBytes(this, xmlObj, writer);
this.pkg.zip.addFile(this.getUriRelative(), data);
};
openXml.OpenXmlPart.prototype.addRelationship = function (relationshipType, target, targetMode) {
var relsFilename = getRelsPartUriOfPart(this);
var rels = this.getRels();
var rId = rels.getNextRId();
var newRel = new openXml.OpenXmlRelationship(rels.pkg, rels.part, rId, relationshipType, target, targetMode);
rels.rels.push(newRel);
this.pkg.removePart(relsFilename);
var relsPart = this.pkg.addPartWithoutRels(relsFilename, null);
relsPart.setData(this.pkg.getXmlBytes(relsPart, rels, this.pkg.xmlWriter));
return rId;
};
function getRelsPartUriOfPart(part) {
var uri = part.uri;
var lastSlash = uri.lastIndexOf('/');
var partFileName = uri.substring(lastSlash + 1);
var relsFileName = uri.substring(0, lastSlash) + "/_rels/" + partFileName + ".rels";
return relsFileName;
}
function getPartUriOfRelsPart(part) {
var uri = part.uri;
var lastSlash = uri.lastIndexOf('/');
var partFileName = uri.substring(lastSlash + 1, uri.length - '.rels'.length);
var relsFileName = uri.substring(0, uri.lastIndexOf('/', lastSlash - 1) + 1) + partFileName;
return relsFileName;
}
function getRelsPartOfPart(part) {
var relsFileName = getRelsPartUriOfPart(part);
var relsPart = part.pkg.getPartByUri(relsFileName);
return relsPart;
}
openXml.OpenXmlPart.prototype.getRels = function() {
var relsPackage = new Rels(null, this);
var relsPart = getRelsPartOfPart(this);
if(relsPart) {
new SaxParserBase().parse(relsPart.getDocumentContent(), relsPackage);
}
return relsPackage;
}
openXml.OpenXmlPart.prototype.getRelationships = function() {
return this.getRels().rels;
}
openXml.OpenXmlPart.prototype.getRelationship = function(rId) {
var rels = this.getRelationships();
for (var i = 0; i < rels.length; ++i) {
var rel = rels[i];
if (rel.relationshipId == rId) {
return rel;
}
}
return null;
}
// returns all related parts of the source part
openXml.OpenXmlPart.prototype.getParts = function() {
var parts = [];
var rels = this.getRelationships();
for (var i = 0; i < rels.length; ++i) {
var part = this.pkg.getPartByUri(rels[i].targetFullName);
parts.push(part);
}
return parts;
}
openXml.OpenXmlPart.prototype.getRelationshipsByRelationshipType = function(relationshipType) {
var rels = this.getRelationships();
return rels.filter(function (rel) {
return openXml.IsEqualRelationshipType(rel.relationshipType, relationshipType);
});
}
// returns all related parts of the source part with the given relationship type
openXml.OpenXmlPart.prototype.getPartsByRelationshipType = function(relationshipType) {
var parts = [];
var rels = this.getRelationshipsByRelationshipType(relationshipType);
for (var i = 0; i < rels.length; ++i) {
var part = this.pkg.getPartByUri(rels[i].targetFullName);
parts.push(part);
}
return parts;
}
openXml.OpenXmlPart.prototype.getPartByRelationshipType = function(relationshipType) {
var parts = this.getPartsByRelationshipType(relationshipType);
if (parts.length < 1) {
return null;
}
return parts[0];
}
openXml.OpenXmlPart.prototype.getRelationshipsByContentType = function(contentType) {
var rels = this.getRelationships();
return rels.filter(function (rel) {
return this.getContentType(rel.targetFullName) === contentType;
});
}
openXml.OpenXmlPart.prototype.getPartsByContentType = function(contentType) {
var parts = [];
var rels = this.getRelationshipsByContentType(contentType);
for (var i = 0; i < rels.length; ++i) {
var part = this.pkg.getPartByUri(rels[i].targetFullName);
parts.push(part);
}
return parts;
}
openXml.OpenXmlPart.prototype.getRelationshipById = function(relationshipId) {
return this.getRelationship(relationshipId);
}
openXml.OpenXmlPart.prototype.getPartById = function(relationshipId) {
var rel = this.getRelationshipById(relationshipId);
if (rel) {
var part = this.pkg.getPartByUri(rel.targetFullName);
return part;
}
return null;
}
/******************************** OpenXmlRelationship ********************************/
openXml.OpenXmlRelationship = function(pkg, part, relationshipId, relationshipType, target, targetMode) {
this.fromPkg = pkg; // if from a part, this will be null
this.fromPart = part; // if from a package, this will be null;
this.relationshipId = relationshipId;
this.relationshipType = relationshipType;
this.target = target;
this.targetMode = targetMode;
if (!targetMode) {
this.targetMode = "Internal";
}
var workingTarget = target;
var workingCurrentPath;
if (this.fromPkg) {
workingCurrentPath = "/";
}
if (this.fromPart) {
var slashIndex = this.fromPart.uri.lastIndexOf('/');
if (slashIndex === -1) {
workingCurrentPath = "/";
} else {
workingCurrentPath = this.fromPart.uri.substring(0, slashIndex) + "/";
}
}
if (targetMode === openXml.TargetMode.external) {
this.targetFullName = this.target;
return;
}
while (workingTarget.startsWith('../')) {
if (workingCurrentPath.endsWith('/')) {
workingCurrentPath = workingCurrentPath.substring(0, workingCurrentPath.length - 1);
}
var indexOfLastSlash = workingCurrentPath.lastIndexOf('/');
if (indexOfLastSlash === -1) {
throw "internal error when processing relationships";
}
workingCurrentPath = workingCurrentPath.substring(0, indexOfLastSlash + 1);
workingTarget = workingTarget.substring(3);
}
if (workingTarget.startsWith("/")) {
this.targetFullName = workingTarget;
} else {
this.targetFullName = workingCurrentPath + workingTarget;
}
}
openXml.OpenXmlRelationship.prototype.toXml = function(writer, name) {
writer.WriteXmlNodeStart(name);
if (this.relationshipId) {
writer.WriteXmlAttributeStringEncode("Id", this.relationshipId);
}
if (this.relationshipType) {
writer.WriteXmlAttributeString("Type", this.relationshipType);
}
if (this.target) {
writer.WriteXmlAttributeStringEncode("Target", this.target);
}
if (this.targetMode && this.targetMode !== openXml.TargetMode.internal) {
writer.WriteXmlAttributeString("TargetMode", this.targetMode);
}
writer.WriteXmlAttributesEnd(true);
};
openXml.OpenXmlRelationship.prototype.getFullPath = function() {
return this.targetFullName;
};
openXml.MimeTypes = {
"bmp": "image/bmp",
"gif": "image/gif",
"png": "image/png",
"tif": "image/tiff",
"tiff": "image/tiff",
"jpeg": "image/jpeg",
"jpg": "image/jpeg",
"jpe": "image/jpeg",
"jfif": "image/jpeg",
"rels": "application/vnd.openxmlformats-package.relationships+xml",
"bin": "application/vnd.openxmlformats-officedocument.oleObject",
"xml": "application/xml",
"emf": "image/x-emf",
"emz": "image/x-emz",
"wmf": "image/x-wmf",
"svg": "image/svg+xml",
"svm": "image/svm",
"wdp": "image/vnd.ms-photo",
"wav": "audio/wav",
"wma": "audio/x-wma",
"m4a": "audio/unknown",
"mp3": "audio/mpeg",
"mp4": "video/unknown",
"mov": "video/unknown",
"m4v": "video/unknown",
"mkv": "video/unknown",
"avi": "video/avi",
"flv": "video/x-flv",
"wmv": "video/x-wmv",
"webm": "video/webm",
"xls": "application/vnd.ms-excel",
"xlsm": "application/vnd.ms-excel.sheet.macroEnabled.12",
"xlsb": "application/vnd.ms-excel.sheet.binary.macroEnabled.12",
"xlsx": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
"ppt": "application/vnd.ms-powerpoint",
"pptm": "application/vnd.ms-powerpoint.presentation.macroEnabled.12",
"pptx": "application/vnd.openxmlformats-officedocument.presentationml.presentation",
"sldm": "application/vnd.ms-powerpoint.slide.macroEnabled.12",
"sldx": "application/vnd.openxmlformats-officedocument.presentationml.slide",
"doc": "application/msword",
"docm": "application/vnd.ms-word.document.macroEnabled.12",
"docx": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
"vml": "application/vnd.openxmlformats-officedocument.vmlDrawing",
"vsd": "application/vnd.visio",
"vsdx": "application/vnd.ms-visio.drawing"
};
openXml.GetMimeType = function(ext) {
return openXml.MimeTypes[ext] || "application/octet-stream";
};
/******************************** OpenXmlRelationship ********************************/
openXml.Types = {
calculationChain: {dir: "", filename: "calcChain.xml", contentType: "application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/calcChain"},
cellMetadata: {dir: "", filename: "cellMetadata.xml", contentType: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/sheetMetadata"},
chart: {dir: "../charts", filename: "chart[N].xml", contentType: "application/vnd.openxmlformats-officedocument.drawingml.chart+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart"},
chartEx: {dir: "../charts", filename: "chartEx[N].xml", contentType: "application/vnd.ms-office.chartex+xml", relationType: "http://schemas.microsoft.com/office/2014/relationships/chartEx"},
chartWord: {dir: "charts", filename: "chart[N].xml", contentType: "application/vnd.openxmlformats-officedocument.drawingml.chart+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart"},
chartColorStyle: {dir: "", filename: "color[N].xml", contentType: "application/vnd.ms-office.chartcolorstyle+xml", relationType: "http://schemas.microsoft.com/office/2011/relationships/chartColorStyle"},
chartExColorStyle: {dir: "", filename: "colors[N].xml", contentType: "application/vnd.ms-office.chartcolorstyle+xml", relationType: "http://schemas.microsoft.com/office/2011/relationships/chartColorStyle"},
chartDrawing: {dir: "../drawings", filename: "drawing[N].xml", contentType: "application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/chartUserShapes", enumerateType: "drawings/drawing"},
chartsheet: {dir: "chartsheets", filename: "sheet[N].xml", contentType: "application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/chartsheet"},
chartStyle: {dir: "", filename: "style[N].xml", contentType: "application/vnd.ms-office.chartstyle+xml", relationType: "http://schemas.microsoft.com/office/2011/relationships/chartStyle"},
commentAuthors: {dir: "", filename: "commentAuthors.xml", contentType: "application/vnd.openxmlformats-officedocument.presentationml.commentAuthors+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/commentAuthors"},
connections: {dir: "", filename: "connections.xml", contentType: "application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/connections"},
coreFileProperties: {dir: "docProps", filename: "core.xml", contentType: "application/vnd.openxmlformats-package.core-properties+xml", relationType: "http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties"},
customFileProperties: {dir: "docProps", filename: "custom.xml", contentType: "application/vnd.openxmlformats-officedocument.custom-properties+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties"},
customization: {dir: "", filename: "customization.xml", contentType: "application/vnd.ms-word.keyMapCustomizations+xml", relationType: "http://schemas.microsoft.com/office/2006/relationships/keyMapCustomizations"},
customProperty: {dir: "", filename: "customProperty.xml", contentType: "application/vnd.openxmlformats-officedocument.spreadsheetml.customProperty", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/customProperty"},
customXmlProperties: {dir: "", filename: "customXmlProperties.xml", contentType: "application/vnd.openxmlformats-officedocument.customXmlProperties+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXmlProps"},
diagramColors: {dir: "diagrams", filename: "colors[N].xml", contentType: "application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/diagramColors"},
diagramData: {dir: "diagrams", filename: "data[N].xml", contentType: "application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/diagramData"},
diagramLayoutDefinition: {dir: "diagrams", filename: "layout[N].xml", contentType: "application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/diagramLayout"},
diagramPersistLayout: {dir: "diagrams", filename: "drawing[N].xml", contentType: "application/vnd.ms-office.drawingml.diagramDrawing+xml", relationType: "http://schemas.microsoft.com/office/2007/relationships/diagramDrawing"},
diagramStyle: {dir: "diagrams", filename: "quickStyle[N].xml", contentType: "application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/diagramQuickStyle"},
dialogsheet: {dir: "", filename: "dialogsheet.xml", contentType: "application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/dialogsheet"},
digitalSignatureOrigin: {dir: "", filename: "digitalSignatureOrigin.xml", contentType: "application/vnd.openxmlformats-package.digital-signature-origin", relationType: "http://schemas.openxmlformats.org/package/2006/relationships/digital-signature/origin"},
documentSettings: {dir: "", filename: "settings.xml", contentType: "application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings"},
drawings: {dir: "../drawings", filename: "drawing[N].xml", contentType: "application/vnd.openxmlformats-officedocument.drawing+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing", enumerateType: "drawings/drawing"},
endnotes: {dir: "", filename: "endnotes.xml", contentType: "application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/endnotes"},
excelAttachedToolbars: {dir: "", filename: "excelAttachedToolbars.xml", contentType: "application/vnd.ms-excel.attachedToolbars", relationType: "http://schemas.microsoft.com/office/2006/relationships/attachedToolbars"},
extendedFileProperties: {dir: "docProps", filename: "app.xml", contentType: "application/vnd.openxmlformats-officedocument.extended-properties+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties"},
externalWorkbook: {dir: "externalLinks", filename: "externalLink[N].xml", contentType: "application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLink"},
fontData: {dir: "", filename: "fontData.xml", contentType: "application/x-fontdata"},
fontTable: {dir: "", filename: "fontTable.xml", contentType: "application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable"},
footer: {dir: "", filename: "footer[N].xml", contentType: "application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer"},
footnotes: {dir: "", filename: "footnotes.xml", contentType: "application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/footnotes"},
gif: {dir: "", filename: "gif.xml", contentType: "image/gif"},
glossaryDocument: {dir: "glossary", filename: "document.xml", contentType: "application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/glossaryDocument"},
handoutMaster: {dir: "", filename: "handoutMaster.xml", contentType: "application/vnd.openxmlformats-officedocument.presentationml.handoutMaster+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/handoutMaster"},
header: {dir: "", filename: "header[N].xml", contentType: "application/vnd.openxmlformats-officedocument.wordprocessingml.header+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/header"},
jpeg: {dir: "", filename: "jpeg.xml", contentType: "image/jpeg"},
mainDocument: {dir: "word", filename: "document.xml", contentType: "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument"},
notesMaster: {dir: "notesMasters", filename: "notesMaster[N].xml", contentType: "application/vnd.openxmlformats-officedocument.presentationml.notesMaster+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesMaster"},
notesSlide: {dir: "notesSlides", filename: "notesSlide[N].xml", contentType: "application/vnd.openxmlformats-officedocument.presentationml.notesSlide+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesSlide"},
numbering: {dir: "", filename: "numbering.xml", contentType: "application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/numbering"},
pict: {dir: "", filename: "pict.xml", contentType: "image/pict"},
pivotTable: {dir: "../pivotTables", filename: "pivotTable[N].xml", contentType: "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/pivotTable"},
pivotTableCacheDefinition: {dir: "../pivotCache", filename: "pivotCacheDefinition[N].xml", contentType: "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/pivotCacheDefinition"},
pivotTableCacheDefinitionWorkbook: {dir: "pivotCache", filename: "pivotCacheDefinition[N].xml", contentType: "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/pivotCacheDefinition"},
pivotTableCacheRecords: {dir: "", filename: "pivotCacheRecords[N].xml", contentType: "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheRecords+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/pivotCacheRecords"},
package: {dir: "../embeddings", filename: "Embedding[N].xlsx", contentType: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/package"},
png: {dir: "", filename: "png.xml", contentType: "image/png"},
presentation: {dir: "ppt", filename: "presentation.xml", contentType: "application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument"},
presentationProperties: {dir: "", filename: "presProps.xml", contentType: "application/vnd.openxmlformats-officedocument.presentationml.presProps+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/presProps"},
presentationTemplate: {dir: "", filename: "presentationTemplate.xml", contentType: "application/vnd.openxmlformats-officedocument.presentationml.template.main+xml"},
queryTable: {dir: "../queryTables", filename: "queryTable[N].xml", contentType: "application/vnd.openxmlformats-officedocument.spreadsheetml.queryTable+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/queryTable"},
relationships: {dir: "_rels", filename: ".rels", contentType: "application/vnd.openxmlformats-package.relationships+xml"},
ribbonAndBackstageCustomizations: {dir: "", filename: "ribbonAndBackstageCustomizations.xml", contentType: "http://schemas.microsoft.com/office/2009/07/customui", relationType: "http://schemas.microsoft.com/office/2007/relationships/ui/extensibility"},
sharedStringTable: {dir: "", filename: "sharedStrings.xml", contentType: "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings"},
singleCellTable: {dir: "", filename: "singleCellTable.xml", contentType: "application/vnd.openxmlformats-officedocument.spreadsheetml.tableSingleCells+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/tableSingleCells"},
slicerCache: {dir: "slicerCaches", filename: "slicerCache[N].xml", contentType: "application/vnd.ms-excel.slicerCache+xml", relationType: "http://schemas.microsoft.com/office/2007/relationships/slicerCache"},
slicers: {dir: "../slicers", filename: "slicer[N].xml", contentType: "application/vnd.ms-excel.slicer+xml", relationType: "http://schemas.microsoft.com/office/2007/relationships/slicer"},
slide: {dir: "slides", filename: "slide[N].xml", contentType: "application/vnd.openxmlformats-officedocument.presentationml.slide+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/slide"},
slideComments: {dir: "comments", filename: "slideComments.xml", contentType: "application/vnd.openxmlformats-officedocument.presentationml.comments+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments"},
slideLayout: {dir: "slideLayouts", filename: "slideLayout[N].xml", contentType: "application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout"},
slideMaster: {dir: "slideMasters", filename: "slideMaster[N].xml", contentType: "application/vnd.openxmlformats-officedocument.presentationml.slideMaster+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster"},
slideShow: {dir: "", filename: "slideShow.xml", contentType: "application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml"},
slideSyncData: {dir: "", filename: "slideSyncData.xml", contentType: "application/vnd.openxmlformats-officedocument.presentationml.slideUpdateInfo+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideUpdateInfo"},
styles: {dir: "", filename: "styles.xml", contentType: "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles"},
tableDefinition: {dir: "../tables", filename: "table[N].xml", contentType: "application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/table"},
tableStyles: {dir: "", filename: "tableStyles.xml", contentType: "application/vnd.openxmlformats-officedocument.presentationml.tableStyles+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/tableStyles"},
theme: {dir: "theme", filename: "theme[N].xml", contentType: "application/vnd.openxmlformats-officedocument.theme+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme"},
themeOverride: {dir: "../theme", filename: "themeOverride[N].xml", contentType: "application/vnd.openxmlformats-officedocument.themeOverride+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/themeOverride"},
tiff: {dir: "", filename: "tiff.xml", contentType: "image/tiff"},
trueTypeFont: {dir: "", filename: "trueTypeFont.xml", contentType: "application/x-font-ttf"},
userDefinedTags: {dir: "", filename: "userDefinedTags.xml", contentType: "application/vnd.openxmlformats-officedocument.presentationml.tags+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/tags"},
viewProperties: {dir: "", filename: "viewProps.xml", contentType: "application/vnd.openxmlformats-officedocument.presentationml.viewProps+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/viewProps"},
vmlDrawing: {dir: "../drawings", filename: "vmlDrawing[N].vml", contentType: "application/vnd.openxmlformats-officedocument.vmlDrawing", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing"},
volatileDependencies: {dir: "", filename: "volatileDependencies.xml", contentType: "application/vnd.openxmlformats-officedocument.spreadsheetml.volatileDependencies+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/volatileDependencies"},
webSettings: {dir: "", filename: "webSettings.xml", contentType: "application/vnd.openxmlformats-officedocument.wordprocessingml.webSettings+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/webSettings"},
wordAttachedToolbars: {dir: "", filename: "wordAttachedToolbars.xml", contentType: "application/vnd.ms-word.attachedToolbars", relationType: "http://schemas.microsoft.com/office/2006/relationships/attachedToolbars"},
wordComments: {dir: "", filename: "comments.xml", contentType: "application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments"},
wordCommentsExtended: {dir: "", filename: "commentsExtended.xml", contentType: "application/vnd.openxmlformats-officedocument.wordprocessingml.commentsExtended+xml", relationType: "http://schemas.microsoft.com/office/2011/relationships/commentsExtended"},
wordCommentsExtensible: {dir: "", filename: "commentsExtensible.xml", contentType: "application/vnd.openxmlformats-officedocument.wordprocessingml.commentsExtensible+xml", relationType: "http://schemas.microsoft.com/office/2018/08/relationships/commentsExtensible"},
wordCommentsIds: {dir: "", filename: "commentsIds.xml", contentType: "application/vnd.openxmlformats-officedocument.wordprocessingml.commentsIds+xml", relationType: "http://schemas.microsoft.com/office/2016/09/relationships/commentsIds"},
wordPackage: {dir: "embeddings", filename: "Embedding[N].xlsx", contentType: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/package"},
wordPeople: {dir: "", filename: "people.xml", contentType: "application/vnd.openxmlformats-officedocument.wordprocessingml.people+xml", relationType: "http://schemas.microsoft.com/office/2011/relationships/people"},
wordprocessingTemplate: {dir: "", filename: "wordprocessingTemplate.xml", contentType: "application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml"},
workbook: {dir: "xl", filename: "workbook.xml", contentType: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument"},
workbookRevisionHeader: {dir: "", filename: "workbookRevisionHeader.xml", contentType: "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionHeaders+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/revisionHeaders"},
workbookRevisionLog: {dir: "", filename: "workbookRevisionLog.xml", contentType: "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionLog+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/revisionLog"},
workbookStyles: {dir: "", filename: "styles.xml", contentType: "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles"},
workbookTemplate: {dir: "", filename: "workbookTemplate.xml", contentType: "application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml"},
workbookUserData: {dir: "", filename: "workbookUserData.xml", contentType: "application/vnd.openxmlformats-officedocument.spreadsheetml.userNames+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/usernames"},
worksheet: {dir: "worksheets", filename: "sheet[N].xml", contentType: "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet"},
worksheetComments: {dir: "..", filename: "comments[N].xml", contentType: "application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments"},
worksheetSortMap: {dir: "", filename: "worksheetSortMap.xml", contentType: "application/vnd.ms-excel.wsSortMap+xml", relationType: "http://schemas.microsoft.com/office/2006/relationships/wsSortMap"},
xmlSignature: {dir: "", filename: "xmlSignature.xml", contentType: "application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml", relationType: "http://schemas.openxmlformats.org/package/2006/relationships/digital-signature/signature"},
hyperlink: {dir: "", filename: "", contentType: "", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink"},
metadata: {dir: "xl", filename: "metadata.xml", contentType: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/sheetMetadata"},
threadedComment: {dir: "../threadedComments", filename: "threadedComment[N].xml", contentType: "application/vnd.ms-excel.threadedcomments+xml", relationType: "http://schemas.microsoft.com/office/2017/10/relationships/threadedComment"},
person: {dir: "../persons", filename: "person.xml", contentType: "application/vnd.ms-excel.person+xml", relationType: "http://schemas.microsoft.com/office/2017/10/relationships/person"},
ctrlProp: {dir: "../ctrlProps", filename: "ctrlProp[N].xml", contentType: "application/vnd.ms-excel.controlproperties+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/ctrlProp"},
namedSheetViews: {dir: "../namedSheetViews", filename: "namedSheetView[N].xml", contentType: "application/vnd.ms-excel.namedsheetviews+xml", relationType: "http://schemas.microsoft.com/office/2019/04/relationships/namedSheetView"},
workbookComment: {dir: "", filename: "workbookComments.bin", contentType: "application/octet-stream", relationType: "http://schemas.onlyoffice.com/workbookComments"},
timelines: {dir: "../timelines", filename: "timeline[N].xml", contentType: "application/vnd.ms-excel.timeline+xml", relationType: "http://schemas.microsoft.com/office/2011/relationships/timeline"},
timelineCaches: {dir: "timelineCaches", filename: "timelineCache[N].xml", contentType: "application/vnd.ms-excel.timelineCache+xml", relationType: "http://schemas.microsoft.com/office/2011/relationships/timelineCache"},
jsaProject: {dir: "", filename: "jsaProject.bin", contentType: "application/octet-stream", relationType: "http://schemas.onlyoffice.com/jsaProject"},
vbaProject: {dir: "", filename: "vbaProject.bin", contentType: "application/octet-stream", relationType: "http://schemas.microsoft.com/office/2006/relationships/vbaProject"},
customXml: {dir: "../customXml", filename: "item[N].xml", /*contentType: "application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml",*/ relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml"},
customXmlProps: {dir: "", filename: "itemProps[N].xml", contentType: "application/vnd.openxmlformats-officedocument.customXmlProperties+xml", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXmlProps"},
//todo
image: {dir: "../media", filename: "image[N].", contentType: "image/jpeg", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/image"},
imageWord: {dir: "media", filename: "image[N].", contentType: "image/jpeg", relationType: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/image"},
//onlyf
oformMain: {dir: "oform", filename: "main.xml", contentType: "application/vnd.openxmlformats-package.onlyf+xml", relationType: "https://schemas.onlyoffice.com/relationships/oform-main"},
oformDefaultUserMaster: {dir: "oform/userMasters", filename: "default.xml", contentType: "application/vnd.openxmlformats-package.onlyf-default-userMaster+xml", relationType: "https://schemas.onlyoffice.com/relationships/oform-default-userMaster"},
oformUserMaster: {dir: "oform/userMasters", filename: "userMaster[N].xml", contentType: "application/vnd.openxmlformats-package.onlyf-userMaster+xml", relationType: "https://schemas.onlyoffice.com/relationships/oform-userMaster"},
oformUser: {dir: "oform/users", filename: "user[N].xml", /*contentType: "application/vnd.openxmlformats-package.onlyf-user+xml",*/ relationType: "https://schemas.onlyoffice.com/relationships/oform-user"},
oformField: {dir: "oform/fields", filename: "field[N].xml", /*contentType: "application/vnd.openxmlformats-package.onlyf-field+xml",*/ relationType: "https://schemas.onlyoffice.com/relationships/oform-field"},
oformFieldMaster: {dir: "oform/fieldMasters", filename: "fieldMaster[N].xml", contentType: "application/vnd.openxmlformats-package.onlyf-fieldMaster+xml", relationType: "https://schemas.onlyoffice.com/relationships/oform-fieldMaster"},
//visio
visioDocument: {dir: "visio", filename: "document.xml", contentType: "application/vnd.ms-visio.drawing.main+xml", relationType: "http://schemas.microsoft.com/visio/2010/relationships/document"},
visioDocumentWindows: {dir: "", filename: "windows.xml", contentType: "application/vnd.ms-visio.windows+xml", relationType: "http://schemas.microsoft.com/visio/2010/relationships/windows"},
pages: {dir: "pages", filename: "pages.xml", contentType: "application/vnd.ms-visio.pages+xml", relationType: "http://schemas.microsoft.com/visio/2010/relationships/pages"},
page: {dir: "", filename: "page[N].xml", contentType: "application/vnd.ms-visio.page+xml", relationType: "http://schemas.microsoft.com/visio/2010/relationships/page"},
masters: {dir: "masters", filename: "masters.xml", contentType: "application/vnd.ms-visio.masters+xml", relationType: "http://schemas.microsoft.com/visio/2010/relationships/masters"},
master: {dir: "", filename: "master[N].xml", contentType: "application/vnd.ms-visio.master+xml", relationType: "http://schemas.microsoft.com/visio/2010/relationships/master"},
masterFromPage: {dir: "../masters", filename: "master[N].xml", contentType: "application/vnd.ms-visio.master+xml", relationType: "http://schemas.microsoft.com/visio/2010/relationships/master"},
thumbnail: {dir: "docProps", filename: "thumbnail.emf", contentType: "image/x-emf", relationType: "http://schemas.openxmlformats.org/package/2006/relationships/metadata/thumbnail"},
visioComments: {dir: "", filename: "comments.xml", contentType: "application/vnd.ms-visio.comments+xml", relationType: "http://schemas.microsoft.com/visio/2010/relationships/comments"},
visioExtensions: {dir: "", filename: "extensions.xml", contentType: "application/vnd.ms-visio.extensions+xml", relationType: "http://schemas.microsoft.com/visio/2010/relationships/extensions"},
visioDataConnections: {dir: "data", filename: "connections.xml", contentType: "application/vnd.ms-visio.connections+xml", relationType : "http://schemas.microsoft.com/visio/2010/relationships/connections"},
visioDataRecordSets : {dir: "data", filename: "recordsets.xml", contentType: "application/vnd.ms-visio.recordsets+xml", relationType: "http://schemas.microsoft.com/visio/2010/relationships/recordsets"},
solutions: {dir: "solutions", filename: "solutions.xml", contentType: "application/vnd.ms-visio.solutions+xml", relationType: "http://schemas.microsoft.com/visio/2010/relationships/solutions"},
solution: {dir: "", filename: "solution[N].xml", contentType: "application/vnd.ms-visio.solution+xml", relationType: "http://schemas.microsoft.com/visio/2010/relationships/solution"},
validation : {dir: "", filename: "validation.xml", contentType: "application/vnd.ms-visio.validation+xml", relationType: "http://schemas.microsoft.com/visio/2010/relationships/validation"}
};
openXml.TargetMode = {
internal: "Internal",
external: "External"
};
openXml.IsEqualRelationshipType = function(relationshipType1, relationshipType2) {
//https://github.com/ONLYOFFICE/core/blob/7a822494aabb1edce441a12e44aa05c3a6501766/OOXML/DocxFormat/FileType.h#L95
//RelationType
//http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument
//http://purl.oclc.org/ooxml/officeDocument/relationships/officeDocument
//is valid and equal so compare tail
//docs: If either or both of the arguments are negative or NaN, the substring() method treats them as if they were 0.
const tail1 = relationshipType1.substring(relationshipType1.lastIndexOf("/") + 1);
const tail2 = relationshipType2.substring(relationshipType2.lastIndexOf("/") + 1);
return tail1 === tail2;
};
//----------------------------------------------------------export----------------------------------------------------
var prot;
window['AscCommon'] = window['AscCommon'] || {};
window['AscCommon']['openXml'] = window['AscCommon'].openXml = openXml;
prot = openXml;
prot['GetMimeType'] = prot.GetMimeType;
}(window));