zulip/static/js
Steve Howell 441a21fac8 Use jQuery objects in MessageListView._rows.
The values of this dictionary used to be raw DOM elements,
but get_row() wraps them again, so there's not a huge
reason to store them as raw DOM elements internally.  It
is slightly easier to reason about the code if everything
stays at the jQuery level.

To preserve the old behavior here, we have to do something
that is kind of ugly, but at least it's explicit now.  In
the old code, our cache was DOM elements, and if an id
wasn't in the cache, we would sneakily return $(undefined)
with this code in get_row():

    return $(this._rows[id]);

And it turns out that $(undefined) is basically just a
zero-element jQuery object.  A lot of our code depends
on this behavior and just works around the zero-element
objects as needed with checks like this:

    if (this.selected_row()).length === 0) {
        // don't try to get offset
    }

For now we just preserve this behavior.  We could eventually
be more strict here, or at least have aggressive warnings
on cache misses, but we'd need to retrofit code to be
able to call something like `has_rendered_selection()`
and/or deal with `undefined` as the return value for the case
where the selection hasn't been rendered.

Here is some example code that would cause tracebacks if
we just returned `undefined` for cache misses:

    rerender_preserving_scrolltop: function () {
        // old_offset is the number of pixels between the top of the
        // viewable window and the selected message
        var old_offset;
        var selected_row = this.selected_row();
        var selected_in_view = selected_row.length > 0;
        if (selected_in_view) {
            old_offset = selected_row.offset().top;
        }
        return this.rerender_with_target_scrolltop(selected_row,
            old_offset);
    },
