- The "icone" widget no longer appears as a generic tile in "Ajouter un élément sur l'écran" / "Ajouter DANS ce conteneur" — the icon gallery (now living under "Ajouter un élément sur l'écran" in the left panel instead of the right one) is the only way to add one, always pre-set to the icon you picked. - The element tree now supports dragging an element onto a container row to move it inside (last child), from anywhere in the tree — not just reordering within the same parent. Hovering a container row splits it into before/after/inside zones (thirds) when dragging a sibling, or "inside only" when dragging from elsewhere in the tree. New move_element_to_container() rejects non-container targets and cycles (dropping a container into itself or one of its own descendants) silently, mirroring reorder_element's existing safety pattern. Verified end to end: gallery renders in the left panel with no icone tile in the widget grids, and the move endpoint correctly reparents, rejects a cycle, and rejects a non-container target. Full suite green (89).
22 lines
869 B
Python
22 lines
869 B
Python
from flask import request, jsonify, abort
|
|
|
|
import screens
|
|
|
|
from core.flask_app import app
|
|
|
|
|
|
@app.route("/game/<slug>/elements/<int:element_id>/move-to-container", methods=["POST"])
|
|
def element_move_to_container(slug, element_id):
|
|
"""Appelé en AJAX quand on glisse un élément DANS l'arborescence pour le
|
|
déposer sur un autre élément (un conteneur) plutôt qu'au-dessus/en
|
|
dessous — le fait passer enfant de ce conteneur, en dernière position
|
|
(voir move_element_to_container, qui refuse aussi silencieusement les
|
|
cas invalides : cible non-conteneur, ou cycle)."""
|
|
element = screens.get_element(slug, element_id)
|
|
if not element:
|
|
abort(404)
|
|
data = request.get_json(force=True)
|
|
new_parent_id = int(data["parent_id"])
|
|
screens.move_element_to_container(slug, element_id, new_parent_id)
|
|
return jsonify({"ok": True})
|