mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-05-04 23:25:32 -04:00
Added new flags to the html optimizer to remove font and color from html and used this for displaying the message in the toaster.
Fixed layout of the toasters. git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@5068 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
parent
5b5d5b5c43
commit
25a266bcbf
9 changed files with 125 additions and 67 deletions
|
@ -174,7 +174,15 @@ QString formatText(const QString &text, unsigned int flag)
|
|||
}
|
||||
|
||||
QString formattedText = doc.toString(-1); // -1 removes any annoying carriage return misinterpreted by QTextEdit
|
||||
optimizeHtml(formattedText);
|
||||
|
||||
unsigned int optimizeFlag = 0;
|
||||
if (flag & RSHTML_FORMATTEXT_REMOVE_FONT) {
|
||||
optimizeFlag |= RSHTML_OPTIMIZEHTML_REMOVE_FONT;
|
||||
}
|
||||
if (flag & RSHTML_FORMATTEXT_REMOVE_COLOR) {
|
||||
optimizeFlag |= RSHTML_OPTIMIZEHTML_REMOVE_COLOR;
|
||||
}
|
||||
optimizeHtml(formattedText, optimizeFlag);
|
||||
|
||||
return formattedText;
|
||||
}
|
||||
|
@ -230,7 +238,7 @@ static void removeElement(QDomElement& parentElement, QDomElement& element)
|
|||
parentElement.removeChild(element);
|
||||
}
|
||||
|
||||
static void optimizeHtml(QDomDocument& doc, QDomElement& currentElement)
|
||||
static void optimizeHtml(QDomDocument& doc, QDomElement& currentElement, unsigned int flag)
|
||||
{
|
||||
if (currentElement.tagName().toLower() == "html") {
|
||||
// change <html> to <span>
|
||||
|
@ -238,7 +246,6 @@ static void optimizeHtml(QDomDocument& doc, QDomElement& currentElement)
|
|||
}
|
||||
|
||||
QDomNode styleNode;
|
||||
QDomAttr styleAttr;
|
||||
bool addBR = false;
|
||||
|
||||
QDomNodeList children = currentElement.childNodes();
|
||||
|
@ -248,11 +255,46 @@ static void optimizeHtml(QDomDocument& doc, QDomElement& currentElement)
|
|||
// compress style attribute
|
||||
styleNode = node.attributes().namedItem("style");
|
||||
if (styleNode.isAttr()) {
|
||||
styleAttr = styleNode.toAttr();
|
||||
QString value = styleAttr.value().simplified();
|
||||
value.replace("margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;", "margin:0px 0px 0px 0px;");
|
||||
value.replace("; ", ";");
|
||||
styleAttr.setValue(value);
|
||||
QDomAttr styleAttr = styleNode.toAttr();
|
||||
QString style = styleAttr.value().simplified();
|
||||
style.replace("margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;", "margin:0px 0px 0px 0px;");
|
||||
style.replace("; ", ";");
|
||||
|
||||
if (flag & (RSHTML_OPTIMIZEHTML_REMOVE_FONT | RSHTML_OPTIMIZEHTML_REMOVE_COLOR)) {
|
||||
QStringList styles = style.split(';');
|
||||
style.clear();
|
||||
foreach (QString pair, styles) {
|
||||
if (!pair.trimmed().isEmpty()) {
|
||||
QStringList keyvalue = pair.split(':');
|
||||
if (keyvalue.length() == 2) {
|
||||
QString key = keyvalue.at(0).trimmed();
|
||||
|
||||
if (flag & RSHTML_OPTIMIZEHTML_REMOVE_FONT) {
|
||||
if (key == "font-family" ||
|
||||
key == "font-size" ||
|
||||
key == "font-weight" ||
|
||||
key == "font-style") {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if (flag & RSHTML_OPTIMIZEHTML_REMOVE_COLOR) {
|
||||
if (key == "color") {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
style += key + ":" + keyvalue.at(1).trimmed() + ";";
|
||||
} else {
|
||||
style += pair + ";";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (style.isEmpty()) {
|
||||
node.attributes().removeNamedItem("style");
|
||||
styleNode.clear();
|
||||
} else {
|
||||
styleAttr.setValue(style);
|
||||
}
|
||||
}
|
||||
|
||||
if (node.isElement()) {
|
||||
|
@ -288,14 +330,14 @@ static void optimizeHtml(QDomDocument& doc, QDomElement& currentElement)
|
|||
}
|
||||
|
||||
// iterate children
|
||||
optimizeHtml(doc, element);
|
||||
optimizeHtml(doc, element, flag);
|
||||
|
||||
// <p>
|
||||
if (element.tagName().toLower() == "p") {
|
||||
// <p style="...">
|
||||
//styleNode = element.attributes().namedItem("style");
|
||||
if (element.attributes().size() == 1 && styleNode.isAttr()) {
|
||||
QString value = styleAttr.toAttr().value().simplified();
|
||||
QString value = styleNode.toAttr().value().simplified();
|
||||
if (value == "margin:0px 0px 0px 0px;-qt-block-indent:0;text-indent:0px;" ||
|
||||
value.startsWith("-qt-paragraph-type:empty;margin:0px 0px 0px 0px;-qt-block-indent:0;text-indent:0px;")) {
|
||||
|
||||
|
@ -319,7 +361,7 @@ static void optimizeHtml(QDomDocument& doc, QDomElement& currentElement)
|
|||
}
|
||||
}
|
||||
|
||||
void optimizeHtml(QTextEdit *textEdit, QString &text)
|
||||
void optimizeHtml(QTextEdit *textEdit, QString &text, unsigned int flag)
|
||||
{
|
||||
if (textEdit->toHtml() == QTextDocument(textEdit->toPlainText()).toHtml()) {
|
||||
text = textEdit->toPlainText();
|
||||
|
@ -329,10 +371,10 @@ void optimizeHtml(QTextEdit *textEdit, QString &text)
|
|||
|
||||
text = textEdit->toHtml();
|
||||
|
||||
optimizeHtml(text);
|
||||
optimizeHtml(text, flag);
|
||||
}
|
||||
|
||||
void optimizeHtml(QString &text)
|
||||
void optimizeHtml(QString &text, unsigned int flag)
|
||||
{
|
||||
int originalLength = text.length();
|
||||
|
||||
|
@ -345,7 +387,7 @@ void optimizeHtml(QString &text)
|
|||
}
|
||||
|
||||
QDomElement body = doc.documentElement();
|
||||
optimizeHtml(doc, body);
|
||||
optimizeHtml(doc, body, flag);
|
||||
text = doc.toString(-1);
|
||||
|
||||
std::cerr << "Optimized text to " << text.length() << " bytes , instead of " << originalLength << std::endl;
|
||||
|
|
|
@ -36,6 +36,13 @@
|
|||
/* Flags for RsHtml::formatText */
|
||||
#define RSHTML_FORMATTEXT_EMBED_SMILEYS 1
|
||||
#define RSHTML_FORMATTEXT_EMBED_LINKS 2
|
||||
#define RSHTML_FORMATTEXT_REMOVE_FONT 4
|
||||
#define RSHTML_FORMATTEXT_REMOVE_COLOR 8
|
||||
#define RSHTML_FORMATTEXT_CLEANSTYLE (RSHTML_FORMATTEXT_REMOVE_FONT | RSHTML_FORMATTEXT_REMOVE_COLOR)
|
||||
|
||||
/* Flags for RsHtml::formatText */
|
||||
#define RSHTML_OPTIMIZEHTML_REMOVE_FONT 2
|
||||
#define RSHTML_OPTIMIZEHTML_REMOVE_COLOR 1
|
||||
|
||||
class QTextEdit;
|
||||
|
||||
|
@ -113,8 +120,8 @@ extern EmbedInHtmlImg defEmbedImg;
|
|||
QString formatText(const QString &text, unsigned int flag);
|
||||
bool findAnchors(const QString &text, QStringList& urls);
|
||||
|
||||
void optimizeHtml(QTextEdit *textEdit, QString &text);
|
||||
void optimizeHtml(QString &text);
|
||||
void optimizeHtml(QTextEdit *textEdit, QString &text, unsigned int flag = 0);
|
||||
void optimizeHtml(QString &text, unsigned int flag = 0);
|
||||
QString toHtml(QString text, bool realHtml = true);
|
||||
|
||||
} // namespace RsHtml
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue