");
ajax_box_begin(&tq, AJAX_BOX_SIDEBOX, "channelgroups",
NULL, "Channel groups");
tcp_qprintf(&tq, "
");
tcp_qprintf(&tq, "
");
TAILQ_FOREACH(tcg, &all_channel_groups, tcg_global_link) {
if(tcg->tcg_hidden)
continue;
ajax_chgroup_build(&tq, tcg);
}
tcp_qprintf(&tq, "
");
ajax_js(&tq, "Sortable.create(\"channelgrouplist\", "
"{onUpdate:function(){updatelistonserver("
"'channelgrouplist', "
"'/ajax/chgroup_updateorder', "
"'list-info'"
")}});");
/**
* Add new group
*/
ajax_box_begin(&tq, AJAX_BOX_BORDER, NULL, NULL, NULL);
tcp_qprintf(&tq,
"
");
ajax_box_end(&tq, AJAX_BOX_BORDER);
ajax_box_end(&tq, AJAX_BOX_SIDEBOX);
tcp_qprintf(&tq, "
");
http_output_queue(hc, &tq, "text/html; charset=UTF-8", 0);
return 0;
}
/*
* Tab AJAX page
*
* Switch to different tabs
*/
static int
ajax_config_dispatch(http_connection_t *hc, const char *remain, void *opaque)
{
int tab;
if(remain == NULL)
return HTTP_STATUS_NOT_FOUND;
tab = atoi(remain);
switch(tab) {
case AJAX_CONFIG_TAB_CHANNELS:
return ajax_channel_config_tab(hc);
default:
return HTTP_STATUS_NOT_FOUND;
}
return 0;
}
/*
* Config root menu AJAX page
*
* This is the top level menu for this c-file
*/
int
ajax_config_tab(http_connection_t *hc)
{
tcp_queue_t tq;
tcp_init_queue(&tq, -1);
ajax_box_begin(&tq, AJAX_BOX_FILLED, "configmenu", NULL, NULL);
ajax_box_end(&tq, AJAX_BOX_FILLED);
tcp_qprintf(&tq, "