DNS record management, CSS grid, Regex, location.query

This commit is contained in:
Face
2025-08-20 14:37:57 +03:00
parent 99f17dc42c
commit e8508bfe33
22 changed files with 1351 additions and 123 deletions

View File

@@ -584,6 +584,13 @@ static func parse_utility_class_internal(rule: CSSRule, utility_name: String) ->
if utility_name == "inline-flex":
rule.properties["display"] = "inline-flex"
return
if utility_name == "grid":
rule.properties["display"] = "grid"
return
if utility_name == "inline-grid":
rule.properties["display"] = "inline-grid"
return
# Flex direction
match utility_name:
@@ -638,6 +645,52 @@ static func parse_utility_class_internal(rule: CSSRule, utility_name: String) ->
rule.properties["column-gap"] = SizeUtils.parse_size(val)
return
if utility_name.begins_with("grid-cols-"):
var val = utility_name.substr(10)
if val.is_valid_int():
rule.properties["grid-template-columns"] = val.to_int()
else:
rule.properties["grid-template-columns"] = val
return
if utility_name.begins_with("grid-rows-"):
var val = utility_name.substr(10)
if val.is_valid_int():
rule.properties["grid-template-rows"] = val.to_int()
else:
rule.properties["grid-template-rows"] = val
return
if utility_name.begins_with("col-span-"):
var val = utility_name.substr(9)
if val == "full":
rule.properties["grid-column"] = "1 / -1"
elif val.is_valid_int():
rule.properties["grid-column"] = "span " + val
return
if utility_name.begins_with("row-span-"):
var val = utility_name.substr(9)
if val == "full":
rule.properties["grid-row"] = "1 / -1"
elif val.is_valid_int():
rule.properties["grid-row"] = "span " + val
return
match utility_name:
"grid-cols-1": rule.properties["grid-template-columns"] = 1; return
"grid-cols-2": rule.properties["grid-template-columns"] = 2; return
"grid-cols-3": rule.properties["grid-template-columns"] = 3; return
"grid-cols-4": rule.properties["grid-template-columns"] = 4; return
"grid-cols-5": rule.properties["grid-template-columns"] = 5; return
"grid-cols-6": rule.properties["grid-template-columns"] = 6; return
"grid-cols-12": rule.properties["grid-template-columns"] = 12; return
"col-span-1": rule.properties["grid-column"] = "span 1"; return
"col-span-2": rule.properties["grid-column"] = "span 2"; return
"col-span-3": rule.properties["grid-column"] = "span 3"; return
"col-span-4": rule.properties["grid-column"] = "span 4"; return
"col-span-5": rule.properties["grid-column"] = "span 5"; return
"col-span-6": rule.properties["grid-column"] = "span 6"; return
"col-span-full": rule.properties["grid-column"] = "1 / -1"; return
# FLEX ITEM PROPERTIES
if utility_name.begins_with("flex-grow-"):
var val = utility_name.substr(10)

View File

@@ -173,6 +173,76 @@ func _gurt_location_get_href_handler(vm: LuauVM) -> int:
vm.lua_pushstring("")
return 1
func _gurt_location_query_get_handler(vm: LuauVM) -> int:
var key: String = vm.luaL_checkstring(1)
var query_params = get_current_query_params()
if query_params.has(key):
vm.lua_pushstring(query_params[key])
else:
vm.lua_pushnil()
return 1
func _gurt_location_query_has_handler(vm: LuauVM) -> int:
var key: String = vm.luaL_checkstring(1)
var query_params = get_current_query_params()
vm.lua_pushboolean(query_params.has(key))
return 1
func _gurt_location_query_getAll_handler(vm: LuauVM) -> int:
var key: String = vm.luaL_checkstring(1)
var query_params = get_current_query_params()
vm.lua_newtable()
if query_params.has(key):
var value = query_params[key]
if value is Array:
for i in range(value.size()):
vm.lua_pushstring(str(value[i]))
vm.lua_rawseti(-2, i + 1)
else:
vm.lua_pushstring(str(value))
vm.lua_rawseti(-2, 1)
return 1
func get_current_query_params() -> Dictionary:
var main_node = Engine.get_main_loop().current_scene
var current_url = ""
if main_node and main_node.has_method("get_current_url"):
current_url = main_node.get_current_url()
elif main_node and main_node.has_property("current_domain"):
current_url = main_node.current_domain
var query_params = {}
if "?" in current_url:
var query_string = current_url.split("?")[1]
if "#" in query_string:
query_string = query_string.split("#")[0]
for param in query_string.split("&"):
if "=" in param:
var key_value = param.split("=", false, 1)
var key = key_value[0].uri_decode()
var value = key_value[1].uri_decode() if key_value.size() > 1 else ""
if query_params.has(key):
if query_params[key] is Array:
query_params[key].append(value)
else:
query_params[key] = [query_params[key], value]
else:
query_params[key] = value
else:
var key = param.uri_decode()
query_params[key] = ""
return query_params
func _reload_current_page():
var main_node = Engine.get_main_loop().current_scene
if main_node and main_node.has_method("reload_current_page"):
@@ -660,6 +730,12 @@ func _handle_text_setting(operation: Dictionary):
var element_id = get_or_assign_element_id(element)
var dom_node = dom_parser.parse_result.dom_nodes.get(element_id, null)
if dom_node:
if element.tag_name == "button":
var button_node = dom_node.get_node_or_null("ButtonNode")
if button_node and button_node is Button:
button_node.text = text
return
var text_node = get_dom_node(dom_node, "text")
if text_node:
if text_node is RichTextLabel: