Merge current dev and refresh PR #6741 from the 7011 integration

This commit is contained in:
pewdiepie-archdaemon
2026-10-26 16:21:28 +00:00
295 changed files with 24233 additions and 1587 deletions
+52
View File
@@ -0,0 +1,52 @@
import pathlib
ROOT = pathlib.Path(__file__).resolve().parents[1]
PANEL = (ROOT / "static/js/editor/layer-panel.js").read_text(encoding="utf-8")
SORT = (ROOT / "static/js/dragSort.js").read_text(encoding="utf-8")
CSS = (ROOT / "static/css/13-image-editor.css").read_text(encoding="utf-8")
def test_effect_rows_can_be_dragged_onto_layers_to_copy_them():
# Photoshop-style: drag an effect sub-row onto another layer/group and it
# is copied there (the source keeps its effect).
assert "function cloneEffectForCopy(effect) {" in PANEL
assert "function wireEffectDrag(sub, owner, effect) {" in PANEL
assert "wireEffectDrag(sub, group, effect);" in PANEL
assert "wireEffectDrag(sub, layer, effect);" in PANEL
assert "'.ge-layer-item[data-layer-id], .ge-layer-group-row[data-group-id]'" in PANEL
assert "layer.effects.push(cloneEffectForCopy(effect));" in PANEL
assert "saveState(`Copy ${effectLabel(effect.type)}`);" in PANEL
assert "copied to ${layer.name}" in PANEL
def test_effect_copy_gets_fresh_ids_and_its_own_mask_canvas():
clone = PANEL[PANEL.index("function cloneEffectForCopy(effect) {"):]
clone = clone[:clone.index("\n }")]
assert "id: `effect-${Math.random().toString(36).slice(2, 9)}`," in clone
assert "id: `effect-mask-${Math.random().toString(36).slice(2, 9)}`" in clone
assert "const canvas = document.createElement('canvas');" in clone
assert "canvas.getContext('2d').drawImage(effect.mask.canvas, 0, 0);" in clone
assert "copy.mask.canvas = canvas;" in clone
assert "copy.mask.ctx = canvas.getContext('2d');" in clone
def test_effect_drag_does_not_start_the_layer_reorder():
enable = PANEL[PANEL.index("dragSortModule.enable('ge-layers-list'"):]
enable = enable[:enable.index("onReorder:")]
assert ".ge-adj-sub-item" in enable
# A drop re-renders the list mid-drag, so the snap-back must bail out when
# the placeholder/dragged row were already detached.
assert "if (!placeholder.parentNode || !draggedEl.isConnected) {" in SORT
assert "placeholder.remove();\n return;" in SORT
def test_effect_drag_has_ghost_and_drop_target_styles():
assert ".ge-effect-drag-ghost {" in CSS
ghost = CSS[CSS.index(".ge-effect-drag-ghost {"):]
ghost = ghost[:ghost.index("}")]
assert "position: fixed;" in ghost
assert "pointer-events: none;" in ghost
assert "z-index: 10030;" in ghost
assert ".ge-layer-item.is-effect-drop-target," in CSS
assert ".ge-layer-group-row.is-effect-drop-target {" in CSS
assert ".ge-layer-item.is-effect-dragging {" in CSS