diff --git a/cockatrice/src/chatview.cpp b/cockatrice/src/chatview.cpp
index 65a51fa2..402b6884 100644
--- a/cockatrice/src/chatview.cpp
+++ b/cockatrice/src/chatview.cpp
@@ -12,6 +12,7 @@
ChatView::ChatView(const TabSupervisor *_tabSupervisor, TabGame *_game, bool _showTimestamps, QWidget *parent)
: QTextBrowser(parent), tabSupervisor(_tabSupervisor), game(_game), evenNumber(true), showTimestamps(_showTimestamps), hoveredItemType(HoveredNothing)
{
+ document()->setDefaultStyleSheet("a { text-decoration: none; color: blue; }");
userContextMenu = new UserContextMenu(tabSupervisor, this, game);
connect(userContextMenu, SIGNAL(openMessageDialog(QString, bool)), this, SIGNAL(openMessageDialog(QString, bool)));
diff --git a/cockatrice/src/messagelogwidget.cpp b/cockatrice/src/messagelogwidget.cpp
index 18789aee..a5f59a3f 100644
--- a/cockatrice/src/messagelogwidget.cpp
+++ b/cockatrice/src/messagelogwidget.cpp
@@ -14,7 +14,13 @@ QString MessageLogWidget::sanitizeHtml(QString dirty) const
return dirty
.replace("&", "&")
.replace("<", "<")
- .replace(">", ">");
+ .replace(">", ">")
+ .replace("\"", """);
+}
+
+QString MessageLogWidget::cardLink(const QString &cardName) const
+{
+ return QString("%2").arg(cardName).arg(cardName);
}
bool MessageLogWidget::isFemale(Player *player) const
@@ -195,7 +201,7 @@ void MessageLogWidget::logUndoDraw(Player *player, QString cardName)
if (cardName.isEmpty())
appendHtml((isFemale(player) ? tr("%1 undoes her last draw.") : tr("%1 undoes his last draw.")).arg(sanitizeHtml(player->getName())));
else
- appendHtml((isFemale(player) ? tr("%1 undoes her last draw (%2).") : tr("%1 undoes his last draw (%2).")).arg(sanitizeHtml(player->getName())).arg(QString("%1").arg(sanitizeHtml(cardName))));
+ appendHtml((isFemale(player) ? tr("%1 undoes her last draw (%2).") : tr("%1 undoes his last draw (%2).")).arg(sanitizeHtml(player->getName())).arg(QString("%2").arg(sanitizeHtml(cardName)).arg(sanitizeHtml(cardName))));
}
QPair MessageLogWidget::getFromStr(CardZone *zone, QString cardName, int position, bool ownerChange) const
@@ -276,7 +282,7 @@ void MessageLogWidget::doMoveCard(LogMoveCard &attributes)
else if (cardName.isEmpty())
cardStr = tr("a card");
else
- cardStr = QString("%1").arg(sanitizeHtml(cardName));
+ cardStr = cardLink(cardName);
if (ownerChange && (attributes.startZone->getPlayer() == attributes.player)) {
appendHtml(tr("%1 gives %2 control over %3.").arg(sanitizeHtml(attributes.player->getName())).arg(sanitizeHtml(attributes.targetZone->getPlayer()->getName())).arg(cardStr));
@@ -358,9 +364,9 @@ void MessageLogWidget::logFlipCard(Player *player, QString cardName, bool faceDo
void MessageLogWidget::logDestroyCard(Player *player, QString cardName)
{
if (isFemale(player))
- appendHtml(tr("%1 destroys %2.", "female").arg(sanitizeHtml(player->getName())).arg(QString("%1").arg(sanitizeHtml(cardName))));
+ appendHtml(tr("%1 destroys %2.", "female").arg(sanitizeHtml(player->getName())).arg(cardLink(cardName)));
else
- appendHtml(tr("%1 destroys %2.", "male").arg(sanitizeHtml(player->getName())).arg(QString("%1").arg(sanitizeHtml(cardName))));
+ appendHtml(tr("%1 destroys %2.", "male").arg(sanitizeHtml(player->getName())).arg(cardLink(cardName)));
}
void MessageLogWidget::logAttachCard(Player *player, QString cardName, Player *targetPlayer, QString targetCardName)
@@ -378,29 +384,29 @@ void MessageLogWidget::logAttachCard(Player *player, QString cardName, Player *t
str = tr("%1 attaches %2 to %3's %4.", "p1 male, p2 male");
}
- appendHtml(str.arg(sanitizeHtml(player->getName())).arg(QString("%1").arg(sanitizeHtml(cardName))).arg(sanitizeHtml(targetPlayer->getName())).arg(QString("%1").arg(sanitizeHtml(targetCardName))));
+ appendHtml(str.arg(sanitizeHtml(player->getName())).arg(cardLink(cardName)).arg(sanitizeHtml(targetPlayer->getName())).arg(cardLink(targetCardName)));
}
void MessageLogWidget::logUnattachCard(Player *player, QString cardName)
{
if (isFemale(player))
- appendHtml(tr("%1 unattaches %2.", "female").arg(sanitizeHtml(player->getName())).arg(QString("%1").arg(sanitizeHtml(cardName))));
+ appendHtml(tr("%1 unattaches %2.", "female").arg(sanitizeHtml(player->getName())).arg(cardLink(cardName)));
else
- appendHtml(tr("%1 unattaches %2.", "male").arg(sanitizeHtml(player->getName())).arg(QString("%1").arg(sanitizeHtml(cardName))));
+ appendHtml(tr("%1 unattaches %2.", "male").arg(sanitizeHtml(player->getName())).arg(cardLink(cardName)));
}
void MessageLogWidget::logCreateToken(Player *player, QString cardName, QString pt)
{
if (isFemale(player))
- appendHtml(tr("%1 creates token: %2%3.", "female").arg(sanitizeHtml(player->getName())).arg(QString("%1").arg(sanitizeHtml(cardName))).arg(pt.isEmpty() ? QString() : QString(" (%1)").arg(sanitizeHtml(pt))));
+ appendHtml(tr("%1 creates token: %2%3.", "female").arg(sanitizeHtml(player->getName())).arg(cardLink(cardName)).arg(pt.isEmpty() ? QString() : QString(" (%1)").arg(sanitizeHtml(pt))));
else
- appendHtml(tr("%1 creates token: %2%3.", "male").arg(sanitizeHtml(player->getName())).arg(QString("%1").arg(sanitizeHtml(cardName))).arg(pt.isEmpty() ? QString() : QString(" (%1)").arg(sanitizeHtml(pt))));
+ appendHtml(tr("%1 creates token: %2%3.", "male").arg(sanitizeHtml(player->getName())).arg(cardLink(cardName)).arg(pt.isEmpty() ? QString() : QString(" (%1)").arg(sanitizeHtml(pt))));
}
void MessageLogWidget::logCreateArrow(Player *player, Player *startPlayer, QString startCard, Player *targetPlayer, QString targetCard, bool playerTarget)
{
- startCard = QString("%1").arg(sanitizeHtml(startCard));
- targetCard = QString("%1").arg(sanitizeHtml(targetCard));
+ startCard = cardLink(startCard);
+ targetCard = cardLink(targetCard);
QString str;
if (playerTarget) {
if ((player == startPlayer) && (player == targetPlayer)) {
@@ -551,7 +557,7 @@ void MessageLogWidget::logSetCardCounter(Player *player, QString cardName, int c
default: ;
}
- appendHtml(finalStr.arg(sanitizeHtml(player->getName())).arg(colorStr).arg(QString("%1").arg(sanitizeHtml(cardName))).arg(value));
+ appendHtml(finalStr.arg(sanitizeHtml(player->getName())).arg(colorStr).arg(cardLink(cardName)).arg(value));
}
void MessageLogWidget::logSetTapped(Player *player, CardItem *card, bool tapped)
@@ -590,8 +596,7 @@ void MessageLogWidget::logSetTapped(Player *player, CardItem *card, bool tapped)
else
str = tr("%1 untaps %2.", "male");
}
- QString cardStr = QString("%1").arg(sanitizeHtml(card->getName()));
- appendHtml(str.arg(sanitizeHtml(player->getName())).arg(cardStr));
+ appendHtml(str.arg(sanitizeHtml(player->getName())).arg(cardLink(card->getName())));
}
}
}
@@ -620,7 +625,7 @@ void MessageLogWidget::logSetDoesntUntap(Player *player, CardItem *card, bool do
else
str = tr("%1 sets %2 to untap normally.", "male");
}
- appendHtml(str.arg(sanitizeHtml(player->getName())).arg(QString("%1").arg(sanitizeHtml(card->getName()))));
+ appendHtml(str.arg(sanitizeHtml(player->getName())).arg(cardLink(card->getName())));
}
void MessageLogWidget::logSetPT(Player *player, CardItem *card, QString newPT)
@@ -633,7 +638,7 @@ void MessageLogWidget::logSetPT(Player *player, CardItem *card, QString newPT)
str = tr("%1 sets PT of %2 to %3.", "female");
else
str = tr("%1 sets PT of %2 to %3.", "male");
- appendHtml(str.arg(sanitizeHtml(player->getName())).arg(QString("%1").arg(sanitizeHtml(card->getName()))).arg(QString("%1").arg(sanitizeHtml(newPT))));
+ appendHtml(str.arg(sanitizeHtml(player->getName())).arg(cardLink(card->getName())).arg(QString("%1").arg(sanitizeHtml(newPT))));
}
}
@@ -644,7 +649,7 @@ void MessageLogWidget::logSetAnnotation(Player *player, CardItem *card, QString
str = tr("%1 sets annotation of %2 to %3.", "female");
else
str = tr("%1 sets annotation of %2 to %3.", "male");
- appendHtml(str.arg(sanitizeHtml(player->getName())).arg(QString("%1").arg(sanitizeHtml(card->getName()))).arg(QString("%1").arg(sanitizeHtml(newAnnotation))));
+ appendHtml(str.arg(sanitizeHtml(player->getName())).arg(cardLink(card->getName())).arg(QString(""%1"").arg(sanitizeHtml(newAnnotation))));
}
void MessageLogWidget::logDumpZone(Player *player, CardZone *zone, int numberCards)
@@ -688,7 +693,7 @@ void MessageLogWidget::logRevealCards(Player *player, CardZone *zone, int cardId
else if (cardName.isEmpty())
cardStr = tr("a card");
else
- cardStr = QString("%1").arg(sanitizeHtml(cardName));
+ cardStr = cardLink(cardName);
QString str;
if (cardId == -1) {
diff --git a/cockatrice/src/messagelogwidget.h b/cockatrice/src/messagelogwidget.h
index da266918..d1c1d6f7 100644
--- a/cockatrice/src/messagelogwidget.h
+++ b/cockatrice/src/messagelogwidget.h
@@ -27,6 +27,7 @@ private:
enum MessageContext { MessageContext_None, MessageContext_MoveCard, MessageContext_Mulligan };
QString sanitizeHtml(QString dirty) const;
+ QString cardLink(const QString &cardName) const;
bool isFemale(Player *player) const;
bool userIsFemale() const;
QPair getFromStr(CardZone *zone, QString cardName, int position, bool ownerChange) const;