36 lines
1.4 KiB
Python
36 lines
1.4 KiB
Python
from flask import request, redirect, url_for, abort
|
|
|
|
import screens
|
|
|
|
from core.flask_app import app
|
|
|
|
|
|
@app.route("/game/<slug>/elements/<int:element_id>/actions/add", methods=["POST"])
|
|
def action_add(slug, element_id):
|
|
element = screens.get_element(slug, element_id)
|
|
if not element:
|
|
abort(404)
|
|
trigger_event = screens._trigger_for(element["widget"], element["attributes"])
|
|
action_type = request.form.get("action_type", "rien")
|
|
|
|
def _int_or_none(key):
|
|
raw = request.form.get(key)
|
|
try:
|
|
return int(raw) if raw not in (None, "") else None
|
|
except (TypeError, ValueError):
|
|
return None
|
|
|
|
screens.add_action(
|
|
slug, element_id, trigger_event, action_type,
|
|
target_screen_id=_int_or_none("target_screen_id"),
|
|
target_element_id=_int_or_none("target_element_id"),
|
|
element_property=request.form.get("element_property") or None,
|
|
element_value=request.form.get("element_value") or None,
|
|
target_definition_id=_int_or_none("target_definition_id"),
|
|
target_row_id=_int_or_none("target_row_id"),
|
|
target_field=request.form.get("target_field") or None,
|
|
data_operation=request.form.get("data_operation") or None,
|
|
data_value=request.form.get("data_value") or None,
|
|
)
|
|
return redirect(url_for("screen_edit", slug=slug, screen_id=element["screen_id"], selected=element_id))
|