mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-21 20:47:08 -05:00
Merge pull request #75 from dfelder/master
compile current file if top level document #42
This commit is contained in:
commit
22c467c231
8 changed files with 56 additions and 19 deletions
11
services/web/app/coffee/Features/Compile/ClsiManager.coffee
Normal file → Executable file
11
services/web/app/coffee/Features/Compile/ClsiManager.coffee
Normal file → Executable file
|
@ -8,8 +8,8 @@ logger = require "logger-sharelatex"
|
|||
url = require("url")
|
||||
|
||||
module.exports = ClsiManager =
|
||||
sendRequest: (project_id, callback = (error, success) ->) ->
|
||||
ClsiManager._buildRequest project_id, (error, req) ->
|
||||
sendRequest: (project_id, settingsOverride = {}, callback = (error, success) ->) ->
|
||||
ClsiManager._buildRequest project_id, settingsOverride, (error, req) ->
|
||||
return callback(error) if error?
|
||||
logger.log project_id: project_id, "sending compile to CLSI"
|
||||
ClsiManager._postToClsi project_id, req, (error, response) ->
|
||||
|
@ -52,7 +52,7 @@ module.exports = ClsiManager =
|
|||
return outputFiles
|
||||
|
||||
VALID_COMPILERS: ["pdflatex", "latex", "xelatex", "lualatex"]
|
||||
_buildRequest: (project_id, callback = (error, request) ->) ->
|
||||
_buildRequest: (project_id, settingsOverride={}, callback = (error, request) ->) ->
|
||||
Project.findById project_id, {compiler: 1, rootDoc_id: 1}, (error, project) ->
|
||||
return callback(error) if error?
|
||||
return callback(new Errors.NotFoundError("project does not exist: #{project_id}")) if !project?
|
||||
|
@ -67,6 +67,7 @@ module.exports = ClsiManager =
|
|||
|
||||
resources = []
|
||||
rootResourcePath = null
|
||||
rootResourcePathOverride = null
|
||||
|
||||
for path, doc of docs
|
||||
path = path.replace(/^\//, "") # Remove leading /
|
||||
|
@ -75,6 +76,10 @@ module.exports = ClsiManager =
|
|||
content: doc.lines.join("\n")
|
||||
if project.rootDoc_id? and doc._id.toString() == project.rootDoc_id.toString()
|
||||
rootResourcePath = path
|
||||
if settingsOverride.rootDoc_id? and doc._id.toString() == settingsOverride.rootDoc_id.toString()
|
||||
rootResourcePathOverride = path
|
||||
|
||||
rootResourcePath = rootResourcePathOverride if rootResourcePathOverride?
|
||||
|
||||
for path, file of files
|
||||
path = path.replace(/^\//, "") # Remove leading /
|
||||
|
|
4
services/web/app/coffee/Features/Compile/CompileController.coffee
Normal file → Executable file
4
services/web/app/coffee/Features/Compile/CompileController.coffee
Normal file → Executable file
|
@ -11,9 +11,11 @@ module.exports = CompileController =
|
|||
compile: (req, res, next = (error) ->) ->
|
||||
project_id = req.params.Project_id
|
||||
isAutoCompile = !!req.query?.auto_compile
|
||||
settingsOverride = req.body?.settingsOverride ? {};
|
||||
logger.log "root doc overriden" if settingsOverride.rootDoc_id?
|
||||
AuthenticationController.getLoggedInUserId req, (error, user_id) ->
|
||||
return next(error) if error?
|
||||
CompileManager.compile project_id, user_id, { isAutoCompile }, (error, status, outputFiles) ->
|
||||
CompileManager.compile project_id, user_id, { isAutoCompile, settingsOverride }, (error, status, outputFiles) ->
|
||||
return next(error) if error?
|
||||
res.contentType("application/json")
|
||||
res.send 200, JSON.stringify {
|
||||
|
|
4
services/web/app/coffee/Features/Compile/CompileManager.coffee
Normal file → Executable file
4
services/web/app/coffee/Features/Compile/CompileManager.coffee
Normal file → Executable file
|
@ -25,12 +25,12 @@ module.exports = CompileManager =
|
|||
return callback(error) if error?
|
||||
if recentlyCompiled
|
||||
return callback new Error("project was recently compiled so not continuing")
|
||||
|
||||
|
||||
CompileManager._ensureRootDocumentIsSet project_id, (error) ->
|
||||
return callback(error) if error?
|
||||
DocumentUpdaterHandler.flushProjectToMongo project_id, (error) ->
|
||||
return callback(error) if error?
|
||||
ClsiManager.sendRequest project_id, (error, status, outputFiles) ->
|
||||
ClsiManager.sendRequest project_id, opt.settingsOverride, (error, status, outputFiles) ->
|
||||
return callback(error) if error?
|
||||
logger.log files: outputFiles, "output files"
|
||||
callback(null, status, outputFiles)
|
||||
|
|
7
services/web/public/coffee/pdf/CompiledView.coffee
Normal file → Executable file
7
services/web/public/coffee/pdf/CompiledView.coffee
Normal file → Executable file
|
@ -204,7 +204,12 @@ define [
|
|||
|
||||
recompilePdf: () ->
|
||||
@options.manager.trigger "compile:pdf"
|
||||
@options.manager.refreshPdf()
|
||||
rootDocOverride_id = null
|
||||
for line in @ide.editor.getLines()
|
||||
match = line.match /(.*)\\documentclass/
|
||||
if match and !match[1].match /%/
|
||||
rootDocOverride_id = @ide.editor.getCurrentDocId()
|
||||
@options.manager.refreshPdf {rootDocOverride_id}
|
||||
|
||||
toggleFlatViewButton: () -> @$("#flatViewButton").button("toggle")
|
||||
toggleSplitViewButton: () -> @$("#splitViewButton").button("toggle")
|
||||
|
|
|
@ -143,7 +143,7 @@ define [
|
|||
@view.onCompiling()
|
||||
@syncButtonsView?.hide()
|
||||
@compiling = true
|
||||
@_doCompile opts.isAutoCompile, (error, status, outputFiles) =>
|
||||
@_doCompile opts, (error, status, outputFiles) =>
|
||||
@compiling = false
|
||||
doneCompiling()
|
||||
|
||||
|
@ -172,16 +172,19 @@ define [
|
|||
if outputFiles?
|
||||
@view.showOutputFileDownloadLinks(outputFiles)
|
||||
|
||||
_doCompile: (isAutoCompile, callback = (error, status, outputFiles) ->) ->
|
||||
_doCompile: (opts, callback = (error, status, outputFiles) ->) ->
|
||||
url = "/project/#{@ide.project_id}/compile"
|
||||
if isAutoCompile
|
||||
if opts.isAutoCompile
|
||||
url += "?auto_compile=true"
|
||||
$.ajax(
|
||||
url: url
|
||||
type: "POST"
|
||||
headers:
|
||||
"X-CSRF-Token": window.csrfToken
|
||||
contentType: "application/json; charset=utf-8"
|
||||
dataType: 'json'
|
||||
data: JSON.stringify settingsOverride:
|
||||
rootDoc_id: opts.rootDocOverride_id ? null
|
||||
success: (body, status, response) ->
|
||||
callback null, body.status, body.outputFiles
|
||||
error: (error) ->
|
||||
|
|
|
@ -24,7 +24,7 @@ describe "ClsiManager", ->
|
|||
|
||||
describe "sendRequest", ->
|
||||
beforeEach ->
|
||||
@ClsiManager._buildRequest = sinon.stub().callsArgWith(1, null, @request = "mock-request")
|
||||
@ClsiManager._buildRequest = sinon.stub().callsArgWith(2, null, @request = "mock-request")
|
||||
|
||||
describe "with a successful compile", ->
|
||||
beforeEach ->
|
||||
|
@ -39,7 +39,7 @@ describe "ClsiManager", ->
|
|||
type: "log"
|
||||
}]
|
||||
})
|
||||
@ClsiManager.sendRequest @project_id, @callback
|
||||
@ClsiManager.sendRequest @project_id, {}, @callback
|
||||
|
||||
it "should build the request", ->
|
||||
@ClsiManager._buildRequest
|
||||
|
@ -67,7 +67,7 @@ describe "ClsiManager", ->
|
|||
compile:
|
||||
status: @status = "failure"
|
||||
})
|
||||
@ClsiManager.sendRequest @project_id, @callback
|
||||
@ClsiManager.sendRequest @project_id, {}, @callback
|
||||
|
||||
it "should call the callback with a failure statue", ->
|
||||
@callback.calledWith(null, @status).should.equal true
|
||||
|
@ -121,7 +121,7 @@ describe "ClsiManager", ->
|
|||
|
||||
describe "with a valid project", ->
|
||||
beforeEach (done) ->
|
||||
@ClsiManager._buildRequest @project_id, (error, request) =>
|
||||
@ClsiManager._buildRequest @project_id, null, (error, request) =>
|
||||
@request = request
|
||||
done()
|
||||
|
||||
|
@ -159,10 +159,32 @@ describe "ClsiManager", ->
|
|||
}]
|
||||
)
|
||||
|
||||
|
||||
describe "when root doc override is valid", ->
|
||||
beforeEach (done) ->
|
||||
@ClsiManager._buildRequest @project_id, {rootDoc_id:"mock-doc-id-2"}, (error, request) =>
|
||||
@request = request
|
||||
done()
|
||||
|
||||
it "should change root path", ->
|
||||
@request.compile.rootResourcePath.should.equal "chapters/chapter1.tex"
|
||||
|
||||
|
||||
describe "when root doc override is invalid", ->
|
||||
beforeEach (done) ->
|
||||
@ClsiManager._buildRequest @project_id, {rootDoc_id:"invalid-id"}, (error, request) =>
|
||||
@request = request
|
||||
done()
|
||||
|
||||
it "should fallback to default root doc", ->
|
||||
@request.compile.rootResourcePath.should.equal "main.tex"
|
||||
|
||||
|
||||
|
||||
describe "when the project has an invalid compiler", ->
|
||||
beforeEach (done) ->
|
||||
@project.compiler = "context"
|
||||
@ClsiManager._buildRequest @project, (error, request) =>
|
||||
@ClsiManager._buildRequest @project, null, (error, request) =>
|
||||
@request = request
|
||||
done()
|
||||
|
||||
|
@ -172,7 +194,7 @@ describe "ClsiManager", ->
|
|||
describe "when there is no valid root document", ->
|
||||
beforeEach (done) ->
|
||||
@project.rootDoc_id = "not-valid"
|
||||
@ClsiManager._buildRequest @project, (@error, @request) =>
|
||||
@ClsiManager._buildRequest @project, null, (@error, @request) =>
|
||||
done()
|
||||
|
||||
it "should return an error", ->
|
||||
|
|
|
@ -44,7 +44,7 @@ describe "CompileController", ->
|
|||
|
||||
it "should do the compile without the auto compile flag", ->
|
||||
@CompileManager.compile
|
||||
.calledWith(@project_id, @user_id, { isAutoCompile: false })
|
||||
.calledWith(@project_id, @user_id, { isAutoCompile: false, settingsOverride:{} })
|
||||
.should.equal true
|
||||
|
||||
it "should set the content-type of the response to application/json", ->
|
||||
|
@ -71,7 +71,7 @@ describe "CompileController", ->
|
|||
|
||||
it "should do the compile with the auto compile flag", ->
|
||||
@CompileManager.compile
|
||||
.calledWith(@project_id, @user_id, { isAutoCompile: true })
|
||||
.calledWith(@project_id, @user_id, { isAutoCompile: true, settingsOverride:{} })
|
||||
.should.equal true
|
||||
|
||||
describe "downloadPdf", ->
|
||||
|
|
|
@ -36,7 +36,7 @@ describe "CompileManager", ->
|
|||
@CompileManager._checkIfRecentlyCompiled = sinon.stub().callsArgWith(2, null, false)
|
||||
@CompileManager._ensureRootDocumentIsSet = sinon.stub().callsArgWith(1, null)
|
||||
@DocumentUpdaterHandler.flushProjectToMongo = sinon.stub().callsArgWith(1, null)
|
||||
@ClsiManager.sendRequest = sinon.stub().callsArgWith(1, null, @status = "mock-status")
|
||||
@ClsiManager.sendRequest = sinon.stub().callsArgWith(2, null, @status = "mock-status")
|
||||
|
||||
describe "succesfully", ->
|
||||
beforeEach ->
|
||||
|
|
Loading…
Reference in a new issue