diff --git a/services/web/app/views/project/editor/header.jade b/services/web/app/views/project/editor/header.jade index 546927a336..44f384a376 100644 --- a/services/web/app/views/project/editor/header.jade +++ b/services/web/app/views/project/editor/header.jade @@ -1,9 +1,7 @@ -div(sixpack-switch="editor-header") - +div(ng-if="!shouldABTestHeaderLabels") header.toolbar.toolbar-header( ng-cloak, ng-hide="state.loading" - sixpack-default ) a.btn.btn-full-height( href, @@ -11,7 +9,6 @@ div(sixpack-switch="editor-header") tooltip='#{translate("menu")}', tooltip-placement="bottom", tooltip-append-to-body="true", - sixpack-convert="editor-header" ) i.fa.fa-fw.fa-bars a( @@ -102,7 +99,6 @@ div(sixpack-switch="editor-header") ng-mouseenter="trackHover('share')" ng-click="openShareProjectModal()", ng-controller="ShareController", - sixpack-convert="editor-header" ) i.fa.fa-fw.fa-group a.btn.btn-full-height( @@ -112,7 +108,6 @@ div(sixpack-switch="editor-header") ng-class="{ active: (ui.view == 'track-changes') }" tooltip="#{translate('recent_changes')}", tooltip-placement="bottom", - sixpack-convert="editor-header" ) i.fa.fa-fw.fa-history a.btn.btn-full-height( @@ -124,7 +119,6 @@ div(sixpack-switch="editor-header") ng-click="toggleChat()", ng-controller="ChatButtonController", ng-show="!anonymous", - sixpack-convert="editor-header" ) i.fa.fa-fw.fa-comment( ng-class="{ 'bounce': unreadMessages > 0 }" @@ -133,128 +127,263 @@ div(sixpack-switch="editor-header") ng-show="unreadMessages > 0" ) {{ unreadMessages }} - header.toolbar.toolbar-header.toolbar-with-labels( - ng-cloak, - ng-hide="state.loading" - sixpack-when="labels" - ) - .toolbar-left +div(ng-if="shouldABTestHeaderLabels") + div(sixpack-switch="editor-header") + header.toolbar.toolbar-header( + ng-cloak, + ng-hide="state.loading" + sixpack-default + ) a.btn.btn-full-height( href, - ng-click="ui.leftMenuShown = true", + ng-click="ui.leftMenuShown = true" + tooltip='#{translate("menu")}', + tooltip-placement="bottom", + tooltip-append-to-body="true", sixpack-convert="editor-header" ) i.fa.fa-fw.fa-bars - p.toolbar-label #{translate("menu")} a( href="/project" + tooltip="#{translate('back_to_projects')}", + tooltip-placement="bottom", + tooltip-append-to-body="true" ) i.fa.fa-fw.fa-level-up - - span(ng-controller="PdfViewToggleController") - a( - href, - ng-show="ui.pdfLayout == 'flat' && fileTreeClosed", - tooltip="PDF", - tooltip-placement="bottom", - tooltip-append-to-body="true", - ng-click="togglePdfView()", - ng-class="{ 'active': ui.view == 'pdf' }" - ) - i.fa.fa-file-pdf-o - - .toolbar-center.project-name(ng-controller="ProjectNameController") - span.name( - ng-dblclick="!permissions.admin || startRenaming()", - ng-show="!state.renaming" - ) {{ project.name }} - - input.form-control( - type="text" - ng-model="inputs.name", - ng-show="state.renaming", - on-enter="finishRenaming()", - ng-blur="finishRenaming()", - select-name-when="state.renaming" - ) - - a.rename( - ng-if="permissions.admin", - href='#', - tooltip-placement="bottom", - tooltip="#{translate('rename')}", - tooltip-append-to-body="true", - ng-click="startRenaming()", - ng-show="!state.renaming" - ) - i.fa.fa-pencil - - .toolbar-right - span.online-users( - ng-show="onlineUsersArray.length > 0" - ng-controller="OnlineUsersController" - ) - span(ng-if="onlineUsersArray.length < 4") - span.online-user( - ng-repeat="user in onlineUsersArray", - ng-style="{ 'background-color': 'hsl({{ getHueForUserId(user.user_id) }}, 70%, 50%)' }", - popover="{{ user.name }}" - popover-placement="bottom" - popover-append-to-body="true" - popover-trigger="mouseenter" - ng-click="gotoUser(user)" - ) {{ user.name.slice(0,1) }} - - span.dropdown(dropdown, ng-if="onlineUsersArray.length >= 4") - span.online-user.online-user-multi( - dropdown-toggle, - tooltip="#{translate('connected_users')}", - tooltip-placement="left" - ) - strong {{ onlineUsersArray.length }} - i.fa.fa-fw.fa-user - ul.dropdown-menu.pull-right - li.dropdown-header #{translate('connected_users')} - li(ng-repeat="user in onlineUsersArray") - a(href, ng-click="gotoUser(user)") - span.online-user( - ng-style="{ 'background-color': 'hsl({{ getHueForUserId(user.user_id) }}, 70%, 50%)' }" - ) {{ user.name.slice(0,1) }} - | {{ user.name }} - - - a.btn.btn-full-height( - href, - ng-if="permissions.admin", - ng-mouseenter="trackHover('share')" - ng-click="openShareProjectModal()", - ng-controller="ShareController", - sixpack-convert="editor-header" - ) - i.fa.fa-fw.fa-group - p.toolbar-label #{translate("share")} - a.btn.btn-full-height( - href, - ng-mouseenter="trackHover('track-changes')" - ng-click="toggleTrackChanges()", - ng-class="{ active: (ui.view == 'track-changes') }", - sixpack-convert="editor-header" - ) - i.fa.fa-fw.fa-history - p.toolbar-label #{translate("history")} - a.btn.btn-full-height( - href, - ng-class="{ active: ui.chatOpen }", - ng-mouseenter="trackHover('chat')" - ng-click="toggleChat()", - ng-controller="ChatButtonController", - ng-show="!anonymous", - sixpack-convert="editor-header" - ) - i.fa.fa-fw.fa-comment( - ng-class="{ 'bounce': unreadMessages > 0 }" + + span(ng-controller="PdfViewToggleController") + a( + href, + ng-show="ui.pdfLayout == 'flat' && fileTreeClosed", + tooltip="PDF", + tooltip-placement="bottom", + tooltip-append-to-body="true", + ng-click="togglePdfView()", + ng-class="{ 'active': ui.view == 'pdf' }" ) - span.label.label-info( - ng-show="unreadMessages > 0" - ) {{ unreadMessages }} - p.toolbar-label #{translate("chat")} \ No newline at end of file + i.fa.fa-file-pdf-o + + .toolbar-center.project-name(ng-controller="ProjectNameController") + span.name( + ng-dblclick="!permissions.admin || startRenaming()", + ng-show="!state.renaming" + ) {{ project.name }} + + input.form-control( + type="text" + ng-model="inputs.name", + ng-show="state.renaming", + on-enter="finishRenaming()", + ng-blur="finishRenaming()", + select-name-when="state.renaming" + ) + + a.rename( + ng-if="permissions.admin", + href='#', + tooltip-placement="bottom", + tooltip="#{translate('rename')}", + tooltip-append-to-body="true", + ng-click="startRenaming()", + ng-show="!state.renaming" + ) + i.fa.fa-pencil + + .toolbar-right + span.online-users( + ng-show="onlineUsersArray.length > 0" + ng-controller="OnlineUsersController" + ) + span(ng-if="onlineUsersArray.length < 4") + span.online-user( + ng-repeat="user in onlineUsersArray", + ng-style="{ 'background-color': 'hsl({{ getHueForUserId(user.user_id) }}, 70%, 50%)' }", + popover="{{ user.name }}" + popover-placement="bottom" + popover-append-to-body="true" + popover-trigger="mouseenter" + ng-click="gotoUser(user)" + ) {{ user.name.slice(0,1) }} + + span.dropdown(dropdown, ng-if="onlineUsersArray.length >= 4") + span.online-user.online-user-multi( + dropdown-toggle, + tooltip="#{translate('connected_users')}", + tooltip-placement="left" + ) + strong {{ onlineUsersArray.length }} + i.fa.fa-fw.fa-user + ul.dropdown-menu.pull-right + li.dropdown-header #{translate('connected_users')} + li(ng-repeat="user in onlineUsersArray") + a(href, ng-click="gotoUser(user)") + span.online-user( + ng-style="{ 'background-color': 'hsl({{ getHueForUserId(user.user_id) }}, 70%, 50%)' }" + ) {{ user.name.slice(0,1) }} + | {{ user.name }} + + + a.btn.btn-full-height( + href, + ng-if="permissions.admin", + tooltip="#{translate('share')}", + tooltip-placement="bottom", + ng-mouseenter="trackHover('share')" + ng-click="openShareProjectModal()", + ng-controller="ShareController", + sixpack-convert="editor-header" + ) + i.fa.fa-fw.fa-group + a.btn.btn-full-height( + href, + ng-mouseenter="trackHover('track-changes')" + ng-click="toggleTrackChanges()", + ng-class="{ active: (ui.view == 'track-changes') }" + tooltip="#{translate('recent_changes')}", + tooltip-placement="bottom", + sixpack-convert="editor-header" + ) + i.fa.fa-fw.fa-history + a.btn.btn-full-height( + href, + tooltip="#{translate('chat')}", + tooltip-placement="bottom", + ng-class="{ active: ui.chatOpen }", + ng-mouseenter="trackHover('chat')" + ng-click="toggleChat()", + ng-controller="ChatButtonController", + ng-show="!anonymous", + sixpack-convert="editor-header" + ) + i.fa.fa-fw.fa-comment( + ng-class="{ 'bounce': unreadMessages > 0 }" + ) + span.label.label-info( + ng-show="unreadMessages > 0" + ) {{ unreadMessages }} + + header.toolbar.toolbar-header.toolbar-with-labels( + ng-cloak, + ng-hide="state.loading" + sixpack-when="labels" + ) + .toolbar-left + a.btn.btn-full-height( + href, + ng-click="ui.leftMenuShown = true", + sixpack-convert="editor-header" + ) + i.fa.fa-fw.fa-bars + p.toolbar-label #{translate("menu")} + a( + href="/project" + ) + i.fa.fa-fw.fa-level-up + + span(ng-controller="PdfViewToggleController") + a( + href, + ng-show="ui.pdfLayout == 'flat' && fileTreeClosed", + tooltip="PDF", + tooltip-placement="bottom", + tooltip-append-to-body="true", + ng-click="togglePdfView()", + ng-class="{ 'active': ui.view == 'pdf' }" + ) + i.fa.fa-file-pdf-o + + .toolbar-center.project-name(ng-controller="ProjectNameController") + span.name( + ng-dblclick="!permissions.admin || startRenaming()", + ng-show="!state.renaming" + ) {{ project.name }} + + input.form-control( + type="text" + ng-model="inputs.name", + ng-show="state.renaming", + on-enter="finishRenaming()", + ng-blur="finishRenaming()", + select-name-when="state.renaming" + ) + + a.rename( + ng-if="permissions.admin", + href='#', + tooltip-placement="bottom", + tooltip="#{translate('rename')}", + tooltip-append-to-body="true", + ng-click="startRenaming()", + ng-show="!state.renaming" + ) + i.fa.fa-pencil + + .toolbar-right + span.online-users( + ng-show="onlineUsersArray.length > 0" + ng-controller="OnlineUsersController" + ) + span(ng-if="onlineUsersArray.length < 4") + span.online-user( + ng-repeat="user in onlineUsersArray", + ng-style="{ 'background-color': 'hsl({{ getHueForUserId(user.user_id) }}, 70%, 50%)' }", + popover="{{ user.name }}" + popover-placement="bottom" + popover-append-to-body="true" + popover-trigger="mouseenter" + ng-click="gotoUser(user)" + ) {{ user.name.slice(0,1) }} + + span.dropdown(dropdown, ng-if="onlineUsersArray.length >= 4") + span.online-user.online-user-multi( + dropdown-toggle, + tooltip="#{translate('connected_users')}", + tooltip-placement="left" + ) + strong {{ onlineUsersArray.length }} + i.fa.fa-fw.fa-user + ul.dropdown-menu.pull-right + li.dropdown-header #{translate('connected_users')} + li(ng-repeat="user in onlineUsersArray") + a(href, ng-click="gotoUser(user)") + span.online-user( + ng-style="{ 'background-color': 'hsl({{ getHueForUserId(user.user_id) }}, 70%, 50%)' }" + ) {{ user.name.slice(0,1) }} + | {{ user.name }} + + + a.btn.btn-full-height( + href, + ng-if="permissions.admin", + ng-mouseenter="trackHover('share')" + ng-click="openShareProjectModal()", + ng-controller="ShareController", + sixpack-convert="editor-header" + ) + i.fa.fa-fw.fa-group + p.toolbar-label #{translate("share")} + a.btn.btn-full-height( + href, + ng-mouseenter="trackHover('track-changes')" + ng-click="toggleTrackChanges()", + ng-class="{ active: (ui.view == 'track-changes') }", + sixpack-convert="editor-header" + ) + i.fa.fa-fw.fa-history + p.toolbar-label #{translate("history")} + a.btn.btn-full-height( + href, + ng-class="{ active: ui.chatOpen }", + ng-mouseenter="trackHover('chat')" + ng-click="toggleChat()", + ng-controller="ChatButtonController", + ng-show="!anonymous", + sixpack-convert="editor-header" + ) + i.fa.fa-fw.fa-comment( + ng-class="{ 'bounce': unreadMessages > 0 }" + ) + span.label.label-info( + ng-show="unreadMessages > 0" + ) {{ unreadMessages }} + p.toolbar-label #{translate("chat")} \ No newline at end of file diff --git a/services/web/public/coffee/ide.coffee b/services/web/public/coffee/ide.coffee index 2553bf9c42..e9e759eaf6 100644 --- a/services/web/public/coffee/ide.coffee +++ b/services/web/public/coffee/ide.coffee @@ -71,6 +71,13 @@ define [ $scope.chat = {} + + # Only run the header AB test for newly registered users. + _abTestStartDate = new Date(Date.UTC(2016, 8, 22)) + _userSignUpDate = new Date(window.user.signUpDate) + + $scope.shouldABTestHeaderLabels = _userSignUpDate > _abTestStartDate + # Tracking code. $scope.$watch "ui.view", (newView, oldView) -> if newView? and newView != "editor" and newView != "pdf"