mirror of
https://github.com/Relintai/rcpp_framework.git
synced 2025-02-20 15:14:26 +01:00
Now Paginator has a renderer field. This should make pagination implementations easily replacable from user code.
This commit is contained in:
parent
034931d390
commit
ec61d444e4
@ -42,32 +42,44 @@ String Paginator::get_current() {
|
|||||||
|
|
||||||
String Paginator::get_pagination_for_indx(const int page_index) {
|
String Paginator::get_pagination_for_indx(const int page_index) {
|
||||||
if (use_links_array) {
|
if (use_links_array) {
|
||||||
return render_links(page_index);
|
return render_links(renderer, page_index);
|
||||||
} else {
|
} else {
|
||||||
return render_indexed(page_index);
|
return render_indexed(renderer, page_index);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
String Paginator::get_pagination_for_num(const int page_num) {
|
String Paginator::get_pagination_for_num(const int page_num) {
|
||||||
return get_pagination_for_indx(page_num - 1);
|
return get_pagination_for_indx(page_num - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
String Paginator::render_indexed(const int page_index) {
|
String Paginator::render_indexed(Ref<Paginator> target, const int page_index) {
|
||||||
String s = base_url;
|
if (!target.is_valid()) {
|
||||||
|
target = Ref<Paginator>(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
String s = target->base_url;
|
||||||
if (s.size() > 0 && s[s.size() - 1] != '/') {
|
if (s.size() > 0 && s[s.size() - 1] != '/') {
|
||||||
s += '/';
|
s += '/';
|
||||||
}
|
}
|
||||||
|
|
||||||
int starti = page_index - _max_visible_links / 2;
|
int max_visible_links = target->_max_visible_links;
|
||||||
int toi = page_index + _max_visible_links / 2;
|
int page_count = target->_page_count;
|
||||||
|
const String &tclass_main_ul = target->class_main_ul;
|
||||||
|
const String &tclass_enabled_li = target->class_enabled_li;
|
||||||
|
const String &tclass_disabled_li = target->class_disabled_li;
|
||||||
|
const String &ttext_next_link = target->text_next_link;
|
||||||
|
const String &ttext_prev_link = target->text_prev_link;
|
||||||
|
|
||||||
|
int starti = page_index - max_visible_links / 2;
|
||||||
|
int toi = page_index + max_visible_links / 2;
|
||||||
|
|
||||||
if (starti < 0) {
|
if (starti < 0) {
|
||||||
toi += -starti;
|
toi += -starti;
|
||||||
starti = 0;
|
starti = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (toi > _page_count) {
|
if (toi > page_count) {
|
||||||
starti -= toi - _page_count;
|
starti -= toi - page_count;
|
||||||
toi = _page_count;
|
toi = page_count;
|
||||||
|
|
||||||
if (starti < 0) {
|
if (starti < 0) {
|
||||||
starti = 0;
|
starti = 0;
|
||||||
@ -78,62 +90,76 @@ String Paginator::render_indexed(const int page_index) {
|
|||||||
|
|
||||||
HTMLBuilder b;
|
HTMLBuilder b;
|
||||||
|
|
||||||
b.ul()->clsse(class_main_ul);
|
b.ul()->clsse(tclass_main_ul);
|
||||||
|
|
||||||
if (_page_count != 0 && page_index != 0) {
|
if (page_count != 0 && page_index != 0) {
|
||||||
b.li()->clsse(class_enabled_li);
|
b.li()->clsse(tclass_enabled_li);
|
||||||
{
|
{
|
||||||
b.a()->href(s + std::to_string(page_index - 1))->rel_prev()->f()->w(text_prev_link)->ca();
|
b.a()->href(s + std::to_string(page_index - 1))->rel_prev()->f()->w(ttext_prev_link)->ca();
|
||||||
}
|
}
|
||||||
b.cli();
|
b.cli();
|
||||||
} else {
|
} else {
|
||||||
b.li()->clsse(class_disabled_li)->f()->w(text_prev_link)->cli();
|
b.li()->clsse(tclass_disabled_li)->f()->w(ttext_prev_link)->cli();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (starti != toi) {
|
if (starti != toi) {
|
||||||
for (uint32_t i = starti; i < toi; ++i) {
|
for (uint32_t i = starti; i < toi; ++i) {
|
||||||
if (i != page_index) {
|
if (i != page_index) {
|
||||||
b.li()->clsse(class_enabled_li);
|
b.li()->clsse(tclass_enabled_li);
|
||||||
{
|
{
|
||||||
b.a()->href(s + std::to_string(i + 1))->f()->w(std::to_string(i + 1))->ca();
|
b.a()->href(s + std::to_string(i + 1))->f()->w(std::to_string(i + 1))->ca();
|
||||||
}
|
}
|
||||||
b.cli();
|
b.cli();
|
||||||
} else {
|
} else {
|
||||||
b.li()->clsse(class_disabled_li)->f()->w(std::to_string(i + 1))->cli();
|
b.li()->clsse(tclass_disabled_li)->f()->w(std::to_string(i + 1))->cli();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
b.li()->clsse(class_disabled_li)->f()->w(std::to_string(1))->cli();
|
b.li()->clsse(tclass_disabled_li)->f()->w(std::to_string(1))->cli();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_page_count != 0 && page_index < _page_count - 1) {
|
if (page_count != 0 && page_index < page_count - 1) {
|
||||||
b.li()->clsse(class_enabled_li);
|
b.li()->clsse(tclass_enabled_li);
|
||||||
{
|
{
|
||||||
b.a()->href(s + std::to_string(page_index + 2))->rel_next()->f()->w(text_next_link)->ca();
|
b.a()->href(s + std::to_string(page_index + 2))->rel_next()->f()->w(ttext_next_link)->ca();
|
||||||
}
|
}
|
||||||
b.cli();
|
b.cli();
|
||||||
} else {
|
} else {
|
||||||
b.li()->clsse(class_disabled_li)->f()->w(text_next_link)->cli();
|
b.li()->clsse(tclass_disabled_li)->f()->w(ttext_next_link)->cli();
|
||||||
}
|
}
|
||||||
|
|
||||||
b.cul();
|
b.cul();
|
||||||
|
|
||||||
return b.result;
|
return b.result;
|
||||||
}
|
}
|
||||||
String Paginator::render_links(const int page_index) {
|
String Paginator::render_links(Ref<Paginator> target, const int page_index) {
|
||||||
|
if (!target.is_valid()) {
|
||||||
|
target = Ref<Paginator>(this);
|
||||||
|
}
|
||||||
|
|
||||||
if (page_index < 0) {
|
if (page_index < 0) {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
String s = base_url;
|
|
||||||
|
String s = target->base_url;
|
||||||
if (s.size() > 0 && s[s.size() - 1] != '/') {
|
if (s.size() > 0 && s[s.size() - 1] != '/') {
|
||||||
s += '/';
|
s += '/';
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t max = links.size();
|
uint32_t max = target->links.size();
|
||||||
|
|
||||||
int starti = page_index - _max_visible_links / 2;
|
|
||||||
int toi = page_index + _max_visible_links / 2;
|
int max_visible_links = target->_max_visible_links;
|
||||||
|
int page_count = target->_page_count;
|
||||||
|
const String &tclass_main_ul = target->class_main_ul;
|
||||||
|
const String &tclass_enabled_li = target->class_enabled_li;
|
||||||
|
const String &tclass_disabled_li = target->class_disabled_li;
|
||||||
|
const String &ttext_next_link = target->text_next_link;
|
||||||
|
const String &ttext_prev_link = target->text_prev_link;
|
||||||
|
|
||||||
|
int starti = page_index - max_visible_links / 2;
|
||||||
|
int toi = page_index + max_visible_links / 2;
|
||||||
|
|
||||||
if (starti < 0) {
|
if (starti < 0) {
|
||||||
toi += -starti;
|
toi += -starti;
|
||||||
@ -153,42 +179,42 @@ String Paginator::render_links(const int page_index) {
|
|||||||
|
|
||||||
HTMLBuilder b;
|
HTMLBuilder b;
|
||||||
|
|
||||||
b.ul()->clsse(class_main_ul);
|
b.ul()->clsse(tclass_main_ul);
|
||||||
|
|
||||||
if (max != 0 && page_index != 0) {
|
if (max != 0 && page_index != 0) {
|
||||||
b.li()->clsse(class_enabled_li);
|
b.li()->clsse(tclass_enabled_li);
|
||||||
{
|
{
|
||||||
b.a()->href(s + links[page_index - 1])->rel_prev()->f()->w(text_prev_link)->ca();
|
b.a()->href(s + target->links[page_index - 1])->rel_prev()->f()->w(ttext_prev_link)->ca();
|
||||||
}
|
}
|
||||||
b.cli();
|
b.cli();
|
||||||
} else {
|
} else {
|
||||||
b.li()->clsse(class_disabled_li)->f()->w(text_prev_link)->cli();
|
b.li()->clsse(tclass_disabled_li)->f()->w(ttext_prev_link)->cli();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (starti != toi) {
|
if (starti != toi) {
|
||||||
for (uint32_t i = starti; i < toi; ++i) {
|
for (uint32_t i = starti; i < toi; ++i) {
|
||||||
if (i != page_index) {
|
if (i != page_index) {
|
||||||
b.li()->clsse(class_enabled_li);
|
b.li()->clsse(tclass_enabled_li);
|
||||||
{
|
{
|
||||||
b.a()->href(s + links[i])->f()->w(std::to_string(i + 1))->ca();
|
b.a()->href(s + target->links[i])->f()->w(std::to_string(i + 1))->ca();
|
||||||
}
|
}
|
||||||
b.cli();
|
b.cli();
|
||||||
} else {
|
} else {
|
||||||
b.li()->clsse(class_disabled_li)->f()->w(std::to_string(i + 1))->cli();
|
b.li()->clsse(tclass_disabled_li)->f()->w(std::to_string(i + 1))->cli();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
b.li()->clsse(class_disabled_li)->f()->w(std::to_string(1))->cli();
|
b.li()->clsse(tclass_disabled_li)->f()->w(std::to_string(1))->cli();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (max != 0 && page_index < max - 1) {
|
if (max != 0 && page_index < max - 1) {
|
||||||
b.li()->clsse(class_enabled_li);
|
b.li()->clsse(tclass_enabled_li);
|
||||||
{
|
{
|
||||||
b.a()->href(s + links[page_index + 1])->rel_next()->f()->w(text_next_link)->ca();
|
b.a()->href(s + target->links[page_index + 1])->rel_next()->f()->w(ttext_next_link)->ca();
|
||||||
}
|
}
|
||||||
b.cli();
|
b.cli();
|
||||||
} else {
|
} else {
|
||||||
b.li()->clsse(class_disabled_li)->f()->w(text_next_link)->cli();
|
b.li()->clsse(tclass_disabled_li)->f()->w(ttext_next_link)->cli();
|
||||||
}
|
}
|
||||||
|
|
||||||
b.cul();
|
b.cul();
|
||||||
@ -213,4 +239,5 @@ Paginator::Paginator() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Paginator::~Paginator() {
|
Paginator::~Paginator() {
|
||||||
|
renderer.unref();
|
||||||
}
|
}
|
@ -39,8 +39,11 @@ public:
|
|||||||
String get_pagination_for_indx(const int page_index);
|
String get_pagination_for_indx(const int page_index);
|
||||||
String get_pagination_for_num(const int page_num);
|
String get_pagination_for_num(const int page_num);
|
||||||
|
|
||||||
virtual String render_indexed(const int page_index);
|
virtual String render_indexed(Ref<Paginator> target, const int page_index);
|
||||||
virtual String render_links(const int page_index);
|
virtual String render_links(Ref<Paginator> target, const int page_index);
|
||||||
|
|
||||||
|
//If this is set, render_indexed and render_links will be called on this
|
||||||
|
Ref<Paginator> renderer;
|
||||||
|
|
||||||
Paginator();
|
Paginator();
|
||||||
~Paginator();
|
~Paginator();
|
||||||
|
Loading…
Reference in New Issue
Block a user