*  #4665  Added EmojiPicker

Work primarily by @broernr-de and @harrison on pre-release.mattermost.com

* Final fixes to handle custom emojis from internal review and single merge error

* ESLint fixes

* CSS changes and other code to support emoji picker in reply window

* Fix for file upload and emoji picker icon positions on post and comment.

RHS emoji picker appearing see-through at this time.

* Fix for two ESLint issues.

* covered most of feedback:
RHS emoji picker looks correct color-wise
RHS emoji picker dynamically positions against height of thread size (post + reply messages)
escape closes emoji window
search box focused on open

ESLint fixes against other files
oversized emoji preview fixes

* Adding in 'outside click' eventing to dismiss the emoji window

* Changing some formatting to fix mismatch between my local eslant rules and jenkins.

* adding alternative import method due to downstream testing errors

* yet another attempt to retain functionality and pass tests - skipping import of browser store

* fix for feedback items 5 and 7:
* move search to float on top with stylistic changes
* whitespace in the header (+1 squashed commit)
Squashed commits:
[6a26d32] changes that address items
1, 2, 6, 8, and 9 of latest feedback

* Fix for attachment preview location on mobile

* Fix for latest rounds of feedback

* fixing eslint issue

* making emojipicker sprite based, fixing alignments

* Fix for emoji quality, fixing some behavior (hover background and cursor settings)
undoing config changes

* Preview feature for emojis

* Adjustments to config file, and changing layout/design of attachment and emoji icon.

* manual revert from master branch for config.json

* reverting paperclip and fixing alignments.  Additionally fixing inadvertent display of picker on mobile.

* CSS changes to try to fix the hover behavior - currently working for emoji picker (when enabled), but hover for attachment isn't working

* Made suggested changes by jwilander except for jQuery removal

* Adding hover for both icons

* removal of some usages of jQuery

* Fix for two layout issues on IE11/Edge

* UI improvements for emoji picker

* Fix for many minor display issues

* fix for additional appearance items

* fix to two minor UI items

* A little extra padding for IE11

* fix for IE11 scroll issue, and removing align attribute on img tag which was throwing js error

* fixes some display issues on firefox

* fix for uneven sides of emojis

* fix for eslint issues that I didn't introduce

* fix for missing bottom edge of RHS emojipicker.  also fixing text overlapping icons on text area (including RHS)

* Update "emoji selector" to "emoji picker"

* changes for code review
- removal of ..getDOMNode
- use sprite imagery for emoji preview
- remove lastBlurAt from state as it wasn't used

* fixes for:
- fake custom emoji preview in picker
- RHS scrollbar on preview

* fix for minor alignment of preview emoji
Этот коммит содержится в:
bonespiked
2017-03-24 09:09:51 -04:00
коммит произвёл Jason Blais
родитель d0af931e6e
Коммит 28ad645153
28 изменённых файлов: 4827 добавлений и 53 удалений

3519
webapp/sass/components/_emojisprite.scss Обычный файл

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@@ -1,15 +1,15 @@
@charset 'UTF-8';
@charset "UTF-8";
.emoticon {
background-position: 50% 50%;
background-repeat: no-repeat;
background-size: contain;
display: inline-block;
height: 20px;
height: 21px;
min-height: 1em;
min-width: 1em;
vertical-align: middle;
width: 20px;
width: 21px;
}
.emoticon-suggestion {
@@ -36,3 +36,205 @@
text-align: center;
vertical-align: middle;
}
.emoji-picker__popover {
padding: 0px;
.popover-content {
padding: 0px;
}
}
.emoji-picker-bottom {
display: flex;
flex-direction: column;
@include user-select(none);
position: absolute;
z-index: 40;
right: 0%;
width: 278px;
border: 1px solid;
min-height: 298px;
border-radius: 3px;
.emoji-picker__search-container {
position: relative;
.emoji-picker__search-icon {
padding-left: 6px;
padding-top: 6px;
position: absolute;
font-size: 13px;
}
}
}
.emoji-picker__search {
border-width: 1px 0px 1px 0px;
border-style: solid;
padding: 2px 0 2px 25px;
width: 100%;
height: 25px;
font-size: 12px;
&:focus{
outline: none;
}
}
.emoji-picker {
display: flex;
flex-direction: column;
@include user-select(none);
position: absolute;
top: -361px;
right: 0px;
width: 278px;
border: 1px solid;
border-radius: 3px;
.emoji-picker__search-container {
position: relative;
.emoji-picker__search-icon {
padding-left: 6px;
padding-top: 6px;
position: absolute;
font-size: 13px;
}
}
}
.emoji-picker__categories {
flex-grow: 0;
flex-shrink: 0;
.emoji-picker__category {
color: #333333;
display: inline-block;
font-size: 16px;
margin: 3px 6px;
text-align: center;
width: 15px;
&--selected,
&:hover {
color: #666666;
}
}
}
.emoji-picker__items {
max-height: 262px;
overflow-x: hidden;
overflow-y: auto;
padding: 0px 8px 8px 8px;
position: relative;
.emoji-picker__category-header {
font-size: 12px;
font-weight: bold;
margin-bottom: 6px;
margin-top: 3px;
padding-top: 3px;
// padding-bottom: 10px;
}
.emoji-picker__preview_sprite {
isplay: inline-block;
height: 45px;
margin: 3px;
vertical-align: top;
padding: 3px;
}
.emoji-picker-items__container {
> div {
display: inline-block;
height: 21px;
margin: 3px;
vertical-align: top;
width: 21px;
padding: 3px;
}
> span {
display: inline-block;
height: 21px;
margin: 3px;
vertical-align: top;
width: 21px;
padding: 0px;
border: 0px;
}
}
.emoji-picker__item {
border-radius: 6px;
cursor: pointer;
font-size: 18px;
margin: 3px;
}
}
.emojisprite-wrapper {
cursor: pointer;
}
.emoji-picker__preview {
border-top: 1px solid;
display: table-cell;
vertical-align: middle;
flex-grow: 0;
flex-shrink: 0;
height:45px;
width: 278px;
padding: 3px 10px;
&.emoji-picker__preview-placeholder {
padding: 12px;
}
.emoji-picker__preview-image-box {
display: table-cell;
vertical-align: middle;
height: 36px;
width: 42px;
.sprite-preview {
height: 36px;
width: 36px;
vertical-align: middle;
padding: 0px;
border: 0px;
display: inline-block;
}
}
.emoji-picker__preview-image {
max-height: 36px;
max-width: 42px;
padding: 0 10px 0 0;
}
.emoji-picker__preview-name {
font-size: 13px;
font-weight: bold;
}
.emoji-picker__preview-aliases {
display: block;
font-size: 12px;
font-weight: bold;
}
}

