Plain is headed towards 1.0! Subscribe for development updates →

 1import os
 2
 3import click
 4
 5from plain.cli import register_cli
 6from plain.runtime import APP_PATH
 7
 8from .core import Tailwind
 9
10
11@register_cli("tailwind")
12@click.group("tailwind")
13def cli():
14    """Tailwind CSS"""
15    pass
16
17
18@cli.command()
19@click.pass_context
20def init(ctx):
21    """Install Tailwind and create tailwind.css"""
22    tailwind = Tailwind()
23
24    if not tailwind.is_installed():
25        ctx.invoke(update)
26
27    if not tailwind.src_css_path.exists():
28        click.secho("Creating Tailwind source CSS...", bold=True)
29        tailwind.create_src_css()
30
31    # gitignore
32
33
34@cli.command()
35@click.option("--force", is_flag=True, help="Reinstall even if up to date")
36@click.pass_context
37def install(ctx, force):
38    tailwind = Tailwind()
39
40    if force or not tailwind.is_installed() or tailwind.needs_update():
41        version_to_install = tailwind.get_version_from_config()
42        if version_to_install:
43            click.secho(
44                f"Installing Tailwind standalone {version_to_install}...",
45                bold=True,
46                nl=False,
47            )
48            version = tailwind.install(version_to_install)
49            click.secho(f"Tailwind {version} installed", fg="green")
50        else:
51            ctx.invoke(update)
52    else:
53        click.secho("Tailwind already installed", fg="green")
54
55
56@cli.command()
57def update():
58    """Update the Tailwind CSS version"""
59    tailwind = Tailwind()
60    click.secho("Installing Tailwind standalone...", bold=True, nl=True)
61    version = tailwind.install()
62    click.secho(f"Tailwind {version} installed", fg="green")
63
64
65@cli.command()
66@click.option("--watch", is_flag=True)
67@click.option("--minify", is_flag=True)
68@click.pass_context
69def build(ctx, watch, minify):
70    """Compile a Tailwind CSS file"""
71    tailwind = Tailwind()
72
73    ctx.invoke(install)
74
75    tailwind.update_plain_sources()
76
77    args = []
78    args.append("-i")
79    args.append(tailwind.src_css_path)
80
81    args.append("-o")
82    args.append(tailwind.dist_css_path)
83
84    click.secho(
85        f"Compiling {os.path.relpath(tailwind.src_css_path)} to {os.path.relpath(tailwind.dist_css_path)}...",
86        bold=True,
87    )
88
89    if watch:
90        args.append("--watch")
91
92    if minify:
93        args.append("--minify")
94
95    tailwind.invoke(*args, cwd=os.path.dirname(APP_PATH))
96
97
98if __name__ == "__main__":
99    cli()