web page anchors

master
const an teen 2022-02-11 02:19:32 -05:00
parent 0704122bfd
commit 304d917fd2
4 changed files with 153 additions and 22 deletions

View File

@ -358,15 +358,19 @@ body {
width: 95%;
margin: 1% 0 0 2.5%;
font-size: 18px;
color: #821010;
}
.main_payload__chat_username {
text-decoration: none;
flex: 10%;
margin-right: 1%;
font-weight: bold;
}
.main_payload__chat_username:hover {
background-color: #d4d4d4;
}
.main_payload__chat_mail {
flex: 89%;
color: #2f444c;

View File

@ -898,6 +898,12 @@ void HttpServer::writeRegularPage(QTcpSocket *socket, QString &urlPath, bool isH
//// Main section body compilation
QString payloadBlock;
std::pair<QString,QString> lastGreenNickname; // nick, color
std::pair<QString,QString> lastRedNickname; // nick, color
quint64 messageAnchorCounter = 0;
NickColorist nickColorist;
bool colorEdited = false;
// Search request
if (not searchRequest.isEmpty()) {
uint counter = 0;
@ -969,6 +975,7 @@ void HttpServer::writeRegularPage(QTcpSocket *socket, QString &urlPath, bool isH
QString buffer {file.readLine()};
while (not buffer.isEmpty()) {
removeBrakelineSymbols(buffer);
messageAnchorCounter++;
bool finded = false;
if (rgxIsValid) {
@ -992,13 +999,34 @@ void HttpServer::writeRegularPage(QTcpSocket *socket, QString &urlPath, bool isH
message.replace("class=\"main_payload__chat\"",
"class=\"main_payload__chat\" style=\"opacity: .5\"");
}
message.remove(" name=\"{{ANCHOR}}\"");
for (const auto &user: m_servers[originalServerName][originalChannelName]) {
if (QRegularExpression("^(.*;|~|@|\\&|\\+)?"+rawMessage.first+"$").match(user).hasMatch()) {
message.replace("class=\"main_payload__chat_username\"",
"class=\"main_payload__chat_username\" style=\"color: green\"");
if (lastGreenNickname.first == rawMessage.first) {
replaceTag(message, "COLOR", lastGreenNickname.second);
}else{
replaceTag(message, "COLOR", nickColorist.getGreenColor());
lastGreenNickname.first = rawMessage.first;
lastGreenNickname.second = nickColorist.getGreenColor(false);
}
break;
}
}
if (not colorEdited) {
if (lastRedNickname.first == rawMessage.first) {
replaceTag(message, "COLOR", lastRedNickname.second);
}else{
replaceTag(message, "COLOR", nickColorist.getRedColor());
lastRedNickname.first = rawMessage.first;
lastRedNickname.second = nickColorist.getRedColor(false);
}
}
QString logFolder {m_dataFolder};
logFolder.remove(QRegularExpression(".$"));
QString link {path};
link.remove(logFolder);
link.remove(QRegularExpression("\\.txt$"));
replaceTag(message, "ANCHOR", link+"#"+ANCHOR_SUFFIX+QString::number(messageAnchorCounter-1));
replaceTag(message, "USERNAME", rawMessage.first);
replaceTag(message, "MESSAGE_TEXT", rawMessage.second);
matchedPathsAndMessages[path].push_back(message);
@ -1006,6 +1034,7 @@ void HttpServer::writeRegularPage(QTcpSocket *socket, QString &urlPath, bool isH
buffer = file.readLine();
}
file.close();
messageAnchorCounter = 0;
}
}
else if (month.isEmpty() and not year.isEmpty()){
@ -1029,6 +1058,7 @@ void HttpServer::writeRegularPage(QTcpSocket *socket, QString &urlPath, bool isH
}
QString buffer {file.readLine()};
while (not buffer.isEmpty()) {
messageAnchorCounter++;
removeBrakelineSymbols(buffer);
bool finded = false;
@ -1053,13 +1083,34 @@ void HttpServer::writeRegularPage(QTcpSocket *socket, QString &urlPath, bool isH
message.replace("class=\"main_payload__chat\"",
"class=\"main_payload__chat\" style=\"opacity: .5\"");
}
message.remove(" name=\"{{ANCHOR}}\"");
for (const auto &user: m_servers[originalServerName][originalChannelName]) {
if (QRegularExpression("^^(.*;|~|@|\\&|\\+)?"+rawMessage.first+"$").match(user).hasMatch()) {
message.replace("class=\"main_payload__chat_username\"",
"class=\"main_payload__chat_username\" style=\"color: green\"");
if (QRegularExpression("^(.*;|~|@|\\&|\\+)?"+rawMessage.first+"$").match(user).hasMatch()) {
if (lastGreenNickname.first == rawMessage.first) {
replaceTag(message, "COLOR", lastGreenNickname.second);
}else{
replaceTag(message, "COLOR", nickColorist.getGreenColor());
lastGreenNickname.first = rawMessage.first;
lastGreenNickname.second = nickColorist.getGreenColor(false);
}
break;
}
}
if (not colorEdited) {
if (lastRedNickname.first == rawMessage.first) {
replaceTag(message, "COLOR", lastRedNickname.second);
}else{
replaceTag(message, "COLOR", nickColorist.getRedColor());
lastRedNickname.first = rawMessage.first;
lastRedNickname.second = nickColorist.getRedColor(false);
}
}
QString logFolder {m_dataFolder};
logFolder.remove(QRegularExpression(".$"));
QString link {path};
link.remove(logFolder);
link.remove(QRegularExpression("\\.txt$"));
replaceTag(message, "ANCHOR", link+"#"+ANCHOR_SUFFIX+QString::number(messageAnchorCounter-1));
replaceTag(message, "USERNAME", rawMessage.first);
replaceTag(message, "MESSAGE_TEXT", rawMessage.second);
matchedPathsAndMessages[path].push_back(message);
@ -1067,6 +1118,7 @@ void HttpServer::writeRegularPage(QTcpSocket *socket, QString &urlPath, bool isH
buffer = file.readLine();
}
file.close();
messageAnchorCounter = 0;
}
}
}
@ -1108,6 +1160,7 @@ void HttpServer::writeRegularPage(QTcpSocket *socket, QString &urlPath, bool isH
QString buffer {file.readLine()};
while (not buffer.isEmpty()) {
removeBrakelineSymbols(buffer);
messageAnchorCounter++;
bool finded = false;
if (rgxIsValid) {
@ -1131,13 +1184,34 @@ void HttpServer::writeRegularPage(QTcpSocket *socket, QString &urlPath, bool isH
message.replace("class=\"main_payload__chat\"",
"class=\"main_payload__chat\" style=\"opacity: .5\"");
}
message.remove(" name=\"{{ANCHOR}}\"");
for (const auto &user: m_servers[originalServerName][originalChannelName]) {
if (QRegularExpression("^^(.*;|~|@|\\&|\\+)?"+rawMessage.first+"$").match(user).hasMatch()) {
message.replace("class=\"main_payload__chat_username\"",
"class=\"main_payload__chat_username\" style=\"color: green\"");
if (QRegularExpression("^(.*;|~|@|\\&|\\+)?"+rawMessage.first+"$").match(user).hasMatch()) {
if (lastGreenNickname.first == rawMessage.first) {
replaceTag(message, "COLOR", lastGreenNickname.second);
}else{
replaceTag(message, "COLOR", nickColorist.getGreenColor());
lastGreenNickname.first = rawMessage.first;
lastGreenNickname.second = nickColorist.getGreenColor(false);
}
break;
}
}
if (not colorEdited) {
if (lastRedNickname.first == rawMessage.first) {
replaceTag(message, "COLOR", lastRedNickname.second);
}else{
replaceTag(message, "COLOR", nickColorist.getRedColor());
lastRedNickname.first = rawMessage.first;
lastRedNickname.second = nickColorist.getRedColor(false);
}
}
QString logFolder {m_dataFolder};
logFolder.remove(QRegularExpression(".$"));
QString link {path};
link.remove(logFolder);
link.remove(QRegularExpression("\\.txt$"));
replaceTag(message, "ANCHOR", link+"#"+ANCHOR_SUFFIX+QString::number(messageAnchorCounter-1));
replaceTag(message, "USERNAME", rawMessage.first);
replaceTag(message, "MESSAGE_TEXT", rawMessage.second);
matchedPathsAndMessages[path].push_back(message);
@ -1145,6 +1219,7 @@ void HttpServer::writeRegularPage(QTcpSocket *socket, QString &urlPath, bool isH
buffer = file.readLine();
}
file.close();
messageAnchorCounter = 0;
}
}
@ -1321,11 +1396,27 @@ void HttpServer::writeRegularPage(QTcpSocket *socket, QString &urlPath, bool isH
}
for (const auto &user: m_servers[originalServerName][originalChannelName]) {
if (QRegularExpression("^(.*;|~|@|\\&|\\+)?"+rawMessage.first+"$").match(user).hasMatch()) {
message.replace("class=\"main_payload__chat_username\"",
"class=\"main_payload__chat_username\" style=\"color: green\"");
if (lastGreenNickname.first == rawMessage.first) {
replaceTag(message, "COLOR", lastGreenNickname.second);
}else{
replaceTag(message, "COLOR", nickColorist.getGreenColor());
lastGreenNickname.first = rawMessage.first;
lastGreenNickname.second = nickColorist.getGreenColor(false);
}
break;
}
}
if (not colorEdited) {
if (lastRedNickname.first == rawMessage.first) {
replaceTag(message, "COLOR", lastRedNickname.second);
}else{
replaceTag(message, "COLOR", nickColorist.getRedColor());
lastRedNickname.first = rawMessage.first;
lastRedNickname.second = nickColorist.getRedColor(false);
}
}
message.replace("href=\"", "href=\"#");
replaceTag(message, "ANCHOR", ANCHOR_SUFFIX+QString::number(messageAnchorCounter++));
replaceTag(message, "USERNAME", rawMessage.first);
replaceTag(message, "MESSAGE_TEXT", rawMessage.second);
payloadBlock += message;
@ -2098,3 +2189,31 @@ void MessagePool::messageToDelete(qint64 timestamp)
m_messages.erase(it);
}
}
const QString &NickColorist::getGreenColor(bool next)
{
if (not next) {
return *m_currentGreen;
}
if (m_currentGreen == &GREEN_1) {
m_currentGreen = &GREEN_2;
}else{
m_currentGreen = &GREEN_1;
}
return *m_currentGreen;
}
const QString &NickColorist::getRedColor(bool next)
{
if (not next) {
return *m_currentRed;
}
if (m_currentRed == &RED_1) {
m_currentRed = &RED_2;
}else{
m_currentRed = &RED_1;
}
return *m_currentRed;
}

View File

@ -13,6 +13,23 @@ constexpr int MAX_MESSAGE_LENGTH_WITHOUT_WBR = 30;
constexpr int MAX_NICKNAME_LENGTH_WITHOUT_WBR = 20;
constexpr int BUFFER_SIZE = 2048;
const QString HTTP_ACTUAL_ETAG {__DATE__ __TIME__};
const QString ANCHOR_SUFFIX {"msg"};
const QString RED_1 {"#753d08"};
const QString RED_2 {"#b83e3e"};
const QString GREEN_1 {"#60940c"};
const QString GREEN_2 {"#27940c"};
class NickColorist
{
public:
const QString& getGreenColor(bool next = true);
const QString& getRedColor(bool next = true);
private:
const QString* m_currentGreen = &GREEN_1;
const QString* m_currentRed = &RED_1;
};
class Message : public QObject
{
@ -193,9 +210,9 @@ Content-Length: {{SIZE}}\r\n\r\n";
const QString HTML_PAYLOAD_LIST_CHAT_MESSAGE = "\
<div class=\"main_payload__chat\">\n\
<span class=\"main_payload__chat_username\">\n\
<a name=\"{{ANCHOR}}\" href=\"{{ANCHOR}}\" class=\"main_payload__chat_username\" style=\"color: {{COLOR}}\">\n\
{{USERNAME}}\n\
</span>\n\
</a>\n\
<span class=\"main_payload__chat_mail\">\n\
{{MESSAGE_TEXT}}\n\
</span>\n\

View File

@ -1,9 +0,0 @@
#ifndef VERSION_H
#define VERSION_H
#include <QString>
const QString IRCABOT_VERSION {"2.1.0"};
const QString COPYRIGHT_YEAR {"2021-2022"};
#endif // VERSION_H