第一次触发
clipboard.on
函数会重新加载页面(e.preventDefault()给出,这不是函数错误)但是从第二次开始它就可以正常工作了。当第一次触发clipboard.on
功能时,我必须阻止它重新加载。
export function end_message_row_edit($row) {
const message = message_lists.current.get(rows.id($row));
if (message !== undefined && currently_editing_messages.has(message.id)) {
const scroll_by = currently_editing_messages.get(message.id).scrolled_by;
const original_scrollTop = message_viewport.scrollTop();
// Clean up resize event listeners
const listeners = currently_editing_messages.get(message.id).listeners;
const edit_box = document.querySelector(
`#edit_form_${CSS.escape(message.id)} .message_edit_content`,
);
if (listeners !== undefined) {
// Event listeners to clean up are only set in some edit types
edit_box.removeEventListener("mousedown", listeners[0]);
document.body.removeEventListener("mouseup", listeners[1]);
}
currently_editing_messages.delete(message.id);
message_lists.current.hide_edit_message($row);
message_viewport.scrollTop(original_scrollTop - scroll_by);
compose.abort_video_callbacks(message.id);
}
if ($row.find(".condensed").length !== 0) {
condense.show_message_expander($row);
} else {
condense.show_message_condenser($row);
}
$row.find(".message_reactions").show();
// We have to blur out text fields, or else hotkeys.js
// thinks we are still editing.
$row.find(".message_edit").trigger("blur");
// We should hide the editing typeahead if it is visible
$row.find("input.message_edit_topic").trigger("blur");
}
export function show_copied_confirmation($copy_button) {
// Display a tooltip to notify the user the message or code was copied.
const instance = tippy($copy_button, {
placement: "top",
appendTo: () => document.body,
onUntrigger() {
remove_instance();
},
});
instance.setContent($t({defaultMessage: "Copied!"}));
instance.show();
function remove_instance() {
if (!instance.state.isDestroyed) {
instance.destroy();
}
}
setTimeout(remove_instance, 3000);
}
主要功能
const clipboard = new ClipboardJS(source, {
target: () =>
document.querySelector(`#edit_form_${CSS.escape(message_id)} .message_edit_content`),
});
clipboard.on("success", (e) => {
e.clearSelection();
source._tippy.setContent($t({defaultMessage: "Copied!"}));
show_copied_confirmation(source);
setTimeout(() => {
end_message_row_edit($row);
}, "2000");
});
}