mirror of
https://github.com/Relintai/rcpp_framework.git
synced 2024-11-14 04:57:21 +01:00
Added 2 pagination helpers to Utils.
This commit is contained in:
parent
d7951f8fdd
commit
f146a6a7bc
166
core/utils.cpp
166
core/utils.cpp
@ -1,8 +1,10 @@
|
|||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
|
||||||
#include <sstream>
|
#include "html_builder.h"
|
||||||
#include <memory>
|
|
||||||
#include <maddy/parser.h>
|
#include <maddy/parser.h>
|
||||||
|
#include <memory>
|
||||||
|
#include <sstream>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
void Utils::newline_to_br(std::string *str) {
|
void Utils::newline_to_br(std::string *str) {
|
||||||
str_replace(str, "\r\n", "<br>");
|
str_replace(str, "\r\n", "<br>");
|
||||||
@ -11,7 +13,7 @@ void Utils::newline_to_br(std::string *str) {
|
|||||||
|
|
||||||
void Utils::markdown_to_html(std::string *str) {
|
void Utils::markdown_to_html(std::string *str) {
|
||||||
std::shared_ptr<maddy::ParserConfig> config = std::make_shared<maddy::ParserConfig>();
|
std::shared_ptr<maddy::ParserConfig> config = std::make_shared<maddy::ParserConfig>();
|
||||||
config->isEmphasizedParserEnabled = true;
|
config->isEmphasizedParserEnabled = true;
|
||||||
config->isHTMLWrappedInParagraph = true;
|
config->isHTMLWrappedInParagraph = true;
|
||||||
|
|
||||||
std::shared_ptr<maddy::Parser> parser = std::make_shared<maddy::Parser>(config);
|
std::shared_ptr<maddy::Parser> parser = std::make_shared<maddy::Parser>(config);
|
||||||
@ -23,6 +25,164 @@ void Utils::markdown_to_html(std::string *str) {
|
|||||||
(*str) = htmlOutput;
|
(*str) = htmlOutput;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string Utils::get_pagination(const std::string base_url, const uint32_t max, const uint32_t current_index, const uint32_t max_visible_links) {
|
||||||
|
std::string s = base_url;
|
||||||
|
if (s.size() > 0 && s[s.size() - 1] != '/') {
|
||||||
|
s += '/';
|
||||||
|
}
|
||||||
|
|
||||||
|
int starti = current_index - max_visible_links / 2;
|
||||||
|
int toi = current_index + max_visible_links / 2;
|
||||||
|
|
||||||
|
if (starti < 0) {
|
||||||
|
toi += -starti;
|
||||||
|
starti = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (toi > max) {
|
||||||
|
starti -= toi - max;
|
||||||
|
toi = max;
|
||||||
|
|
||||||
|
if (starti < 0) {
|
||||||
|
starti = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//int toi = max > max_visible_links ? max_visible_links : max;
|
||||||
|
|
||||||
|
HTMLBuilder b;
|
||||||
|
|
||||||
|
b.ul()->cls("pagination");
|
||||||
|
|
||||||
|
if (max != 0 && current_index != 0) {
|
||||||
|
b.li();
|
||||||
|
b.a()->href(s + std::to_string(current_index - 1));
|
||||||
|
b.w("previous");
|
||||||
|
b.ca();
|
||||||
|
b.cli();
|
||||||
|
} else {
|
||||||
|
b.li()->cls("disabled");
|
||||||
|
b.w("previous");
|
||||||
|
b.cli();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (starti != toi) {
|
||||||
|
for (uint32_t i = starti; i < toi; ++i) {
|
||||||
|
if (i != current_index) {
|
||||||
|
b.li();
|
||||||
|
b.a()->href(s + std::to_string(i + 1));
|
||||||
|
b.w(std::to_string(i + 1));
|
||||||
|
b.ca();
|
||||||
|
b.cli();
|
||||||
|
} else {
|
||||||
|
b.li()->cls("disabled");
|
||||||
|
b.w(std::to_string(i + 1));
|
||||||
|
b.cli();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
b.li()->cls("disabled");
|
||||||
|
b.w(std::to_string(1));
|
||||||
|
b.cli();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (max != 0 && current_index < max - 1) {
|
||||||
|
b.li();
|
||||||
|
b.a()->href(s + std::to_string(current_index + 2));
|
||||||
|
b.w("next");
|
||||||
|
b.ca();
|
||||||
|
b.cli();
|
||||||
|
} else {
|
||||||
|
b.li()->cls("disabled");
|
||||||
|
b.w("next");
|
||||||
|
b.cli();
|
||||||
|
}
|
||||||
|
|
||||||
|
b.cul();
|
||||||
|
|
||||||
|
return b.result;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string Utils::get_pagination_links(const std::string base_url, const std::vector<std::string> &links, const uint32_t current_index, const uint32_t max_visible_links) {
|
||||||
|
std::string s = base_url;
|
||||||
|
if (s.size() > 0 && s[s.size() - 1] != '/') {
|
||||||
|
s += '/';
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t max = links.size();
|
||||||
|
|
||||||
|
int starti = current_index - max_visible_links / 2;
|
||||||
|
int toi = current_index + max_visible_links / 2;
|
||||||
|
|
||||||
|
if (starti < 0) {
|
||||||
|
toi += -starti;
|
||||||
|
starti = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (toi > max) {
|
||||||
|
starti -= toi - max;
|
||||||
|
toi = max;
|
||||||
|
|
||||||
|
if (starti < 0) {
|
||||||
|
starti = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//int toi = max > max_visible_links ? max_visible_links : max;
|
||||||
|
|
||||||
|
HTMLBuilder b;
|
||||||
|
|
||||||
|
b.ul()->cls("pagination");
|
||||||
|
|
||||||
|
if (max != 0 && current_index != 0) {
|
||||||
|
b.li();
|
||||||
|
b.a()->href(s + links[current_index - 1]);
|
||||||
|
b.w("previous");
|
||||||
|
b.ca();
|
||||||
|
b.cli();
|
||||||
|
} else {
|
||||||
|
b.li()->cls("disabled");
|
||||||
|
b.w("previous");
|
||||||
|
b.cli();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (starti != toi) {
|
||||||
|
for (uint32_t i = starti; i < toi; ++i) {
|
||||||
|
if (i != current_index) {
|
||||||
|
b.li();
|
||||||
|
b.a()->href(s + links[i]);
|
||||||
|
b.w(std::to_string(i + 1));
|
||||||
|
b.ca();
|
||||||
|
b.cli();
|
||||||
|
} else {
|
||||||
|
b.li()->cls("disabled");
|
||||||
|
b.w(std::to_string(i + 1));
|
||||||
|
b.cli();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
b.li()->cls("disabled");
|
||||||
|
b.w(std::to_string(1));
|
||||||
|
b.cli();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (max != 0 && current_index < max - 1) {
|
||||||
|
b.li();
|
||||||
|
b.a()->href(s + links[current_index + 1]);
|
||||||
|
b.w("next");
|
||||||
|
b.ca();
|
||||||
|
b.cli();
|
||||||
|
} else {
|
||||||
|
b.li()->cls("disabled");
|
||||||
|
b.w("next");
|
||||||
|
b.cli();
|
||||||
|
}
|
||||||
|
|
||||||
|
b.cul();
|
||||||
|
|
||||||
|
return b.result;
|
||||||
|
}
|
||||||
|
|
||||||
void Utils::str_replace(std::string *str, const std::string &from, const std::string &to) {
|
void Utils::str_replace(std::string *str, const std::string &from, const std::string &to) {
|
||||||
if (from.empty())
|
if (from.empty())
|
||||||
return;
|
return;
|
||||||
|
16
core/utils.h
16
core/utils.h
@ -2,17 +2,21 @@
|
|||||||
#define UTILS_H
|
#define UTILS_H
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
class Utils {
|
class Utils {
|
||||||
public:
|
public:
|
||||||
static void newline_to_br(std::string *str);
|
static void newline_to_br(std::string *str);
|
||||||
//htmlspecialchars
|
//htmlspecialchars
|
||||||
|
|
||||||
static void markdown_to_html(std::string *str);
|
static void markdown_to_html(std::string *str);
|
||||||
|
|
||||||
|
static std::string get_pagination(const std::string base_url, const uint32_t max, const uint32_t current_index, const uint32_t max_visible_links = 10);
|
||||||
|
static std::string get_pagination_links(const std::string base_url, const std::vector<std::string> &links, const uint32_t current_index, const uint32_t max_visible_links = 10);
|
||||||
|
|
||||||
|
static void str_replace(std::string *str, const std::string &from, const std::string &to);
|
||||||
|
|
||||||
static void str_replace(std::string *str, const std::string& from, const std::string& to);
|
|
||||||
protected:
|
protected:
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
Loading…
Reference in New Issue
Block a user