2018-07-27 11:14:53 -07:00
..
bundles search: Add search_pill_widget.js. 2018-07-23 11:29:10 -07:00
portico help: Exclude anchor link hash to highlight main article in sidebar. 2018-07-24 09:01:42 -07:00
stats eslint: Enable conditionalAssign config of no-trailing-spaces rule. 2018-06-11 07:51:24 -04:00
.eslintrc.json Change name of eslintrc file to .eslintrc.json 2016-11-29 08:58:39 -08:00
activity.js refactor: Add compare_function to buddy_list. 2018-07-25 15:53:27 -07:00
admin_sections.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
admin.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
alert_words_ui.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
alert_words.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
archive.js eslint: Enable no-extra-parens rule. 2018-06-11 07:51:24 -04:00
attachments_ui.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
avatar.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
blueslip.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
bot_data.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
buddy_data.js refactor: Track user_ids in buddy_list.js. 2018-07-25 15:53:27 -07:00
buddy_list.js refactor: Add compare_function to buddy_list. 2018-07-25 15:53:27 -07:00
channel.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
click_handlers.js settings_overlay.html: Upgrade to use font-awesome 4.7 icon prefixes. 2018-07-11 20:17:11 +05:30
colorspace.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
common.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
components.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
compose_actions.js Remove redundant narrow_state.get_current_filter(). 2018-07-10 14:20:24 +05:30
compose_fade.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
compose_pm_pill.js pills: Use widget instead of my_pill throughout the app. 2018-07-23 11:29:10 -07:00
compose_state.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
compose_ui.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
compose.js message edit: Add markdown shortcuts to message edit UI. 2018-07-23 10:41:46 -07:00
composebox_typeahead.js composebox_typeahead: Add user groups to PM recipient typeahead. 2018-07-26 11:21:11 -07:00
condense.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
copy_and_paste.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
debug.js eslint: Enable no-extra-parens rule. 2018-06-11 07:51:24 -04:00
dict.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
drafts.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
echo.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
emoji_picker.js emoji: Move emoji_collection from emoji picker to emoji.js. 2018-07-23 12:35:08 -07:00
emoji.js emoji: Rename css_class to emoji_code in emoji.js. 2018-07-23 12:35:08 -07:00
favicon.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
feature_flags.js Remove feature_flags.mark_read_at_bottom. 2018-07-07 10:19:15 +02:00
fenced_code.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
fetch_status.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
filter.js refactor: Use early-exits in can_apply_locally(). 2018-07-11 20:00:56 +05:30
floating_recipient_bar.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
gear_menu.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
hash_util.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
hashchange.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
hotkey.js hotkey: Blur search pill or searchbox contenteditable div on Esc key. 2018-07-23 11:37:10 -07:00
hotspots.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
info_overlay.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
input_pill.js pills: Allow removing pill without calling the remove event handler. 2018-07-23 11:29:10 -07:00
integration_bot_widget.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
invite.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
keydown_util.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
lightbox_canvas.js lightbox: Make v close the lightbox during Pan & Zoom. 2018-07-23 10:36:48 -07:00
lightbox.js lightbox: Fix a "Pan & Zoom" causing an error with thumbnailed images. 2018-07-18 10:19:56 -07:00
list_cursor.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
list_render.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
list_util.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
loading.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
local_message.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
localstorage.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
markdown.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
message_edit.js message edit: Add markdown shortcuts to message edit UI. 2018-07-23 10:41:46 -07:00
message_events.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
message_fetch.js left sidebar: Make sure the selected stream is visible in left sidebar. 2018-07-23 10:32:10 -07:00
message_flags.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
message_list_data.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
message_list_view.js Use jQuery objects in MessageListView._rows. 2018-07-27 11:14:53 -07:00
message_list.js recipient_row.handlebars: Upgrade to font-awesome 4.7 icon prefixes. 2018-07-11 20:31:17 +05:30
message_live_update.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
message_scroll.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
message_store.js Use topic_data.js for topic typeaheads. 2018-07-23 16:08:24 -07:00
message_util.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
message_viewport.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
muting_ui.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
muting.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
narrow_state.js Add narrow_state.is_reading_mode(). 2018-07-10 14:20:24 +05:30
narrow.js pills: Use widget instead of my_pill throughout the app. 2018-07-23 11:29:10 -07:00
navigate.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
night_mode.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
notifications.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
overlays.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
panels.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
people.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
pm_conversations.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
pm_list.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
pointer.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
popovers.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
presence.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
reactions.js reactions: Fix minor formatting in log message. 2018-07-10 16:22:52 -04:00
realm_icon.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
recent_senders.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
reload.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
reminder.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
resize.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
rows.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
rtl.js refactor: Extract rtl.set_rtl_class_for_textarea(). 2018-07-11 19:20:22 +05:30
schema.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
scroll_bar.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
scroll_util.js scroll_util: Account for element padding in height calculations. 2018-07-27 09:09:52 -07:00
search_pill_widget.js pills: Use widget instead of my_pill throughout the app. 2018-07-23 11:29:10 -07:00
search_pill.js search: Add a basic implementation of search pills. 2018-07-23 11:29:10 -07:00
search_suggestion.js search: Do not display All messages suggestion if bar not empty. 2018-07-23 11:29:10 -07:00
search.js keyboard-shortcuts: Focus instead of select on / if search pills enabled. 2018-07-23 11:29:10 -07:00
sent_messages.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
server_events_dispatch.js invitations: Send 'invites_changed' event for invitations events. 2018-07-13 18:00:06 +05:30
server_events.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
settings_account.js profile fields: Fix fragile JavaScript for deleting date fields. 2018-07-11 19:16:24 +05:30
settings_bots.js settings UI: Add copy zuliprc button to bot information box. 2018-07-10 15:19:05 +05:30
settings_display.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
settings_emoji.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
settings_filters.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
settings_invites.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
settings_muting.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
settings_notifications.js notification settings: Add UI for stream email notifications. 2018-07-14 12:19:33 +05:30
settings_org.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
settings_panel_menu.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
settings_profile_fields.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
settings_sections.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
settings_streams.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
settings_toggle.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
settings_ui.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
settings_user_groups.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
settings_users.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
settings.js notification settings: Add UI for stream email notifications. 2018-07-14 12:19:33 +05:30
setup.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
socket.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
stream_color.js search: Disable tab_bar due to addition of search pills. 2018-07-23 11:29:10 -07:00
stream_create.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
stream_data.js notification settings: Add UI for stream email notifications. 2018-07-14 12:19:33 +05:30
stream_edit.js notification settings: Add UI for stream email notifications. 2018-07-14 12:19:33 +05:30
stream_events.js notification settings: Add UI for stream email notifications. 2018-07-14 12:19:33 +05:30
stream_list.js stream list: Scroll to opened stream on zoom out from stream-more-topics. 2018-07-27 09:09:53 -07:00
stream_muting.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
stream_popover.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
stream_sort.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
submessage.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
subs.js subs: Use scroll_util to move selected stream rows into view. 2018-07-27 09:08:49 -07:00
tab_bar.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
templates.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
tictactoe_widget.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
timerender.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
todo_widget.js widgets: Add todo widget. 2018-07-10 11:18:05 +05:30
top_left_corner.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
topic_data.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
topic_generator.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
topic_list.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
translations.js i18n: Fix reference error for localstorage. 2018-05-30 23:28:21 +05:30
transmit.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
tutorial.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
typeahead_helper.js typeahead: Add new functions for differentiating user groups and people. 2018-07-26 11:21:11 -07:00
typing_data.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
typing_events.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
typing_status.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
typing.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
ui_init.js search: Disable tab_bar due to addition of search pills. 2018-07-23 11:29:10 -07:00
ui_report.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
ui_util.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
ui.js ui: Simplify hotkey deprecation notices. 2018-07-23 22:41:59 -07:00
unread_ops.js Remove feature_flags.mark_read_at_bottom. 2018-07-07 10:19:15 +02:00
unread_ui.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
unread.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
upload_widget.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
upload.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
user_events.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
user_groups.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
user_pill.js typeahead: Replace no-break space (U+00A0) in query with space (U+0020). 2018-07-25 14:55:11 -07:00
user_search.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
util.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
voting_widget.js voting_widget: Don't update question in question.outbound function. 2018-07-06 11:30:12 -04:00
widgetize.js widgets: Add todo widget. 2018-07-10 11:18:05 +05:30
zcommand.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
zform.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00
zulip.js app: Prepare JS files for consumption by webpack. 2018-07-05 10:53:36 +02:00