mirror of
https://github.com/yu-i-i/overleaf-cep.git
synced 2026-11-14 22:23:42 +01:00
Merge branch 'master' into pr-ui-feedback-error-nav
This commit is contained in:
@@ -15,7 +15,7 @@ module.exports = ReferencesController =
|
|||||||
return res.sendStatus 400
|
return res.sendStatus 400
|
||||||
logger.log {projectId, docIds: docIds}, "index references for project"
|
logger.log {projectId, docIds: docIds}, "index references for project"
|
||||||
ReferencesHandler.index projectId, docIds, (err, data) ->
|
ReferencesHandler.index projectId, docIds, (err, data) ->
|
||||||
if err
|
if err?
|
||||||
logger.err {err, projectId}, "error indexing all references"
|
logger.err {err, projectId}, "error indexing all references"
|
||||||
return res.sendStatus 500
|
return res.sendStatus 500
|
||||||
ReferencesController._handleIndexResponse(req, res, projectId, shouldBroadcast, data)
|
ReferencesController._handleIndexResponse(req, res, projectId, shouldBroadcast, data)
|
||||||
@@ -25,13 +25,15 @@ module.exports = ReferencesController =
|
|||||||
shouldBroadcast = req.body.shouldBroadcast
|
shouldBroadcast = req.body.shouldBroadcast
|
||||||
logger.log {projectId}, "index all references for project"
|
logger.log {projectId}, "index all references for project"
|
||||||
ReferencesHandler.indexAll projectId, (err, data) ->
|
ReferencesHandler.indexAll projectId, (err, data) ->
|
||||||
if err
|
if err?
|
||||||
logger.err {err, projectId}, "error indexing all references"
|
logger.err {err, projectId}, "error indexing all references"
|
||||||
return res.sendStatus 500
|
return res.sendStatus 500
|
||||||
ReferencesController._handleIndexResponse(req, res, projectId, shouldBroadcast, data)
|
ReferencesController._handleIndexResponse(req, res, projectId, shouldBroadcast, data)
|
||||||
|
|
||||||
_handleIndexResponse: (req, res, projectId, shouldBroadcast, data) ->
|
_handleIndexResponse: (req, res, projectId, shouldBroadcast, data) ->
|
||||||
if shouldBroadcast
|
if !data? or !data.keys?
|
||||||
|
return res.send()
|
||||||
|
else if shouldBroadcast
|
||||||
logger.log {projectId}, "emitting new references keys to connected clients"
|
logger.log {projectId}, "emitting new references keys to connected clients"
|
||||||
EditorRealTimeController.emitToRoom projectId, 'references:keys:updated', data.keys
|
EditorRealTimeController.emitToRoom projectId, 'references:keys:updated', data.keys
|
||||||
return res.json data
|
return res.json data
|
||||||
|
|||||||
@@ -1,88 +0,0 @@
|
|||||||
request = require("request")
|
|
||||||
settings = require("settings-sharelatex")
|
|
||||||
logger = require("logger-sharelatex")
|
|
||||||
ErrorController = require "../Errors/ErrorController"
|
|
||||||
_ = require("underscore")
|
|
||||||
AuthenticationController = require("../Authentication/AuthenticationController")
|
|
||||||
async = require("async")
|
|
||||||
other_lngs = ["es"]
|
|
||||||
|
|
||||||
module.exports = WikiController =
|
|
||||||
|
|
||||||
|
|
||||||
_checkIfLoginIsNeeded: (req, res, next)->
|
|
||||||
if settings.apis.wiki.requireLogin
|
|
||||||
AuthenticationController.requireLogin()(req, res, next)
|
|
||||||
else
|
|
||||||
next()
|
|
||||||
|
|
||||||
getPage: (req, res, next) ->
|
|
||||||
WikiController._checkIfLoginIsNeeded req, res, ->
|
|
||||||
|
|
||||||
page = req.url.replace(/^\/learn/, "").replace(/^\//, "")
|
|
||||||
if page == ""
|
|
||||||
page = "Main_Page"
|
|
||||||
|
|
||||||
logger.log page: page, "getting page from wiki"
|
|
||||||
if _.include(other_lngs, req.lng)
|
|
||||||
lngPage = "#{page}_#{req.lng}"
|
|
||||||
else
|
|
||||||
lngPage = page
|
|
||||||
jobs =
|
|
||||||
contents: (cb)->
|
|
||||||
WikiController._getPageContent "Contents", cb
|
|
||||||
pageData: (cb)->
|
|
||||||
WikiController._getPageContent lngPage, cb
|
|
||||||
async.parallel jobs, (error, results)->
|
|
||||||
return next(error) if error?
|
|
||||||
{pageData, contents} = results
|
|
||||||
if pageData.content?.length > 280
|
|
||||||
if _.include(other_lngs, req.lng)
|
|
||||||
pageData.title = pageData.title.slice(0, pageData.title.length - (req.lng.length+1) )
|
|
||||||
|
|
||||||
if pageData.title?.toLowerCase()?.indexOf("kb") == 0
|
|
||||||
pageData.title = pageData.title.slice(3)
|
|
||||||
|
|
||||||
if pageData.title?.toLowerCase()?.indexOf("errors") == 0
|
|
||||||
pageData.title = pageData.title.slice(7)
|
|
||||||
|
|
||||||
WikiController._renderPage(pageData, contents, res)
|
|
||||||
else
|
|
||||||
WikiController._getPageContent page, (error, pageData) ->
|
|
||||||
return next(error) if error?
|
|
||||||
WikiController._renderPage(pageData, contents, res)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
_getPageContent: (page, callback = (error, data = { content: "", title: "" }) ->) ->
|
|
||||||
request {
|
|
||||||
url: "#{settings.apis.wiki.url}/learn-scripts/api.php"
|
|
||||||
qs: {
|
|
||||||
page: decodeURI(page)
|
|
||||||
action: "parse"
|
|
||||||
format: "json"
|
|
||||||
}
|
|
||||||
}, (err, response, data)->
|
|
||||||
return callback(err) if err?
|
|
||||||
try
|
|
||||||
data = JSON.parse(data)
|
|
||||||
catch err
|
|
||||||
logger.err err:err, data:data, "error parsing data from wiki"
|
|
||||||
result =
|
|
||||||
content: data?.parse?.text?['*']
|
|
||||||
title: data?.parse?.title
|
|
||||||
callback null, result
|
|
||||||
|
|
||||||
|
|
||||||
_renderPage: (page, contents, res)->
|
|
||||||
if page.title == "Main Page"
|
|
||||||
title = "Documentation"
|
|
||||||
else
|
|
||||||
title = page.title
|
|
||||||
|
|
||||||
res.render "wiki/page", {
|
|
||||||
page: page
|
|
||||||
contents: contents
|
|
||||||
title: title
|
|
||||||
}
|
|
||||||
@@ -30,7 +30,6 @@ PasswordResetRouter = require("./Features/PasswordReset/PasswordResetRouter")
|
|||||||
StaticPagesRouter = require("./Features/StaticPages/StaticPagesRouter")
|
StaticPagesRouter = require("./Features/StaticPages/StaticPagesRouter")
|
||||||
ChatController = require("./Features/Chat/ChatController")
|
ChatController = require("./Features/Chat/ChatController")
|
||||||
BlogController = require("./Features/Blog/BlogController")
|
BlogController = require("./Features/Blog/BlogController")
|
||||||
WikiController = require("./Features/Wiki/WikiController")
|
|
||||||
Modules = require "./infrastructure/Modules"
|
Modules = require "./infrastructure/Modules"
|
||||||
RateLimiterMiddlewear = require('./Features/Security/RateLimiterMiddlewear')
|
RateLimiterMiddlewear = require('./Features/Security/RateLimiterMiddlewear')
|
||||||
RealTimeProxyRouter = require('./Features/RealTimeProxy/RealTimeProxyRouter')
|
RealTimeProxyRouter = require('./Features/RealTimeProxy/RealTimeProxyRouter')
|
||||||
@@ -204,13 +203,6 @@ module.exports = class Router
|
|||||||
webRouter.get "/project/:Project_id/messages", AuthorizationMiddlewear.ensureUserCanReadProject, ChatController.getMessages
|
webRouter.get "/project/:Project_id/messages", AuthorizationMiddlewear.ensureUserCanReadProject, ChatController.getMessages
|
||||||
webRouter.post "/project/:Project_id/messages", AuthorizationMiddlewear.ensureUserCanReadProject, ChatController.sendMessage
|
webRouter.post "/project/:Project_id/messages", AuthorizationMiddlewear.ensureUserCanReadProject, ChatController.sendMessage
|
||||||
|
|
||||||
webRouter.get /learn(\/.*)?/, RateLimiterMiddlewear.rateLimit({
|
|
||||||
endpointName: "wiki"
|
|
||||||
params: []
|
|
||||||
maxRequests: 60
|
|
||||||
timeInterval: 60
|
|
||||||
}), WikiController.getPage
|
|
||||||
|
|
||||||
webRouter.post "/project/:Project_id/references/index", AuthorizationMiddlewear.ensureUserCanReadProject, ReferencesController.index
|
webRouter.post "/project/:Project_id/references/index", AuthorizationMiddlewear.ensureUserCanReadProject, ReferencesController.index
|
||||||
webRouter.post "/project/:Project_id/references/indexAll", AuthorizationMiddlewear.ensureUserCanReadProject, ReferencesController.indexAll
|
webRouter.post "/project/:Project_id/references/indexAll", AuthorizationMiddlewear.ensureUserCanReadProject, ReferencesController.indexAll
|
||||||
|
|
||||||
|
|||||||
@@ -1,68 +0,0 @@
|
|||||||
extends ../layout
|
|
||||||
|
|
||||||
block content
|
|
||||||
.content.content-alt(ng-cloak)
|
|
||||||
.container.wiki
|
|
||||||
.row.template-page-header
|
|
||||||
.col-md-8(ng-cloak)
|
|
||||||
|
|
||||||
.row
|
|
||||||
.col-xs-3.contents(ng-non-bindable)
|
|
||||||
| !{contents.content}
|
|
||||||
|
|
||||||
.col-xs-9.page
|
|
||||||
- if(typeof(settings.algolia) != "undefined" && typeof(settings.algolia.indexes) != "undefined" && typeof(settings.algolia.indexes.wiki) != "undefined")
|
|
||||||
span(ng-controller="SearchWikiController")
|
|
||||||
.row
|
|
||||||
form.project-search.form-horizontal.col-md-9(role="form")
|
|
||||||
.form-group.has-feedback.has-feedback-left.col-md-12
|
|
||||||
input.form-control.col-md-12(type='text', ng-model='searchQueryText', ng-keyup='search()', placeholder="Search help library....")
|
|
||||||
i.fa.fa-search.form-control-feedback-left
|
|
||||||
i.fa.fa-times.form-control-feedback(
|
|
||||||
ng-click="clearSearchText()",
|
|
||||||
style="cursor: pointer;",
|
|
||||||
ng-show="searchQueryText.length > 0"
|
|
||||||
)
|
|
||||||
.col-md-3.text-right
|
|
||||||
a.btn.btn-primary(ng-click="showMissingTemplateModal()") #{translate("suggest_new_doc")}
|
|
||||||
|
|
||||||
.row
|
|
||||||
.col-md-12(ng-cloak)
|
|
||||||
a(ng-href='{{hit.url}}',ng-repeat='hit in hits').search-result.card.card-thin
|
|
||||||
span(ng-bind-html='hit.name')
|
|
||||||
div.search-result-content(ng-show="hit.content != ''", ng-bind-html='hit.content')
|
|
||||||
|
|
||||||
.card.row-spaced(ng-non-bindable)
|
|
||||||
.page-header
|
|
||||||
h1 #{title}
|
|
||||||
|
|
||||||
| !{page.content}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
script(type="text/ng-template", id="missingWikiPageModal")
|
|
||||||
.modal-header
|
|
||||||
button.close(
|
|
||||||
type="button"
|
|
||||||
data-dismiss="modal"
|
|
||||||
ng-click="close()"
|
|
||||||
) ×
|
|
||||||
h3 #{translate("suggest_new_doc")}
|
|
||||||
.modal-body.contact-us-modal
|
|
||||||
span(ng-show="sent == false")
|
|
||||||
label.desc
|
|
||||||
| #{translate("email")} (#{translate("optional")})
|
|
||||||
.form-group
|
|
||||||
input.field.text.medium.span8.form-control(ng-model="form.email", ng-init="form.email = '#{getUserEmail()}'", type='email', spellcheck='false', value='', maxlength='255', tabindex='2')
|
|
||||||
label.desc
|
|
||||||
| #{translate("suggestion")}
|
|
||||||
.form-group
|
|
||||||
textarea.field.text.medium.span8.form-control(ng-model="form.message",type='text', value='', maxlength='255', tabindex='4', onkeyup='')
|
|
||||||
span(ng-show="sent")
|
|
||||||
p #{translate("request_sent_thank_you")}
|
|
||||||
.modal-footer
|
|
||||||
button.btn.btn-default(ng-click="close()")
|
|
||||||
span #{translate("dismiss")}
|
|
||||||
button.btn-success.btn(type='submit', ng-disabled="sending", ng-click="contactUs()") #{translate("contact_us")}
|
|
||||||
|
|
||||||
Generated
+4482
File diff suppressed because it is too large
Load Diff
@@ -76,6 +76,7 @@
|
|||||||
"grunt-contrib-watch": "^1.0.0",
|
"grunt-contrib-watch": "^1.0.0",
|
||||||
"grunt-env": "0.4.4",
|
"grunt-env": "0.4.4",
|
||||||
"grunt-exec": "^0.4.7",
|
"grunt-exec": "^0.4.7",
|
||||||
|
"grunt-execute": "^0.2.2",
|
||||||
"grunt-file-append": "0.0.6",
|
"grunt-file-append": "0.0.6",
|
||||||
"grunt-git-rev-parse": "^0.1.4",
|
"grunt-git-rev-parse": "^0.1.4",
|
||||||
"grunt-mocha-test": "0.9.0",
|
"grunt-mocha-test": "0.9.0",
|
||||||
|
|||||||
@@ -1,90 +1,90 @@
|
|||||||
define -> [
|
define -> [
|
||||||
regexToMatch: /Misplaced alignment tab character \&/
|
regexToMatch: /Misplaced alignment tab character \&/
|
||||||
extraInfoURL: "https://www.sharelatex.com/learn/Errors:Misplaced_alignment_tab_character_%26"
|
extraInfoURL: "https://www.sharelatex.com/learn/Errors/Misplaced_alignment_tab_character_%26"
|
||||||
humanReadableHint: """
|
humanReadableHint: """
|
||||||
You have placed an alignment tab character '&' in the wrong place. If you want to align something, you must write it inside an align environment such as \\begin{align} \u2026 \\end{align}, \\begin{tabular} \u2026 \\end{tabular}, etc. If you want to write an ampersand '&' in text, you must write \\& instead.
|
You have placed an alignment tab character '&' in the wrong place. If you want to align something, you must write it inside an align environment such as \\begin{align} \u2026 \\end{align}, \\begin{tabular} \u2026 \\end{tabular}, etc. If you want to write an ampersand '&' in text, you must write \\& instead.
|
||||||
"""
|
"""
|
||||||
,
|
,
|
||||||
regexToMatch: /Extra alignment tab has been changed to \\cr/
|
regexToMatch: /Extra alignment tab has been changed to \\cr/
|
||||||
extraInfoURL: "https://www.sharelatex.com/learn/Errors:Extra_alignment_tab_has_been_changed_to_%5Ccr"
|
extraInfoURL: "https://www.sharelatex.com/learn/Errors/Extra_alignment_tab_has_been_changed_to_%5Ccr"
|
||||||
humanReadableHint: """
|
humanReadableHint: """
|
||||||
You have written too many alignment tabs in a table, causing one of them to be turned into a line break. Make sure you have specified the correct number of columns in your <a target=\"_blank\" href=\"https://www.sharelatex.com/learn/Tables\">table</a>.
|
You have written too many alignment tabs in a table, causing one of them to be turned into a line break. Make sure you have specified the correct number of columns in your <a target=\"_blank\" href=\"https://www.sharelatex.com/learn/Tables\">table</a>.
|
||||||
"""
|
"""
|
||||||
,
|
,
|
||||||
regexToMatch: /Display math should end with \$\$/
|
regexToMatch: /Display math should end with \$\$/
|
||||||
extraInfoURL: "https://www.sharelatex.com/learn/Errors:Display_math_should_end_with_$$."
|
extraInfoURL: "https://www.sharelatex.com/learn/Errors/Display_math_should_end_with_$$."
|
||||||
humanReadableHint: """
|
humanReadableHint: """
|
||||||
You have forgotten a $ sign at the end of 'display math' mode. When writing in display math mode, you must always math write inside $$ \u2026 $$. Check that the number of $s match around each math expression.
|
You have forgotten a $ sign at the end of 'display math' mode. When writing in display math mode, you must always math write inside $$ \u2026 $$. Check that the number of $s match around each math expression.
|
||||||
"""
|
"""
|
||||||
,
|
,
|
||||||
regexToMatch: /Missing [{$] inserted./
|
regexToMatch: /Missing [{$] inserted./
|
||||||
extraInfoURL: "https://www.sharelatex.com/learn/Errors:Missing_$_inserted"
|
extraInfoURL: "https://www.sharelatex.com/learn/Errors/Missing_$_inserted"
|
||||||
humanReadableHint: """
|
humanReadableHint: """
|
||||||
Check that your $'s match around math expressions. If they do, then you've probably used a symbol in normal text that needs to be in math mode. Symbols such as subscripts ( _ ), integrals ( \\int ), Greek letters ( \\alpha, \\beta, \\delta ), and modifiers (\\vec{x}, \\tilde{x} ) must be written in math mode. See the full list <a target=\"_blank\" href=\"https://www.sharelatex.com/learn/Errors:Missing_$_inserted\">here</a>.
|
Check that your $'s match around math expressions. If they do, then you've probably used a symbol in normal text that needs to be in math mode. Symbols such as subscripts ( _ ), integrals ( \\int ), Greek letters ( \\alpha, \\beta, \\delta ), and modifiers (\\vec{x}, \\tilde{x} ) must be written in math mode. See the full list <a target=\"_blank\" href=\"https://www.sharelatex.com/learn/Errors/Missing_$_inserted \">here</a>.If you intended to use mathematics mode, then use $ \u2026 $ for 'inline math mode', $$ \u2026 $$ for 'display math mode' or alternatively \begin{math} \u2026 \end{math}.
|
||||||
"""
|
"""
|
||||||
,
|
,
|
||||||
regexToMatch: /(undefined )?[rR]eference(s)?.+(undefined)?/
|
regexToMatch: /(undefined )?[rR]eference(s)?.+(undefined)?/
|
||||||
extraInfoURL: "https://www.sharelatex.com/learn/Errors:There_were_undefined_references."
|
extraInfoURL: "https://www.sharelatex.com/learn/Errors/There_were_undefined_references."
|
||||||
humanReadableHint: """
|
humanReadableHint: """
|
||||||
You have referenced something which has not yet been labelled. If you have labelled it already, make sure that what is written inside \\ref{...} is the same as what is written inside \\label{...}.
|
You have referenced something which has not yet been labelled. If you have labelled it already, make sure that what is written inside \\ref{...} is the same as what is written inside \\label{...}.
|
||||||
"""
|
"""
|
||||||
,
|
,
|
||||||
regexToMatch: /Citation .+ on page .+ undefined on input line .+/
|
regexToMatch: /Citation .+ on page .+ undefined on input line .+/
|
||||||
extraInfoURL: "https://www.sharelatex.com/learn/Errors:Citation_XXX_on_page_XXX_undefined_on_input_line_XXX."
|
extraInfoURL: "https://www.sharelatex.com/learn/Errors/Citation_XXX_on_page_XXX_undefined_on_input_line_XXX."
|
||||||
humanReadableHint: """
|
humanReadableHint: """
|
||||||
You have cited something which is not included in your bibliography. Make sure that the citation (\\cite{...}) has a corresponding key in your bibliography, and that both are spelled the same way.
|
You have cited something which is not included in your bibliography. Make sure that the citation (\\cite{...}) has a corresponding key in your bibliography, and that both are spelled the same way.
|
||||||
"""
|
"""
|
||||||
,
|
,
|
||||||
regexToMatch: /(Label .+)? multiply[ -]defined( labels)?/
|
regexToMatch: /(Label .+)? multiply[ -]defined( labels)?/
|
||||||
extraInfoURL: "https://www.sharelatex.com/learn/Errors:There_were_multiply-defined_labels."
|
extraInfoURL: "https://www.sharelatex.com/learn/Errors/There_were_multiply-defined_labels."
|
||||||
humanReadableHint: """
|
humanReadableHint: """
|
||||||
You have used the same label more than once. Check that each \\label{...} labels only one item.
|
You have used the same label more than once. Check that each \\label{...} labels only one item.
|
||||||
"""
|
"""
|
||||||
,
|
,
|
||||||
regexToMatch: /`!?h' float specifier changed to `!?ht'/
|
regexToMatch: /`!?h' float specifier changed to `!?ht'/
|
||||||
extraInfoURL: "https://www.sharelatex.com/learn/Errors:%60!h%27_float_specifier_changed_to_%60!ht%27."
|
extraInfoURL: "https://www.sharelatex.com/learn/Errors/%60!h%27_float_specifier_changed_to_%60!ht%27."
|
||||||
humanReadableHint: """
|
humanReadableHint: """
|
||||||
The float specifier 'h' is too strict of a demand for LaTeX to place your float in a nice way here. Try relaxing it by using 'ht', or even 'htbp' if necessary. If you want to try keep the float here anyway, check out the <a target=\"_blank\" href=\"https://www.sharelatex.com/learn/Positioning_of_Figures\">float package</a>.
|
The float specifier 'h' is too strict of a demand for LaTeX to place your float in a nice way here. Try relaxing it by using 'ht', or even 'htbp' if necessary. If you want to try keep the float here anyway, check out the <a target=\"_blank\" href=\"https://www.sharelatex.com/learn/Positioning_of_Figures\">float package</a>.
|
||||||
"""
|
"""
|
||||||
,
|
,
|
||||||
regexToMatch: /No positions in optional float specifier/
|
regexToMatch: /No positions in optional float specifier/
|
||||||
extraInfoURL: "https://www.sharelatex.com/learn/Errors:No_positions_in_optional_float_specifier."
|
extraInfoURL: "https://www.sharelatex.com/learn/Errors/No_positions_in_optional_float_specifier."
|
||||||
humanReadableHint: """
|
humanReadableHint: """
|
||||||
You have forgotten to include a float specifier, which tells LaTeX where to position your figure. Find out more about float specifiers <a target=\"_blank\" href=\"https://www.sharelatex.com/learn/Positioning_of_Figures\">here</a>.
|
You have forgotten to include a float specifier, which tells LaTeX where to position your figure. Find out more about float specifiers <a target=\"_blank\" href=\"https://www.sharelatex.com/learn/Positioning_of_Figures\">here</a>.
|
||||||
"""
|
"""
|
||||||
,
|
,
|
||||||
regexToMatch: /Undefined control sequence/
|
regexToMatch: /Undefined control sequence/
|
||||||
extraInfoURL: "https://www.sharelatex.com/learn/Errors:Undefined_control_sequence."
|
extraInfoURL: "https://www.sharelatex.com/learn/Errors/Undefined_control_sequence."
|
||||||
humanReadableHint: """
|
humanReadableHint: """
|
||||||
The compiler is having trouble understanding a command you have used. Check that the command is spelled correctly. If the command is part of a package, make sure you have included the package in your preamble using \\usepackage{...}.
|
The compiler is having trouble understanding a command you have used. Check that the command is spelled correctly. If the command is part of a package, make sure you have included the package in your preamble using \\usepackage{...}.
|
||||||
"""
|
"""
|
||||||
,
|
,
|
||||||
regexToMatch: /File .+ not found/
|
regexToMatch: /File .+ not found/
|
||||||
extraInfoURL: "https://www.sharelatex.com/learn/Errors:File_XXX_not_found_on_input_line_XXX."
|
extraInfoURL: "https://www.sharelatex.com/learn/Errors/File_XXX_not_found_on_input_line_XXX."
|
||||||
humanReadableHint: """
|
humanReadableHint: """
|
||||||
The compiler cannot find the file you want to include. Make sure that you have <a target=\"_blank\" href=\"https://www.sharelatex.com/learn/Including_images_in_ShareLaTeX\">uploaded the file</a> and <a target=\"_blank\" href=\"https://www.sharelatex.com/learn/Errors:File_XXX_not_found_on_input_line_XXX.\">specified the file location correctly</a>.
|
The compiler cannot find the file you want to include. Make sure that you have <a target=\"_blank\" href=\"https://www.sharelatex.com/learn/Including_images_in_ShareLaTeX\">uploaded the file</a> and <a target=\"_blank\" href=\"https://www.sharelatex.com/learn/Errors/File_XXX_not_found_on_input_line_XXX.\">specified the file location correctly</a>.
|
||||||
"""
|
"""
|
||||||
,
|
,
|
||||||
regexToMatch: /LaTeX Error: Unknown graphics extension: \..+/
|
regexToMatch: /LaTeX Error: Unknown graphics extension: \..+/
|
||||||
extraInfoURL: "https://www.sharelatex.com/learn/Errors:LaTeX_Error:_Unknown_graphics_extension:_.gif."
|
extraInfoURL: "https://www.sharelatex.com/learn/Errors/LaTeX_Error:_Unknown_graphics_extension:_.gif."
|
||||||
humanReadableHint: """
|
humanReadableHint: """
|
||||||
The compiler does not recognise the file type of one of your images. Make sure you are using a <a target=\"_blank\" href=\"https://www.sharelatex.com/learn/Errors:LaTeX_Error:_Unknown_graphics_extension:_.gif.\">supported image format</a> for your choice of compiler, and check that there are no periods (.) in the name of your image.
|
The compiler does not recognise the file type of one of your images. Make sure you are using a <a target=\"_blank\" href=\"https://www.sharelatex.com/learn/Errors/LaTeX_Error:_Unknown_graphics_extension:_.gif.\">supported image format</a> for your choice of compiler, and check that there are no periods (.) in the name of your image.
|
||||||
"""
|
"""
|
||||||
,
|
,
|
||||||
regexToMatch: /LaTeX Error: Unknown float option `H'/
|
regexToMatch: /LaTeX Error: Unknown float option `H'/
|
||||||
extraInfoURL: "https://www.sharelatex.com/learn/Errors:LaTeX_Error:_Unknown_float_option_%60H%27."
|
extraInfoURL: "https://www.sharelatex.com/learn/Errors/LaTeX_Error:_Unknown_float_option_%60H%27."
|
||||||
humanReadableHint: """
|
humanReadableHint: """
|
||||||
The compiler isn't recognizing the float option 'H'. Include \\usepackage{float} in your preamble to fix this.
|
The compiler isn't recognizing the float option 'H'. Include \\usepackage{float} in your preamble to fix this.
|
||||||
"""
|
"""
|
||||||
,
|
,
|
||||||
regexToMatch: /LaTeX Error: Unknown float option `.+'/
|
regexToMatch: /LaTeX Error: Unknown float option `.+'/
|
||||||
extraInfoURL: "https://www.sharelatex.com/learn/Errors:LaTeX_Error:_Unknown_float_option_%60H%27."
|
extraInfoURL: "https://www.sharelatex.com/learn/Errors/LaTeX_Error:_Unknown_float_option_%60H%27."
|
||||||
humanReadableHint: """
|
humanReadableHint: """
|
||||||
You have used a float specifier which the compiler does not understand. You can learn more about the different float options available for placing figures <a target=\"_blank\" href=\"https://www.sharelatex.com/learn/Positioning_of_Figures\">here</a>.
|
You have used a float specifier which the compiler does not understand. You can learn more about the different float options available for placing figures <a target=\"_blank\" href=\"https://www.sharelatex.com/learn/Positioning_of_Figures\">here</a>.
|
||||||
"""
|
"""
|
||||||
,
|
,
|
||||||
regexToMatch: /LaTeX Error: \\math.+ allowed only in math mode/
|
regexToMatch: /LaTeX Error: \\math.+ allowed only in math mode/
|
||||||
extraInfoURL: "https://www.sharelatex.com/learn/Errors:LaTeX_Error:_%5Cmathrm_allowed_only_in_math_mode."
|
extraInfoURL: "https://www.sharelatex.com/learn/Errors/LaTeX_Error:_%5Cmathrm_allowed_only_in_math_mode."
|
||||||
humanReadableHint: """
|
humanReadableHint: """
|
||||||
You have used a font command which is only available in math mode. To use this command, you must be in maths mode (E.g. $ \u2026 $ or \\begin{math} \u2026 \\end{math}). If you want to use it outside of math mode, use the text version instead: \\textrm, \\textit, etc.
|
You have used a font command which is only available in math mode. To use this command, you must be in maths mode (E.g. $ \u2026 $ or \\begin{math} \u2026 \\end{math}). If you want to use it outside of math mode, use the text version instead: \\textrm, \\textit, etc.
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -6,8 +6,8 @@ define [
|
|||||||
], (App, Ace, HumanReadableLogs, BibLogParser) ->
|
], (App, Ace, HumanReadableLogs, BibLogParser) ->
|
||||||
App.controller "PdfController", ($scope, $http, ide, $modal, synctex, event_tracking, localStorage) ->
|
App.controller "PdfController", ($scope, $http, ide, $modal, synctex, event_tracking, localStorage) ->
|
||||||
|
|
||||||
# enable per-user containers if querystring includes isolated=true
|
# enable per-user containers by default
|
||||||
perUserCompile = window.location?.search?.match(/isolated=true/)? or undefined
|
perUserCompile = true
|
||||||
autoCompile = true
|
autoCompile = true
|
||||||
|
|
||||||
# pdf.view = uncompiled | pdf | errors
|
# pdf.view = uncompiled | pdf | errors
|
||||||
@@ -162,7 +162,7 @@ define [
|
|||||||
method:"GET"
|
method:"GET"
|
||||||
params:
|
params:
|
||||||
clsiserverid:ide.clsiServerId
|
clsiserverid:ide.clsiServerId
|
||||||
if file.url? # FIXME clean this up when we have file.urls out consistently
|
if file?.url? # FIXME clean this up when we have file.urls out consistently
|
||||||
opts.url = file.url
|
opts.url = file.url
|
||||||
else if file?.build?
|
else if file?.build?
|
||||||
opts.url = "/project/#{$scope.project_id}/build/#{file.build}/output/#{name}"
|
opts.url = "/project/#{$scope.project_id}/build/#{file.build}/output/#{name}"
|
||||||
@@ -325,8 +325,8 @@ define [
|
|||||||
$scope.startedFreeTrial = true
|
$scope.startedFreeTrial = true
|
||||||
|
|
||||||
App.factory "synctex", ["ide", "$http", "$q", (ide, $http, $q) ->
|
App.factory "synctex", ["ide", "$http", "$q", (ide, $http, $q) ->
|
||||||
# enable per-user containers if querystring includes isolated=true
|
# enable per-user containers by default
|
||||||
perUserCompile = window.location?.search?.match(/isolated=true/)? or undefined
|
perUserCompile = true
|
||||||
|
|
||||||
synctex =
|
synctex =
|
||||||
syncToPdf: (cursorPosition) ->
|
syncToPdf: (cursorPosition) ->
|
||||||
|
|||||||
@@ -5,11 +5,15 @@ define [
|
|||||||
$scope.status =
|
$scope.status =
|
||||||
loading:true
|
loading:true
|
||||||
|
|
||||||
|
# enable per-user containers by default
|
||||||
|
perUserCompile = true
|
||||||
|
|
||||||
opts =
|
opts =
|
||||||
url:"/project/#{ide.project_id}/wordcount"
|
url:"/project/#{ide.project_id}/wordcount"
|
||||||
method:"GET"
|
method:"GET"
|
||||||
params:
|
params:
|
||||||
clsiserverid:ide.clsiServerId
|
clsiserverid:ide.clsiServerId
|
||||||
|
isolated: perUserCompile
|
||||||
$http opts
|
$http opts
|
||||||
.success (data) ->
|
.success (data) ->
|
||||||
$scope.status.loading = false
|
$scope.status.loading = false
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ describe "ReferencesController", ->
|
|||||||
shouldBroadcast: false
|
shouldBroadcast: false
|
||||||
@res = new MockResponse()
|
@res = new MockResponse()
|
||||||
@res.json = sinon.stub()
|
@res.json = sinon.stub()
|
||||||
|
@res.send = sinon.stub()
|
||||||
@res.sendStatus = sinon.stub()
|
@res.sendStatus = sinon.stub()
|
||||||
@fakeResponseData =
|
@fakeResponseData =
|
||||||
projectId: @projectId,
|
projectId: @projectId,
|
||||||
@@ -113,6 +114,30 @@ describe "ReferencesController", ->
|
|||||||
@res.json.calledWith(@fakeResponseData).should.equal true
|
@res.json.calledWith(@fakeResponseData).should.equal true
|
||||||
done()
|
done()
|
||||||
|
|
||||||
|
describe 'there is no dataaaaaaa', ->
|
||||||
|
|
||||||
|
beforeEach ->
|
||||||
|
@ReferencesHandler.indexAll.callsArgWith(1)
|
||||||
|
@call = (callback) =>
|
||||||
|
@controller.indexAll @req, @res
|
||||||
|
callback()
|
||||||
|
|
||||||
|
it 'should not call EditorRealTimeController.emitToRoom', (done) ->
|
||||||
|
@call () =>
|
||||||
|
@EditorRealTimeController.emitToRoom.callCount.should.equal 0
|
||||||
|
done()
|
||||||
|
|
||||||
|
it 'should not produce an error', (done) ->
|
||||||
|
@call () =>
|
||||||
|
@res.sendStatus.callCount.should.equal 0
|
||||||
|
@res.sendStatus.calledWith(500).should.equal false
|
||||||
|
@res.sendStatus.calledWith(400).should.equal false
|
||||||
|
done()
|
||||||
|
|
||||||
|
it 'should close the response', (done) ->
|
||||||
|
@call () =>
|
||||||
|
@res.send.called.should.equal true
|
||||||
|
done()
|
||||||
|
|
||||||
describe 'index', ->
|
describe 'index', ->
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user