Просмотреть файл

@@ -3,6 +3,7 @@
@import 'buttons';
@import 'dropdown';
@import 'emoticons';
@import 'emojisprite';
@import 'error-bar';
@import 'files';
@import 'inputs';

Просмотреть файл

@@ -62,10 +62,6 @@
.post-create__container {
width: 100%;
.textarea-wrapper {
min-height: 100px;
}
.btn {
margin-bottom: 10px;
@@ -154,6 +150,7 @@
overflow: auto;
position: relative;
padding-top: 10px;
min-height: 429px;
.file-preview__container {
margin-top: 5px;

Просмотреть файл

@@ -23,7 +23,7 @@
}
.textarea-wrapper {
min-height: 36px;
min-height: 37px;
position: relative;
.textbox-preview-area {
@@ -371,7 +371,15 @@
padding: .5em 15px 0;
width: 100%;
}
#reply_textbox.custom-textarea-emoji{
bottom: 0;
max-height: 162px !important;
padding-right: 60px;
padding-top: 6px;
resize: none;
}
.center {
max-width: 1028px;
}
@@ -386,6 +394,25 @@
-ms-overflow-style: auto;
overflow: auto;
padding-right: 43px;
resize: none;
}
#post_textbox-reference.custom-textarea-emoji {
padding-right: 43px;
resize: none;
}
#reply_textbox.custom-textarea-emoji {
padding-right: 60px;
resize: none;
}
#post_textbox.custom-textarea-emoji {
padding-right: 60px;
resize: none;
}
}
}
@@ -425,8 +452,28 @@
max-height: 162px !important;
padding-right: 35px;
padding-top: 8px;
resize: none;
}
#post_textbox-reference.custom-textarea-emoji {
bottom: 0;
max-height: 162px !important;
padding-right: 35px;
padding-top: 8px;
resize: none;
}
#post_textbox.custom-textarea-emoji {
bottom: 0;
max-height: 162px !important;
padding-right: 60px;
padding-top: 8px;
resize: none;
}
.textarea-div {
line-height: 1.5;
max-height: 163px !important;
@@ -436,13 +483,12 @@
}
.btn-file {
@include opacity(.5);
@include single-transition(all, .15s);
font-size: 16px;
padding: 7px 9px 6px;
padding: 8px 9px 4px;
position: absolute;
right: 0;
top: 1px;
top: 0;
z-index: 5;
svg {
@@ -452,7 +498,6 @@
&:hover,
&:active {
@include opacity(.9);
box-shadow: none;
}
@@ -464,6 +509,48 @@
@include opacity(.1);
}
}
.icon--attachment {
@include opacity(.5);
display: inline-block;
position: relative;
vertical-align: top;
input {
cursor: pointer;
direction: ltr;
filter: alpha(opacity=0);
font-size: 23px;
height: 100%;
margin: 0;
opacity: 0;
position: absolute;
right: 0;
top: 0;
width: 100%;
}
&:hover {
@include opacity(.9);
}
}
}
.icon--emoji-picker {
@include opacity(.5);
@include single-transition(all, .15s);
cursor: pointer;
font-size: 19px;
margin-left: 7px;
position: relative;
vertical-align: top;
&:hover,
&:active {
@include opacity(.9);
box-shadow: none;
}
}
textarea {

Просмотреть файл

@@ -31,6 +31,15 @@
}
}
.post-create__container{
.post-create-body {
.icon__postcontent_picker {
display:none;
top: -7px;
}
}
}
.suggestion-list__content {
max-height: 145px;
}
@@ -1098,6 +1107,13 @@
padding: .5em 1em;
}
.emoji-rhs {
position: relative;
display: none;
top: 1px;
right: -1px;
}
.msg-typing:empty {
display: none;
}

Просмотреть файл

@@ -19,14 +19,23 @@
width: 300px;
}
}
.post-right__scroll{
.post-create__container{
.post-create-body {
.icon__emoji_picker {
display:none;
top: -7px;
}
}
}
}
.post-create__container {
form {
padding: .5em 0 0;
}
.post-create-footer {
padding: 0 45px;
padding: 0 45px 0 8px;
.post-error {
position: relative;
@@ -46,6 +55,7 @@
display: table-cell;
padding-left: 45px;
.sidebar--right & {
padding-left: 0;
}
@@ -54,15 +64,30 @@
.app__content & {
.btn-file {
bottom: -2px;
left: 0;
left: 10px;
line-height: 36px;
padding: 0;
top: auto;
width: 45px;
width: 25px;
}
}
.send-button {
.app__content & {
.icon {
position: relative;
top: 3px;
}
}
.icon__emoji_picker {
position: relative;
display: none;
top: 1px;
right: -1px;
}
.send-button {
display: table-cell;
}
}