<div align="center">
  
  # crossword_puzzle

</div>

<div align="center">

  <a href="">![cross-main-pic](https://github.com/tomasvana10/crossword_puzzle/assets/124552709/370a11cb-540e-41c4-8917-5f5272da2ebd)</a>
  <a href="">![licence](https://img.shields.io/badge/licence-MIT-green?style=flat?logo=licence)</a>
  <a href="">[![PyPI version](https://img.shields.io/pypi/v/crossword_puzzle?style=flat-square)](https://pypi.org/project/crossword_puzzle/)</a>
  <a href="">[![Publish to PyPI.org](https://github.com/tomasvana10/crossword_puzzle/actions/workflows/publish.yml/badge.svg)](https://github.com/tomasvana10/crossword_puzzle/actions/workflows/publish.yml)</a>
  <a href="">[![release](https://img.shields.io/github/v/release/tomasvana10/crossword_puzzle?logo=github)](https://github.com/tomasvana10/crossword_puzzle/releases/latest)</a>
  <a href="">[![issues](https://img.shields.io/github/issues-raw/tomasvana10/crossword_puzzle.svg?maxAge=25000)](https://github.com/tomasvana10/crossword_puzzle/issues)</a>
  <a href="">[![CodeQL](https://github.com/tomasvana10/crossword_puzzle/actions/workflows/github-code-scanning/codeql/badge.svg)](https://github.com/tomasvana10/crossword_puzzle/actions/workflows/github-code-scanning/codeql)</a>
  <a href="">[![Tests](https://github.com/tomasvana10/crossword_puzzle/actions/workflows/tox-tests.yml/badge.svg)](https://github.com/tomasvana10/crossword_puzzle/actions/workflows/tox-tests.yml)</a>
  
</div>

An educational GUI package built with `CustomTkinter` that allows you to select, configure and generate a crossword to view, interact with and complete in a `Flask` web application.
- Download the latest source code: [click here](https://github.com/tomasvana10/crossword_puzzle/releases/latest)

## Dependencies
`Babel`
`customtkinter`
`Flask`
`flask_babel`
`Pillow`
`regex`

## Installation
> [!IMPORTANT]
> Installing `crossword_puzzle` requires Python and pip.
> If you have Python installed without pip, click **[here](https://pip.pypa.io/en/stable/installation/)** to install it.<br><br>
> If you do not have Python installed, download the installer **[here](https://www.python.org/downloads/)**, then refer to the previous link on how to install pip.

> [!TIP]
> If using `python` or `pip` doesn't work, try using `python3` or `pip3`.

- Make a virtual environment and activate it (recommended):
```
pip install virtualenv
python -m venv venv
MacOS/Unix: source venv/bin/activate
Windows: venv\scripts\activate
```
- Install the package in your system directory/virtual environment:
```
pip install -U crossword-puzzle
```
or, install the package in your home directory if you aren't using a virtual environment:
```
pip install --user -U crossword-puzzle
```
- Initialise the GUI through the entry point:
```
crossword-ctk
```
- You can deactivate your virtual environment when you are done:
```
deactivate
```

## Documentation
Check out the wiki **[here](https://github.com/tomasvana10/crossword_puzzle/wiki)** for information on usage, troubleshooting, FAQ, and more.

## Third-party library acknowledgements
- [Flask](https://flask.palletsprojects.com/en/3.0.x/) - Web framework for the crossword web application
- [Babel](https://babel.pocoo.org/en/latest/) - l10n functionality and management of message catalogues
- [flask-babel](https://python-babel.github.io/flask-babel/) - i18n integration for the Flask web application
- [CustomTkinter](https://github.com/TomSchimansky/CustomTkinter) - Creation of the main GUI
- [Google.Cloud.Translation.V2](https://cloud.google.com/dotnet/docs/reference/Google.Cloud.Translation.V2/latest) - Translation of locales 
- [Pillow](https://pillow.readthedocs.io/en/stable/) - Image processing services
- [regex](https://github.com/mrabarnett/mrab-regex) - Alternative to the standard `re` module, required for some functionality
- [Zoomooz.js](https://jaukia.github.io/zoomooz/) - jQuery library for making webpage elements zoomable
- [gulp.js](https://gulpjs.com/) - Toolkit to help automate the web app's JavaScript transpilation
- [Babel.js](https://babeljs.io/) - JavaScript transpiler
- [Terser](https://terser.org/) - JavaScript minifier

## Other acknowledgements
- [NYTimes Mini Crossword](https://www.nytimes.com/crosswords/game/mini) - Heavily inspired the design of the web application
- [CSS Pattern](https://css-pattern.com) - Background CSS patterns
- [Pure CSS Toggle Switch](https://codepen.io/morgoe/pen/VvzWQg) - Toggle switch CSS patterns
- [W3Schools](https://www.w3schools.com/js/js_cookies.asp) - Cookie getting/setting code
- Crossword completion sound effect (CC attribution):
  - Jazzy Chords by NenadSimic -- https://freesound.org/s/150879/ -- License: Creative Commons 0

## Gallery
<img alt="crossword puzzle home" src="https://github.com/tomasvana10/crossword_puzzle/assets/124552709/b7472342-5cfe-418b-bdf1-cd7ab0389ace">
<hr>
<img alt="crossword puzzle browser" src="https://github.com/tomasvana10/crossword_puzzle/assets/124552709/b3be1965-3847-45c8-99fd-b2ad284b46d9">
<hr>
<img alt="crossword puzzle game english" src="https://github.com/tomasvana10/crossword_puzzle/assets/124552709/40c74282-8981-4b90-a29e-b4787d3ea134">
<hr>
<img alt="crossword puzzle game japanese" src="https://github.com/tomasvana10/crossword_puzzle/assets/124552709/e892e74d-fa45-4866-8483-27b950cf152c">
