CWebStudio

Handling Numbers

You can also handle numbers because the system will automatically convert all elements, unless you specify with the not_auto_convert suffix in functions requirements.


#include "CWebStudioOne.c"

#define NUM_MODIFIER "num modifier"

//components
void create_num_element(CTextStack *s, int value){
    CTextScope_format(s,CTEXT_H1,"id='num'"){
        CTextStack_format(s,"%d",value);
    }
}

void num_modifier_bridge_callback(CWebHyDrationBridge * bridge){

    long num = CWebHyDrationBridge_get_long_from_first_element_of_search(bridge,"num");
    long num_to_increment = CWebHyDrationBridge_get_long_arg(bridge,0);
    //means some information were not provided or it's with the
    //wrong type
    if(CWebHyDrationBridge_has_errors(bridge)){
        return;
    }

    long result = num + num_to_increment;
    CTextStack * created = CWebHyDrationBridge_create_stack(bridge);
    create_num_element(created, result);
    CWebHyDrationBridge_replace_element_by_id(bridge,"num",created->rendered_text);
}

CTextStack *create_main_page(CWebHyDration *hydration){

    CTextStack  *main_html =  CWebHyDration_create_stack(hydration);

    CTextScope(main_html, CTEXT_HTML){
        CTextScope(main_html, CTEXT_HEAD){
            CTextScope(main_html, CTEXT_HEAD){}
        }
        CTextScope(main_html, CTEXT_BODY){

            CWebHyDrationBridge *num_modifier = CWebHyDration_get_child_bridge(
                hydration,NUM_MODIFIER
            );
            create_num_element(main_html, 0);

            CTextScope(main_html, CTEXT_BR){}

            CTextScope_format(main_html,CTEXT_BUTTON,
                CWebHyDrationBridge_onclick(num_modifier,"%d",-1)
            ){
                CTextStack_text(main_html,"decrement");
            }

            CTextScope_format(main_html,CTEXT_BUTTON,
                CWebHyDrationBridge_onclick(num_modifier,"%d",1)
            ){
                CTextStack_text(main_html,"increment");
            }

            //always put the script at the bottom of the HTML
            CTextScope(main_html, CTEXT_SCRIPT){
                char *script_generation = CWebHyDration_create_script(hydration);
                CTextStack_text(main_html,script_generation);
            }
        }
    }
    return main_html;
}

CwebHttpResponse *main_server(CwebHttpRequest *request){

    CWebHyDration *hydration = newCWebHyDration(request);
    CWebHyDrationBridge * num_bridge = CWebHyDration_create_bridge(
        hydration,
        NUM_MODIFIER,
        num_modifier_bridge_callback
    );

    CWebHyDrationBridge_add_elements_by_id_setting_search_as_same_name(num_bridge,"num");

    //if is
    if(CWebHyDration_is_the_trigger(hydration)){
        return CWebHydration_generate_response(hydration);
    }

    CTextStack  *page =  create_main_page(hydration);
    return cweb_send_rendered_CTextStack(page,200);
}

int main(){
    CwebServer server = newCwebSever(3000, main_server);
    CwebServer_start(&server);
}

This example demonstrates how to handle numbers in HyDration.