All new
alle new
This commit is contained in:
1 parent
da64472251
commit
5b20adee48
1605 files changed
+396517
-1674
No files matched your search
+75
@@ -0,0 +1,75 @@
|
||||
var _ = require("underscore");
|
||||
|
||||
var promises = require("../promises");
|
||||
var xml = require("../xml");
|
||||
|
||||
exports.writeStyleMap = writeStyleMap;
|
||||
exports.readStyleMap = readStyleMap;
|
||||
|
||||
|
||||
var schema = "http://schemas.zwobble.org/mammoth/style-map";
|
||||
var styleMapPath = "mammoth/style-map";
|
||||
var styleMapAbsolutePath = "/" + styleMapPath;
|
||||
|
||||
function writeStyleMap(docxFile, styleMap) {
|
||||
docxFile.write(styleMapPath, styleMap);
|
||||
return updateRelationships(docxFile).then(function() {
|
||||
return updateContentTypes(docxFile);
|
||||
});
|
||||
}
|
||||
|
||||
function updateRelationships(docxFile) {
|
||||
var path = "word/_rels/document.xml.rels";
|
||||
var relationshipsUri = "http://schemas.openxmlformats.org/package/2006/relationships";
|
||||
var relationshipElementName = "{" + relationshipsUri + "}Relationship";
|
||||
return docxFile.read(path, "utf8")
|
||||
.then(xml.readString)
|
||||
.then(function(relationshipsContainer) {
|
||||
var relationships = relationshipsContainer.children;
|
||||
addOrUpdateElement(relationships, relationshipElementName, "Id", {
|
||||
"Id": "rMammothStyleMap",
|
||||
"Type": schema,
|
||||
"Target": styleMapAbsolutePath
|
||||
});
|
||||
|
||||
var namespaces = {"": relationshipsUri};
|
||||
return docxFile.write(path, xml.writeString(relationshipsContainer, namespaces));
|
||||
});
|
||||
}
|
||||
|
||||
function updateContentTypes(docxFile) {
|
||||
var path = "[Content_Types].xml";
|
||||
var contentTypesUri = "http://schemas.openxmlformats.org/package/2006/content-types";
|
||||
var overrideName = "{" + contentTypesUri + "}Override";
|
||||
return docxFile.read(path, "utf8")
|
||||
.then(xml.readString)
|
||||
.then(function(typesElement) {
|
||||
var children = typesElement.children;
|
||||
addOrUpdateElement(children, overrideName, "PartName", {
|
||||
"PartName": styleMapAbsolutePath,
|
||||
"ContentType": "text/prs.mammoth.style-map"
|
||||
});
|
||||
var namespaces = {"": contentTypesUri};
|
||||
return docxFile.write(path, xml.writeString(typesElement, namespaces));
|
||||
});
|
||||
}
|
||||
|
||||
function addOrUpdateElement(elements, name, identifyingAttribute, attributes) {
|
||||
var existingElement = _.find(elements, function(element) {
|
||||
return element.name === name &&
|
||||
element.attributes[identifyingAttribute] === attributes[identifyingAttribute];
|
||||
});
|
||||
if (existingElement) {
|
||||
existingElement.attributes = attributes;
|
||||
} else {
|
||||
elements.push(xml.element(name, attributes));
|
||||
}
|
||||
}
|
||||
|
||||
function readStyleMap(docxFile) {
|
||||
if (docxFile.exists(styleMapPath)) {
|
||||
return docxFile.read(styleMapPath, "utf8");
|
||||
} else {
|
||||
return promises.resolve(null);
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user