Release 0.9.0
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
from bot import loaded_modules_dict
|
||||
from os import path, pardir
|
||||
|
||||
module_name = path.basename(path.normpath(path.join(path.abspath(__file__), pardir, pardir)))
|
||||
widget_name = path.basename(path.abspath(__file__))[:-3]
|
||||
|
||||
|
||||
def main_widget(*args, **kwargs):
|
||||
module = args[0]
|
||||
dispatchers_steamid = kwargs.get("dispatchers_steamid", None)
|
||||
|
||||
template_frontend = module.templates.get_template('gameserver_status_widget/view_frontend.html')
|
||||
|
||||
server_is_online = module.dom.data.get("module_telnet", {}).get("server_is_online", True)
|
||||
active_dataset = module.dom.data.get("module_game_environment", {}).get("active_dataset", None)
|
||||
shutdown_in_seconds = (
|
||||
module.dom.data
|
||||
.get("module_game_environment", {})
|
||||
.get(active_dataset, {})
|
||||
.get("shutdown_in_seconds", None)
|
||||
)
|
||||
data_to_emit = module.template_render_hook(
|
||||
module,
|
||||
template=template_frontend,
|
||||
server_is_online=server_is_online,
|
||||
shutdown_in_seconds=shutdown_in_seconds
|
||||
)
|
||||
|
||||
module.webserver.send_data_to_client_hook(
|
||||
module,
|
||||
payload=data_to_emit,
|
||||
data_type="widget_content",
|
||||
clients=[dispatchers_steamid],
|
||||
target_element={
|
||||
"id": "gameserver_status_widget",
|
||||
"type": "div",
|
||||
"selector": "body > header > div > div"
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
def update_widget(*args, **kwargs):
|
||||
module = args[0]
|
||||
updated_values_dict = kwargs.get("updated_values_dict", None)
|
||||
|
||||
template_frontend = module.templates.get_template('gameserver_status_widget/view_frontend.html')
|
||||
|
||||
server_is_online = module.dom.get_updated_or_default_value(
|
||||
"module_telnet", "server_is_online", updated_values_dict, True
|
||||
)
|
||||
|
||||
shutdown_in_seconds = module.dom.get_updated_or_default_value(
|
||||
"module_game_environment", "shutdown_in_seconds", updated_values_dict, None
|
||||
)
|
||||
|
||||
data_to_emit = module.template_render_hook(
|
||||
module,
|
||||
template=template_frontend,
|
||||
server_is_online=server_is_online,
|
||||
shutdown_in_seconds=shutdown_in_seconds
|
||||
)
|
||||
|
||||
module.webserver.send_data_to_client_hook(
|
||||
module,
|
||||
payload=data_to_emit,
|
||||
data_type="widget_content",
|
||||
clients=module.webserver.connected_clients.keys(),
|
||||
target_element={
|
||||
"id": "gameserver_status_widget",
|
||||
"type": "div",
|
||||
"selector": "body > header > div > div"
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
widget_meta = {
|
||||
"description": "shows gameserver status, shut it down. or don't ^^",
|
||||
"main_widget": main_widget,
|
||||
"handlers": {
|
||||
"module_telnet/server_is_online": update_widget,
|
||||
"module_game_environment/%map_identifier%/shutdown_in_seconds": update_widget,
|
||||
"module_game_environment/%map_identifier%/cancel_shutdown": update_widget,
|
||||
"module_game_environment/%map_identifier%/force_shutdown": update_widget
|
||||
},
|
||||
"enabled": True
|
||||
}
|
||||
|
||||
loaded_modules_dict["module_" + module_name].register_widget(widget_name, widget_meta)
|
||||
103
bot/modules/game_environment/widgets/gettime_widget.py
Normal file
103
bot/modules/game_environment/widgets/gettime_widget.py
Normal file
@@ -0,0 +1,103 @@
|
||||
from bot import loaded_modules_dict
|
||||
from os import path, pardir
|
||||
|
||||
module_name = path.basename(path.normpath(path.join(path.abspath(__file__), pardir, pardir)))
|
||||
widget_name = path.basename(path.abspath(__file__))[:-3]
|
||||
|
||||
|
||||
def main_widget(*args, **kwargs):
|
||||
module = args[0]
|
||||
dispatchers_steamid = kwargs.get("dispatchers_steamid", None)
|
||||
active_dataset = module.dom.data.get("module_game_environment", {}).get("active_dataset", None)
|
||||
|
||||
template_frontend = module.templates.get_template('gametime_widget/view_frontend.html')
|
||||
gametime = module.game_environment.get_last_recorded_gametime_dict()
|
||||
gametime.update({
|
||||
"is_bloodmoon": "",
|
||||
"is_bloodday": ""
|
||||
})
|
||||
|
||||
next_bloodmoon_date = (
|
||||
module.dom.data
|
||||
.get("module_game_environment", {})
|
||||
.get(active_dataset, {})
|
||||
.get("gamestats", {})
|
||||
.get("BloodMoonDay", None)
|
||||
)
|
||||
|
||||
data_to_emit = module.template_render_hook(
|
||||
module,
|
||||
template=template_frontend,
|
||||
last_recorded_gametime=gametime,
|
||||
next_bloodmoon_date=next_bloodmoon_date
|
||||
)
|
||||
|
||||
module.webserver.send_data_to_client_hook(
|
||||
module,
|
||||
payload=data_to_emit,
|
||||
data_type="widget_content",
|
||||
clients=[dispatchers_steamid],
|
||||
target_element={
|
||||
"id": "gametime_widget",
|
||||
"type": "div",
|
||||
"selector": "body > header > div > div"
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
def update_widget(*args, **kwargs):
|
||||
module = args[0]
|
||||
updated_values_dict = kwargs.get("updated_values_dict", None)
|
||||
original_values_dict = kwargs.get("original_values_dict", None)
|
||||
|
||||
gametime = updated_values_dict.get("last_recorded_gametime", None)
|
||||
old_gametime = original_values_dict.get("last_recorded_gametime", None)
|
||||
if gametime is None:
|
||||
module.trigger_action_hook(module, event_data=["gettime", {}])
|
||||
return False
|
||||
|
||||
if gametime == old_gametime:
|
||||
pass
|
||||
# return
|
||||
|
||||
active_dataset = module.dom.data.get("module_game_environment", {}).get("active_dataset", None)
|
||||
next_bloodmoon_date = (
|
||||
module.dom.data
|
||||
.get("module_game_environment", {})
|
||||
.get(active_dataset, {})
|
||||
.get("gamestats", {})
|
||||
.get("BloodMoonDay", None)
|
||||
)
|
||||
|
||||
template_frontend = module.templates.get_template('gametime_widget/view_frontend.html')
|
||||
data_to_emit = module.template_render_hook(
|
||||
module,
|
||||
template=template_frontend,
|
||||
last_recorded_gametime=gametime,
|
||||
next_bloodmoon_date=next_bloodmoon_date
|
||||
)
|
||||
|
||||
module.webserver.send_data_to_client_hook(
|
||||
module,
|
||||
payload=data_to_emit,
|
||||
data_type="widget_content",
|
||||
clients=module.webserver.connected_clients.keys(),
|
||||
target_element={
|
||||
"id": "gametime_widget",
|
||||
"type": "div",
|
||||
"selector": "body > header > div > div"
|
||||
}
|
||||
)
|
||||
return gametime
|
||||
|
||||
|
||||
widget_meta = {
|
||||
"description": "displays the in-game time and day",
|
||||
"main_widget": main_widget,
|
||||
"handlers": {
|
||||
"module_game_environment/%map_identifier%/last_recorded_gametime": update_widget
|
||||
},
|
||||
"enabled": True
|
||||
}
|
||||
|
||||
loaded_modules_dict["module_" + module_name].register_widget(widget_name, widget_meta)
|
||||
@@ -0,0 +1,94 @@
|
||||
from bot import loaded_modules_dict
|
||||
from os import path, pardir
|
||||
from bot.logger import get_logger
|
||||
|
||||
logger = get_logger(__name__)
|
||||
|
||||
module_name = path.basename(path.normpath(path.join(path.abspath(__file__), pardir, pardir)))
|
||||
widget_name = path.basename(path.abspath(__file__))[:-3]
|
||||
|
||||
|
||||
def announce_location_change(*args, **kwargs):
|
||||
"""
|
||||
Handler that announces location edits in the map chat.
|
||||
This demonstrates that the callback_dict system works - multiple modules can
|
||||
subscribe to the same DOM path changes without modifying the locations module.
|
||||
"""
|
||||
module = args[0]
|
||||
method = kwargs.get("method", None)
|
||||
updated_values_dict = kwargs.get("updated_values_dict", {})
|
||||
|
||||
# DEBUG: Log what we received
|
||||
logger.info(
|
||||
"location_change_debug",
|
||||
method=method,
|
||||
updated_values_dict_type=type(updated_values_dict).__name__,
|
||||
updated_values_dict_repr=repr(updated_values_dict)[:200]
|
||||
)
|
||||
|
||||
# Only announce on update, not insert or remove
|
||||
if method != "update":
|
||||
return
|
||||
|
||||
if not isinstance(updated_values_dict, dict):
|
||||
return
|
||||
|
||||
# Get active dataset (map identifier)
|
||||
active_dataset = module.dom.data.get("module_game_environment", {}).get("active_dataset", None)
|
||||
if active_dataset is None:
|
||||
return
|
||||
|
||||
# updated_values_dict structure at this depth (callback on depth 4):
|
||||
# {location_identifier: {location_data}}
|
||||
# location_data includes "owner" field
|
||||
|
||||
for location_identifier, location_dict in updated_values_dict.items():
|
||||
if not isinstance(location_dict, dict):
|
||||
continue
|
||||
|
||||
# Get owner directly from location_dict
|
||||
owner_steamid = location_dict.get("owner")
|
||||
if owner_steamid is None:
|
||||
logger.warning(
|
||||
"location_owner_missing",
|
||||
location_identifier=location_identifier
|
||||
)
|
||||
continue
|
||||
|
||||
# Get player name from DOM
|
||||
player_name = (
|
||||
module.dom.data
|
||||
.get("module_players", {})
|
||||
.get("elements", {})
|
||||
.get(active_dataset, {})
|
||||
.get(owner_steamid, {})
|
||||
.get("name", "Unknown Player")
|
||||
)
|
||||
|
||||
# Get location name
|
||||
location_name = location_dict.get("name", location_identifier)
|
||||
|
||||
# Send chat message via say_to_all
|
||||
event_data = ['say_to_all', {
|
||||
'message': (
|
||||
'[FFAA00]Location Update:[-] {player} edited location [00FFFF]{location}[-]'
|
||||
.format(
|
||||
player=player_name,
|
||||
location=location_name
|
||||
)
|
||||
)
|
||||
}]
|
||||
module.trigger_action_hook(module, event_data=event_data)
|
||||
|
||||
|
||||
widget_meta = {
|
||||
"description": "Announces location changes in map chat (test for callback_dict system)",
|
||||
"main_widget": None, # No UI widget, just a handler
|
||||
"handlers": {
|
||||
# Subscribe to location changes - any module can do this!
|
||||
"module_locations/elements/%map_identifier%/%owner_steamid%/%element_identifier%": announce_location_change
|
||||
},
|
||||
"enabled": True
|
||||
}
|
||||
|
||||
loaded_modules_dict["module_" + module_name].register_widget(widget_name, widget_meta)
|
||||
406
bot/modules/game_environment/widgets/manage_entities_widget.py
Normal file
406
bot/modules/game_environment/widgets/manage_entities_widget.py
Normal file
@@ -0,0 +1,406 @@
|
||||
from bot import loaded_modules_dict
|
||||
from os import path, pardir
|
||||
|
||||
module_name = path.basename(path.normpath(path.join(path.abspath(__file__), pardir, pardir)))
|
||||
widget_name = path.basename(path.abspath(__file__))[:-3]
|
||||
|
||||
|
||||
def get_entity_table_row_css_class(entity_dict):
|
||||
css_classes = []
|
||||
return " ".join(css_classes)
|
||||
|
||||
|
||||
def select_view(*args, **kwargs):
|
||||
module = args[0]
|
||||
dispatchers_steamid = kwargs.get('dispatchers_steamid', None)
|
||||
|
||||
current_view = module.get_current_view(dispatchers_steamid)
|
||||
|
||||
if current_view == "options":
|
||||
options_view(module, dispatchers_steamid=dispatchers_steamid)
|
||||
elif current_view == "delete-modal":
|
||||
frontend_view(module, dispatchers_steamid=dispatchers_steamid)
|
||||
delete_modal_view(module, dispatchers_steamid=dispatchers_steamid)
|
||||
else:
|
||||
frontend_view(module, dispatchers_steamid=dispatchers_steamid)
|
||||
|
||||
|
||||
def delete_modal_view(*args, **kwargs):
|
||||
module = args[0]
|
||||
dispatchers_steamid = kwargs.get('dispatchers_steamid', None)
|
||||
|
||||
all_available_entity_dicts = module.dom.data.get(module.get_module_identifier(), {}).get("elements", {})
|
||||
all_selected_elements_count = 0
|
||||
active_dataset = module.dom.data.get("module_game_environment", {}).get("active_dataset", None)
|
||||
for map_identifier, entity_dicts in all_available_entity_dicts.items():
|
||||
if active_dataset == map_identifier:
|
||||
for entity_id, entity_dict in entity_dicts.items():
|
||||
entity_is_selected_by = entity_dict.get("selected_by", [])
|
||||
if dispatchers_steamid in entity_is_selected_by:
|
||||
all_selected_elements_count += 1
|
||||
|
||||
modal_confirm_delete = module.dom_management.get_delete_confirm_modal(
|
||||
module,
|
||||
count=all_selected_elements_count,
|
||||
target_module="module_game_environment",
|
||||
dom_element_id="entity_table_modal_action_delete_button",
|
||||
dom_action="delete_selected_dom_elements",
|
||||
dom_element_root=module.dom_element_root,
|
||||
dom_element_select_root=module.dom_element_select_root,
|
||||
confirmed="True"
|
||||
)
|
||||
|
||||
data_to_emit = modal_confirm_delete
|
||||
|
||||
module.webserver.send_data_to_client_hook(
|
||||
module,
|
||||
payload=data_to_emit,
|
||||
data_type="modal_content",
|
||||
clients=[dispatchers_steamid],
|
||||
target_element={
|
||||
"id": "manage_entities_widget_modal",
|
||||
"type": "div",
|
||||
"selector": "body > main > div"
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
def frontend_view(*args, **kwargs):
|
||||
module = args[0]
|
||||
dispatchers_steamid = kwargs.get('dispatchers_steamid', None)
|
||||
|
||||
template_frontend = module.templates.get_template('manage_entities_widget/view_frontend.html')
|
||||
template_table_rows = module.templates.get_template('manage_entities_widget/table_row.html')
|
||||
template_table_header = module.templates.get_template('manage_entities_widget/table_header.html')
|
||||
template_table_footer = module.templates.get_template('manage_entities_widget/table_footer.html')
|
||||
|
||||
template_options_toggle = module.templates.get_template('manage_entities_widget/control_switch_view.html')
|
||||
template_options_toggle_view = module.templates.get_template('manage_entities_widget/control_switch_options_view.html')
|
||||
|
||||
active_dataset = module.dom.data.get("module_game_environment", {}).get("active_dataset", None)
|
||||
|
||||
all_available_entity_dicts = module.dom.data.get(module.get_module_identifier(), {}).get("elements", {})
|
||||
|
||||
table_rows = ""
|
||||
all_selected_elements_count = 0
|
||||
for map_identifier, entity_dicts in all_available_entity_dicts.items():
|
||||
if active_dataset == map_identifier:
|
||||
for entity_id, entity_dict in entity_dicts.items():
|
||||
entity_is_selected_by = entity_dict.get("selected_by", [])
|
||||
|
||||
entity_entry_selected = False
|
||||
if dispatchers_steamid in entity_is_selected_by:
|
||||
entity_entry_selected = True
|
||||
all_selected_elements_count += 1
|
||||
|
||||
control_select_link = module.dom_management.get_selection_dom_element(
|
||||
module,
|
||||
target_module="module_game_environment",
|
||||
dom_element_select_root=["selected_by"],
|
||||
dom_element=entity_dict,
|
||||
dom_element_entry_selected=entity_entry_selected,
|
||||
dom_action_inactive="select_dom_element",
|
||||
dom_action_active="deselect_dom_element"
|
||||
)
|
||||
|
||||
# Sanitize dataset for HTML ID (replace spaces with underscores, lowercase)
|
||||
sanitized_dataset = module.dom_management.sanitize_for_html_id(entity_dict.get("dataset", ""))
|
||||
sanitized_entity_id = str(entity_id)
|
||||
|
||||
# Update entity_dict with sanitized values for template
|
||||
entity_dict_for_template = entity_dict.copy()
|
||||
entity_dict_for_template["dataset"] = sanitized_dataset
|
||||
entity_dict_for_template["dataset_original"] = entity_dict.get("dataset", "")
|
||||
|
||||
table_rows += module.template_render_hook(
|
||||
module,
|
||||
template=template_table_rows,
|
||||
entity=entity_dict_for_template,
|
||||
css_class=get_entity_table_row_css_class(entity_dict),
|
||||
control_select_link=control_select_link
|
||||
)
|
||||
|
||||
current_view = module.get_current_view(dispatchers_steamid)
|
||||
|
||||
options_toggle = module.template_render_hook(
|
||||
module,
|
||||
template=template_options_toggle,
|
||||
control_switch_options_view=module.template_render_hook(
|
||||
module,
|
||||
template=template_options_toggle_view,
|
||||
options_view_toggle=(current_view in ["frontend", "delete-modal"]),
|
||||
steamid=dispatchers_steamid
|
||||
)
|
||||
)
|
||||
|
||||
dom_element_delete_button = module.dom_management.get_delete_button_dom_element(
|
||||
module,
|
||||
count=all_selected_elements_count,
|
||||
target_module="module_game_environment",
|
||||
dom_element_id="entity_table_widget_action_delete_button",
|
||||
dom_action="delete_selected_dom_elements",
|
||||
dom_element_root=module.dom_element_root,
|
||||
dom_element_select_root=module.dom_element_select_root
|
||||
)
|
||||
|
||||
data_to_emit = module.template_render_hook(
|
||||
module,
|
||||
template=template_frontend,
|
||||
options_toggle=options_toggle,
|
||||
table_header=module.template_render_hook(
|
||||
module,
|
||||
template=template_table_header
|
||||
),
|
||||
table_rows=table_rows,
|
||||
table_footer=module.template_render_hook(
|
||||
module,
|
||||
template=template_table_footer,
|
||||
action_delete_button=dom_element_delete_button
|
||||
)
|
||||
)
|
||||
|
||||
module.webserver.send_data_to_client_hook(
|
||||
module,
|
||||
payload=data_to_emit,
|
||||
data_type="widget_content",
|
||||
clients=[dispatchers_steamid],
|
||||
method="update",
|
||||
target_element={
|
||||
"id": "manage_entities_widget",
|
||||
"type": "table",
|
||||
"selector": "body > main > div"
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
def options_view(*args, **kwargs):
|
||||
module = args[0]
|
||||
dispatchers_steamid = kwargs.get('dispatchers_steamid', None)
|
||||
|
||||
template_frontend = module.templates.get_template('manage_entities_widget/view_options.html')
|
||||
template_options_toggle = module.templates.get_template('manage_entities_widget/control_switch_view.html')
|
||||
template_options_toggle_view = module.templates.get_template('manage_entities_widget/control_switch_options_view.html')
|
||||
|
||||
options_toggle = module.template_render_hook(
|
||||
module,
|
||||
template=template_options_toggle,
|
||||
control_switch_options_view=module.template_render_hook(
|
||||
module,
|
||||
template=template_options_toggle_view,
|
||||
options_view_toggle=False,
|
||||
steamid=dispatchers_steamid
|
||||
)
|
||||
)
|
||||
|
||||
data_to_emit = module.template_render_hook(
|
||||
module,
|
||||
template=template_frontend,
|
||||
options_toggle=options_toggle,
|
||||
widget_options=module.options
|
||||
)
|
||||
|
||||
module.webserver.send_data_to_client_hook(
|
||||
module,
|
||||
payload=data_to_emit,
|
||||
data_type="widget_content",
|
||||
clients=[dispatchers_steamid],
|
||||
method="update",
|
||||
target_element={
|
||||
"id": "manage_entities_widget",
|
||||
"type": "table",
|
||||
"selector": "body > main > div"
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
def table_rows(*args, ** kwargs):
|
||||
module = args[0]
|
||||
updated_values_dict = kwargs.get("updated_values_dict", None)
|
||||
method = kwargs.get("method", None)
|
||||
active_dataset = module.dom.data.get("module_game_environment", {}).get("active_dataset", None)
|
||||
|
||||
if method in ["upsert", "edit", "insert"]:
|
||||
for clientid in module.webserver.connected_clients.keys():
|
||||
current_view = module.get_current_view(clientid)
|
||||
if current_view == "frontend":
|
||||
template_table_rows = module.templates.get_template('manage_entities_widget/table_row.html')
|
||||
|
||||
for entity_id, entity_dict in updated_values_dict.items():
|
||||
try:
|
||||
# Sanitize dataset for HTML ID (replace spaces with underscores, lowercase)
|
||||
sanitized_dataset = module.dom_management.sanitize_for_html_id(entity_dict["dataset"])
|
||||
table_row_id = "entity_table_row_{}_{}".format(
|
||||
sanitized_dataset,
|
||||
str(entity_id)
|
||||
)
|
||||
# Update entity_dict with sanitized dataset for template
|
||||
entity_dict = entity_dict.copy()
|
||||
entity_dict["dataset"] = sanitized_dataset
|
||||
entity_dict["dataset_original"] = updated_values_dict[entity_id].get("dataset", "")
|
||||
except KeyError:
|
||||
table_row_id = "manage_entities_widget"
|
||||
|
||||
selected_entity_entries = (
|
||||
module.dom.data
|
||||
.get("module_game_environment", {})
|
||||
.get("elements", {})
|
||||
.get(active_dataset, {})
|
||||
.get(entity_id, {})
|
||||
.get("selected_by", [])
|
||||
)
|
||||
|
||||
entity_entry_selected = False
|
||||
if clientid in selected_entity_entries:
|
||||
entity_entry_selected = True
|
||||
|
||||
control_select_link = module.dom_management.get_selection_dom_element(
|
||||
module,
|
||||
target_module="module_game_environment",
|
||||
dom_element_select_root=["selected_by"],
|
||||
dom_element=entity_dict,
|
||||
dom_element_entry_selected=entity_entry_selected,
|
||||
dom_action_inactive="select_dom_element",
|
||||
dom_action_active="deselect_dom_element"
|
||||
)
|
||||
|
||||
table_row = module.template_render_hook(
|
||||
module,
|
||||
template=template_table_rows,
|
||||
entity=entity_dict,
|
||||
css_class=get_entity_table_row_css_class(entity_dict),
|
||||
control_select_link=control_select_link
|
||||
)
|
||||
|
||||
module.webserver.send_data_to_client_hook(
|
||||
module,
|
||||
payload=table_row,
|
||||
data_type="table_row",
|
||||
clients=[clientid],
|
||||
target_element={
|
||||
"id": table_row_id,
|
||||
"type": "tr",
|
||||
"class": get_entity_table_row_css_class(entity_dict),
|
||||
"selector": "body > main > div > div#manage_entities_widget > main > table > tbody"
|
||||
}
|
||||
)
|
||||
elif method == "remove":
|
||||
entity_origin = updated_values_dict[2]
|
||||
entity_id = updated_values_dict[3]
|
||||
# Sanitize dataset for HTML ID (replace spaces with underscores, lowercase)
|
||||
sanitized_origin = module.dom_management.sanitize_for_html_id(entity_origin)
|
||||
module.webserver.send_data_to_client_hook(
|
||||
module,
|
||||
data_type="remove_table_row",
|
||||
clients="all",
|
||||
target_element={
|
||||
"id": "entity_table_row_{}_{}".format(
|
||||
sanitized_origin,
|
||||
str(entity_id)
|
||||
)
|
||||
}
|
||||
)
|
||||
|
||||
update_delete_button_status(module, *args, **kwargs)
|
||||
|
||||
|
||||
def update_widget(*args, **kwargs):
|
||||
module = args[0]
|
||||
updated_values_dict = kwargs.get("updated_values_dict", None)
|
||||
|
||||
method = kwargs.get("method", None)
|
||||
if method in ["update"]:
|
||||
entity_dict = updated_values_dict
|
||||
player_clients_to_update = list(module.webserver.connected_clients.keys())
|
||||
|
||||
for clientid in player_clients_to_update:
|
||||
try:
|
||||
current_view = module.get_current_view(clientid)
|
||||
# Sanitize dataset for HTML ID (replace spaces with underscores, lowercase)
|
||||
sanitized_dataset = module.dom_management.sanitize_for_html_id(entity_dict.get("dataset", ""))
|
||||
table_row_id = "entity_table_row_{}_{}".format(
|
||||
sanitized_dataset,
|
||||
str(entity_dict.get("id", None))
|
||||
)
|
||||
# Update entity_dict with sanitized dataset
|
||||
original_dataset = entity_dict.get("dataset", "")
|
||||
entity_dict = entity_dict.copy()
|
||||
entity_dict["dataset"] = sanitized_dataset
|
||||
entity_dict["dataset_original"] = original_dataset
|
||||
|
||||
if current_view == "frontend":
|
||||
module.webserver.send_data_to_client_hook(
|
||||
module,
|
||||
payload=entity_dict,
|
||||
data_type="table_row_content",
|
||||
clients="all",
|
||||
method="update",
|
||||
target_element={
|
||||
"id": table_row_id,
|
||||
"parent_id": "manage_entities_widget",
|
||||
"module": "game_environment",
|
||||
"type": "tr",
|
||||
"selector": "body > main > div > div#manage_entities_widget",
|
||||
"class": get_entity_table_row_css_class(entity_dict),
|
||||
}
|
||||
)
|
||||
except AttributeError as error:
|
||||
pass
|
||||
except KeyError as error:
|
||||
pass
|
||||
|
||||
|
||||
def update_selection_status(*args, **kwargs):
|
||||
module = args[0]
|
||||
updated_values_dict = kwargs.get("updated_values_dict", None)
|
||||
|
||||
# Sanitize dataset for HTML ID (replace spaces with underscores, lowercase)
|
||||
sanitized_dataset = module.dom_management.sanitize_for_html_id(updated_values_dict["dataset"])
|
||||
|
||||
module.dom_management.update_selection_status(
|
||||
*args, **kwargs,
|
||||
target_module=module,
|
||||
dom_action_active="deselect_dom_element",
|
||||
dom_action_inactive="select_dom_element",
|
||||
dom_element_id={
|
||||
"id": "entity_table_row_{}_{}_control_select_link".format(
|
||||
sanitized_dataset,
|
||||
updated_values_dict["identifier"]
|
||||
)
|
||||
}
|
||||
)
|
||||
|
||||
update_delete_button_status(module, *args, **kwargs)
|
||||
|
||||
|
||||
def update_delete_button_status(*args, **kwargs):
|
||||
module = args[0]
|
||||
|
||||
module.dom_management.update_delete_button_status(
|
||||
*args, **kwargs,
|
||||
dom_element_root=module.dom_element_root,
|
||||
dom_element_select_root=module.dom_element_select_root,
|
||||
target_module=module,
|
||||
dom_action="delete_selected_dom_elements",
|
||||
dom_element_id={
|
||||
"id": "entity_table_widget_action_delete_button"
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
widget_meta = {
|
||||
"description": "sends and updates a table of all currently known entities",
|
||||
"main_widget": select_view,
|
||||
"handlers": {
|
||||
"module_game_environment/visibility/%steamid%/current_view":
|
||||
select_view,
|
||||
"module_game_environment/elements/%map_identifier%/%id%":
|
||||
table_rows,
|
||||
"module_game_environment/elements/%map_identifier%/%id%/pos":
|
||||
update_widget,
|
||||
"module_game_environment/elements/%map_identifier%/%id%/selected_by":
|
||||
update_selection_status,
|
||||
},
|
||||
"enabled": True
|
||||
}
|
||||
|
||||
loaded_modules_dict["module_" + module_name].register_widget(widget_name, widget_meta)
|
||||
Reference in New Issue
Block a user