Skip to content

Commit

Permalink
Initial Release
Browse files Browse the repository at this point in the history
  • Loading branch information
shbatm committed Feb 21, 2020
1 parent 6676f50 commit affc082
Show file tree
Hide file tree
Showing 12 changed files with 567 additions and 251 deletions.
9 changes: 4 additions & 5 deletions .devcontainer/ui-lovelace.yaml
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
resources:
- url: http://127.0.0.1:5000/boilerplate-card.js
- url: http://127.0.0.1:5000/mm2-clock-card.js
type: module
views:
- cards:
- type: custom:boilerplate-card
name: Boilerplate Card Development
entity: sun.sun
test_gui: true
- type: custom:mm2-clock-card
name: MM2 Clock Card
displayType: both
6 changes: 3 additions & 3 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ jobs:
# Build
- name: Build the file
run: |
cd /home/runner/work/boilerplate-card/boilerplate-card
cd /home/runner/work/mm2-clock-card/mm2-clock-card
npm install
npm run build
Expand All @@ -24,7 +24,7 @@ jobs:

with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: /home/runner/work/boilerplate-card/boilerplate-card/dist/boilerplate-card.js
asset_name: boilerplate-card.js
file: /home/runner/work/mm2-clock-card/mm2-clock-card/dist/mm2-clock-card.js
asset_name: mm2-clock-card.js
tag: ${{ github.ref }}
overwrite: true
137 changes: 24 additions & 113 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,119 +1,30 @@
# Boilerplate Card by [@iantrich](https://www.github.com/iantrich)
# MM2 Clock Card by [@shbatm](https://www.github.com/shbatm)

