DNS record management, CSS grid, Regex, location.query
This commit is contained in:
84
flumi/Scripts/Utils/GridUtils.gd
Normal file
84
flumi/Scripts/Utils/GridUtils.gd
Normal file
@@ -0,0 +1,84 @@
|
||||
class_name GridUtils
|
||||
extends RefCounted
|
||||
|
||||
static func apply_grid_container_properties(node: GridContainer, styles: Dictionary) -> void:
|
||||
if styles.has("grid-template-columns"):
|
||||
var cols = styles["grid-template-columns"]
|
||||
if cols is int:
|
||||
node.columns = cols
|
||||
elif cols is String:
|
||||
var parts = cols.split(" ")
|
||||
node.columns = parts.size()
|
||||
|
||||
if styles.has("gap"):
|
||||
var gap_value = parse_grid_value(styles["gap"])
|
||||
if gap_value is int or gap_value is float:
|
||||
node.add_theme_constant_override("h_separation", int(gap_value))
|
||||
node.add_theme_constant_override("v_separation", int(gap_value))
|
||||
|
||||
if styles.has("column-gap"):
|
||||
var gap_value = parse_grid_value(styles["column-gap"])
|
||||
if gap_value is int or gap_value is float:
|
||||
node.add_theme_constant_override("h_separation", int(gap_value))
|
||||
|
||||
if styles.has("row-gap"):
|
||||
var gap_value = parse_grid_value(styles["row-gap"])
|
||||
if gap_value is int or gap_value is float:
|
||||
node.add_theme_constant_override("v_separation", int(gap_value))
|
||||
|
||||
static func apply_grid_item_properties(node: Control, styles: Dictionary) -> void:
|
||||
var grid_properties: Dictionary = node.get_meta("grid_properties", {})
|
||||
var changed = false
|
||||
|
||||
if styles.has("grid-column"):
|
||||
grid_properties["grid-column"] = styles["grid-column"]
|
||||
changed = true
|
||||
|
||||
if styles["grid-column"].begins_with("span "):
|
||||
var span_count = styles["grid-column"].substr(5).to_int()
|
||||
if span_count > 1:
|
||||
node.size_flags_horizontal = Control.SIZE_EXPAND_FILL
|
||||
node.set_meta("grid_column_span", span_count)
|
||||
elif styles["grid-column"] == "1 / -1":
|
||||
# Full span
|
||||
node.size_flags_horizontal = Control.SIZE_EXPAND_FILL
|
||||
node.set_meta("grid_column_span", -1)
|
||||
|
||||
if styles.has("grid-row"):
|
||||
grid_properties["grid-row"] = styles["grid-row"]
|
||||
changed = true
|
||||
|
||||
if changed:
|
||||
node.set_meta("grid_properties", grid_properties)
|
||||
|
||||
static func parse_grid_value(val):
|
||||
if val is float or val is int:
|
||||
return val
|
||||
|
||||
if val is String:
|
||||
var s_val = val.strip_edges()
|
||||
if s_val.is_valid_float():
|
||||
return s_val.to_float()
|
||||
if s_val.ends_with("px"):
|
||||
return s_val.trim_suffix("px").to_float()
|
||||
if s_val == "auto":
|
||||
return "auto"
|
||||
|
||||
return null
|
||||
|
||||
static func get_grid_item_span(span_property: String) -> Dictionary:
|
||||
var result = {"start": -1, "end": -1, "span": 1}
|
||||
|
||||
if span_property.begins_with("span "):
|
||||
var span_count = span_property.substr(5).to_int()
|
||||
result["span"] = max(1, span_count)
|
||||
elif span_property == "1 / -1":
|
||||
# Full span
|
||||
result["span"] = -1
|
||||
else:
|
||||
var parts = span_property.split(" / ")
|
||||
if parts.size() == 2:
|
||||
result["start"] = parts[0].to_int()
|
||||
result["end"] = parts[1].to_int()
|
||||
|
||||
return result
|
||||
Reference in New Issue
Block a user