def preview_css(self): ''' Construct a dummy annotation for preview purposes ''' from calibre_plugins.marvin_manager.annotations import Annotation, Annotations pas = Annotations(None, title="Preview") pas.annotations.append(Annotation(self.sample_ann_1)) pas.annotations.append(Annotation(self.sample_ann_2)) pas.annotations.append(Annotation(self.sample_ann_3)) self.parent.wv.setHtml(pas.to_HTML())
def preview_css(self): ''' Construct a dummy set of notes and annotation for preview purposes Modeled after book_status:_get_formatted_annotations() ''' from calibre_plugins.marvin_manager.annotations import ( ANNOTATIONS_HTML_TEMPLATE, Annotation, Annotations, BookNotes, BookmarkNotes) # Assemble the preview soup soup = BeautifulSoup(ANNOTATIONS_HTML_TEMPLATE) # Load the CSS from MXD resources path = os.path.join(self.parent.opts.resources_path, 'css', 'annotations.css') with open(path, 'rb') as f: css = f.read().decode('utf-8') style_tag = Tag(soup, 'style') style_tag.insert(0, css) soup.head.style.replaceWith(style_tag) # Assemble the sample Book notes book_notes_soup = BookNotes().construct(self.sample_book_notes) soup.body.append(book_notes_soup) cd_tag = Tag(soup, 'div', [('class', "divider")]) soup.body.append(cd_tag) # Assemble the sample Bookmark notes bookmark_notes_soup = BookmarkNotes().construct(self.sample_bookmark_notes) soup.body.append(bookmark_notes_soup) cd_tag = Tag(soup, 'div', [('class', "divider")]) soup.body.append(cd_tag) # Assemble the sample annotations pas = Annotations(None, title="Preview") pas.annotations.append(Annotation(self.sample_ann_1)) pas.annotations.append(Annotation(self.sample_ann_2)) pas.annotations.append(Annotation(self.sample_ann_3)) annotations_soup = pas.to_HTML(pas.create_soup()) soup.body.append(annotations_soup) self.parent.wv.setHtml(unicode(soup.renderContents()))
def rerender_to_html(self, transient_table, book_id): ''' Rerender a set of annotations with the current style Models annotations_to_html() ''' def _row_to_dict(ann): # Convert sqlite row object to dict # Convert timestamp to float # Translation table: sqlite field:Annotation xl = { 'genre': 'genre', 'hash': 'hash', 'highlight_color': 'highlightcolor', 'highlight_text': 'text', 'last_modification': 'timestamp', 'location': 'location', 'location_sort': 'location_sort', 'note_text': 'note', 'reader': 'reader_app' } ann_dict = {} for key in ann.keys(): new_key = xl[key] if key == 'last_modification' and ann[key] is not None: ann_dict[new_key] = float(ann[key]) elif key in ['note_text', 'highlight_text']: # Store text/notes as lists, split on line breaks if ann[key]: ann_dict[new_key] = ann[key].split('\n') else: ann_dict[new_key] = None else: ann_dict[new_key] = ann[key] return ann_dict # Create an Annotations object to hold the re-rendered annotations rerendered_annotations = Annotations(self.opts) annotations = self.get_transient_annotations(transient_table, book_id) for ann in annotations: ann = _row_to_dict(ann) this_annotation = Annotation(ann) rerendered_annotations.annotations.append(this_annotation) soup = rerendered_annotations.to_HTML( rerendered_annotations.create_soup()) return unicode(soup)
def annotations_to_html(self, annotations_db, book_mi): """ Return annotations in HTML format """ def _row_to_dict(ann): # Convert sqlite row object to dict # Convert timestamp to float # Translation table: sqlite field:Annotation xl = { 'last_modification': 'timestamp', 'highlight_color': 'highlightcolor', 'location': 'location', 'location_sort': 'location_sort', 'note_text': 'note', 'highlight_text': 'text' } ann_dict = {} for key in ann.keys(): new_key = xl[key] if key == 'last_modification' and ann[key] is not None: ann_dict[new_key] = float(ann[key]) elif key in ['note_text', 'highlight_text']: # Store text/notes as lists, split on line breaks if ann[key]: ann_dict[new_key] = ann[key].split('\n') else: ann_dict[new_key] = None else: ann_dict[new_key] = ann[key] return ann_dict # Create an Annotations object to hold annotations stored_annotations = Annotations(self.opts, title=book_mi['title']) annotations = self.get_annotations(annotations_db, book_mi[b'book_id']) for ann in annotations: ann = _row_to_dict(ann) ann['reader_app'] = book_mi['reader_app'] ann['genre'] = book_mi['genre'] this_annotation = Annotation(ann) stored_annotations.annotations.append(this_annotation) soup = stored_annotations.to_HTML() return soup