mirror of
https://github.com/livebook-dev/livebook.git
synced 2025-11-09 21:51:42 +08:00
Fixes (#889)
* Fix title test * Fix editable element check * Fix duplicate output ids
This commit is contained in:
parent
3c48fff159
commit
ae0f083c5c
3 changed files with 16 additions and 11 deletions
|
|
@ -6,7 +6,9 @@ export function isMacOS() {
|
||||||
}
|
}
|
||||||
|
|
||||||
export function isEditableElement(element) {
|
export function isEditableElement(element) {
|
||||||
return element.matches("input, textarea, [contenteditable]");
|
return (
|
||||||
|
element.matches && element.matches("input, textarea, [contenteditable]")
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function clamp(n, x, y) {
|
export function clamp(n, x, y) {
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ defmodule LivebookWeb.Output.FrameComponent do
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
def mount(socket) do
|
def mount(socket) do
|
||||||
{:ok, assign(socket, counter: 0, output_count: 0, persistent_idx_map: %{})}
|
{:ok, assign(socket, counter: 0, output_count: 0, persistent_id_map: %{})}
|
||||||
end
|
end
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
|
|
@ -18,7 +18,7 @@ defmodule LivebookWeb.Output.FrameComponent do
|
||||||
assign(socket,
|
assign(socket,
|
||||||
counter: 1,
|
counter: 1,
|
||||||
output_count: length(outputs),
|
output_count: length(outputs),
|
||||||
persistent_idx_map: idx_map(outputs)
|
persistent_id_map: map_idx_to_persistent_id(outputs, socket.assigns.id)
|
||||||
)
|
)
|
||||||
else
|
else
|
||||||
socket
|
socket
|
||||||
|
|
@ -31,23 +31,23 @@ defmodule LivebookWeb.Output.FrameComponent do
|
||||||
|
|
||||||
:replace ->
|
:replace ->
|
||||||
prev_output_count = socket.assigns.output_count
|
prev_output_count = socket.assigns.output_count
|
||||||
prev_persistent_idx_map = socket.assigns.persistent_idx_map
|
prev_persistent_id_map = socket.assigns.persistent_id_map
|
||||||
|
|
||||||
output_count = length(outputs)
|
output_count = length(outputs)
|
||||||
persistent_idx_map = idx_map(outputs)
|
persistent_id_map = map_idx_to_persistent_id(outputs, socket.assigns.id)
|
||||||
|
|
||||||
socket =
|
socket =
|
||||||
assign(socket,
|
assign(socket,
|
||||||
outputs: outputs,
|
outputs: outputs,
|
||||||
output_count: output_count,
|
output_count: output_count,
|
||||||
persistent_idx_map: persistent_idx_map
|
persistent_id_map: persistent_id_map
|
||||||
)
|
)
|
||||||
|
|
||||||
less_outputs? = prev_output_count > output_count
|
less_outputs? = prev_output_count > output_count
|
||||||
appended_outputs? = prev_output_count > map_size(prev_persistent_idx_map)
|
appended_outputs? = prev_output_count > map_size(prev_persistent_id_map)
|
||||||
|
|
||||||
# If there are outputs that we need to remove, increase the counter.
|
# If there are outputs that we need to remove, increase the counter.
|
||||||
# Otherwise we reuse DOM element ids via persistent_idx_map
|
# Otherwise we reuse DOM element ids via persistent_id_map
|
||||||
if less_outputs? or appended_outputs? do
|
if less_outputs? or appended_outputs? do
|
||||||
update(socket, :counter, &(&1 + 1))
|
update(socket, :counter, &(&1 + 1))
|
||||||
else
|
else
|
||||||
|
|
@ -63,10 +63,10 @@ defmodule LivebookWeb.Output.FrameComponent do
|
||||||
{:ok, socket}
|
{:ok, socket}
|
||||||
end
|
end
|
||||||
|
|
||||||
defp idx_map(outputs) do
|
defp map_idx_to_persistent_id(outputs, root_id) do
|
||||||
outputs
|
outputs
|
||||||
|> Enum.with_index()
|
|> Enum.with_index()
|
||||||
|> Map.new(fn {{output_idx, _}, idx} -> {output_idx, idx} end)
|
|> Map.new(fn {{output_idx, _}, idx} -> {output_idx, "#{root_id}-#{idx}"} end)
|
||||||
end
|
end
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
|
|
@ -81,7 +81,7 @@ defmodule LivebookWeb.Output.FrameComponent do
|
||||||
<div id={"frame-outputs-#{@id}-#{@counter}"} phx-update="append">
|
<div id={"frame-outputs-#{@id}-#{@counter}"} phx-update="append">
|
||||||
<LivebookWeb.Output.outputs
|
<LivebookWeb.Output.outputs
|
||||||
outputs={@outputs}
|
outputs={@outputs}
|
||||||
dom_id_map={@persistent_idx_map}
|
dom_id_map={@persistent_id_map}
|
||||||
socket={@socket}
|
socket={@socket}
|
||||||
session_id={@session_id}
|
session_id={@session_id}
|
||||||
input_values={@input_values}
|
input_values={@input_values}
|
||||||
|
|
|
||||||
|
|
@ -36,6 +36,9 @@ defmodule LivebookWeb.SessionLiveTest do
|
||||||
Session.set_notebook_name(session.pid, "My notebook")
|
Session.set_notebook_name(session.pid, "My notebook")
|
||||||
wait_for_session_update(session.pid)
|
wait_for_session_update(session.pid)
|
||||||
|
|
||||||
|
# Wait for LV to update
|
||||||
|
render(view)
|
||||||
|
|
||||||
assert page_title(view) =~ "My notebook"
|
assert page_title(view) =~ "My notebook"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue