Ejemplo n.º 1
0
	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
Ejemplo n.º 2
0
    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
Ejemplo n.º 3
0
    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
Ejemplo n.º 4
0
    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
Ejemplo n.º 5
0
    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
Ejemplo n.º 6
0
    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
Ejemplo n.º 7
0
    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)
Ejemplo n.º 8
0
    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)
Ejemplo n.º 9
0
    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
Ejemplo n.º 10
0
    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
Ejemplo n.º 11
0
    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
Ejemplo n.º 12
0
    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
Ejemplo n.º 13
0
    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)
Ejemplo n.º 14
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
Ejemplo n.º 16
0
    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