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()