diff --git a/services/web/app/coffee/Features/Chat/ChatHandler.coffee b/services/web/app/coffee/Features/Chat/ChatHandler.coffee index e8aff01a26..b77652bc39 100644 --- a/services/web/app/coffee/Features/Chat/ChatHandler.coffee +++ b/services/web/app/coffee/Features/Chat/ChatHandler.coffee @@ -10,7 +10,7 @@ module.exports = json: content:messageContent user_id:user_id - uri:"#{settings.apis.chat.url}/room/#{project_id}/messages" + uri:"#{settings.apis.chat.internal_url}/room/#{project_id}/messages" request opts, (err, response, body)-> if err? logger.err err:err, "problem sending new message to chat" @@ -24,7 +24,7 @@ module.exports = qs.before = query.before if query?.before? opts = - uri:"#{settings.apis.chat.url}/room/#{project_id}/messages" + uri:"#{settings.apis.chat.internal_url}/room/#{project_id}/messages" method:"get" qs: qs diff --git a/services/web/app/views/project/editor/chat.jade b/services/web/app/views/project/editor/chat.jade index 06ecc8058d..82be09921f 100644 --- a/services/web/app/views/project/editor/chat.jade +++ b/services/web/app/views/project/editor/chat.jade @@ -33,7 +33,10 @@ aside.chat( }" ) .arrow(ng-style="{'border-color': 'hsl({{ hue(message.user) }}, 60%, 80%)'}") - p(ng-repeat="content in message.contents track by $index") {{ content }} + p( + mathjax, + ng-repeat="content in message.contents track by $index" + ) {{ content }} .new-message textarea( diff --git a/services/web/app/views/project/editor/file-tree.jade b/services/web/app/views/project/editor/file-tree.jade index 8983994438..efbc107ef5 100644 --- a/services/web/app/views/project/editor/file-tree.jade +++ b/services/web/app/views/project/editor/file-tree.jade @@ -312,7 +312,7 @@ script(type='text/ng-template', id='newDocModalTemplate') script(type='text/ng-template', id='newFolderModalTemplate') .modal-header - h3 New File + h3 New Folder .modal-body form(novalidate, name="newFolderForm") input.form-control( diff --git a/services/web/app/views/project/editor/share.jade b/services/web/app/views/project/editor/share.jade index de1968b35e..2262484c60 100644 --- a/services/web/app/views/project/editor/share.jade +++ b/services/web/app/views/project/editor/share.jade @@ -69,8 +69,8 @@ script(type='text/ng-template', id='shareProjectModalTemplate') div.text-center(ng-hide="canAddCollaborators") p You need to upgrade your account to add more collaborators. p - a.btn.btn-info(href, ng-click="startFreeTrial()") Start Free Trial - p.small(ng-show="state.startedFreeTrial") + a.btn.btn-info(href, ng-click="startFreeTrial('projectMembers')") Start Free Trial + p.small(ng-show="startedFreeTrial") | Please refresh this page after starting your free trial. .modal-footer diff --git a/services/web/app/views/project/editor/track-changes.jade b/services/web/app/views/project/editor/track-changes.jade index 40b16231e9..f77e69ea42 100644 --- a/services/web/app/views/project/editor/track-changes.jade +++ b/services/web/app/views/project/editor/track-changes.jade @@ -4,9 +4,8 @@ div#trackChanges(ng-show="ui.view == 'track-changes'") p You need to upgrade your account to use the History feature. p a.btn.btn-info( - href="/user/subscription/plans" - target="_blank" - ng-click="startedFreeTrial = true" + href + ng-click="startFreeTrial('track-changes')" ) Start Free Trial p.small(ng-show="startedFreeTrial") Please refresh the page after starting your free trial. .message(ng-show="project.owner._id != user.id") @@ -70,8 +69,8 @@ div#trackChanges(ng-show="ui.view == 'track-changes'") div.users div.user(ng-repeat="update_user in update.meta.users") .color-square(ng-style="{'background-color': 'hsl({{ update_user.hue }}, 100%, 50%)'}") - span(ng-if="update_user.id != user.id") {{update_user.first_name}} {{update_user.last_name}} - span(ng-if="update_user.id == user.id") You + .name(ng-if="update_user.id != user.id") {{update_user.first_name}} {{update_user.last_name}} + .name(ng-if="update_user.id == user.id") You div.user(ng-if="update.meta.users.length == 0") .color-square(style="background-color: hsl(100, 100%, 50%)") span Anonymous diff --git a/services/web/config/settings.defaults.coffee b/services/web/config/settings.defaults.coffee index 6e674a7711..8f28bf9fae 100644 --- a/services/web/config/settings.defaults.coffee +++ b/services/web/config/settings.defaults.coffee @@ -88,6 +88,7 @@ module.exports = subdomain: "" chat: url: "http://localhost:3010" + internal_url: "http://localhost:3010" templates: port: 3007 user_id: process.env.TEMPLATES_USER_ID or "5395eb7aad1f29a88756c7f2" diff --git a/services/web/public/coffee/ide.coffee b/services/web/public/coffee/ide.coffee index 9ec93d9890..aedac82ec6 100644 --- a/services/web/public/coffee/ide.coffee +++ b/services/web/public/coffee/ide.coffee @@ -53,6 +53,11 @@ define [ $scope.settings = window.userSettings $scope.chat = {} + + $scope.startFreeTrial = (source) -> + ga?('send', 'event', 'subscription-funnel', 'upgraded-free-trial', source) + window.open("/user/subscription/new?planCode=student_free_trial") + $scope.startedFreeTrial = true window._ide = ide diff --git a/services/web/public/coffee/ide/chat/directives/mathjax.coffee b/services/web/public/coffee/ide/chat/directives/mathjax.coffee new file mode 100644 index 0000000000..c2c211717a --- /dev/null +++ b/services/web/public/coffee/ide/chat/directives/mathjax.coffee @@ -0,0 +1,24 @@ +define [ + "base" + "mathjax" +], (App) -> + mathjaxConfig = + "HTML-CSS": { availableFonts: ["TeX"] }, + TeX: + equationNumbers: { autoNumber: "AMS" }, + useLabelIDs: false + tex2jax: + inlineMath: [ ['$','$'], ["\\(","\\)"] ], + displayMath: [ ['$$','$$'], ["\\[","\\]"] ], + processEscapes: true + + + MathJax.Hub.Config(mathjaxConfig); + + App.directive "mathjax", () -> + return { + link: (scope, element, attrs) -> + setTimeout () -> + MathJax.Hub.Queue(["Typeset", MathJax.Hub, element.get(0)]) + , 0 + } \ No newline at end of file diff --git a/services/web/public/coffee/ide/chat/index.coffee b/services/web/public/coffee/ide/chat/index.coffee index f60b41d1fb..d5a537903b 100644 --- a/services/web/public/coffee/ide/chat/index.coffee +++ b/services/web/public/coffee/ide/chat/index.coffee @@ -2,4 +2,5 @@ define [ "ide/chat/controllers/ChatButtonController" "ide/chat/controllers/ChatController" "ide/chat/controllers/ChatMessageController" + "ide/chat/directives/mathjax" ], () -> \ No newline at end of file diff --git a/services/web/public/coffee/ide/chat/services/chatMessages.coffee b/services/web/public/coffee/ide/chat/services/chatMessages.coffee index 355e0cdda2..dbe19aba1a 100644 --- a/services/web/public/coffee/ide/chat/services/chatMessages.coffee +++ b/services/web/public/coffee/ide/chat/services/chatMessages.coffee @@ -14,11 +14,27 @@ define [ nextBeforeTimestamp: null newMessage: null } - + + justSent = false ide.socket.on "new-chat-message", (message) => - ide.$scope.$apply () -> - chat.state.newMessage = message - appendMessage(message) + if message.user.id == ide.$scope.user.id and justSent + # Nothing to do + else + ide.$scope.$apply () -> + appendMessage(message) + justSent = false + + chat.sendMessage = (message) -> + body = + content: message + _csrf : window.csrfToken + justSent = true + appendMessage({ + user: ide.$scope.user + content: message + timestamp: Date.now() + }) + return $http.post(MESSAGES_URL, body) chat.loadMoreMessages = () -> return if chat.state.atEnd @@ -60,6 +76,9 @@ define [ prependMessage(message) appendMessage = (message) -> + console.log "MESSAGES", message, chat.state.messages + chat.state.newMessage = message + lastMessage = chat.state.messages[chat.state.messages.length - 1] shouldGroup = lastMessage? and lastMessage.user.id == message.user.id and @@ -74,10 +93,4 @@ define [ contents: [message.content] }) - chat.sendMessage = (message) -> - body = - content: message - _csrf : window.csrfToken - return $http.post(MESSAGES_URL, body) - return chat \ No newline at end of file diff --git a/services/web/public/coffee/ide/share/controllers/ShareProjectModalController.coffee b/services/web/public/coffee/ide/share/controllers/ShareProjectModalController.coffee index b0343dff8f..cc2236f0bf 100644 --- a/services/web/public/coffee/ide/share/controllers/ShareProjectModalController.coffee +++ b/services/web/public/coffee/ide/share/controllers/ShareProjectModalController.coffee @@ -51,11 +51,6 @@ define [ $scope.state.inflight = false $scope.state.error = "Sorry, something went wrong :(" - $scope.startFreeTrial = () -> - ga?('send', 'event', 'subscription-funnel', 'upgraded-free-trial', "projectMembers") - window.open("/user/subscription/plans") - $scope.state.startedFreeTrial = true - $scope.openMakePublicModal = () -> $modal.open { templateUrl: "makePublicModalTemplate" diff --git a/services/web/public/stylesheets/app/editor/track-changes.less b/services/web/public/stylesheets/app/editor/track-changes.less index dd79314a89..33d05d4f50 100644 --- a/services/web/public/stylesheets/app/editor/track-changes.less +++ b/services/web/public/stylesheets/app/editor/track-changes.less @@ -143,6 +143,9 @@ top: 3px; left: 0; } + .name { + display: inline-block; + } } } .time { diff --git a/services/web/test/UnitTests/coffee/Chat/ChatHandlerTests.coffee b/services/web/test/UnitTests/coffee/Chat/ChatHandlerTests.coffee index b8b6b7b66f..22b6a575cc 100644 --- a/services/web/test/UnitTests/coffee/Chat/ChatHandlerTests.coffee +++ b/services/web/test/UnitTests/coffee/Chat/ChatHandlerTests.coffee @@ -13,7 +13,7 @@ describe "ChatHandler", -> @settings = apis: chat: - url:"chat.sharelatex.env" + internal_url:"chat.sharelatex.env" @request = sinon.stub() @ChatHandler = SandboxedModule.require modulePath, requires: "settings-sharelatex":@settings @@ -38,7 +38,7 @@ describe "ChatHandler", -> json: content:@messageContent user_id:@user_id - uri:"#{@settings.apis.chat.url}/room/#{@project_id}/messages" + uri:"#{@settings.apis.chat.internal_url}/room/#{@project_id}/messages" @request.calledWith(@opts).should.equal true done() @@ -59,7 +59,7 @@ describe "ChatHandler", -> @ChatHandler.getMessages @project_id, @query, (err)=> @opts = method:"get" - uri:"#{@settings.apis.chat.url}/room/#{@project_id}/messages" + uri:"#{@settings.apis.chat.internal_url}/room/#{@project_id}/messages" qs:{} @request.calledWith(@opts).should.equal true done() @@ -70,7 +70,7 @@ describe "ChatHandler", -> @ChatHandler.getMessages @project_id, @query, (err)=> @opts = method:"get" - uri:"#{@settings.apis.chat.url}/room/#{@project_id}/messages" + uri:"#{@settings.apis.chat.internal_url}/room/#{@project_id}/messages" qs: limit:5 before:12345