mirror of
https://git.checksum.fail/alec/erythros
synced 2025-12-10 13:09:55 +02:00
Applications/Internet/Cyberia: Initial support for POST requests
This commit is contained in:
@@ -260,44 +260,50 @@ U0 @cyberia_form_submit(@html_dom_node* form_node)
|
||||
JsonArray* form_elements = Json.CreateArray(browser->renderer->task);
|
||||
@cyberia_collect_form_nodes(form_elements, form_node);
|
||||
|
||||
U8 get_request_str[1024];
|
||||
U8* form_data_str = CAlloc(2048, browser->renderer->task);
|
||||
|
||||
if (!StrICmp(method, "get")) {
|
||||
StrPrint(get_request_str, "%s?", action);
|
||||
for (i = 0; i < form_elements->length; i++) {
|
||||
element_node = form_elements->@(i);
|
||||
U8* name = element_node->attributes->@("name");
|
||||
U8* raw_value = "";
|
||||
U8* encoded_value = NULL;
|
||||
I64 encoded_value_length = 0;
|
||||
Widget* element_gui_widget = element_node->attributes->@("cyberiaGuiWidget");
|
||||
switch (element_gui_widget->type) {
|
||||
case WIDGET_TYPE_CHECKBOX:
|
||||
if (element_gui_widget(CheckBoxWidget*)->checked) {
|
||||
raw_value = @t(element_node->attributes->@("value"), element_node->attributes->@("value"), "on");
|
||||
} else {
|
||||
raw_value = NULL;
|
||||
}
|
||||
break;
|
||||
case WIDGET_TYPE_INPUT:
|
||||
raw_value = &element_gui_widget(TextInputWidget*)->text;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
for (i = 0; i < form_elements->length; i++) {
|
||||
element_node = form_elements->@(i);
|
||||
U8* name = element_node->attributes->@("name");
|
||||
U8* raw_value = "";
|
||||
U8* encoded_value = NULL;
|
||||
I64 encoded_value_length = 0;
|
||||
Widget* element_gui_widget = element_node->attributes->@("cyberiaGuiWidget");
|
||||
switch (element_gui_widget->type) {
|
||||
case WIDGET_TYPE_CHECKBOX:
|
||||
if (element_gui_widget(CheckBoxWidget*)->checked) {
|
||||
raw_value = @t(element_node->attributes->@("value"), element_node->attributes->@("value"), "on");
|
||||
} else {
|
||||
raw_value = NULL;
|
||||
}
|
||||
break;
|
||||
case WIDGET_TYPE_INPUT:
|
||||
raw_value = &element_gui_widget(TextInputWidget*)->text;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
encoded_value = @cyberia_urlencode_str(raw_value, &encoded_value_length);
|
||||
encoded_value = @cyberia_urlencode_str(raw_value, &encoded_value_length);
|
||||
|
||||
if (encoded_value) {
|
||||
String.Append(get_request_str, "%s=%s", name, encoded_value);
|
||||
if (i < form_elements->length - 1)
|
||||
String.Append(get_request_str, "&");
|
||||
if (encoded_value_length != StrLen(raw_value)) {
|
||||
Free(encoded_value);
|
||||
}
|
||||
if (encoded_value) {
|
||||
String.Append(form_data_str, "%s=%s", name, encoded_value);
|
||||
if (i < form_elements->length - 1)
|
||||
String.Append(form_data_str, "&");
|
||||
if (encoded_value_length != StrLen(raw_value)) {
|
||||
Free(encoded_value);
|
||||
}
|
||||
}
|
||||
StrCpy(&addressbar1->text, &get_request_str);
|
||||
}
|
||||
|
||||
if (!StrICmp(method, "GET")) {
|
||||
StrPrint(&addressbar1->text, "%s?%s", action, form_data_str);
|
||||
Free(form_data_str);
|
||||
}
|
||||
|
||||
if (!StrICmp(method, "POST")) {
|
||||
StrCpy(&addressbar1->text, action);
|
||||
browser->renderer->form_data_str = form_data_str;
|
||||
}
|
||||
|
||||
Free(action);
|
||||
@@ -485,6 +491,11 @@ U0 @cyberia_navigate(Bool refresh = FALSE)
|
||||
url_string = StrNew("http://127.0.0.255");
|
||||
}
|
||||
|
||||
U8* form_data_str = NULL;
|
||||
if (browser->renderer) {
|
||||
form_data_str = browser->renderer->form_data_str;
|
||||
}
|
||||
|
||||
if (!refresh) {
|
||||
browser->renderer = CAlloc(sizeof(HtmlRenderer), browser_task);
|
||||
++browser->history_index;
|
||||
@@ -497,6 +508,7 @@ U0 @cyberia_navigate(Bool refresh = FALSE)
|
||||
|
||||
HtmlRenderer* renderer = browser->renderer;
|
||||
@cyberia_init_renderer(renderer, url_string);
|
||||
browser->renderer->form_data_str = form_data_str;
|
||||
|
||||
U8 err_msg_buffer[128];
|
||||
U8 status_text_buffer[1024];
|
||||
|
||||
Reference in New Issue
Block a user