2020-02-19 06:14:14 -05:00
|
|
|
/*
|
|
|
|
* decaffeinate suggestions:
|
|
|
|
* DS102: Remove unnecessary code created because of implicit returns
|
|
|
|
* DS207: Consider shorter variations of null checks
|
|
|
|
* Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
|
|
|
|
*/
|
|
|
|
let DraftModeManager;
|
|
|
|
const fs = require("fs");
|
|
|
|
const logger = require("logger-sharelatex");
|
2016-02-02 09:26:14 -05:00
|
|
|
|
2020-02-19 06:14:14 -05:00
|
|
|
module.exports = (DraftModeManager = {
|
|
|
|
injectDraftMode(filename, callback) {
|
|
|
|
if (callback == null) { callback = function(error) {}; }
|
|
|
|
return fs.readFile(filename, "utf8", function(error, content) {
|
|
|
|
if (error != null) { return callback(error); }
|
|
|
|
// avoid adding draft mode more than once
|
|
|
|
if ((content != null ? content.indexOf("\\documentclass\[draft") : undefined) >= 0) {
|
|
|
|
return callback();
|
|
|
|
}
|
|
|
|
const modified_content = DraftModeManager._injectDraftOption(content);
|
|
|
|
logger.log({
|
|
|
|
content: content.slice(0,1024), // \documentclass is normally v near the top
|
2016-02-02 09:26:14 -05:00
|
|
|
modified_content: modified_content.slice(0,1024),
|
|
|
|
filename
|
2020-02-19 06:14:14 -05:00
|
|
|
}, "injected draft class");
|
|
|
|
return fs.writeFile(filename, modified_content, callback);
|
|
|
|
});
|
|
|
|
},
|
2016-02-02 09:26:14 -05:00
|
|
|
|
2020-02-19 06:14:14 -05:00
|
|
|
_injectDraftOption(content) {
|
|
|
|
return content
|
|
|
|
// With existing options (must be first, otherwise both are applied)
|
2016-02-02 10:28:59 -05:00
|
|
|
.replace(/\\documentclass\[/g, "\\documentclass[draft,")
|
2020-02-19 06:14:14 -05:00
|
|
|
// Without existing options
|
|
|
|
.replace(/\\documentclass\{/g, "\\documentclass[draft]{");
|
|
|
|
}
|
|
|
|
});
|