diff --git a/services/web/app/coffee/Features/ConnectedUsers/ConnectedUsersManager.coffee b/services/web/app/coffee/Features/ConnectedUsers/ConnectedUsersManager.coffee index 9c4fda7bf4..b3f18ec60f 100644 --- a/services/web/app/coffee/Features/ConnectedUsers/ConnectedUsersManager.coffee +++ b/services/web/app/coffee/Features/ConnectedUsers/ConnectedUsersManager.coffee @@ -11,7 +11,7 @@ ONE_HOUR_IN_S = 60 * 60 ONE_DAY_IN_S = ONE_HOUR_IN_S * 24 FOUR_DAYS_IN_S = ONE_DAY_IN_S * 4 -USER_TIMEOUT_IN_S = ONE_HOUR_IN_S +USER_TIMEOUT_IN_S = ONE_HOUR_IN_S / 4 buildProjectSetKey = (project_id)-> return "clients_in_project:#{project_id}" buildUserKey = (project_id, client_id)-> return "connected_user:#{project_id}:#{client_id}" diff --git a/services/web/app/views/layout.jade b/services/web/app/views/layout.jade index 0b374dd0ab..2e59b6a48f 100644 --- a/services/web/app/views/layout.jade +++ b/services/web/app/views/layout.jade @@ -43,17 +43,11 @@ html(itemscope, itemtype='http://schema.org/Product') - if(typeof(suppressFooter) == "undefined") include layout/footer + + - if (typeof(lookingForScribtex) != "undefined" && lookingForScribtex) - .modal.hide#scribtexModal - .modal-header - h3 Looking for ScribTeX? - .modal-body - p ScribTeX has moved to https://scribtex.sharelatex.com. Please update your bookmarks. - p(style="text-align: center") You can find the page you were looking for here: - p(style="text-align: center") - a(href="https://scribtex.sharelatex.com#{scribtexPath}", style="font-size: 16px") https://scribtex.sharelatex.com#{scribtexPath} - .modal-footer - button(data-dismiss="modal").btn OK + span(ng-controller="ScribtexPopupController") + include scribtex-modal - if(typeof(suppressFooter) == "undefined") diff --git a/services/web/app/views/project/list/project-list.jade b/services/web/app/views/project/list/project-list.jade index 2f853e9d97..05fa427b22 100644 --- a/services/web/app/views/project/list/project-list.jade +++ b/services/web/app/views/project/list/project-list.jade @@ -117,18 +117,21 @@ ) li.container-fluid .row - .col-md-6 + .col-md-6(ng-click="changePredicate('name')") input.select-all( select-all, type="checkbox" ) span.header Title - .col-md-2 + i.tablesort.fa(ng-class="getSortIconClass('name')") + .col-md-2(ng-click="changePredicate('accessLevel')") span.header Owner - .col-md-4 + i.tablesort.fa(ng-class="getSortIconClass('accessLevel')") + .col-md-4(ng-click="changePredicate('lastUpdated')") span.header Last Modified + i.tablesort.fa(ng-class="getSortIconClass('lastUpdated')") li.project_entry.container-fluid( - ng-repeat="project in visibleProjects | orderBy:'lastUpdated':true", + ng-repeat="project in visibleProjects | orderBy:predicate:reverse", ng-controller="ProjectListItemController" ) .row diff --git a/services/web/app/views/scribtex-modal.jade b/services/web/app/views/scribtex-modal.jade new file mode 100644 index 0000000000..1d4e2ce005 --- /dev/null +++ b/services/web/app/views/scribtex-modal.jade @@ -0,0 +1,8 @@ +script(type='text/ng-template', id='scribtexModalTemplate') + .modal-header + h3 Looking for ScribTeX? + .modal-body + p ScribTeX has moved to https://scribtex.sharelatex.com. Please update your bookmarks. + p(style="text-align: center") You can find the page you were looking for here: + p(style="text-align: center") + a(href="https://scribtex.sharelatex.com#{scribtexPath}", style="font-size: 16px") https://scribtex.sharelatex.com#{scribtexPath} \ No newline at end of file diff --git a/services/web/public/coffee/ide/online-users/OnlineUsersManager.coffee b/services/web/public/coffee/ide/online-users/OnlineUsersManager.coffee index 05b8f55016..8abe1281a9 100644 --- a/services/web/public/coffee/ide/online-users/OnlineUsersManager.coffee +++ b/services/web/public/coffee/ide/online-users/OnlineUsersManager.coffee @@ -21,11 +21,16 @@ define [ # Don't store myself continue # Store data in the same format returned by clientTracking.clientUpdated + if user.first_name?.length == 0 and user.last_name.length == 0 + name = user.email + else + name = "#{user.first_name} #{user.last_name}" + @$scope.onlineUsers[user.client_id] = { id: user.client_id user_id: user.user_id email: user.email - name: "#{user.first_name} #{user.last_name}" + name: name doc_id: user.cursorData?.doc_id row: user.cursorData?.row column: user.cursorData?.column diff --git a/services/web/public/coffee/main.coffee b/services/web/public/coffee/main.coffee index 101f2dcab3..ed6b22404c 100644 --- a/services/web/public/coffee/main.coffee +++ b/services/web/public/coffee/main.coffee @@ -5,6 +5,7 @@ define [ "main/templates" "main/plans" "main/group-members" + "main/scribtex-popup" "directives/asyncForm" "directives/stopPropagation" "directives/focus" diff --git a/services/web/public/coffee/main/project-list.coffee b/services/web/public/coffee/main/project-list.coffee index 3b8a379226..d64f2bbcde 100644 --- a/services/web/public/coffee/main/project-list.coffee +++ b/services/web/public/coffee/main/project-list.coffee @@ -57,6 +57,8 @@ define [ $scope.allSelected = false $scope.selectedProjects = [] $scope.filter = "all" + $scope.predicate = "lastUpdated" + $scope.reverse = false $scope.windowHeight = $window.innerHeight angular.element($window).bind "resize", () -> @@ -75,8 +77,18 @@ define [ project.tags ||= [] project.tags.push tag - $scope.$watch "searchText", (value) -> - $scope.updateVisibleProjects() + $scope.changePredicate = (newPredicate)-> + if $scope.predicate == newPredicate + $scope.reverse = !$scope.reverse + $scope.predicate = newPredicate + + $scope.getSortIconClass = (column)-> + if column == $scope.predicate and $scope.reverse + return "fa-sort-down" + else if column == $scope.predicate and !$scope.reverse + return "fa-sort-up" + else + return "fa-sort" $scope.clearSearchText = () -> $scope.searchText = "" diff --git a/services/web/public/coffee/main/scribtex-popup.coffee b/services/web/public/coffee/main/scribtex-popup.coffee new file mode 100644 index 0000000000..d18993c0a0 --- /dev/null +++ b/services/web/public/coffee/main/scribtex-popup.coffee @@ -0,0 +1,9 @@ +define [ + "base" +], (App) -> + + App.controller 'ScribtexPopupController', ($scope, $modal) -> + + $modal.open { + templateUrl: "scribtexModalTemplate" + } diff --git a/services/web/public/stylesheets/app/project-list.less b/services/web/public/stylesheets/app/project-list.less index e6456f0c00..6d49493825 100644 --- a/services/web/public/stylesheets/app/project-list.less +++ b/services/web/public/stylesheets/app/project-list.less @@ -148,6 +148,9 @@ ul.project-list { color: white; } } + i.tablesort { + padding-left: 8px; + } } #institution_auto_complete { diff --git a/services/web/test/UnitTests/coffee/ConnectedUsers/ConnectedUsersManagerTests.coffee b/services/web/test/UnitTests/coffee/ConnectedUsers/ConnectedUsersManagerTests.coffee index 605ea4fe04..bdba5cd2a6 100644 --- a/services/web/test/UnitTests/coffee/ConnectedUsers/ConnectedUsersManagerTests.coffee +++ b/services/web/test/UnitTests/coffee/ConnectedUsers/ConnectedUsersManagerTests.coffee @@ -89,7 +89,7 @@ describe "ConnectedUsersManager", -> it "should add a ttl to the connected user so it stays clean", (done)-> @ConnectedUsersManager.markUserAsConnected @project_id, @client_id, @user, (err)=> - @rClient.expire.calledWith("connected_user:#{@project_id}:#{@client_id}", 60 * 60).should.equal true + @rClient.expire.calledWith("connected_user:#{@project_id}:#{@client_id}", 60 * 15).should.equal true done() describe "markUserAsDisconnected", -> @@ -160,6 +160,6 @@ describe "ConnectedUsersManager", -> it "should add the ttl on", (done)-> @ConnectedUsersManager.setUserCursorPosition @project_id, @client_id, @cursorData, (err)=> - @rClient.expire.calledWith("connected_user:#{@project_id}:#{@client_id}", 60 * 60).should.equal true + @rClient.expire.calledWith("connected_user:#{@project_id}:#{@client_id}", 60 * 15).should.equal true done()