[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: extragear/base/konq-plugins/validators
From: Pino Toscano <pino () kde ! org>
Date: 2009-01-01 0:43:42
Message-ID: 1230770622.834899.22518.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 903981 by pino:
Support the validation of frames and iframes of the current page with the embedded \
validator. The tooltip shows the results for all the frames, while the statusbar \
label the total count. In the result dialog, show all the results sorted by frame \
(and then by line, and then column); in case the page has no frames, don't show the \
"frame" column.
On the code point of view: shuffled a bit some code to keep a list of the validation \
result objects, instead of a validator.
M +94 -14 plugin_validators.cpp
M +5 -1 plugin_validators.h
M +51 -34 reportdialog.cpp
M +2 -2 reportdialog.h
M +5 -0 reportwidget.ui
--- trunk/extragear/base/konq-plugins/validators/plugin_validators.cpp #903980:903981
@@ -81,7 +81,7 @@
const QVariantList & )
: Plugin( parent ), m_configDialog(0), m_part(0)
, m_localValidation(0), m_localValidationReport(0)
- , m_icon(0), m_statusBarExt(0), m_validator(0)
+ , m_icon(0), m_statusBarExt(0)
{
setComponentData(PluginValidatorsFactory::componentData());
@@ -145,8 +145,7 @@
removeStatusBarIcon();
delete m_configDialog;
#ifdef HAVE_TIDY
- delete m_validator;
- m_validator = 0;
+ qDeleteAll(m_lastResults);
#endif
// Dont' delete the action. KActionCollection as parent does the job already
// and not deleting it at this point also ensures that in case we are not unplugged
@@ -290,13 +289,29 @@
void PluginValidators::slotTidyValidation()
{
#ifdef HAVE_TIDY
- const QByteArray source = documentSource().toUtf8();
- delete m_validator;
- m_validator = new TidyValidator(source);
+ qDeleteAll(m_lastResults);
+ m_lastResults.clear();
+ SourcesList sources;
+ sources.append(qMakePair(QString(), documentSource()));
+ sources += documentSources();
+ SourcesList::ConstIterator it = sources.constBegin(), itEnd = sources.constEnd();
+ int errorCount = 0;
+ int warningCount = 0;
+ int a11yWarningCount = 0;
+ for ( ; it != itEnd; ++it)
+ {
+ ValidationResult* res = new ValidationResult();
+ res->frameName = it->first;
+ TidyValidator v(it->second.toUtf8());
+ res->errors = v.errors();
+ errorCount += res->errors.count();
+ res->warnings = v.warnings();
+ warningCount += res->warnings.count();
+ res->accesswarns = v.accessibilityWarnings();
+ a11yWarningCount += res->accesswarns.count();
+ m_lastResults.append(res);
+ }
- const int errorCount = m_validator->errorCount();
- const int warningCount = m_validator->warningCount();
- const int a11yWarningCount = m_validator->accessibilityWarningCount();
const QString errorCountString = i18np("1 error", "%1 errors", errorCount);
const QString warningCountString = i18np("1 warning", "%1 warnings", \
warningCount); const QString a11yWarningCountString = i18np("1 accessibility \
warning", "%1 accessibility warnings", a11yWarningCount); @@ -304,10 +319,49 @@
"%1, %2", errorCountString, warningCountString));
QStringList results;
results.append(i18n("HTML tidy results:") + QLatin1String("\n"));
- results.append(errorCountString);
- results.append(warningCountString);
- if (ValidatorsSettings::accessibilityLevel())
- results.append(a11yWarningCountString);
+ if (m_lastResults.count() == 1)
+ {
+ results.append(errorCountString);
+ results.append(warningCountString);
+ if (ValidatorsSettings::accessibilityLevel())
+ results.append(a11yWarningCountString);
+ }
+ else if (m_lastResults.count() > 1)
+ {
+ QList<ValidationResult *>::ConstIterator vIt = m_lastResults.constBegin(), \
vItEnd = m_lastResults.constEnd(); + if (ValidatorsSettings::accessibilityLevel())
+ results.append(i18nc("%1 is the error count string, %2 the warning count \
string, " + "%3 the accessibility warning string",
+ "Page: %1, %2, %3",
+ i18np("1 error", "%1 errors", (*vIt)->errors.count()),
+ i18np("1 warning", "%1 warnings", \
(*vIt)->warnings.count()), + i18np("1 accessibility \
warning", "%1 accessibility warnings", (*vIt)->accesswarns.count()))); + else
+ results.append(i18nc("%1 is the error count string, %2 the warning count \
string", + "Page: %1, %2",
+ i18np("1 error", "%1 errors", (*vIt)->errors.count()),
+ i18np("1 warning", "%1 warnings", \
(*vIt)->warnings.count()))); + ++vIt;
+ for ( ; vIt != vItEnd; ++vIt)
+ {
+ ValidationResult* res = *vIt;
+ if (ValidatorsSettings::accessibilityLevel())
+ results.append(i18nc("%1 is the HTML frame name, %2 is the error count \
string, " + "%3 the warning count string, %4 the \
accessibility warning string", + "Frame '%1': %2, %3, \
%4", + res->frameName,
+ i18np("1 error", "%1 errors", (*vIt)->errors.count()),
+ i18np("1 warning", "%1 warnings", \
(*vIt)->warnings.count()), + i18np("1 accessibility \
warning", "%1 accessibility warnings", (*vIt)->accesswarns.count()))); + else
+ results.append(i18nc("%1 is the HTML frame name, %2 is the error count \
string, " + "%3 the warning count string",
+ "Frame '%1': %2, %3",
+ res->frameName,
+ i18np("1 error", "%1 errors", (*vIt)->errors.count()),
+ i18np("1 warning", "%1 warnings", \
(*vIt)->warnings.count()))); + }
+ }
m_icon->setToolTip(results.join(QLatin1String("\n")));
QPalette pal = m_icon->palette();
if (errorCount > 0)
@@ -333,7 +387,7 @@
void PluginValidators::slotShowTidyValidationReport()
{
#ifdef HAVE_TIDY
- ReportDialog *reportDialog = new ReportDialog(m_validator, 0);
+ ReportDialog *reportDialog = new ReportDialog(m_lastResults, 0);
reportDialog->setAttribute(Qt::WA_DeleteOnClose);
reportDialog->show();
#endif
@@ -424,6 +478,32 @@
return QString();
}
+void recursiveKHTMLFrames(KHTMLPart* part, SourcesList* sources)
+{
+ const QStringList frameNames = part->frameNames();
+ int i = 0;
+ Q_FOREACH (KParts::ReadOnlyPart *frame, part->frames())
+ {
+ if (KHTMLPart *khtmlpart = qobject_cast<KHTMLPart *>(frame))
+ {
+ sources->append(qMakePair(frameNames.at(i), part->documentSource()));
+ recursiveKHTMLFrames(khtmlpart, sources);
+ }
+ ++i;
+ }
+}
+
+SourcesList PluginValidators::documentSources() const
+{
+ if (KHTMLPart *khtmlpart = qobject_cast<KHTMLPart *>(m_part))
+ {
+ SourcesList sources;
+ recursiveKHTMLFrames(khtmlpart, &sources);
+ return sources;
+ }
+ return SourcesList();
+}
+
bool PluginValidators::doExternalValidationChecks()
{
if (!parent()->inherits("KHTMLPart") && !parent()->inherits("WebKitPart"))
--- trunk/extragear/base/konq-plugins/validators/plugin_validators.h #903980:903981
@@ -42,8 +42,11 @@
class StatusBarExtension;
}
class ClickIconLabel;
+struct ValidationResult;
class TidyValidator;
+typedef QList<QPair<QString, QString> > SourcesList;
+
class PluginValidators : public KParts::Plugin
{
Q_OBJECT
@@ -88,12 +91,13 @@
ClickIconLabel *m_icon;
KParts::StatusBarExtension *m_statusBarExt;
- TidyValidator *m_validator;
+ QList<ValidationResult *> m_lastResults;
bool canValidateByUri() const;
bool canValidateByUpload() const;
bool canValidateLocally() const;
QString documentSource() const;
+ SourcesList documentSources() const;
void validateByUri(const KUrl &url);
void validateByUpload(const KUrl &url, const QList<QPair<QByteArray, QByteArray> > \
&formData); bool doExternalValidationChecks();
--- trunk/extragear/base/konq-plugins/validators/reportdialog.cpp #903980:903981
@@ -25,18 +25,24 @@
#include <klocale.h>
+static const int FrameNumberRole = Qt::UserRole + 1;
+
static bool compare_report_items(QTreeWidgetItem* a, QTreeWidgetItem* b)
{
- int val1 = a->text(1).toInt();
- int val2 = b->text(1).toInt();
+ int val1 = a->data(0, FrameNumberRole).toInt();
+ int val2 = b->data(0, FrameNumberRole).toInt();
if (val1 != val2)
return val1 < val2;
val1 = a->text(2).toInt();
val2 = b->text(2).toInt();
+ if (val1 != val2)
+ return val1 < val2;
+ val1 = a->text(3).toInt();
+ val2 = b->text(3).toInt();
return val1 < val2;
}
-ReportDialog::ReportDialog(TidyValidator* validator, QWidget* parent)
+ReportDialog::ReportDialog(const QList<ValidationResult *> &results, QWidget* \
parent) : KDialog(parent)
{
setButtons(KDialog::Close);
@@ -48,42 +54,53 @@
header->setResizeMode(0, QHeaderView::ResizeToContents);
header->setResizeMode(1, QHeaderView::ResizeToContents);
header->setResizeMode(2, QHeaderView::ResizeToContents);
+ header->setResizeMode(3, QHeaderView::ResizeToContents);
QList<QTreeWidgetItem *> items;
- for (int i = 0; i < validator->errorCount(); ++i)
+ int i = 0;
+ Q_FOREACH (ValidationResult* res, results)
{
- const TidyReport r = validator->error(i);
- QTreeWidgetItem *item = new QTreeWidgetItem();
- item->setIcon(0, KIcon("dialog-error"));
- item->setText(1, QString::number(r.line));
- item->setText(2, QString::number(r.col));
- item->setText(3, r.msg);
- item->setToolTip(0, i18nc("Validation status", "Error"));
- items.append(item);
+ Q_FOREACH (const TidyReport &r, res->errors)
+ {
+ QTreeWidgetItem *item = new QTreeWidgetItem();
+ item->setIcon(0, KIcon("dialog-error"));
+ item->setText(1, res->frameName);
+ item->setText(2, QString::number(r.line));
+ item->setText(3, QString::number(r.col));
+ item->setText(4, r.msg);
+ item->setToolTip(0, i18nc("Validation status", "Error"));
+ item->setData(0, FrameNumberRole, i);
+ items.append(item);
+ }
+ Q_FOREACH (const TidyReport &r, res->warnings)
+ {
+ QTreeWidgetItem *item = new QTreeWidgetItem();
+ item->setIcon(0, KIcon("dialog-warning"));
+ item->setText(1, res->frameName);
+ item->setText(2, QString::number(r.line));
+ item->setText(3, QString::number(r.col));
+ item->setText(4, r.msg);
+ item->setToolTip(0, i18nc("Validation status", "Warning"));
+ item->setData(0, FrameNumberRole, i);
+ items.append(item);
+ }
+ Q_FOREACH (const TidyReport &r, res->accesswarns)
+ {
+ QTreeWidgetItem *item = new QTreeWidgetItem();
+ item->setIcon(0, KIcon("preferences-desktop-accessibility"));
+ item->setText(1, res->frameName);
+ item->setText(2, QString::number(r.line));
+ item->setText(3, QString::number(r.col));
+ item->setText(4, r.msg);
+ item->setToolTip(0, i18nc("Validation status", "Accessibility warning"));
+ item->setData(0, FrameNumberRole, i);
+ items.append(item);
+ }
+ ++i;
}
- for (int i = 0; i < validator->warningCount(); ++i)
- {
- const TidyReport r = validator->warning(i);
- QTreeWidgetItem *item = new QTreeWidgetItem();
- item->setIcon(0, KIcon("dialog-warning"));
- item->setText(1, QString::number(r.line));
- item->setText(2, QString::number(r.col));
- item->setText(3, r.msg);
- item->setToolTip(0, i18nc("Validation status", "Warning"));
- items.append(item);
- }
- for (int i = 0; i < validator->accessibilityWarningCount(); ++i)
- {
- const TidyReport r = validator->accessibilityWarning(i);
- QTreeWidgetItem *item = new QTreeWidgetItem();
- item->setIcon(0, KIcon("preferences-desktop-accessibility"));
- item->setText(1, QString::number(r.line));
- item->setText(2, QString::number(r.col));
- item->setText(3, r.msg);
- item->setToolTip(0, i18nc("Validation status", "Accessibility warning"));
- items.append(item);
- }
qStableSort(items.begin(), items.end(), compare_report_items);
m_ui.reportsView->addTopLevelItems(items);
+ if (results.count() == 1)
+ header->setSectionHidden(1, true);
}
QSize ReportDialog::sizeHint() const
--- trunk/extragear/base/konq-plugins/validators/reportdialog.h #903980:903981
@@ -24,13 +24,13 @@
#include "ui_reportwidget.h"
-class TidyValidator;
+struct ValidationResult;
class ReportDialog : public KDialog
{
Q_OBJECT
public:
- ReportDialog(TidyValidator* validator, QWidget* parent);
+ ReportDialog(const QList<ValidationResult *> &results, QWidget* parent);
virtual QSize sizeHint() const;
--- trunk/extragear/base/konq-plugins/validators/reportwidget.ui #903980:903981
@@ -31,6 +31,11 @@
</column>
<column>
<property name="text" >
+ <string>Frame</string>
+ </property>
+ </column>
+ <column>
+ <property name="text" >
<string>Row</string>
</property>
</column>
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic