def handleMatch(self, m): # Copied from default "ImagePattern" el = etree.Element("img") src_parts = m.group(9).split() if src_parts: src = src_parts[0] if src[0] == "<" and src[-1] == ">": src = src[1:-1] el.set('src', self.unescape(src)) else: el.set('src', "") if len(src_parts) > 1: el.set('title', dequote(self.unescape(" ".join(src_parts[1:])))) # End of copy width = m.group(11) if width: el.set('width', width + 'px') height = m.group(12) if height: el.set('height', height + 'px') # Copied from default "ImagePattern" if self.markdown.enable_attributes: truealt = handleAttributes(m.group(2), el) else: truealt = m.group(2) el.set('alt', self.unescape(truealt)) return el
def handleMatch(self, m): el = util.etree.Element("a") el.text = m.group(2) title = m.group(13) href = m.group(9) if href: if href[0] == "<": href = href[1:-1] el.set("href", self.sanitize_url(self.unescape(href.strip()))) else: el.set("href", "") if bool(re.search('(\/\/)', href)): rel = "nofollow" target = "_blank" el.set("rel", rel) el.set("target", target) else: target = "_self" el.set("target", target) if title: title = dequote(self.unescape(title)) el.set("title", title) return el
def handleMatch(self, m): el = util.etree.Element("img") print("handle image tag ============") src_parts = m.group(9).split() if src_parts: src = src_parts[0] if src[0] == "<" and src[-1] == ">": src = src[1:-1] el.set('src', self.sanitize_url(self.unescape(src))) # michael.wu add +++ img_cfg = self.cfg.get("img") for k, v in img_cfg.items(): el.set(k, v) # michael.wu add --- else: el.set('src', "") if len(src_parts) > 1: el.set('title', dequote(self.unescape(" ".join(src_parts[1:])))) if self.markdown.enable_attributes: truealt = handleAttributes(m.group(2), el) else: truealt = m.group(2) el.set('alt', self.unescape(truealt)) return el
def handleMatch(self, m): div = util.etree.Element('div') div.set('class', 'image') img = util.etree.SubElement(div, 'img') src_parts = m.group(9).split() if src_parts: src = src_parts[0] if src[0] == "<" and src[-1] == ">": src = src[1:-1] img.set('src', self.sanitize_url(self.unescape(src))) else: img.set('src', "") if len(src_parts) > 1: img.set('title', dequote(self.unescape(" ".join(src_parts[1:])))) if self.markdown.enable_attributes: alt = handleAttributes(m.group(2), img) else: alt = m.group(2) if alt: description = util.etree.SubElement(div, 'div') description.set('class', 'description') description.text = alt return div
def handleMatch(self, m): # Copied from default "ImagePattern" el = etree.Element("img") src_parts = m.group(9).split() if src_parts: src = src_parts[0] if src[0] == "<" and src[-1] == ">": src = src[1:-1] el.set('src', self.unescape(src)) else: el.set('src', "") if len(src_parts) > 1: el.set('title', dequote(self.unescape(" ".join(src_parts[1:])))) # End of copy width = m.group(11) if width: el.set('width', width + 'px') height = m.group(12) if height: el.set('height', height + 'px') # Copied from default "ImagePattern" if self.markdown.enable_attributes: truealt = handleAttributes(m.group(2), el) else: truealt = m.group(2) el.set('alt', self.unescape(truealt)) return el
def as_image(self, m): """ Return an image element """ el = ElementTree.Element('img') src, parts = self.get_src(m) el.set('src', src) # Set the title if present. if len(parts) > 1: el.set('title', dequote(self.unescape(" ".join(parts[1:])))) # Set the attributes on the element, if enabled. # Set the 'alt' attribute with whatever is left from `handleAttributes`. attrs = self.markdown.enable_attributes alt_text = handleAttributes(m.group(2), el) if attrs else m.group(2) el.set('alt', self.unescape(alt_text)) return el
def handleMatch(self, m): """Handle the match.""" label = "" level_class = self.config.get('level_class', False) add_classes = [] alist = None if m.group(5): label = dequote(self.unescape(m.group('title').strip())) if m.group('attr_list'): alist = m.group('attr_list') if m.group('percent'): value = float(m.group(2)) else: try: num = float(m.group('frac_num')) except Exception: # pragma: no cover num = 0.0 try: den = float(m.group('frac_den')) except Exception: # pragma: no cover den = 0.0 if den == 0.0: value = 0.0 else: value = (num / den) * 100.0 # We can never get a value < 0, # but we must check for > 100. if value > 100.0: value = 100.0 if level_class: if value >= 100.0: add_classes.append(CLASS_100PLUS) elif value >= 80.0: add_classes.append(CLASS_80PLUS) elif value >= 60.0: add_classes.append(CLASS_60PLUS) elif value >= 40.0: add_classes.append(CLASS_40PLUS) elif value >= 20.0: add_classes.append(CLASS_20PLUS) else: add_classes.append(CLASS_0PLUS) return self.create_tag('%.2f' % value, label, add_classes, alist)
def handleMatch(self, m): """Handle the match.""" label = "" level_class = self.config.get('level_class', False) add_classes = [] alist = None if m.group(5): label = dequote(self.unescape(m.group('title').strip())) if m.group('attr_list'): alist = m.group('attr_list') if m.group('percent'): value = float(m.group(2)) else: try: num = float(m.group('frac_num')) except Exception: # pragma: no cover num = 0.0 try: den = float(m.group('frac_den')) except Exception: # pragma: no cover den = 0.0 if den == 0.0: value = 0.0 else: value = (num / den) * 100.0 # We can never get a value < 0, # but we must check for > 100. if value > 100.0: value = 100.0 if level_class: if value >= 100.0: add_classes.append(CLASS_100PLUS) elif value >= 80.0: add_classes.append(CLASS_80PLUS) elif value >= 60.0: add_classes.append(CLASS_60PLUS) elif value >= 40.0: add_classes.append(CLASS_40PLUS) elif value >= 20.0: add_classes.append(CLASS_20PLUS) else: add_classes.append(CLASS_0PLUS) return self.create_tag('%.2f' % value, label, add_classes, alist)
def as_pdf(self, m): """ Return a DOM element that embeds a PDF document using an embed. """ src, parts = self.get_src(m) wrapper = ElementTree.Element('aside') wrapper.set('class', 'pdf-embed-wrapper') el = ElementTree.SubElement(wrapper, 'embed') el.set('class', 'pdf-embed') el.set('src', src) el.set('width', '100%') el.set('type', 'application/pdf') el.set('height', '100%') # width * 1.4142 (aspect ratio of a4) el.set('pluginspage', 'http://www.adobe.com/products/acrobat/readstep2.html') if len(parts) > 1: el.set('alt', dequote(self.unescape(" ".join(parts[1:])))) return wrapper
def handleMatch(self, m): el = util.etree.Element("a") el.text = m.group(2) title = m.group(13) href = m.group(9) rel = "nofollow" el.set("rel", rel) if href: if href[0] == "<": href = href[1:-1] el.set("href", self.sanitize_url(self.unescape(href.strip()))) else: el.set("href", "") if title: title = dequote(self.unescape(title)) el.set("title", title) return el
def handleMatch(self, m): el = util.etree.Element("img") src_parts = m.group(2).split() if src_parts: src = src_parts[0] if src[0] == "<" and src[-1] == ">": src = src[1:-1] el.set("src", self.sanitize_url(self.unescape(src))) else: el.set("src", "") if len(src_parts) > 1: el.set("title", dequote(self.unescape(" ".join(src_parts[1:])))) if self.markdown.enable_attributes: truealt = handleAttributes(m.group(2), el) else: truealt = m.group(2) el.set("alt", self.unescape(truealt)) return el
def handleMatch(self, m): el = util.etree.Element("img") src_parts = m.group(2).split() if src_parts: src = src_parts[0] if src[0] == "<" and src[-1] == ">": src = src[1:-1] el.set('src', self.sanitize_url(self.unescape(src))) else: el.set('src', "") if len(src_parts) > 1: el.set('title', dequote(self.unescape(" ".join(src_parts[1:])))) if self.markdown.enable_attributes: truealt = handleAttributes(m.group(2), el) else: truealt = m.group(2) el.set('alt', self.unescape(truealt)) return el
def handleMatch(self, m, data): """Handle the match.""" label = "" level_class = self.config.get('level_class', False) increment = self.config.get('progress_increment', 20) add_classes = [] alist = None if m.group(5): label = dequote(self.unescape(m.group('title').strip())) if m.group('attr_list'): alist = m.group('attr_list') if m.group('percent'): value = float(m.group('percent')) else: try: num = float(m.group('frac_num')) except Exception: # pragma: no cover num = 0.0 try: den = float(m.group('frac_den')) except Exception: # pragma: no cover den = 0.0 if den == 0.0: value = 0.0 else: value = (num / den) * 100.0 # We can never get a value < 0, # but we must check for > 100. if value > 100.0: value = 100.0 # Round down to nearest increment step and include class if desired if level_class: add_classes.append(CLASS_LEVEL % int(value - (value % increment))) return self.create_tag('%.2f' % value, label, add_classes, alist), m.start(0), m.end(0)
def handleMatch(self, m): """Handle the match.""" label = "" level_class = self.config.get('level_class', False) increment = self.config.get('progress_increment', 20) add_classes = [] alist = None if m.group(5): label = dequote(self.unescape(m.group('title').strip())) if m.group('attr_list'): alist = m.group('attr_list') if m.group('percent'): value = float(m.group(2)) else: try: num = float(m.group('frac_num')) except Exception: # pragma: no cover num = 0.0 try: den = float(m.group('frac_den')) except Exception: # pragma: no cover den = 0.0 if den == 0.0: value = 0.0 else: value = (num / den) * 100.0 # We can never get a value < 0, # but we must check for > 100. if value > 100.0: value = 100.0 # Round down to nearest increment step and include class if desired if level_class: add_classes.append(CLASS_LEVEL % int(value - (value % increment))) return self.create_tag('%.2f' % value, label, add_classes, alist)
def handleMatch(self, m, data=None): # Mostly copied from (deprecated) default "ImagePattern" el = etree.Element("img") src_parts = m.group(9).split() if src_parts: src = src_parts[0] if src[0] == "<" and src[-1] == ">": src = src[1:-1] el.set('src', self.unescape(src)) else: el.set('src', "") if len(src_parts) > 1: el.set('title', dequote(self.unescape(" ".join(src_parts[1:])))) width = m.group(11) if width: el.set('width', width + 'px') height = m.group(12) if height: el.set('height', height + 'px') el.set('alt', self.unescape(m.group(2))) return el
def as_download(self, m): """ Create card layers used to make a download button. """ src, parts = self.get_src(m) # Returns a human readable string representation of bytes def _human_size(byte_number, units=(' bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB')): return str( byte_number) + units[0] if byte_number < 1024 else _human_size( byte_number >> 10, units[1:]) # Get information required for card. split_src = os.path.split(src) file_path = os.path.join(self.markdown.page_root, *split_src) file_size = os.path.getsize(file_path) file_basename = os.path.basename(file_path) card_text = dequote(self.unescape(" ".join( parts[1:]))) if len(parts) > 1 else '' # If its a pptx, extract the thumbnail previews. # NOTE: This works, but is is removed until we support other # file types, which for now is not a priority. # preview_uri = None # import zipfile # if (file_path.endswith('pptx')): # with zipfile.ZipFile(file_path) as zipper: # with zipper.open('docProps/thumbnail.jpeg', 'r') as fp: # mime = 'image/jpeg' # data64 = base64.b64encode(fp.read()).decode('utf-8') # preview_uri = u'data:%s;base64,%s' % (mime, data64) # Card and structure. card = ElementTree.Element("div") card.set('class', 'card download-card') header = ElementTree.SubElement(card, 'div') header.set('class', 'download-card-header') body = ElementTree.SubElement(card, 'div') body.set('class', 'download-card-body') # Add preview image. # if preview_uri: # img = ET.SubElement(header, 'img') # img.set('src', preview_uri) # Filename link heading. heading = ElementTree.SubElement(body, 'a') heading.set('class', 'download-card-title') heading.set('href', src) download_icon = ElementTree.SubElement(heading, 'i') download_icon.set('class', 'fa fa-download') download_text = ElementTree.SubElement(heading, 'span') download_text.text = file_basename # Title element from the "quote marks" part. body_desc = ElementTree.SubElement(body, 'span') body_desc.text = card_text # File size span at the bottom. body_size = ElementTree.SubElement(body, 'span') body_size.set('class', 'small text-muted') body_size.text = f'{_human_size(file_size)}' return card