def mark_book_internal_links(self, html): book = IBook(self.context) book_url = book.absolute_url() book_path = '/'.join(book.getPhysicalPath()) context_url = self.context.absolute_url() doc = lxml.html.parse(StringIO(html)) for node in doc.xpath('//a'): if 'href' not in node.attrib: continue url = self.resolve_uid(node.attrib['href']) if url == context_url: continue path = url.replace(book_url, book_path) uid = self.get_uid_by_path(path) if uid is None: continue if 'class' in node.attrib: node.attrib['class'] += ' book-internal' else: node.attrib['class'] = 'book-internal' node.attrib['data-uid'] = uid return lxml.html.tostring(doc)
def get_latex_heading(context, layout, toc=None): title = layout.get_converter().convert(context.pretty_title_or_id()) # level: depth of rendering level = -1 max_level = len(HEADING_COMMANDS) - 1 obj = context while obj and not IBook.providedBy(obj) and level != max_level: obj = aq_parent(aq_inner(obj)) level += 1 if INavigationRoot.providedBy(obj): # cancel, use section level = 1 break command = HEADING_COMMANDS[level] hide_from_toc_field = context.Schema().getField('hideFromTOC') hide_from_toc = hide_from_toc_field and hide_from_toc_field.get(context) # generate latex tocmark = '' if toc is None and hide_from_toc is True or toc is False: tocmark = '*' latex = '\\%s%s{%s}\n' % (command, tocmark, title) return latex
def get_latex_heading(context, layout, toc=None): title = layout.get_converter().convert(context.pretty_title_or_id()) # level: depth of rendering level = -1 max_level = len(HEADING_COMMANDS) - 1 obj = context while obj and not IBook.providedBy(obj) and level != max_level: obj = aq_parent(aq_inner(obj)) level += 1 if INavigationRoot.providedBy(obj): # cancel, use section level = 1 break command = HEADING_COMMANDS[level] hide_from_toc_field = context.Schema().getField('hideFromTOC') hide_from_toc = hide_from_toc_field and hide_from_toc_field.get(context) # generate latex tocmark = '' if toc is None and hide_from_toc is True or toc is False: tocmark = '*' latex = '\\%s%s{%s}\n' % ( command, tocmark, title) return latex
def get_latex_heading(context, layout, toc=True): title = layout.get_converter().convert(context.pretty_title_or_id()) # level: depth of rendering level = -1 max_level = len(HEADING_COMMANDS) - 1 obj = context while obj and not IBook.providedBy(obj) and level != max_level: obj = aq_parent(aq_inner(obj)) level += 1 if INavigationRoot.providedBy(obj): # cancel, use section level = 1 break command = HEADING_COMMANDS[level] # generate latex tocmark = '' if not toc: tocmark = '*' latex = '\%s%s{%s}\n' % ( command, tocmark, title) return latex
def get_parent_book(self): context = self.context while context and not ISiteRoot.providedBy(context): if IBook.providedBy(context): return context context = aq_parent(aq_inner(context)) return None
def is_first_level_chapter(self,context): """Check if the context is Chapter in the first level of book """ #If the context is None or it is not a chpater if context == None or not IChapter.providedBy(context): return False par = aq_parent(aq_inner(context)) if par and IBook.providedBy(par): return True return False
def _get_hierarchy_titles(self, obj): """ Get all titles in the hierarchy in a list: ['first', 'second'] """ titles = [] parent = obj while not IPloneSiteRoot.providedBy(parent): titles.insert(0, parent.Title()) if IBook.providedBy(parent): break else: parent = aq_parent(aq_inner(parent)) return titles
def get_book(self): obj = self.context while obj is not None: if IBook.providedBy(obj): return obj elif IPloneSiteRoot.providedBy(obj): return None else: obj = aq_parent(aq_inner(obj)) return None
def get_book_obj(self): obj = self.context while obj is not None: if IBook.providedBy(obj): return obj elif IPloneSiteRoot.providedBy(obj): raise Exception('Could not find book.') else: obj = aq_parent(aq_inner(obj)) raise Exception('Could not find book.')
def get_chapter_level(self, obj): """ Return the chapterlevel in a list of int """ chapter_level = [] parent = obj while not IPloneSiteRoot.providedBy(parent): if IBook.providedBy(parent): break else: chapter_level.insert( 0, self._get_filtered_folder_position(parent)) parent = aq_parent(aq_inner(parent)) return chapter_level
def get_book(self): obj = self.context while obj and not IBook.providedBy(obj): obj = aq_parent(aq_inner(obj)) return obj
def test_on_file(self): chapter = create(Builder('chapter').within(self.book)) block = create(Builder('file').within(chapter)) self.assertEquals(self.book, IBook(block))
def test_on_text_block(self): chapter = create(Builder('chapter').within(self.book)) block = create(Builder('book textblock').within(chapter)) self.assertEquals(self.book, IBook(block))
def test_on_chapter(self): chapter = create(Builder('chapter').within(self.book)) self.assertEquals(self.book, IBook(chapter))
def test_on_book(self): self.assertEquals(self.book, IBook(self.book))