From 0d7d575f29000abb4574313667defc0563649481 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Thu, 14 Mar 2013 12:01:15 +0530 Subject: [PATCH] PDF Output: Fix javascript dialog box popping up in the middle on converting very long documents. Fixes #1154948 (JavaScript Problem while generating PDF in 0.9.22) --- src/calibre/ebooks/pdf/render/from_html.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/calibre/ebooks/pdf/render/from_html.py b/src/calibre/ebooks/pdf/render/from_html.py index 933bcefd17..66f9b77b39 100644 --- a/src/calibre/ebooks/pdf/render/from_html.py +++ b/src/calibre/ebooks/pdf/render/from_html.py @@ -12,7 +12,7 @@ from future_builtins import map from math import floor from PyQt4.Qt import (QObject, QPainter, Qt, QSize, QString, QTimer, - pyqtProperty, QEventLoop, QPixmap, QRect) + pyqtProperty, QEventLoop, QPixmap, QRect, pyqtSlot) from PyQt4.QtWebKit import QWebView, QWebPage, QWebSettings from calibre import fit_image @@ -82,6 +82,7 @@ class Page(QWebPage): # {{{ opts.pdf_sans_family) if opts.pdf_mono_family: settings.setFontFamily(QWebSettings.FixedFont, opts.pdf_mono_family) + self.longjs_counter = 0 def javaScriptConsoleMessage(self, msg, lineno, msgid): self.log.debug(u'JS:', unicode(msg)) @@ -89,8 +90,14 @@ class Page(QWebPage): # {{{ def javaScriptAlert(self, frame, msg): self.log(unicode(msg)) + @pyqtSlot(result=bool) def shouldInterruptJavaScript(self): - return False + if self.longjs_counter < 5: + self.log('Long running javascript, letting it proceed') + self.longjs_counter += 1 + return False + self.log.warn('Long running javascript, aborting it') + return True # }}} @@ -275,6 +282,7 @@ class PDFWriter(QObject): self.paged_js += cc('ebooks.oeb.display.mathjax') self.view.page().mainFrame().addToJavaScriptWindowObject("py_bridge", self) + self.view.page().longjs_counter = 0 evaljs = self.view.page().mainFrame().evaluateJavaScript evaljs(self.paged_js) self.load_mathjax()