overleaf/services/web/app/views/project/editor.jade
James Allen af85c83877 Buffer updates when only a single user is editing a document
Add in 5 second delay between flushing updates when only a single user
is editing a document. As soon as an update is received from another user
we switch to sending updates immediately again so there is no latency
between collaborators. The logic applies to individual docs, so two users
can be editing different docs and will still buffer updates since they
will not affect each other.
2015-04-17 11:24:28 +01:00

130 lines
3.9 KiB
Text

extends ../layout
block vars
- var suppressNavbar = true
- var suppressFooter = true
- var suppressDefaultJs = true
- var suppressSystemMessages = true
block content
.editor(ng-controller="IdeController").full-size
.loading-screen(ng-show="state.loading")
.container
h3 #{translate("loading")}...
.progress
.progress-bar(style="width: 20%", ng-style="{'width': state.load_progress + '%'}")
p.text-center.text-danger(ng-if="state.error").ng-cloak {{ state.error }}
.global-alerts(ng-cloak)
.alert.alert-danger.small(ng-if="connection.forced_disconnect")
strong #{translate("disconnected")}
| #{translate("please_refresh")}
.alert.alert-warning.small(ng-if="connection.reconnection_countdown")
strong #{translate("lost_connection")}.
| #{translate("reconnecting_in_x_secs", {seconds:"{{ connection.reconnection_countdown }}"})}.
a.pull-right(href, ng-click="tryReconnectNow()") #{translate("try_now")}
.alert.alert-warning.small(ng-if="connection.reconnecting")
strong #{translate("reconnecting")}...
.div(ng-controller="SavingNotificationController")
.alert.alert-warning.small( ng-repeat="(doc_id, state) in docSavingStatus" ng-if="state.unsavedSeconds > 8") #{translate("saving_notification_with_seconds", {docname:"{{ state.doc.name }}", seconds:"{{ state.unsavedSeconds }}"})}
include ./editor/left-menu
#chat-wrapper(
layout="chat",
spacing-open="12",
spacing-closed="0",
initial-size-east="250",
init-closed-east="true",
open-east="ui.chatOpen",
ng-hide="state.loading",
ng-cloak
)
.ui-layout-center
include ./editor/header
include ./editor/share
#ide-body(ng-cloak, layout="main", ng-hide="state.loading", resize-on="layout:chat:resize")
.ui-layout-west
include ./editor/file-tree
.ui-layout-center
include ./editor/editor
include ./editor/binary-file
include ./editor/track-changes
include ./editor/publish-template
.ui-layout-east
include ./editor/chat
include ./editor/hotkeys
script(type="text/ng-template", id="genericMessageModalTemplate")
.modal-header
button.close(
type="button"
data-dismiss="modal"
ng-click="done()"
) ×
h3 {{ title }}
.modal-body {{ message }}
.modal-footer
button.btn.btn-info(ng-click="done()") #{translate("ok")}
script(src='/socket.io/socket.io.js')
//- We need to do .replace(/\//g, '\\/') do that '</script>' -> '<\/script>'
//- and doesn't prematurely end the script tag.
script(type='text/javascript').
window.project_id = "!{project_id}";
window.userSettings = !{JSON.stringify(userSettings).replace(/\//g, '\\/')};
window.user = !{JSON.stringify(user).replace(/\//g, '\\/')};
window.csrfToken = "!{csrfToken}";
window.anonymous = #{anonymous};
window.requirejs = {
"paths" : {
"mathjax": "/js/libs/mathjax/MathJax.js?config=TeX-AMS_HTML",
"moment": "libs/moment-2.7.0",
"libs/pdf": "libs/pdfjs-1.0.1040/pdf"
},
"urlArgs" : "fingerprint=#{fingerprint(jsPath + 'ide.js')}-#{fingerprint(jsPath + 'libs.js')}",
"waitSeconds": 0,
"shim": {
"libs/pdf": {
deps: ["libs/pdfjs-1.0.1040/compatibility"]
},
"ace/ext-searchbox": {
deps: ["ace/ace"]
}
},
config:{
moment:{
noGlobal: true
}
}
};
window.aceFingerprint = "#{fingerprint(jsPath + 'ace/ace.js')}"
script(type='text/javascript').
ga('send', 'event', 'editor-interaction', 'editor-opened')
- locals.suppressDefaultJs = true
- var pdfPath = 'libs/pdfjs-1.0.1040/pdf.worker.js'
- var fingerprintedPath = fingerprint(jsPath+pdfPath)
- var pdfJsWorkerPath = jsPath+pdfPath+'?fingerprint='+fingerprintedPath
script(type='text/javascript').
window.pdfJsWorkerPath = "#{pdfJsWorkerPath}";
script(
data-main=jsPath+"ide.js",
baseurl=jsPath,
data-ace-base=jsPath+'ace',
src=jsPath+'libs/require.js?fingerprint='+fingerprint(jsPath + 'libs/require.js')
)