Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[wip] popovers: rendering the emoji picker only once. #4301

Closed
wants to merge 3 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
3 changes: 3 additions & 0 deletions frontend_tests/node_tests/dispatch.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,9 @@ set_global('echo', {
set_realm_filters: noop,
});

// To support popovers object referenced in server_events.js
add_dependencies({popovers: 'js/popovers.js'});

// page_params is highly coupled to dispatching now
set_global('page_params', {test_suite: false});
var page_params = global.page_params;
Expand Down
4 changes: 4 additions & 0 deletions static/js/emoji.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,10 @@ exports.emoji_name_to_css_class = function (emoji_name) {
};

exports.update_emojis = function update_emojis(realm_emojis) {
// exports.realm_emojis is emptied before adding the realm-specific emoji to it.
// This makes sure that in case of deletion, the deleted realm_emojis don't
// persist in exports.realm_emojis.
exports.realm_emojis = {};
// Copy the default emoji list and add realm-specific emoji to it
exports.emojis = default_emojis.slice(0);
_.each(realm_emojis, function (data, name) {
Expand Down
33 changes: 22 additions & 11 deletions static/js/popovers.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ var current_actions_popover_elem;
var current_message_info_popover_elem;
var current_message_reactions_popover_elem;
var emoji_map_is_open = false;

var emoji_map_is_rendered = false;
var userlist_placement = "right";

var list_of_popovers = [];
Expand Down Expand Up @@ -381,13 +381,27 @@ function user_sidebar_popped() {
return current_user_sidebar_popover !== undefined;
}

exports.reset_emoji_popover = function () {
emoji_map_is_rendered = false;
};

exports.hide_emoji_map_popover = function () {
if (emoji_map_is_open) {
$('.emoji_popover').css('display', 'none');
$('.drag').css('display', 'none');
$("#new_message_content").focus();
emoji_map_is_open = false;
}
};
exports.show_emoji_map_popover = function () {
if (!emoji_map_is_open) {
$('.emoji_popover').css('display', 'inline-block');
$('.emoji_popover').scrollTop(0);
$('.drag').show();
$("#new_message_content").focus();
emoji_map_is_open = true;
}
};

exports.hide_user_sidebar_popover = function () {
if (user_sidebar_popped()) {
Expand Down Expand Up @@ -423,13 +437,6 @@ function render_emoji_popover() {
}());
$('.emoji_popover').empty();
$('.emoji_popover').append(content);

$('.drag').show();
$('.emoji_popover').css('display', 'inline-block');

$("#new_message_content").focus();

emoji_map_is_open = true;
}

exports.register_click_handlers = function () {
Expand Down Expand Up @@ -520,10 +527,14 @@ exports.register_click_handlers = function () {
if (emoji_map_is_open) {
// If the popover is already shown, clicking again should toggle it.
popovers.hide_emoji_map_popover();
return;
} else {
// If the emoji_map is not rendered before then, a call to render_emoji_popover is made.
if (!emoji_map_is_rendered) {
render_emoji_popover();
emoji_map_is_rendered = true;
}
popovers.show_emoji_map_popover();
}
popovers.hide_all();
render_emoji_popover();
});

$('body').on('click', '.user_popover .narrow_to_private_messages', function (e) {
Expand Down
1 change: 1 addition & 0 deletions static/js/server_events.js
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,7 @@ function dispatch_normal_event(event) {
case 'realm_emoji':
emoji.update_emojis(event.realm_emoji);
settings_emoji.populate_emoji(event.realm_emoji);
popovers.reset_emoji_popover();
break;

case 'realm_filters':
Expand Down