浏览代码

Use local files for debug JavaScript

Kandrashin Denis 12 年之前
父节点
当前提交
a70488531e
共有 9 个文件被更改,包括 58 次插入27 次删除
  1. 2 1
      source/fb2app.cpp
  2. 1 1
      source/fb2app.hpp
  3. 1 1
      source/fb2html.cpp
  4. 2 5
      source/fb2main.cpp
  5. 1 1
      source/fb2save.cpp
  6. 16 4
      source/fb2text.cpp
  7. 16 1
      source/fb2text.hpp
  8. 18 8
      source/fb2utils.cpp
  9. 1 5
      source/fb2utils.h

+ 2 - 1
source/fb2app.cpp

@@ -1,5 +1,6 @@
-#include <QApplication>
 #include <QErrorMessage>
+#include <QLocale>
+#include <QTranslator>
 
 #include "fb2app.hpp"
 #include "fb2main.hpp"

+ 1 - 1
source/fb2app.hpp

@@ -1,7 +1,7 @@
 #ifndef FB2APP_H
 #define FB2APP_H
 
-#include <QtGui>
+#include <QApplication>
 
 class FbApplication : public QApplication
 {

+ 1 - 1
source/fb2html.cpp

@@ -188,7 +188,7 @@ QString FbTextElement::location()
 
 void FbTextElement::select()
 {
-    static const QString javascript = FB2::read(":/js/set_cursor.js");
+    QString javascript = jScript("set_cursor.js");
     evaluateJavaScript(javascript);
 }
 

+ 2 - 5
source/fb2main.cpp

@@ -472,11 +472,13 @@ void FbMainWindow::createActions()
     menu->addAction(act);
     tool->addAction(act);
 
+#ifdef QT_DEBUG
     act = new QAction(tr("&HTML"), this);
     act->setCheckable(true);
     connect(act, SIGNAL(triggered()), this, SLOT(viewHtml()));
     viewGroup->addAction(act);
     menu->addAction(act);
+#endif // _DEBUG
 
     menu->addSeparator();
 
@@ -858,10 +860,8 @@ void FbMainWindow::viewCode()
 
     bool load = false;
     QByteArray xml;
-    QString html;
     if (textFrame) {
         textFrame->view()->save(&xml);
-        html = textFrame->view()->page()->mainFrame()->toHtml();
         isSwitched = true;
         load = true;
     }
@@ -875,7 +875,6 @@ void FbMainWindow::viewCode()
         codeEdit = new FbCodeEdit;
     }
     if (load) codeEdit->load(xml);
-    codeEdit->setPlainText(html);
     setCentralWidget(codeEdit);
     codeEdit->setFocus();
 
@@ -923,10 +922,8 @@ void FbMainWindow::viewHtml()
     if (codeEdit && centralWidget() == codeEdit) return;
     if (!textFrame) return;
 
-    bool load = false;
     QString html = textFrame->view()->page()->mainFrame()->toHtml();
     isSwitched = true;
-    load = true;
 
     FB2DELETE(textFrame);
     FB2DELETE(dockTree);

+ 1 - 1
source/fb2save.cpp

