Beispiel #1
0
def test_block_media():
    block = Block(
        Comment("comment", False, False),
        Block(String("hello"), String("There!")),
    )
    block.append(Media("fizz"))
    assert block.has_properties() is False
    assert block.has_media() is True
Beispiel #2
0
def test_block_properties():
    block = Block(
        Comment("comment", False, False),
        Block(String("hello"), String("There!")),
    )
    block.append(Property(["foo", "bar"], Expression()))
    assert block.has_properties() is True
    assert block.has_media() is False
Beispiel #3
0
def test_block_append():
    block = Block(
        Comment("comment", False, False),
        Block(String("hello"), String("There!")),
    )
    block.append(Literal("Literal"))
    block.append(true)
    assert block.nodes == [Literal("Literal"), true]
    assert block.has_properties() is False
    assert block.has_media() is False
    assert block.is_empty() is False
Beispiel #4
0
    def visit_block(self, block: Block):  # noqa: C901
        if self.compress:
            separator = ""
        else:
            separator = "\n"

        if block.has_properties() and not block.lacks_rendered_selectors:

            last_property_index = 0
            if self.compress:
                for i, node in reversed(list(enumerate(block.nodes))):
                    if node.node_name == "property":
                        last_property_index = i
                        break

            needs_brackets = self.need_brackets(block.node)
            if needs_brackets:
                self.buf += self.out("{" if self.compress else " {\n")
                self.indents += 1

            for i, node in enumerate(block.nodes):
                self.last = last_property_index == i
                if node.node_name in [
                    "null",
                    "expression",
                    "function",
                    "group",
                    "block",
                    "unit",
                    "media",
                    "keyframes",
                    "atrule",
                    "supports",
                ]:
                    continue
                elif (
                    node.node_name == "comment"
                    and node.inline
                    and not self.compress
                ):
                    self.buf = self.buf[0:-1]
                    self.buf += self.out(f" {self.visit(node)}\n", node)
                elif node.node_name == "property":
                    ret = self.visit(node) + separator
                    self.buf += ret if self.compress else self.out(ret, node)
                else:
                    self.buf += self.out(self.visit(node) + separator, node)

            if needs_brackets:
                self.indents -= 1
                self.buf += self.out(self.indent() + "}" + separator)

        # nesting
        index = 0
        while index < len(block.nodes):
            node = block.nodes[index]
            if node.node_name in ["group", "block", "keyframes"]:
                if self.linenos:
                    self.debug_info(node)
                self.visit(node)
            elif node.node_name in ["media", "import", "atrule", "supports"]:
                self.visit(node)
            elif node.node_name == "comment":
                if not node.suppress:
                    self.buf += self.out(
                        self.indent() + self.visit(node) + "\n", node
                    )
            elif node.node_name in ["charset", "literal", "namespace"]:
                self.buf += self.out(self.visit(node) + "\n", node)
            index += 1