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
 98@cli.command()
 99def version():
100    """Show the installed Tailwind CSS version"""
101    tailwind = Tailwind()
102
103    if not tailwind.is_installed():
104        click.secho("Tailwind CSS is not installed", fg="red")
105        return
106
107    if installed_version := tailwind.get_installed_version():
108        click.echo(installed_version)
109    else:
110        click.secho("Could not determine Tailwind CSS version", fg="red")
111
112
113if __name__ == "__main__":
114    cli()