@@ -479,7 +479,7 @@ bool FbSaveHandler::save()
 {
     m_writer.writeStartDocument();
     QWebFrame * frame = m_writer.view().page()->mainFrame();
-    static const QString javascript = FB2::read(":/js/export.js");
+    QString javascript = jScript("export.js");
     frame->addToJavaScriptWindowObject("handler", this);
     frame->evaluateJavaScript(javascript);
     m_writer.writeEndDocument();

+ 16 - 4
source/fb2text.cpp

@@ -26,6 +26,15 @@
 #include <QWebPage>
 #include <QtDebug>
 
+//---------------------------------------------------------------------------
+//  FbTextLogger
+//---------------------------------------------------------------------------
+
+void FbTextLogger::trace(const QString &text)
+{
+    qCritical() << text;
+}
+
 //---------------------------------------------------------------------------
 //  FbNoteView
 //---------------------------------------------------------------------------
@@ -74,6 +83,7 @@ void FbNoteView::hint(const QWebElement element, const QRect &rect)
 
 FbTextPage::FbTextPage(QObject *parent)
     : QWebPage(parent)
+    , m_logger(this)
 {
     QWebSettings *s = settings();
     s->setAttribute(QWebSettings::AutoLoadImages, true);
@@ -281,7 +291,7 @@ void FbTextPage::createDiv(const QString &className)
 {
     // $(document).children("html").children("body").children("div.body").children("div.section").get(0)
     QString style = className;
-    static const QString js1 = FB2::read(":/js/section_get.js");
+    QString js1 = jScript("section_get.js");
     QString result = mainFrame()->evaluateJavaScript(js1).toString();
     int pos = result.indexOf("|");
     if (pos == 0) return;
@@ -292,7 +302,7 @@ void FbTextPage::createDiv(const QString &className)
     FbTextElement duplicate = original.clone();
     original.appendOutside(duplicate);
     original.takeFromDocument();
-    static const QString js2 = FB2::read(":/js/section_new.js") + ";f(this,'%1',%2)";
+    QString js2 = jScript("section_new.js") + ";f(this,'%1',%2)";
     duplicate.evaluateJavaScript(js2.arg(style).arg(position));
     QUndoCommand * command = new FbReplaceCmd(original, duplicate);
     push(command, tr("Create section"));
@@ -335,6 +345,7 @@ void FbTextPage::deleteSection()
 
 void FbTextPage::createTitle()
 {
+    createDiv("title");
 }
 
 FbTextElement FbTextPage::current()
@@ -362,18 +373,19 @@ FbTextElement FbTextPage::element(const QString &location)
 
 QString FbTextPage::location()
 {
-    const QString javascript = "location(document.getSelection().anchorNode)";
+    QString javascript = "location(document.getSelection().anchorNode)";
     return mainFrame()->evaluateJavaScript(javascript).toString();
 }
 
 QString FbTextPage::status()
 {
-    static const QString javascript = FB2::read(":/js/get_status.js");
+    QString javascript = jScript("get_status.js");
     return mainFrame()->evaluateJavaScript(javascript).toString();
 }
 
 void FbTextPage::loadFinished()
 {
+    mainFrame()->addToJavaScriptWindowObject("logger", &m_logger);
     FbTextElement element = body().findFirst("div.body");
     if (element.isNull()) element = body();
     element.select();

+ 16 - 1
source/fb2text.hpp

@@ -22,12 +22,24 @@ class FbNoteView;
 class FbReadThread;
 class FbTextElement;
 
+class FbTextLogger : public QObject
+{
+    Q_OBJECT
+
+public:
+    explicit FbTextLogger(QObject *parent = 0) : QObject(parent) {}
+
+public slots:
+    void trace(const QString &text);
+
+};
+
 class FbTextBase : public QWebView
 {
     Q_OBJECT
 
 public:
-    FbTextBase(QWidget* parent = 0)
+    FbTextBase(QWidget *parent = 0)
         : QWebView(parent)
     {
           m_timer.setInterval(100);
@@ -106,6 +118,9 @@ protected:
 private slots:
     void loadFinished();
     void fixContents();
+
+private:
+    FbTextLogger m_logger;
 };
 
 class FbTextEdit : public FbTextBase

+ 18 - 8
source/fb2utils.cpp

@@ -1,13 +1,16 @@
 #include "fb2utils.h"
 
+#include <QApplication>
+#include <QDir>
 #include <QFile>
+#include <QFileInfo>
 #include <QTextStream>
 
 static QIcon loadIcon(const QString &name)
 {
     QIcon icon;
     icon.addFile(QString(":/24x24/%1.png").arg(name), QSize(24,24));
-    icon.addFile(QString(":/16x24/%1.png").arg(name), QSize(16,16));
+    icon.addFile(QString(":/16x16/%1.png").arg(name), QSize(16,16));
     return icon;
 }
 
@@ -16,14 +19,23 @@ FbIcon::FbIcon(const QString &name)
 {
 }
 
-namespace FB2 {
-
-QString read(const QString &filename)
+QString jScript(const QString &filename)
 {
+
+#ifdef QT_DEBUG
+    QString filepath = qApp->arguments().first();
+    filepath += "/../../fb2edit/source/js/";
+    filepath += filename;
+    filepath = QDir::cleanPath(filepath);
+#else
+    QString filepath = ":/js/";
+    filepath += filename;
+#endif
+
     // TODO: throw an exception instead of
     // returning an empty string
-    QFile file( filename );
-    if (!file.open( QFile::ReadOnly)) return QString();
+    QFile file( filepath );
+    if (!file.open(QFile::ReadOnly)) return QString();
 
     QTextStream in( &file );
 
@@ -36,5 +48,3 @@ QString read(const QString &filename)
 
     return in.readAll();
 }
-
-}

+ 1 - 5
source/fb2utils.h

@@ -12,10 +12,6 @@ public:
     explicit FbIcon(const QString &name);
 };
 
-namespace FB2 {
-
-QString read(const QString &filename);
-
-}
+QString jScript(const QString &filename);
 
 #endif // FB2UTILS_H