diff --git a/Applications/Internet/Cyberia.app/Cyberia.HC b/Applications/Internet/Cyberia.app/Cyberia.HC index 76bd3ec..545ca29 100644 --- a/Applications/Internet/Cyberia.app/Cyberia.HC +++ b/Applications/Internet/Cyberia.app/Cyberia.HC @@ -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];