mirror of https://notabug.org/acetone/ircabot.git
web page anchors
parent
0704122bfd
commit
304d917fd2
|
@ -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;
|
||||
|
|
139
httpserver.cpp
139
httpserver.cpp
|
@ -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;
|
||||
}
|
||||
|
|
21
httpserver.h
21
httpserver.h
|
@ -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\
|
||||
|
|
Loading…
Reference in New Issue