A community driven boilerplate of best practices for Home Assistant Lovelace custom cards
Digital/Analog Clock Card for Home Assistant Lovelace based on the [MagicMirror2](https://magicmirror.builders/) Clock

[![GitHub Release][releases-shield]][releases]
[![License][license-shield]](LICENSE.md)
[![hacs_badge](https://img.shields.io/badge/HACS-Default-orange.svg?style=for-the-badge)](https://github.com/custom-components/hacs)
This is a direct port of the [MagicMirror2 Clock](https://github.com/MichMich/MagicMirror/tree/master/modules/default/clock) to TypeScript and the Home Assistant card. Credit goes to the original contributers to that project and module.

![Project Maintenance][maintenance-shield]
[![GitHub Activity][commits-shield]][commits]

[![Discord][discord-shield]][discord]
[![Community Forum][forum-shield]][forum]

## Support

Hey dude! Help me out for a couple of :beers: or a :coffee:!

[![coffee](https://www.buymeacoffee.com/assets/img/custom_images/black_img.png)](https://www.buymeacoffee.com/zJtVxUAgH)
## Screenshot
![Screenshot](screenshot.gif)

## Options

| Name | Type | Requirement | Description | Default |
| ----------------- | ------- | ------------ | ------------------------------------------- | ------------------- |
| type | string | **Required** | `custom:boilerplate-card` |
| name | string | **Optional** | Card name | `Boilerplate` |
| show_error | boolean | **Optional** | Show what an error looks like for the card | `false` |
| show_warning | boolean | **Optional** | Show what a warning looks like for the card | `false` |
| entity | string | **Optional** | Home Assistant entity ID. | `none` |
| tap_action | object | **Optional** | Action to take on tap | `action: more-info` |
| hold_action | object | **Optional** | Action to take on hold | `none` |
| double_tap_action | object | **Optional** | Action to take on hold | `none` |

## Action Options

| Name | Type | Requirement | Description | Default |
| --------------- | ------ | ------------ | -------------------------------------------------------------------------------------------------------------------------------------- | ----------- |
| action | string | **Required** | Action to perform (more-info, toggle, call-service, navigate url, none) | `more-info` |
| navigation_path | string | **Optional** | Path to navigate to (e.g. /lovelace/0/) when action defined as navigate | `none` |
| url | string | **Optional** | URL to open on click when action is url. The URL will open in a new tab | `none` |
| service | string | **Optional** | Service to call (e.g. media_player.media_play_pause) when action defined as call-service | `none` |
| service_data | object | **Optional** | Service data to include (e.g. entity_id: media_player.bedroom) when action defined as call-service | `none` |
| haptic | string | **Optional** | Haptic feedback for the [Beta IOS App](http://home-assistant.io/ios/beta) _success, warning, failure, light, medium, heavy, selection_ | `none` |
| repeat | number | **Optional** | How often to repeat the `hold_action` in milliseconds. | `non` |

## Starting a new card from boilerplate-card

### Step 1

Clone this repository

### Step 2

Install necessary modules (verified to work in node 8.x)
`yarn install` or `npm install`


### Step 3

Do a test lint & build on the project. You can see available scripts in the package.json
`npm run build`

### Step 4

Search the repository for all instances of "TODO" and handle the changes/suggestions

### Step 5

Customize to suit your needs and contribute it back to the community


## Starting a new card from boilerplate-card with [devcontainer][devcontainer]

Note: this is available only in vscode ensure you have the [Remote Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) extension installed.

1. Fork and clone the repository.
2. Open a [devcontainer][devcontainer] terminal and run `npm start` when it's ready.
3. The compiled `.js` file will be accessible on
`http://127.0.0.1:5000/boilerplate-card.js`.
4. On a running Home Assistant installation add this to your Lovelace
`resources:`

```yaml
- url: "http://127.0.0.1:5000/boilerplate-card.js"
type: module
```
_Change "127.0.0.1" to the IP of your development machine._
### Bonus
If you need a fresh test instance you can install a fresh Home Assistant instance inside the devcontainer as well.
1. Run the command `dc start`.
2. Home Assistant will install and will eventually be running on port `9123`

## [Troubleshooting](https://github.com/thomasloven/hass-config/wiki/Lovelace-Plugins)
NB This will not work with node 9.x if you see the following errors try installing node 8.10.0
```yarn install
yarn install v1.3.2
[1/4] 🔍 Resolving packages...
warning [email protected]: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-commonjs.
[2/4] 🚚 Fetching packages...
error @typescript-eslint/[email protected]: The engine "node" is incompatible with this module. Expected version "^8.10.0 || ^10.13.0 || >=11.10.1".
error Found incompatible module
info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.
```

[commits-shield]: https://img.shields.io/github/commit-activity/y/custom-cards/boilerplate-card.svg?style=for-the-badge
[commits]: https://github.com/custom-cards/boilerplate-card/commits/master
[devcontainer]: https://code.visualstudio.com/docs/remote/containers
[discord]: https://discord.gg/5e9yvq
[discord-shield]: https://img.shields.io/discord/330944238910963714.svg?style=for-the-badge
[forum-shield]: https://img.shields.io/badge/community-forum-brightgreen.svg?style=for-the-badge
[forum]: https://community.home-assistant.io/c/projects/frontend
[license-shield]: https://img.shields.io/github/license/custom-cards/boilerplate-card.svg?style=for-the-badge
[maintenance-shield]: https://img.shields.io/maintenance/yes/2019.svg?style=for-the-badge
[releases-shield]: https://img.shields.io/github/release/custom-cards/boilerplate-card.svg?style=for-the-badge
[releases]: https://github.com/custom-cards/boilerplate-card/releases
The following properties can be configured:

| Option | Description
| ----------------- | -----------
| `timeFormat` | Use 12 or 24 hour format. <br><br> **Possible values:** `12` or `24` <br> **Default value:** uses value of _config.timeFormat_
| `displaySeconds` | Display seconds. <br><br> **Possible values:** `true` or `false` <br> **Default value:** `true`
| `showPeriod` | Show the period (am/pm) with 12 hour format. <br><br> **Possible values:** `true` or `false` <br> **Default value:** `true`
| `showPeriodUpper` | Show the period (AM/PM) with 12 hour format as uppercase. <br><br> **Possible values:** `true` or `false` <br> **Default value:** `false`
| `clockBold` | Remove the colon and bold the minutes to make a more modern look. <br><br> **Possible values:** `true` or `false` <br> **Default value:** `false`
| `showDate` | Turn off or on the Date section. <br><br> **Possible values:** `true` or `false` <br> **Default value:** `true`
| `showWeek` | Turn off or on the Week section. <br><br> **Possible values:** `true` or `false` <br> **Default value:** `false`
| `dateFormat` | Configure the date format as you like. <br><br> **Possible values:** [Docs](http://momentjs.com/docs/#/displaying/format/) <br> **Default value:** `"dddd, LL"`
| `displayType` | Display a digital clock, analog clock, or both together. <br><br> **Possible values:** `digital`, `analog`, or `both` <br> **Default value:** `digital`
| `analogSize` | **Specific to the analog clock.** Defines how large the analog display is. <br><br> **Possible values:** A positive number of pixels` <br> **Default value:** `200px`
| `analogFace` | **Specific to the analog clock.** Specifies which clock face to use. <br><br> **Possible values:** `simple` for a simple border, `none` for no face or border, or `face-###` (where ### is currently a value between 001 and 012, inclusive) <br> **Default value:** `simple`
| `secondsColor` | **Specific to the analog clock.** Specifies what color to make the 'seconds' hand. <br><br> **Possible values:** `any HTML RGB Color` <br> **Default value:** `#888888`
| `analogPlacement` | **Specific to the analog clock. _(requires displayType set to `'both'`)_** Specifies where the analog clock is in relation to the digital clock <br><br> **Possible values:** `top`, `right`, `bottom`, or `left` <br> **Default value:** `bottom`
| `analogShowDate` | **Specific to the analog clock.** If the clock is used as a separate module and set to analog only, this configures whether a date is also displayed with the clock. <br><br> **Possible values:** `false`, `top`, or `bottom` <br> **Default value:** `top`
| `timezone` | Specific a timezone to show clock. <br><br> **Possible examples values:** `America/New_York`, `America/Santiago`, `Etc/GMT+10` <br> **Default value:** `none`. See more informations about configuration value [here](https://momentjs.com/timezone/docs/#/data-formats/packed-format/)
4 changes: 2 additions & 2 deletions hacs.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"name": "Boilerplate Card",
"name": "MM2 Clock Card",
"render_readme": true,
"filename": "boilerplate-card.js"
"filename": "mm2-clock-card.js"
}
20 changes: 13 additions & 7 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,24 +1,27 @@
{
"name": "boilerplate-card",
"name": "MM2 Clock Card",
"version": "1.1.7",
"description": "Lovelace boilerplate-card",
"description": "Lovelace Clock Card (Ported from MagicMirror2)",
"keywords": [
"home-assistant",
"homeassistant",
"hass",
"automation",
"clock",
"lovelace",
"custom-cards"
],
"module": "boilerplate-card.js",
"repository": "[email protected]:custom_cards/boilerplate-card.git",
"author": "Ian Richardson <iantrich@gmail.com>",
"module": "mm2-clock-card.js",
"repository": "[email protected]:shbatm/mm2-clock-card.git",
"author": "shbatm (support@shbatm.com)",
"license": "MIT",
"dependencies": {
"custom-card-helpers": "^1.3.9",
"home-assistant-js-websocket": "^4.4.0",
"lit-element": "^2.2.1",
"lit-html": "^1.1.2"
"lit-html": "^1.1.2",
"moment": "^2.24.0",
"moment-timezone": "^0.5.27"
},
"devDependencies": {
"@babel/core": "^7.6.4",
Expand All @@ -32,11 +35,14 @@
"eslint-config-prettier": "^6.5.0",
"eslint-plugin-import": "^2.18.2",
"eslint-plugin-prettier": "^3.1.1",
"postcss-preset-env": "^6.7.0",
"prettier": "^1.18.2",
"rollup": "^1.26.0",
"rollup-plugin-babel": "^4.3.3",
"rollup-plugin-commonjs": "^10.1.0",
"rollup-plugin-node-resolve": "^5.2.0",
"rollup-plugin-postcss": "^2.0.6",
"rollup-plugin-postcss-lit": "^0.2.1",
"rollup-plugin-serve": "^1.0.1",
"rollup-plugin-terser": "^5.1.2",
"rollup-plugin-typescript2": "^0.24.3",
Expand All @@ -46,7 +52,7 @@
"scripts": {
"start": "rollup -c --watch",
"build": "npm run lint && npm run rollup",
"lint": "eslint src/*.ts",
"lint": "eslint src/*.ts --fix",
"rollup": "rollup -c"
}
}
12 changes: 10 additions & 2 deletions rollup.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,15 @@ const serveopts = {

const plugins = [
nodeResolve({}),
commonjs(),
commonjs(
{
include: [
'node_modules/rxjs/**',
'node_modules/moment/**',
'node_modules/moment-timezone/**'
]
}
),
typescript(),
json(),
babel({
Expand All @@ -32,7 +40,7 @@ const plugins = [

export default [
{
input: 'src/boilerplate-card.ts',
input: 'src/mm2-clock-card.ts',
output: {
dir: 'dist',
format: 'es',
Expand Down
Binary file added screenshot.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
107 changes: 0 additions & 107 deletions src/boilerplate-card.ts

This file was deleted.

Loading

0 comments on commit affc082

Please sign in to comment.