winix/templates/dir.cpp

105 lines
1.5 KiB
C++
Executable File

/*
* This file is a part of CMSLU -- Content Management System like Unix
* and is not publicly distributed
*
* Copyright (c) 2008, Tomasz Sowa
* All rights reserved.
*
*/
#include "templates.h"
namespace TemplatesFunctions
{
void dir(Info & i)
{
for(size_t a=0 ; a<request.dir_table.size() ; ++a)
{
HtmlEscape(i.out, request.dir_table[a]->url);
i.out << '/';
}
}
static std::vector<Item*> dir_childs_table;
static size_t dir_childs_index;
// request.id is never 0 and we can start dir_childs_reqid from 0
static size_t dir_childs_reqid = 0;
void dir_childs_tab(Info & i)
{
if( dir_childs_reqid != request.id )
{
dir_childs_reqid = request.id;
dir_childs_table.clear();
if( !request.dir_table.empty() )
data.dirs.GetDirChilds(request.dir_table.back()->id, dir_childs_table);
}
dir_childs_index = i.iter;
i.result = dir_childs_index < dir_childs_table.size();
}
void dir_childs_tab_url(Info & i)
{
if( dir_childs_index < dir_childs_table.size() )
HtmlEscape(i.out, dir_childs_table[dir_childs_index]->url);
}
static size_t dir_index;
void dir_tab(Info & i)
{
dir_index = i.iter;
i.result = dir_index < request.dir_table.size();
}
void dir_tab_url(Info & i)
{
if( dir_index < request.dir_table.size() )
HtmlEscape(i.out, request.dir_table[dir_index]->url);
}
void dir_tab_link(Info & i)
{
i.out << data.base_url;
for(size_t a = 0 ; a <= dir_index && a < request.dir_table.size() ; ++a)
{
HtmlEscape(i.out, request.dir_table[a]->url);
i.out << '/';
}
}
} // namespace TemplatesFunctions