2014-02-12 12:27:43 -05:00
|
|
|
request = require "request"
|
|
|
|
fs = require "fs"
|
2014-04-02 16:55:14 -04:00
|
|
|
Settings = require "settings-sharelatex"
|
2014-02-12 12:27:43 -05:00
|
|
|
|
|
|
|
host = "localhost"
|
|
|
|
|
|
|
|
module.exports = Client =
|
2014-04-02 16:55:14 -04:00
|
|
|
host: Settings.apis.clsi.url
|
2014-02-12 12:27:43 -05:00
|
|
|
|
|
|
|
randomId: () ->
|
|
|
|
Math.random().toString(16).slice(2)
|
|
|
|
|
|
|
|
compile: (project_id, data, callback = (error, res, body) ->) ->
|
|
|
|
request.post {
|
|
|
|
url: "#{@host}/project/#{project_id}/compile"
|
|
|
|
json:
|
|
|
|
compile: data
|
|
|
|
}, callback
|
|
|
|
|
|
|
|
clearCache: (project_id, callback = (error, res, body) ->) ->
|
|
|
|
request.del "#{@host}/project/#{project_id}", callback
|
|
|
|
|
|
|
|
getOutputFile: (response, type) ->
|
|
|
|
for file in response.compile.outputFiles
|
|
|
|
if file.type == type
|
|
|
|
return file
|
|
|
|
return null
|
|
|
|
|
|
|
|
runServer: (port, directory) ->
|
|
|
|
express = require("express")
|
|
|
|
app = express()
|
|
|
|
app.use express.static(directory)
|
|
|
|
app.listen(port, host)
|
|
|
|
|
|
|
|
compileDirectory: (project_id, baseDirectory, directory, serverPort, callback = (error, res, body) ->) ->
|
|
|
|
resources = []
|
|
|
|
entities = fs.readdirSync("#{baseDirectory}/#{directory}")
|
|
|
|
rootResourcePath = "main.tex"
|
|
|
|
while (entities.length > 0)
|
|
|
|
entity = entities.pop()
|
|
|
|
stat = fs.statSync("#{baseDirectory}/#{directory}/#{entity}")
|
|
|
|
if stat.isDirectory()
|
|
|
|
entities = entities.concat fs.readdirSync("#{baseDirectory}/#{directory}/#{entity}").map (subEntity) ->
|
|
|
|
if subEntity == "main.tex"
|
|
|
|
rootResourcePath = "#{entity}/#{subEntity}"
|
|
|
|
return "#{entity}/#{subEntity}"
|
|
|
|
else if stat.isFile() and entity != "output.pdf"
|
|
|
|
extension = entity.split(".").pop()
|
|
|
|
if ["tex", "bib", "cls", "sty", "pdf_tex", "Rtex"].indexOf(extension) > -1
|
|
|
|
resources.push
|
|
|
|
path: entity
|
|
|
|
content: fs.readFileSync("#{baseDirectory}/#{directory}/#{entity}").toString()
|
|
|
|
else if ["eps", "ttf", "png", "jpg", "pdf", "jpeg"].indexOf(extension) > -1
|
|
|
|
resources.push
|
|
|
|
path: entity
|
|
|
|
url: "http://#{host}:#{serverPort}/#{directory}/#{entity}"
|
|
|
|
modified: stat.mtime
|
|
|
|
|
|
|
|
fs.readFile "#{baseDirectory}/#{directory}/options.json", (error, body) =>
|
|
|
|
req =
|
|
|
|
resources: resources
|
|
|
|
rootResourcePath: rootResourcePath
|
|
|
|
|
|
|
|
if !error?
|
|
|
|
body = JSON.parse body
|
|
|
|
req.options = body
|
|
|
|
|
|
|
|
@compile project_id, req, callback
|
|
|
|
|