Permalink
Browse files

word linkfication is working

  • Loading branch information...
1 parent 70180c6 commit 4edcc609790a3f21ad3187070a76f111f2e74561 Alex Ehlke committed Jul 8, 2010
Showing with 108 additions and 37 deletions.
  1. +5 −0 notes
  2. +10 −0 resources/entryview.css
  3. +31 −23 src/manabidict/resources_rc.py
  4. +62 −14 src/manabidict/ui/dictionary.py
View
@@ -39,3 +39,8 @@ have to handle hash changes in history, not just entries
up/down changes results list
page up/page down scrolls entry view
+
+
+genius ng
+U+014B
+
@@ -18,3 +18,13 @@ hr {
position: relative;
top: -2px;
}
+
+a {
+ color: #2971A7;
+}
+
+.searchable-word:hover {
+ text-decoration: underline;
+ cursor: hand;
+ color: #2971A7;
+}
@@ -2,15 +2,15 @@
# Resource object code
#
-# Created: Sun Jul 4 10:00:52 2010
+# Created: Thu Jul 8 12:00:47 2010
# by: The Resource Compiler for PyQt (Qt v4.6.2)
#
# WARNING! All changes made in this file will be lost!
from PyQt4 import QtCore
qt_resource_data = "\
-\x00\x00\x00\xec\
+\x00\x00\x01\x69\
\x0a\
\x62\x6f\x64\x79\x20\x7b\x0a\x20\x20\x20\x20\x66\x6f\x6e\x74\x2d\
\x66\x61\x6d\x69\x6c\x79\x3a\x20\x42\x61\x73\x6b\x65\x72\x76\x69\
@@ -26,7 +26,15 @@
\x74\x2d\x64\x69\x76\x69\x64\x65\x72\x2d\x61\x72\x72\x6f\x77\x20\
\x7b\x0a\x20\x20\x20\x20\x70\x6f\x73\x69\x74\x69\x6f\x6e\x3a\x20\
\x72\x65\x6c\x61\x74\x69\x76\x65\x3b\x0a\x20\x20\x20\x20\x74\x6f\
-\x70\x3a\x20\x2d\x32\x70\x78\x3b\x0a\x7d\x0a\
+\x70\x3a\x20\x2d\x32\x70\x78\x3b\x0a\x7d\x0a\x0a\x61\x20\x7b\x0a\
+\x20\x20\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x32\x39\x37\x31\
+\x41\x37\x3b\x0a\x7d\x0a\x0a\x2e\x73\x65\x61\x72\x63\x68\x61\x62\
+\x6c\x65\x2d\x77\x6f\x72\x64\x3a\x68\x6f\x76\x65\x72\x20\x7b\x0a\
+\x20\x20\x20\x20\x74\x65\x78\x74\x2d\x64\x65\x63\x6f\x72\x61\x74\
+\x69\x6f\x6e\x3a\x20\x75\x6e\x64\x65\x72\x6c\x69\x6e\x65\x3b\x0a\
+\x20\x20\x20\x20\x63\x75\x72\x73\x6f\x72\x3a\x20\x68\x61\x6e\x64\
+\x3b\x0a\x20\x20\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x32\x39\
+\x37\x31\x41\x37\x3b\x0a\x7d\x0a\
\x00\x00\x54\x77\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
@@ -5048,27 +5056,27 @@
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x04\x00\x00\x00\x03\
\x00\x00\x00\x8e\x00\x02\x00\x00\x00\x01\x00\x00\x00\x0d\
\x00\x00\x00\x9e\x00\x02\x00\x00\x00\x06\x00\x00\x00\x07\
-\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x01\x00\x00\x00\xf0\
-\x00\x00\x00\x68\x00\x00\x00\x00\x00\x01\x00\x00\x55\x6b\
-\x00\x00\x00\xb6\x00\x00\x00\x00\x00\x01\x00\x00\xa9\xe8\
-\x00\x00\x00\xec\x00\x00\x00\x00\x00\x01\x00\x00\xad\xae\
-\x00\x00\x01\x78\x00\x00\x00\x00\x00\x01\x00\x00\xba\x1c\
-\x00\x00\x01\xb0\x00\x00\x00\x00\x00\x01\x00\x00\xbd\x0d\
-\x00\x00\x01\x16\x00\x00\x00\x00\x00\x01\x00\x00\xb2\x1b\
-\x00\x00\x01\x52\x00\x00\x00\x00\x00\x01\x00\x00\xb6\x5c\
+\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x01\x00\x00\x01\x6d\
+\x00\x00\x00\x68\x00\x00\x00\x00\x00\x01\x00\x00\x55\xe8\
+\x00\x00\x00\xb6\x00\x00\x00\x00\x00\x01\x00\x00\xaa\x65\
+\x00\x00\x00\xec\x00\x00\x00\x00\x00\x01\x00\x00\xae\x2b\
+\x00\x00\x01\x78\x00\x00\x00\x00\x00\x01\x00\x00\xba\x99\
+\x00\x00\x01\xb0\x00\x00\x00\x00\x00\x01\x00\x00\xbd\x8a\
+\x00\x00\x01\x16\x00\x00\x00\x00\x00\x01\x00\x00\xb2\x98\
+\x00\x00\x01\x52\x00\x00\x00\x00\x00\x01\x00\x00\xb6\xd9\
\x00\x00\x01\xd2\x00\x02\x00\x00\x00\x0c\x00\x00\x00\x0e\
-\x00\x00\x03\x64\x00\x00\x00\x00\x00\x01\x00\x00\xf3\xc6\
-\x00\x00\x02\xfa\x00\x00\x00\x00\x00\x01\x00\x00\xd5\xd4\
-\x00\x00\x03\xc0\x00\x00\x00\x00\x00\x01\x00\x01\x12\x9c\
-\x00\x00\x02\x8c\x00\x00\x00\x00\x00\x01\x00\x00\xce\x3c\
-\x00\x00\x02\xc2\x00\x00\x00\x00\x00\x01\x00\x00\xd1\xb1\
-\x00\x00\x03\x88\x00\x00\x00\x00\x00\x01\x00\x00\xf8\x37\
-\x00\x00\x02\x66\x00\x00\x00\x00\x00\x01\x00\x00\xca\x34\
-\x00\x00\x02\x0c\x00\x00\x00\x00\x00\x01\x00\x00\xc1\xf2\
-\x00\x00\x03\x30\x00\x00\x00\x00\x00\x01\x00\x00\xf0\x4b\
-\x00\x00\x01\xe6\x00\x00\x00\x00\x00\x01\x00\x00\xbd\xa8\
-\x00\x00\x02\x42\x00\x00\x00\x00\x00\x01\x00\x00\xc6\x31\
-\x00\x00\x03\xf6\x00\x00\x00\x00\x00\x01\x00\x01\x2c\x60\
+\x00\x00\x03\x64\x00\x00\x00\x00\x00\x01\x00\x00\xf4\x43\
+\x00\x00\x02\xfa\x00\x00\x00\x00\x00\x01\x00\x00\xd6\x51\
+\x00\x00\x03\xc0\x00\x00\x00\x00\x00\x01\x00\x01\x13\x19\
+\x00\x00\x02\x8c\x00\x00\x00\x00\x00\x01\x00\x00\xce\xb9\
+\x00\x00\x02\xc2\x00\x00\x00\x00\x00\x01\x00\x00\xd2\x2e\
+\x00\x00\x03\x88\x00\x00\x00\x00\x00\x01\x00\x00\xf8\xb4\
+\x00\x00\x02\x66\x00\x00\x00\x00\x00\x01\x00\x00\xca\xb1\
+\x00\x00\x02\x0c\x00\x00\x00\x00\x00\x01\x00\x00\xc2\x6f\
+\x00\x00\x03\x30\x00\x00\x00\x00\x00\x01\x00\x00\xf0\xc8\
+\x00\x00\x01\xe6\x00\x00\x00\x00\x00\x01\x00\x00\xbe\x25\
+\x00\x00\x02\x42\x00\x00\x00\x00\x00\x01\x00\x00\xc6\xae\
+\x00\x00\x03\xf6\x00\x00\x00\x00\x00\x01\x00\x01\x2c\xdd\
\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
"
@@ -7,7 +7,7 @@
#import Qt
import sys
import os
-from itertools import islice
+from itertools import islice, imap
import time
from functools import partial
import inspect
@@ -26,6 +26,22 @@
from epywing.categories import BookCategory
+class JavaScriptBridge(QObject):
+ '''Simple class for bridging JS to Python.
+ '''
+ def __init__(self, dictionary_window):
+ QObject.__init__(self, dictionary_window)
+ self.setObjectName('JavaScriptBridge')
+ self.dictionary_window = dictionary_window
+
+ #@pyqtSlot(unicode)
+ @pyqtSignature('QString')
+ def search(self, query):
+ query = unicode(query)
+ self.dictionary_window.select_book(all_books=True)
+ self.dictionary_window.do_search(query, search_method='exact')
+ #TODO don't force 'exact' search, but wait until 'All' book search result sorting is better
+
class Dictionary(QMainWindow):
@@ -35,6 +51,7 @@ class Dictionary(QMainWindow):
ZOOM_DELTA = 0.10
ZOOM_RANGE = (0.4, 4.0,)
+
def __init__(self, book_manager, parent=None):
super(Dictionary, self).__init__(parent)
@@ -50,6 +67,7 @@ def __init__(self, book_manager, parent=None):
self._finishedUiSetup = False
self.setupUi()
self.setupMacUi()
+ self.setupJavaScriptBridge()
self.restoreUiState()
self.setupFinalUi()
self._finishedUiSetup = True
@@ -145,6 +163,16 @@ def setupMacUi(self):
ui.text_size_buttons.right_button.clicked.connect(lambda: ui.actionIncreaseFontSize.trigger())
ui.navToolbar.addWidget(ui.text_size_buttons)
+ def _setupJavaScriptBridge(self):
+ self.ui.entryView.page().mainFrame().addToJavaScriptWindowObject('manabi', self.javascript_bridge)
+
+ def setupJavaScriptBridge(self):
+ '''Sets up the JS bridge for entryView.
+ '''
+ self.javascript_bridge = JavaScriptBridge(self)
+ self._setupJavaScriptBridge()
+ self.ui.entryView.page().mainFrame().javaScriptWindowObjectCleared.connect(self._setupJavaScriptBridge)
+
def setupFinalUi(self):
'''The last UI setup method to be called.
'''
@@ -336,7 +364,7 @@ def _go_history(self, index):
if 'entry_hash' in back_item:
self.ui.entryView.scrollToAnchor(back_item['entry_hash'])
if 'book' in back_item:
- self.select_book(back_item['book'])
+ self.select_book(book=back_item['book'])
except IndexError:
# already at edge of history
print 'indexerror!'
@@ -349,7 +377,9 @@ def push_history(self):
We push a dictionary rather than just a URI because we want to load both search results and the entry when going back.
'''
#print self.history
- #if self._staged_back_item:
+ #if self._staged_back_item
+ #FIXME
+ return
if self.history.current_location:
print 'pushing staged location',
#print self.history.current_location
@@ -366,6 +396,8 @@ def stage_history(self, clear_forward_items=True, label=None):
'''Set the staged back item to the current entry and search context.
`label` is what the history item will show as in menus. Defaults to the entry heading.
'''
+ #FIXME
+ return
entry = self._current_entry
if not label:
@@ -433,13 +465,16 @@ def selected_book(self):
else:
return selected_data.toPyObject()
- def select_book(self, book):
- '''Selects the book given an EpwingBook instance.
+ def select_book(self, book=None, all_books=False):
+ '''Selects the book given an EpwingBook instance, or everything if `all_books` is True.
'''
sb = self.ui.selectBook
- index = sb.findData(book.id)
- if index != -1:
- sb.setCurrentIndex(index)
+ if all_books:
+ sb.setCurrentIndex(0)
+ else:
+ index = sb.findData(book.id)
+ if index != -1:
+ sb.setCurrentIndex(index)
def reload_books_list(self):
'''Fills the book combobox with available books.
@@ -507,6 +542,8 @@ def reload_search_methods_list(self):
def do_search(self, query=None, search_method=None, max_results_per_book=25):
+ '''Performs search.
+ '''
selected_book = self.selected_book()
#if not selected_book: return
@@ -541,11 +578,11 @@ def show_results(self, results):
i = 0
+ html_hints = ['<', '>', '&lt;', '&gt;']
def add_result(heading, result):
# add an HTML item if it contains HTML
- html_hints = ['<', '>', '&lt;', '&gt;']
- if any(map(lambda x: x in heading, html_hints)):
+ if any(imap(lambda x: x in heading, html_hints)):
sr.addHtmlItem(heading, result)
else:
item = QListWidgetItem(heading)
@@ -594,7 +631,7 @@ def show_entries(self, entries):
They will be separated by a divider that can be clicked to hide its entry.
'''
self._current_entry = entries
- html = u''
+ html = [] #u''
hide_entry_js = u'''
<script type="text/javascript">
function toggle_entry(entry_id, arrow_down_id, arrow_up_id) {
@@ -612,6 +649,17 @@ def show_entries(self, entries):
arrow_up.style.display = 'block';
}
}
+
+ function get_text_of_children(node) {
+ // returns the text of all children of `node`
+ return 'textContent' in node ? node.textContent : node.innerText;
+ }
+
+ function search(node) {
+ // performs a search for the given node's text, using whatever search method is selected
+ var query = get_text_of_children(node);
+ manabi.search(query);
+ }
</script>
'''
divider = u'''
@@ -631,13 +679,13 @@ def show_entries(self, entries):
for entry in entries:
# add the divider with the entry's book title
- html += divider.format(entry_counter, entry.parent.name)
+ html.append(divider.format(entry_counter, entry.parent.name))
# add the entry's text
- html += u'<div class="dict-entry" id="entry-{0}">{1}</div>'.format(entry_counter, entry.text)
+ html.append(u'<div class="dict-entry" id="entry-{0}">{1}</div>'.format(entry_counter, entry.text))
entry_counter += 1
-
+ html = u''.join(html)
self._set_entryView_body(html, head_html=hide_entry_js)

0 comments on commit 4edcc60

Please sign in to comment.