Skip to content

Latest commit

 

History

History
121 lines (90 loc) · 3.42 KB

File metadata and controls

121 lines (90 loc) · 3.42 KB

Handling Args

You can pass arguments between bridges. Note that they must be separated by , , and strings must be with ' or ".

CWebHyDrationBridge_onclick(args_bridge,"10,'second argument'")
#include "CWebStudioOne.c"

#define ARGS_BRIDGE "args"

//components

void args_bridge_callback(CWebHyDrationBridge * bridge){

    long size = CWebHyDrationBridge_get_args_size(bridge);
    for(int i = 0; i < size;i++){

        if(CWebHyDrationBridge_is_arg_number(bridge,i)){
            long value = CWebHyDrationBridge_get_long_arg(bridge,i);
            printf("arg %d: %ld\n",i,value);
        }

        if(CWebHyDrationBridge_is_arg_bool(bridge,i)){
            bool value = CWebHyDrationBridge_get_bool_arg(bridge,i);
            printf("arg %d: %s\n",i,value ? "true":"false");
        }

        if(CWebHyDrationBridge_is_arg_string(bridge,i)){
            char *value = CWebHyDrationBridge_get_str_arg(bridge,i);
            printf("arg %d: %s\n",i,value);
        }
        if(CWebHyDrationBridge_is_arg_null(bridge,i)){
            printf("arg %d: NULL\n",i);
        }

    }
    printf("====================================\n");
}


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 *args_bridge = CWebHyDration_get_child_bridge(
                hydration,ARGS_BRIDGE
            );

            CTextScope(main_html, CTEXT_BR){}

            CTextScope_format(main_html,CTEXT_BUTTON,
                CWebHyDrationBridge_onclick(args_bridge,"10,'second argument'")
            ){
                CTextStack_text(main_html,"number and string");
            }
            CTextScope_format(main_html,CTEXT_BUTTON,
                CWebHyDrationBridge_onclick(args_bridge,"10")
            ){
                CTextStack_text(main_html,"number ");
            }

            CTextScope_format(main_html,CTEXT_BUTTON,
                CWebHyDrationBridge_onclick(args_bridge,"true")
            ){
                CTextStack_text(main_html,"boolean");
            }

            CTextScope_format(main_html,CTEXT_BUTTON,
                CWebHyDrationBridge_onclick(args_bridge,"null,'second argument'")
            ){
                CTextStack_text(main_html,"null and string");
            }

            //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 * args_brige = CWebHyDration_create_bridge(
        hydration,
        ARGS_BRIDGE,
        args_bridge_callback
    );

    //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 arguments in HyDration.