diff --git a/packages/rocketchat-theme/client/imports/base.less b/packages/rocketchat-theme/client/imports/base.less index 7338298ba73a7727030d9b566c653d206b5b309d..9fb4ccfd7ad9ab80af0209ec4afce488726d44c5 100644 --- a/packages/rocketchat-theme/client/imports/base.less +++ b/packages/rocketchat-theme/client/imports/base.less @@ -1336,6 +1336,8 @@ label.required::after { direction: ltr; padding-left: 8px; padding-bottom: 1em; + position: relative; + padding-top: 50px; } } @@ -1585,7 +1587,7 @@ label.required::after { -webkit-justify-content: center; &.top-unread-rooms { - top: 60px; + top: 105px; } &.bottom-unread-rooms { @@ -1612,33 +1614,40 @@ label.required::after { } .toolbar { - position: relative; - padding-right: 8px; - margin-top: 10px; + position: fixed; + width: 244px; + z-index: 3; + top: 60px; + padding-top: 10px; +} - &.active { - position: absolute; - width: 100%; - background: #044b76; - height: 97%; - z-index: 1; - left: 0; - margin-left: 8px; - padding-right: 16px; - } +.toolbar-search { + padding-right: 8px; + position: relative; } -.toolbar--search-icon { +.toolbar-search__icon { position: absolute; top: 0; left: 0; line-height: 35px; - width: 35px; - text-align: center; + width: 35px; + text-align: center; +} + +.toolbar-search__icon--cancel { + left: auto; + right: 8px; + opacity: 0; + transition: opacity 0.3s; } -.toolbar--search { - padding-left: 35px !important; +.toolbar-search__input { + padding: 6px 35px !important; + + &:focus + .toolbar-search__icon--cancel { + opacity: 1; + } } .new-room-highlight a { @@ -1730,77 +1739,6 @@ label.required::after { } } -.spotlight { - padding-right: 8px; - margin-top: 10px; -} - -.spotlight-wrapper { - width: 100%; - - > i { - position: absolute; - line-height: 35px; - width: 35px; - text-align: center; - z-index: 1; - color: #a0a0a0 !important; - } - - .message-popup { - position: absolute; - box-shadow: none; - border-radius: 0 0 5px 5px; - top: 35px; - left: 0; - width: 100%; - - &.popup-down { - top: -3px; - } - - .popup-item { - border-top: 1px solid #eaeaea; - line-height: 30px; - font-size: 14px; - padding: 0 10px; - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; - color: #000; - - &.selected { - color: #fff; - } - - i { - margin-right: 4px; - line-height: 28px; - display: inline-block; - border-radius: 20px; - width: 28px; - &.status-offline { - color: #a0a0a0 !important; - } - } - - span { - float: right; - min-width: 20px; - padding: 0 2px; - text-align: center; - font-size: 14px; - line-height: 30px; - font-weight: 800; - } - } - } -} - -.spotlight-input { - padding-left: 35px !important; -} - // MAIN CONTENT + MAIN PAGES // .main-content { @@ -2531,7 +2469,8 @@ label.required::after { &.search-results-list { top: 25px; - height: 500px; + height: calc(~"100vh - 200px"); + overflow-y: auto; box-shadow: none; border-radius: 0; @@ -2539,6 +2478,7 @@ label.required::after { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; + padding-left: 6px; } .unread { diff --git a/packages/rocketchat-theme/client/imports/rtl.less b/packages/rocketchat-theme/client/imports/rtl.less index 23519c92ef40e6db6519edcf902dc42c3775d807..ccf2f5836350c28736935047748f09449d489745 100644 --- a/packages/rocketchat-theme/client/imports/rtl.less +++ b/packages/rocketchat-theme/client/imports/rtl.less @@ -802,19 +802,22 @@ .left(12px); } - .spotlight { - > .spotlight-input { - .icon-search { - left: 0; - } + .toolbar-search { + padding: 0 0 0 8px; + } - .message-popup { - .popup-item { - span { - float: left; - } - } - } + .toolbar-search__icon { + right: 0; + } + + .toolbar-search__icon--cancel { + right: auto; + left: 0; + } + + .message-popup.search-results-list { + .popup-item { + padding-right: 6px; } } } diff --git a/packages/rocketchat-theme/server/colors.less b/packages/rocketchat-theme/server/colors.less index d6ba340f6921bfdb8e0123aae113048484888b4b..c1d83738c3ac6b10036dd6c8c7abd643099d2267 100755 --- a/packages/rocketchat-theme/server/colors.less +++ b/packages/rocketchat-theme/server/colors.less @@ -245,7 +245,7 @@ .input-shade(@primary-font-color, @content-background-color); -.toolbar--search { +.toolbar-search__input { &:focus { border-color: fade(@primary-background-contrast, 50%); } @@ -543,7 +543,8 @@ a:hover { background-color: @tertiary-font-color; } - .rooms-list { + .rooms-list, + .toolbar { background-color: lighten(@primary-background-color, 2.5%); } @@ -583,6 +584,10 @@ a:hover { .message-popup.search-results-list { background-color: lighten(@primary-background-color, 2.5%); + + .popup-item.selected { + background-color: @transparent-darker; + } } /** ---------------------------------------------------------------------------- diff --git a/packages/rocketchat-ui-message/message/popup/messagePopup.coffee b/packages/rocketchat-ui-message/message/popup/messagePopup.coffee index 8bab8b1ec648818e9c7b510a6ab83d4472114639..5dfacccea109eb35b6754f0fc67e55d6cf7da152 100644 --- a/packages/rocketchat-ui-message/message/popup/messagePopup.coffee +++ b/packages/rocketchat-ui-message/message/popup/messagePopup.coffee @@ -96,23 +96,31 @@ Template.messagePopup.onCreated -> if template.open.curValue isnt true or template.hasData.curValue isnt true return - if event.which in [keys.ARROW_UP, keys.ARROW_DOWN] - event.preventDefault() - event.stopPropagation() - if event.which in [keys.ENTER, keys.TAB] + console.log('ENTER') + template.open.set false template.enterValue() event.preventDefault() event.stopPropagation() + return if event.which is keys.ARROW_UP template.up() + + event.preventDefault() + event.stopPropagation() + return + else if event.which is keys.ARROW_DOWN template.down() + event.preventDefault() + event.stopPropagation() + return + template.setTextFilter = _.debounce (value) -> template.textFilter.set(value) , template.textFilterDelay diff --git a/packages/rocketchat-ui-sidenav/side-nav/toolbar.html b/packages/rocketchat-ui-sidenav/side-nav/toolbar.html index 9a4964b660ddb07b29d9de087493c64421cc35e9..86d3474d1d571d7ab339fafa65f8ef5b744c4971 100644 --- a/packages/rocketchat-ui-sidenav/side-nav/toolbar.html +++ b/packages/rocketchat-ui-sidenav/side-nav/toolbar.html @@ -1,8 +1,19 @@ <template name="toolbar"> <div class="toolbar"> - <i class="toolbar--search-icon icon-search secondary-font-color"></i> - <input type="text" name="toolbar-search" class="toolbar--search background-transparent-light color-content-background-color border-transparent-lighter" placeholder="{{_ "Search"}}"> + <div class="toolbar-search"> + <i class="toolbar-search__icon icon-search"></i> + <input type="text" name="toolbar-input" class="toolbar-search__input background-transparent-light color-content-background-color border-transparent-lighter" placeholder="{{_ "Search"}}"> + <i class="toolbar-search__icon toolbar-search__icon--cancel icon-cancel"></i> + </div> {{> messagePopup popupConfig}} </div> </template> + +<template name="toolbarSearchList"> + <i class="{{icon}} {{userStatus}}"></i> + {{name}} + {{#if unread}} + <span class="unread">{{unread}}</span> + {{/if}} +</template> diff --git a/packages/rocketchat-ui-sidenav/side-nav/toolbar.js b/packages/rocketchat-ui-sidenav/side-nav/toolbar.js index 2dd33197f5cb600ee32e49b54fa1996b2f99d0b9..0cd0bbb9e05af65528db0b92d52db7e8eb92c0c2 100644 --- a/packages/rocketchat-ui-sidenav/side-nav/toolbar.js +++ b/packages/rocketchat-ui-sidenav/side-nav/toolbar.js @@ -1,13 +1,16 @@ -this.toolbarSearch = { +const toolbarSearch = { clear: () => { - $('.toolbar--search').val(''); + $('.toolbar-search__input').val(''); + console.log('clear'); }, focus: () => { - $('.toolbar--search').val(''); - $('.toolbar--search').focus(); + $('.toolbar-search__input').val(''); + $('.toolbar-search__input').focus(); } }; +this.toolbarSearch = toolbarSearch; + const getFromServer = (filter, usernames, records, cb) => { Meteor.call('spotlight', filter, usernames, (err, results) => { if (err) { @@ -55,8 +58,8 @@ Template.toolbar.helpers({ const config = { cls: 'search-results-list', collection: RocketChat.models.Subscriptions, - template: 'spotlightTemplate', - input: '.toolbar--search', + template: 'toolbarSearchList', + input: '.toolbar-search__input', getFilter: function(collection, filter, cb) { const resultsFromClient = collection.find({name: new RegExp((RegExp.escape(filter)), 'i'), rid: {$ne: Session.get('openedRoom')}}, {limit: 10, sort: {unread: -1, ls: -1}}).fetch(); @@ -77,7 +80,7 @@ Template.toolbar.helpers({ const doc = _.findWhere(records, {_id: _id}); RocketChat.roomTypes.openRouteLink(doc.t, doc, FlowRouter.current().queryParams); - toolbarSearch.hide(); + toolbarSearch.clear(); } }; @@ -85,74 +88,35 @@ Template.toolbar.helpers({ } }); -// Template.toolbar.events({ -// 'keyup .toolbar--search, change .toolbar--search': (e, t) => { -// const searchVal = $(e.currentTarget).val().trim(); - -// if (!$('.toolbar').hasClass('shortcut')) { -// if (searchVal === '') { -// $('.toolbar').removeClass('active'); -// t.resultsList.set([]); -// return false; -// } -// } - -// $('.toolbar').addClass('active'); - -// const resultsFromClient = RocketChat.models.Subscriptions -// .find({name: new RegExp((RegExp.escape(searchVal)), 'i'), rid: {$ne: Session.get('openedRoom')}}, {limit: 10, sort: {unread: -1, ls: -1}}).fetch(); - -// t.resultsList.set(resultsFromClient); - - -// const resultsFromClientLength = resultsFromClient.length; -// const usernamesFromClient = [Meteor.user().username]; - -// for (let i = 0; i < resultsFromClientLength; i++) { -// if (resultsFromClient[i].t === 'd') { -// usernamesFromClient.push(resultsFromClient[i].name); -// } -// } - -// t.getFromServer(searchVal, usernamesFromClient); -// } -// }); - -// Template.toolbar.onCreated(function() { -// this.resultsList = new ReactiveVar([]); -// this.getFromServer = _.throttle((filter, usernames) => { -// Meteor.call('spotlight', filter, usernames, (err, results) => { -// if (err) { -// console.log(err); -// return false; -// } - -// const resultsFromServer = []; -// const usersLength = results.users.length; -// const roomsLength = results.rooms.length; - -// if (usersLength) { -// for (let i = 0; i < usersLength; i++) { -// resultsFromServer.push({ -// _id: results.users[i]._id, -// t: 'd', -// name: results.users[i].username -// }); -// } -// } - -// if (roomsLength) { -// for (let i = 0; i < roomsLength; i++) { -// resultsFromServer.push({ -// _id: results.rooms[i]._id, -// t: results.rooms[i].t, -// name: results.rooms[i].name -// }); -// } -// } - -// this.resultsList.set(this.resultsList.get().concat(resultsFromServer)); -// console.log(this.resultsList.get()); -// }); -// }, 500); -// }); +Template.toolbar.events({ + 'click .toolbar-search__icon--cancel': () => { + $('.toolbar-search__input').trigger({ + type: 'keyup', + which: 27 + }); + toolbarSearch.clear(); + }, + 'keydown .toolbar-search__input': (event) => { + if (event.which === 13) { + $('.toolbar-search__input').trigger({ + type: 'keyup', + which: 27 + }); + toolbarSearch.clear(); + } + } +}); + +Template.toolbarSearchList.helpers({ + icon() { + return RocketChat.roomTypes.getIcon(this.t); + }, + + userStatus() { + if (this.t === 'd') { + return 'status-' + (Session.get(`user_${this.name}_status`) || 'offline'); + } else { + return 'status-' + (RocketChat.roomTypes.getUserStatus(this.t, this.rid || this._id) || 'offline'); + } + } +}); diff --git a/packages/rocketchat-ui/package.js b/packages/rocketchat-ui/package.js index 3b868ee1e7709c3f76cc592065ddc5b583d37810..82eb53d0e43afb2173cd9536a948ebb12728d80b 100644 --- a/packages/rocketchat-ui/package.js +++ b/packages/rocketchat-ui/package.js @@ -91,8 +91,6 @@ Package.onUse(function(api) { api.addFiles('views/app/roomSearch.html', 'client'); api.addFiles('views/app/secretURL.html', 'client'); api.addFiles('views/app/userSearch.html', 'client'); - api.addFiles('views/app/spotlight/spotlight.html', 'client'); - api.addFiles('views/app/spotlight/spotlightTemplate.html', 'client'); api.addFiles('views/app/videoCall/videoButtons.html', 'client'); api.addFiles('views/app/videoCall/videoCall.html', 'client'); @@ -106,9 +104,6 @@ Package.onUse(function(api) { api.addFiles('views/app/room.coffee', 'client'); api.addFiles('views/app/roomSearch.coffee', 'client'); api.addFiles('views/app/secretURL.coffee', 'client'); - api.addFiles('views/app/spotlight/mobileMessageMenu.coffee', 'client'); - api.addFiles('views/app/spotlight/spotlight.coffee', 'client'); - api.addFiles('views/app/spotlight/spotlightTemplate.js', 'client'); api.addFiles('views/app/videoCall/videoButtons.coffee', 'client'); api.addFiles('views/app/videoCall/videoCall.coffee', 'client'); }); diff --git a/packages/rocketchat-ui/views/app/spotlight/mobileMessageMenu.coffee b/packages/rocketchat-ui/views/app/spotlight/mobileMessageMenu.coffee deleted file mode 100644 index 5a07bbff3ff47ed787a818ded4e05ab48b69a8d1..0000000000000000000000000000000000000000 --- a/packages/rocketchat-ui/views/app/spotlight/mobileMessageMenu.coffee +++ /dev/null @@ -1,59 +0,0 @@ -@mobileMessageMenu = - show: (message, template, e, scope) -> - if not window.plugins?.actionsheet? - return - - options = - 'androidTheme': window.plugins.actionsheet.ANDROID_THEMES.THEME_HOLO_LIGHT - 'buttonLabels': [ - TAPi18n.__('Report Abuse') - ] - androidEnableCancelButton: true - addCancelButtonWithLabel: TAPi18n.__('Cancel') - # 'position': [20, 40] // for iPad pass in the [x, y] position of the popover - - buttonActions = [ - mobileMessageMenu.reportAbuse - ] - - buttons = RocketChat.MessageAction.getButtons message, (message.customClass or 'message-mobile') - for button in buttons - if button.id is 'delete-message' - options.addDestructiveButtonWithLabel = TAPi18n.__(button.i18nLabel) - buttonActions.unshift button.action - else - buttonActions.push button.action - options.buttonLabels.push TAPi18n.__(button.i18nLabel) - - window.plugins.actionsheet.show options, (buttonIndex) -> - if buttonActions[buttonIndex-1]? - buttonActions[buttonIndex-1].call scope, e, template, message - - reportAbuse: (e, t, message) -> - swal { - title: TAPi18n.__('Report_this_message_question_mark') - text: message.msg - inputPlaceholder: TAPi18n.__('Why_do_you_want_to_report_question_mark') - type: 'input' - showCancelButton: true - confirmButtonColor: '#DD6B55' - confirmButtonText: TAPi18n.__("Report_exclamation_mark") - cancelButtonText: TAPi18n.__('Cancel') - closeOnConfirm: false - html: false - }, (inputValue) -> - if inputValue is false - return false - - if inputValue is "" - swal.showInputError(TAPi18n.__("You_need_to_write_something")) - return false - - Meteor.call 'reportMessage', message, inputValue - - swal - title: TAPi18n.__("Report_sent") - text: TAPi18n.__("Thank_you_exclamation_mark") - type: 'success' - timer: 1000 - showConfirmButton: false diff --git a/packages/rocketchat-ui/views/app/spotlight/spotlight.coffee b/packages/rocketchat-ui/views/app/spotlight/spotlight.coffee deleted file mode 100644 index 5e43e46d9b80968ff9173a55585fc00203fc82bf..0000000000000000000000000000000000000000 --- a/packages/rocketchat-ui/views/app/spotlight/spotlight.coffee +++ /dev/null @@ -1,64 +0,0 @@ -@spotlight = - hide: -> - $('.spotlight').addClass('hidden') - - show: -> - $('.spotlight input').val('') - $('.spotlight').removeClass('hidden') - $('.spotlight input').focus() - -getFromServer = (filter, records, cb) => - Meteor.call 'spotlight', filter, Meteor.user().username, (err, results) -> - if err? - return console.log err - - server = [] - - if results?.users?.length > 0 - for user in results.users when not _.findWhere(records, {t: 'd', name: user.username})? - server.push({ - _id: user._id - t: 'd', - name: user.username - }) - - if results?.rooms?.length > 0 - for room in results.rooms - server.push({ - _id: room._id - t: room.t, - name: room.name - }) - - if server.length > 0 - cb(records.concat(server)) - -getFromServerDelayed = _.throttle getFromServer, 500 - -Template.spotlight.helpers - popupConfig: -> - config = - cls: 'popup-down' - collection: RocketChat.models.Subscriptions - template: 'spotlightTemplate' - input: '[name=spotlight]' - getFilter: (collection, filter, cb) -> - exp = new RegExp("#{RegExp.escape filter}", 'i') - - records = collection.find({name: exp, rid: {$ne: Session.get('openedRoom')}}, {limit: 10, sort: {unread: -1, ls: -1}}).fetch() - - cb(records) - - if filter?.trim().length < 1 or records.length >= 5 - return - - getFromServerDelayed(filter, records, cb) - - getValue: (_id, collection, records, firstPartValue) -> - doc = _.findWhere(records, {_id: _id}) - - RocketChat.roomTypes.openRouteLink(doc.t, doc, FlowRouter.current().queryParams) - - spotlight.hide() - - return config diff --git a/packages/rocketchat-ui/views/app/spotlight/spotlight.html b/packages/rocketchat-ui/views/app/spotlight/spotlight.html deleted file mode 100644 index f291a1bbf9eb2b8dceb585499cfad05cee2ae663..0000000000000000000000000000000000000000 --- a/packages/rocketchat-ui/views/app/spotlight/spotlight.html +++ /dev/null @@ -1,9 +0,0 @@ -<template name="spotlight"> - <div class="spotlight hidden background-transparent-darker"> - <div class="spotlight-input secondary-background-color secondary-font-color"> - <i class="icon-search secondary-font-color"></i> - <input type="text" name="spotlight"> - {{> messagePopup popupConfig}} - </div> - </div> -</template> diff --git a/packages/rocketchat-ui/views/app/spotlight/spotlightTemplate.html b/packages/rocketchat-ui/views/app/spotlight/spotlightTemplate.html deleted file mode 100644 index f121f78f42dbb1165f2d661a3e79254229629102..0000000000000000000000000000000000000000 --- a/packages/rocketchat-ui/views/app/spotlight/spotlightTemplate.html +++ /dev/null @@ -1,7 +0,0 @@ -<template name="spotlightTemplate"> - <i class="{{icon}} {{userStatus}}"></i> - {{name}} - {{#if unread}} - <span class="unread">{{unread}}</span> - {{/if}} -</template> diff --git a/packages/rocketchat-ui/views/app/spotlight/spotlightTemplate.js b/packages/rocketchat-ui/views/app/spotlight/spotlightTemplate.js deleted file mode 100644 index 631931f6eb687ad6b912eac2f5ed7cc893300062..0000000000000000000000000000000000000000 --- a/packages/rocketchat-ui/views/app/spotlight/spotlightTemplate.js +++ /dev/null @@ -1,13 +0,0 @@ -Template.spotlightTemplate.helpers({ - icon() { - return RocketChat.roomTypes.getIcon(this.t); - }, - - userStatus() { - if (this.t === 'd') { - return 'status-' + (Session.get(`user_${this.name}_status`) || 'offline'); - } else { - return 'status-' + (RocketChat.roomTypes.getUserStatus(this.t, this.rid || this._id) || 'offline'); - } - } -});