From f4e60856f44b6f4db8b858a2081ff9593cf61286 Mon Sep 17 00:00:00 2001 From: stweedo <108593831+stweedo@users.noreply.github.com> Date: Wed, 21 Jun 2023 10:57:46 -0500 Subject: [PATCH 01/16] Add example configs and bg image --- apps/boxclk/boxclk-1.json | 88 +++++++++++++++++++++++++++++++++++ apps/boxclk/boxclk-2.json | 85 +++++++++++++++++++++++++++++++++ apps/boxclk/boxclk.space.img | Bin 0 -> 30979 bytes 3 files changed, 173 insertions(+) create mode 100644 apps/boxclk/boxclk-1.json create mode 100644 apps/boxclk/boxclk-2.json create mode 100644 apps/boxclk/boxclk.space.img diff --git a/apps/boxclk/boxclk-1.json b/apps/boxclk/boxclk-1.json new file mode 100644 index 000000000..99e225f04 --- /dev/null +++ b/apps/boxclk/boxclk-1.json @@ -0,0 +1,88 @@ +{ + "time": { + "font": "6x8", + "fontSize": 3, + "outline": 2, + "color": "#0ff", + "outlineColor": "#00f", + "border": "#0f0", + "xPadding": -1, + "yPadding": -2.5, + "xOffset": 2, + "yOffset": 0, + "boxPos": { + "x": "0.33", + "y": "0.29" + } + }, + "meridian": { + "font": "6x8", + "fontSize": 2, + "outline": 1, + "color": "#FF9900", + "outlineColor": "fg", + "border": "#0ff", + "xPadding": -0.5, + "yPadding": -1.5, + "xOffset": 2, + "yOffset": 1, + "boxPos": { + "x": "0.34", + "y": "0.46" + }, + "short": false + }, + "dow": { + "font": "6x8", + "fontSize": 2, + "outline": 1, + "color": "#000", + "outlineColor": "#fff", + "border": "#0f0", + "xPadding": -0.5, + "yPadding": -0.5, + "xOffset": 1, + "yOffset": 1, + "boxPos": { + "x": "0.5", + "y": "0.82" + } + }, + "step": { + "font": "6x8", + "fontSize": 2, + "outline": 1, + "color": "#000", + "outlineColor": "#fff", + "border": "#0f0", + "xPadding": -0.5, + "yPadding": 0.5, + "xOffset": 1, + "yOffset": 1, + "boxPos": { + "x": "0.5", + "y": "0.71" + }, + "prefix": "Steps: " + }, + "batt": { + "font": "4x6", + "fontSize": 2, + "outline": 1, + "color": "#0ff", + "outlineColor": "#00f", + "border": "#0f0", + "xPadding": -0.5, + "yPadding": -0.5, + "xOffset": 1, + "yOffset": 1, + "boxPos": { + "x": "0.87", + "y": "0.87" + }, + "suffix": "%" + }, + "bg": { + "img": "boxclk.space.img" + } +} diff --git a/apps/boxclk/boxclk-2.json b/apps/boxclk/boxclk-2.json new file mode 100644 index 000000000..f2c390e52 --- /dev/null +++ b/apps/boxclk/boxclk-2.json @@ -0,0 +1,85 @@ +{ + "time": { + "font": "6x8", + "fontSize": 5, + "outline": 3, + "color": "bgH", + "outlineColor": "fg", + "border": "#f0f", + "xPadding": -2, + "yPadding": -4.5, + "xOffset": 3, + "yOffset": 0, + "boxPos": { + "x": "0.5", + "y": "0.33" + } + }, + "dow": { + "font": "6x8", + "fontSize": 3, + "outline": 1, + "color": "#5ccd73", + "outlineColor": "fg", + "border": "#f0f", + "xPadding": -1, + "yPadding": 0.5, + "xOffset": 2, + "yOffset": 0, + "boxPos": { + "x": "0.5", + "y": "0.57" + }, + "short": false + }, + "date": { + "font": "6x8", + "fontSize": 2, + "outline": 1, + "color": "#5ccd73", + "outlineColor": "fg", + "border": "#f0f", + "xPadding": -0.5, + "yPadding": 0.5, + "xOffset": 1, + "yOffset": 0, + "boxPos": { + "x": "0.5", + "y": "0.75" + } + }, + "step": { + "font": "4x6", + "fontSize": 3, + "outline": 2, + "color": "bgH", + "outlineColor": "fg", + "border": "#f0f", + "xPadding": -1, + "yPadding": 0.5, + "xOffset": 2, + "yOffset": 1, + "boxPos": { + "x": "0.5", + "y": "0.92" + }, + "prefix": "Steps: " + }, + "batt": { + "font": "4x6", + "fontSize": 3, + "outline": 2, + "color": "bgH", + "outlineColor": "fg", + "border": "#f0f", + "xPadding": -1, + "yPadding": -1, + "xOffset": 2, + "yOffset": 2, + "boxPos": { + "x": "0.85", + "y": "0.08" + }, + "suffix": "%" + } +} diff --git a/apps/boxclk/boxclk.space.img b/apps/boxclk/boxclk.space.img new file mode 100644 index 0000000000000000000000000000000000000000..1708b5c24248a388661783f446bd86f5a2e4f715 GIT binary patch literal 30979 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 Date: Wed, 21 Jun 2023 11:15:40 -0500 Subject: [PATCH 02/16] Update screenshots and README to show new examples --- apps/boxclk/README.md | 23 +++++++++++++++++++---- apps/boxclk/metadata.json | 3 ++- apps/boxclk/screenshot-1.png | Bin 5798 -> 6017 bytes apps/boxclk/screenshot-2.png | Bin 0 -> 3599 bytes 4 files changed, 21 insertions(+), 5 deletions(-) create mode 100644 apps/boxclk/screenshot-2.png diff --git a/apps/boxclk/README.md b/apps/boxclk/README.md index 1dc8ef98f..ca7b88779 100644 --- a/apps/boxclk/README.md +++ b/apps/boxclk/README.md @@ -51,9 +51,9 @@ __Breakdown of Parameters:__ * **Box Name:** The name of your text box. Box Clock includes functional support for "time", "date", "meridian" (AM/PM), "dow" (Day of Week), "batt" (Battery), and "step" (Step count). You can add additional custom boxes with unique titles. -* **string:** The text string to be displayed inside the box. +* **string:** The text string to be displayed inside the box. This is only required for custom Box Names. -* **font:** The font name given to g.setFont() +* **font:** The font name given to g.setFont(). * **fontSize:** The size of the font. @@ -83,9 +83,24 @@ __Breakdown of Parameters:__ ## Multiple Configurations -The app includes a settings menu that allows you to switch between different configurations. The selected configuration is stored in the default JSON file alongside the other configuration data using the selectedConfig property. +__Settings Menu:__ -If the selectedConfig property is not present or is set to 0, the app will use the default configuration. To create additional configurations, create separate JSON files with the naming convention boxclk-N.json, where N is the configuration number. The settings menu will list all available configurations. +The app includes a settings menu that allows you to switch between different configurations. The selected configuration is stored as a numner in the default `boxclk.josn` file using the selectedConfig property. + +If the selectedConfig property is not present or is set to 0, the app will use the default configuration. To create additional configurations, create separate JSON files with the naming convention `boxclk-N.json`, where `N` is the configuration number. The settings menu will list all available configurations. + +## Example Configs: + +To easily try out other configs, download and place the JSON configs and/or background images from below onto your Bangle.js storage. Then go to the Box Clock settings menu to select the new config number. You can also modify them to suit your personal preferences. + +### Space Theme: + +- **Config:** [boxclk-1.json](https://github.com/espruino/BangleApps/tree/master/apps/boxclk/boxclk-1.json) +- **Background:** boxclk.space.img ([Source](https://www.pixilart.com/art/fallin-from-outer-space-sr2e0c1a705749a)) + +### System Color Theme: + +- **Config:** [boxclk-2.json](https://github.com/espruino/BangleApps/tree/master/apps/boxclk/boxclk-2.json) ## Compatibility diff --git a/apps/boxclk/metadata.json b/apps/boxclk/metadata.json index 9b759def7..7ee6e1638 100644 --- a/apps/boxclk/metadata.json +++ b/apps/boxclk/metadata.json @@ -6,7 +6,8 @@ "icon": "app.png", "screenshots": [ {"url":"screenshot.png"}, - {"url":"screenshot-1.png"} + {"url":"screenshot-1.png"}, + {"url":"screenshot-2.png"} ], "type": "clock", "tags": "clock", diff --git a/apps/boxclk/screenshot-1.png b/apps/boxclk/screenshot-1.png index 18798bb30832743407fecba85c8d47431fd88260..c6e22d26297899f6f7d588db4559a71f85aacb1b 100644 GIT binary patch literal 6017 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 literal 5798 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 diff --git a/apps/boxclk/screenshot-2.png b/apps/boxclk/screenshot-2.png new file mode 100644 index 0000000000000000000000000000000000000000..6d49d82e3f3ec96543fb8af68d53fe389824a32a GIT binary patch literal 3599 zcmV+q4)F1bP)Px?$w@>(RCr$PU5j$#I1Fq5|D)4Mnuo1OB0y0O+t|68y=`QQ1R;o`9ryQkyWM{D zM+h7gfnO2$pqZ1~4+KPD5#i7Xh`@(VpPUzg#eqX3AOascef^yO{rxQ(&z<{g<6FG6 zdJH0P3%V!1Rs=qAa<35Do50&H>r<7h3S8>SZWTRa^MNTi*A{;%@DN zMPLwZ4GTv=1P+H(21g=LD;r8%eD&w7^C}@:_aPrm9@qDB>g#i3;o=%v7L+f53* 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 z Date: Wed, 21 Jun 2023 11:47:12 -0500 Subject: [PATCH 03/16] Update README.md - shorten width of text --- apps/boxclk/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/boxclk/README.md b/apps/boxclk/README.md index ca7b88779..a1ef41a33 100644 --- a/apps/boxclk/README.md +++ b/apps/boxclk/README.md @@ -37,8 +37,8 @@ Here's what an example configuration might look like: "boxPos": { "x": 0.5, "y": 0.5 }, "prefix": "", // Adds a string to the beginning of the main string "suffix": "", // Adds a string to the end of the main string - "disableSuffix": true, // Only used to remove the DayOfMonth suffix - "short": false // Gets long format value of time, meridian, date, or DoW + "disableSuffix": true, // Use to remove DayOfMonth suffix only + "short": false // Use long format of time, meridian, date, or DoW }, "bg": { // Can also be removed for no background From 810d6863e8c31c75a66a0999fd42921abf66e068 Mon Sep 17 00:00:00 2001 From: stweedo <108593831+stweedo@users.noreply.github.com> Date: Wed, 21 Jun 2023 12:05:35 -0500 Subject: [PATCH 04/16] Update README.md - Reduce size of example names --- apps/boxclk/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/boxclk/README.md b/apps/boxclk/README.md index a1ef41a33..5a767eb0c 100644 --- a/apps/boxclk/README.md +++ b/apps/boxclk/README.md @@ -93,12 +93,12 @@ If the selectedConfig property is not present or is set to 0, the app will use t To easily try out other configs, download and place the JSON configs and/or background images from below onto your Bangle.js storage. Then go to the Box Clock settings menu to select the new config number. You can also modify them to suit your personal preferences. -### Space Theme: +__Space Theme:__ - **Config:** [boxclk-1.json](https://github.com/espruino/BangleApps/tree/master/apps/boxclk/boxclk-1.json) - **Background:** boxclk.space.img ([Source](https://www.pixilart.com/art/fallin-from-outer-space-sr2e0c1a705749a)) -### System Color Theme: +__System Color Theme:__ - **Config:** [boxclk-2.json](https://github.com/espruino/BangleApps/tree/master/apps/boxclk/boxclk-2.json) From 8eec69937003713acc40409ba65ea6706f3e77c3 Mon Sep 17 00:00:00 2001 From: stweedo <108593831+stweedo@users.noreply.github.com> Date: Wed, 21 Jun 2023 12:15:07 -0500 Subject: [PATCH 05/16] Update README.md - Update links --- apps/boxclk/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/boxclk/README.md b/apps/boxclk/README.md index 5a767eb0c..8f5075dd0 100644 --- a/apps/boxclk/README.md +++ b/apps/boxclk/README.md @@ -96,7 +96,7 @@ To easily try out other configs, download and place the JSON configs and/or back __Space Theme:__ - **Config:** [boxclk-1.json](https://github.com/espruino/BangleApps/tree/master/apps/boxclk/boxclk-1.json) -- **Background:** boxclk.space.img ([Source](https://www.pixilart.com/art/fallin-from-outer-space-sr2e0c1a705749a)) +- **Background:** [boxclk.space.img](https://github.com/espruino/BangleApps/tree/master/apps/boxclk/boxclk.space.img) ([Original Source](https://www.pixilart.com/art/fallin-from-outer-space-sr2e0c1a705749a)) __System Color Theme:__ From ecb2013ac46f397fbded64fbde915a141e6f65fa Mon Sep 17 00:00:00 2001 From: stweedo Date: Wed, 21 Jun 2023 12:50:44 -0500 Subject: [PATCH 06/16] Show month short or long using "shortMonth" --- apps/boxclk/ChangeLog | 1 + apps/boxclk/README.md | 7 +++++-- apps/boxclk/app.js | 13 +++++++++---- apps/boxclk/metadata.json | 2 +- 4 files changed, 16 insertions(+), 7 deletions(-) diff --git a/apps/boxclk/ChangeLog b/apps/boxclk/ChangeLog index ba46af04e..f35b35819 100644 --- a/apps/boxclk/ChangeLog +++ b/apps/boxclk/ChangeLog @@ -1,2 +1,3 @@ 0.01: New App! 0.02: New config options such as step, meridian, short/long formats, custom prefix/suffix +0.03: Allows showing the month in short or long format by setting `"shortMonth"` to true or false diff --git a/apps/boxclk/README.md b/apps/boxclk/README.md index 8f5075dd0..0bb2cdede 100644 --- a/apps/boxclk/README.md +++ b/apps/boxclk/README.md @@ -39,6 +39,7 @@ Here's what an example configuration might look like: "suffix": "", // Adds a string to the end of the main string "disableSuffix": true, // Use to remove DayOfMonth suffix only "short": false // Use long format of time, meridian, date, or DoW + "shortMonth": false // Use long format of month within date }, "bg": { // Can also be removed for no background @@ -75,9 +76,11 @@ __Breakdown of Parameters:__ * **suffix:** Adds a string to the end of the main string. For example, you can set "suffix": "%" to display "80%" for the battery percentage. -* **disableSuffix:** Applies only to the "date" box. Set to true to disable the DayOfMonth suffix. This is used to remove the "st","nd","rd", or "th" from the DayOfMonth number +* **disableSuffix:** Applies only to the "date" box. Set to true to disable the DayOfMonth suffix. This is used to remove the "st","nd","rd", or "th" from the DayOfMonth number. -* **short:** Set to false to get the long format value of time, meridian, date, or DayOfWeek. Short formats are used by default, +* **short:** Set to false to get the long format value of time, meridian, date, or DayOfWeek. Short formats are used by default if not specified. + +* **shortMonth:** Set to false to get the long format value of the month. Short format is used by default if not specified. * **bg:** This specifies a custom background image, with the img property defining the name of the image file on the Bangle.js storage. diff --git a/apps/boxclk/app.js b/apps/boxclk/app.js index 41636e1ef..0b0ca8e65 100644 --- a/apps/boxclk/app.js +++ b/apps/boxclk/app.js @@ -171,10 +171,10 @@ return typeof val !== 'undefined' ? Boolean(val) : defaultVal; }; - let getDate = function(short, disableSuffix) { + let getDate = function(short, shortMonth, disableSuffix) { const date = new Date(); const dayOfMonth = date.getDate(); - const month = short ? locale.month(date, 0) : locale.month(date, 1); + const month = shortMonth ? locale.month(date, 1) : locale.month(date, 0); const year = date.getFullYear(); let suffix; if ([1, 21, 31].includes(dayOfMonth)) { @@ -228,7 +228,12 @@ boxes.meridian.string = modString(boxes.meridian, locale.meridian(date, isBool(boxes.meridian.short, true))); } if (boxes.date) { - boxes.date.string = modString(boxes.date, getDate(isBool(boxes.date.short, true), isBool(boxes.date.disableSuffix, false))); + boxes.date.string = ( + modString(boxes.date, + getDate(isBool(boxes.date.short, true), + isBool(boxes.date.shortMonth, true), + isBool(boxes.date.disableSuffix, false) + ))); } if (boxes.dow) { boxes.dow.string = modString(boxes.dow, getDayOfWeek(date, isBool(boxes.dow.short, true))); @@ -395,4 +400,4 @@ widgets.swipeOn(); modSetColor(); setup(); -} +} \ No newline at end of file diff --git a/apps/boxclk/metadata.json b/apps/boxclk/metadata.json index 7ee6e1638..6717b79d8 100644 --- a/apps/boxclk/metadata.json +++ b/apps/boxclk/metadata.json @@ -1,7 +1,7 @@ { "id": "boxclk", "name": "Box Clock", - "version": "0.02", + "version": "0.03", "description": "A customizable clock with configurable text boxes that can be positioned to show your favorite background", "icon": "app.png", "screenshots": [ From e9b56bde18adcc6b69a4543cf766a876863d9380 Mon Sep 17 00:00:00 2001 From: stweedo <108593831+stweedo@users.noreply.github.com> Date: Wed, 21 Jun 2023 12:55:49 -0500 Subject: [PATCH 07/16] Update README.md - missing comma in example --- apps/boxclk/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/boxclk/README.md b/apps/boxclk/README.md index 0bb2cdede..aa6331fe2 100644 --- a/apps/boxclk/README.md +++ b/apps/boxclk/README.md @@ -38,7 +38,7 @@ Here's what an example configuration might look like: "prefix": "", // Adds a string to the beginning of the main string "suffix": "", // Adds a string to the end of the main string "disableSuffix": true, // Use to remove DayOfMonth suffix only - "short": false // Use long format of time, meridian, date, or DoW + "short": false, // Use long format of time, meridian, date, or DoW "shortMonth": false // Use long format of month within date }, From b216ad91b1453673511cf1a67d18ff00ec0e3597 Mon Sep 17 00:00:00 2001 From: stweedo <108593831+stweedo@users.noreply.github.com> Date: Wed, 21 Jun 2023 13:16:03 -0500 Subject: [PATCH 08/16] Update boxclk-2.json - change month to long --- apps/boxclk/boxclk-2.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/boxclk/boxclk-2.json b/apps/boxclk/boxclk-2.json index f2c390e52..1c6e28781 100644 --- a/apps/boxclk/boxclk-2.json +++ b/apps/boxclk/boxclk-2.json @@ -46,7 +46,8 @@ "boxPos": { "x": "0.5", "y": "0.75" - } + }, + "shortMonth": false }, "step": { "font": "4x6", From 40b07ade32f050aef3d7b8fea51550c8144b1c05 Mon Sep 17 00:00:00 2001 From: stweedo <108593831+stweedo@users.noreply.github.com> Date: Wed, 21 Jun 2023 13:25:17 -0500 Subject: [PATCH 09/16] Update boxclk-2.json - disable DayOfMonth suffix --- apps/boxclk/boxclk-2.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/boxclk/boxclk-2.json b/apps/boxclk/boxclk-2.json index 1c6e28781..64b842f1c 100644 --- a/apps/boxclk/boxclk-2.json +++ b/apps/boxclk/boxclk-2.json @@ -47,7 +47,8 @@ "x": "0.5", "y": "0.75" }, - "shortMonth": false + "shortMonth": false, + "disableSuffix": true }, "step": { "font": "4x6", From b2fc4783880a240c0b19709ed58057ef5e27e305 Mon Sep 17 00:00:00 2001 From: stweedo <108593831+stweedo@users.noreply.github.com> Date: Wed, 21 Jun 2023 13:28:05 -0500 Subject: [PATCH 10/16] Update screenshot-2 --- apps/boxclk/screenshot-2.png | Bin 3599 -> 3456 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/apps/boxclk/screenshot-2.png b/apps/boxclk/screenshot-2.png index 6d49d82e3f3ec96543fb8af68d53fe389824a32a..b7a73d66ab5361e8aa9a828905ccf2e1b13fd2ff 100644 GIT binary patch literal 3456 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 delta 3584 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 Date: Wed, 21 Jun 2023 13:34:32 -0500 Subject: [PATCH 11/16] Update README.md --- apps/boxclk/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/boxclk/README.md b/apps/boxclk/README.md index aa6331fe2..07e847c16 100644 --- a/apps/boxclk/README.md +++ b/apps/boxclk/README.md @@ -80,7 +80,7 @@ __Breakdown of Parameters:__ * **short:** Set to false to get the long format value of time, meridian, date, or DayOfWeek. Short formats are used by default if not specified. -* **shortMonth:** Set to false to get the long format value of the month. Short format is used by default if not specified. +* **shortMonth:** Applies only to the "date" box. Set to false to get the long format value of the month. Short format is used by default if not specified. * **bg:** This specifies a custom background image, with the img property defining the name of the image file on the Bangle.js storage. @@ -88,7 +88,7 @@ __Breakdown of Parameters:__ __Settings Menu:__ -The app includes a settings menu that allows you to switch between different configurations. The selected configuration is stored as a numner in the default `boxclk.josn` file using the selectedConfig property. +The app includes a settings menu that allows you to switch between different configurations. The selected configuration is stored as a number in the default `boxclk.josn` file using the selectedConfig property. If the selectedConfig property is not present or is set to 0, the app will use the default configuration. To create additional configurations, create separate JSON files with the naming convention `boxclk-N.json`, where `N` is the configuration number. The settings menu will list all available configurations. From 633036efb23abe7faecb2bc6ad00cf8cee769ad1 Mon Sep 17 00:00:00 2001 From: stweedo <108593831+stweedo@users.noreply.github.com> Date: Wed, 21 Jun 2023 14:45:50 -0500 Subject: [PATCH 12/16] Update README.md --- apps/boxclk/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/boxclk/README.md b/apps/boxclk/README.md index 07e847c16..c72d932a4 100644 --- a/apps/boxclk/README.md +++ b/apps/boxclk/README.md @@ -18,7 +18,7 @@ Each box can be customized extensively via a simple JSON configuration. You can ## Config File Structure -Here's what an example configuration might look like: +Here's an example of what a configuration might contain: ``` { @@ -88,7 +88,7 @@ __Breakdown of Parameters:__ __Settings Menu:__ -The app includes a settings menu that allows you to switch between different configurations. The selected configuration is stored as a number in the default `boxclk.josn` file using the selectedConfig property. +The app includes a settings menu that allows you to switch between different configurations. The selected configuration is stored as a number in the default `boxclk.json` file using the selectedConfig property. If the selectedConfig property is not present or is set to 0, the app will use the default configuration. To create additional configurations, create separate JSON files with the naming convention `boxclk-N.json`, where `N` is the configuration number. The settings menu will list all available configurations. From 4922e135e3865a5817d1f9c57e0c305c4c553bcd Mon Sep 17 00:00:00 2001 From: stweedo Date: Thu, 22 Jun 2023 00:36:02 -0500 Subject: [PATCH 13/16] Add new custom font library module --- apps/boxclk/ChangeLog | 2 +- apps/boxclk/README.md | 4 +-- apps/boxclk/app.js | 35 ++++++----------------- apps/boxclk/boxclk-1.json | 18 ++++++------ apps/boxclk/lib.js | 53 +++++++++++++++++++++++++++++++++++ apps/boxclk/metadata.json | 2 ++ apps/boxclk/screenshot-1.png | Bin 6017 -> 5782 bytes 7 files changed, 76 insertions(+), 38 deletions(-) create mode 100644 apps/boxclk/lib.js diff --git a/apps/boxclk/ChangeLog b/apps/boxclk/ChangeLog index f35b35819..105c8384c 100644 --- a/apps/boxclk/ChangeLog +++ b/apps/boxclk/ChangeLog @@ -1,3 +1,3 @@ 0.01: New App! 0.02: New config options such as step, meridian, short/long formats, custom prefix/suffix -0.03: Allows showing the month in short or long format by setting `"shortMonth"` to true or false +0.03: New Font Library Module! Also allows short or long month. diff --git a/apps/boxclk/README.md b/apps/boxclk/README.md index c72d932a4..5baa9c439 100644 --- a/apps/boxclk/README.md +++ b/apps/boxclk/README.md @@ -24,7 +24,7 @@ Here's an example of what a configuration might contain: { "customBox": { "string": "Your text here", - "font": "CustomFont", // Custom fonts must be removed in setUI + "font": "CustomFont", // Add custom fonts to "boxclk.lib" "fontSize": 1, "outline": 2, "color": "#FF9900", // Use 6 or 3 digit hex color codes @@ -54,7 +54,7 @@ __Breakdown of Parameters:__ * **string:** The text string to be displayed inside the box. This is only required for custom Box Names. -* **font:** The font name given to g.setFont(). +* **font:** The font name given to g.setFont(). To use a custom font, use the Espruino Font Converter and add it to "boxclk.lib" next to the other custom fonts. Use the font name beginning after "setFont" in your JSON config. * **fontSize:** The size of the font. diff --git a/apps/boxclk/app.js b/apps/boxclk/app.js index 0b0ca8e65..1d7d6c590 100644 --- a/apps/boxclk/app.js +++ b/apps/boxclk/app.js @@ -7,6 +7,7 @@ let storage = require("Storage"); let locale = require("locale"); let widgets = require("widget_utils"); + let customFonts = require("boxclk.lib"); let date = new Date(); let bgImage; let configNumber = (storage.readJSON("boxclk.json", 1) || {}).selectedConfig || 0; @@ -46,24 +47,7 @@ /** * --------------------------------------------------------------- - * 4. Font loading function - * --------------------------------------------------------------- - */ - let loadCustomFont = function() { - Graphics.prototype.setFontBrunoAce = function() { - // Actual height 23 (24 - 2) - return this.setFontCustom( - E.toString(require('heatshrink').decompress(atob('ABMHwADBh4DKg4bKgIPDAYUfAYV/AYX/AQMD/gmC+ADBn/AByE/GIU8AYUwLxcfAYX/8AnB//4JIP/FgMP4F+CQQBBjwJBFYRbBAd43DHoJpBh/g/xPEK4ZfDgEEORKDDAY8////wADLfZrTCgITBnhEBAYJMBAYMPw4DCM4QDjhwDCjwDBn0+AYMf/gDBh/4AYMH+ADBLpc4ToK/NGYZfnAYcfL4U/x5fBW4LvB/7vC+LvBgHAsBfIn76Cn4WBcYQDFEgJ+CQQYDyH4L/BAZbHLNYjjCAZc8ngDunycBZ4KkBa4KwBnEHY4UB+BfMgf/ZgMH/4XBc4cf4F/gE+ZgRjwAYcfj5jBM4U4M4RQBM4UA8BjIngDFEYJ8BAYUDAYQvCM4ZxBC4V+AYQvBnkBQ4M8gabBJQPAI4WAAYM/GYQaBAYJKCnqyCn5OCn4aBAYIaBAYJPCU4IABnBhIuDXCFAMD+Z/BY4IDBQwOPwEfv6TDAYUPAcwrDAYQ7BAYY/BI4cD8bLCK4RfEAA0BRYTeDcwIrFn0Pw43Bg4DugYDBjxBBU4SvDMYMH/5QBgP/LAQAP8EHN4UPwADHB4YAHA'))), - 46, - atob("CBEdChgYGhgaGBsaCQ=="), - 32|65536 - ); - }; - }; - - /** - * --------------------------------------------------------------- - * 5. Initial settings of boxes and their positions + * 4. Initial settings of boxes and their positions * --------------------------------------------------------------- */ for (let key in boxesConfig) { @@ -88,7 +72,7 @@ /** * --------------------------------------------------------------- - * 6. Text and drawing functions + * 5. Text and drawing functions * --------------------------------------------------------------- */ @@ -164,7 +148,7 @@ /** * --------------------------------------------------------------- - * 7. String forming helper functions + * 6. String forming helper functions * --------------------------------------------------------------- */ let isBool = function(val, defaultVal) { @@ -208,7 +192,7 @@ /** * --------------------------------------------------------------- - * 8. Main draw function + * 7. Main draw function * --------------------------------------------------------------- */ let draw = (function() { @@ -269,7 +253,7 @@ /** * --------------------------------------------------------------- - * 9. Helper function for touch event + * 8. Helper function for touch event * --------------------------------------------------------------- */ let touchInText = function(e, boxItem, boxKey) { @@ -293,7 +277,7 @@ /** * --------------------------------------------------------------- - * 10. Setup function to configure event handlers + * 9. Setup function to configure event handlers * --------------------------------------------------------------- */ let setup = function() { @@ -380,20 +364,19 @@ Bangle.removeListener('drag', dragHandler); if (drawTimeout) clearTimeout(drawTimeout); drawTimeout = undefined; - delete Graphics.prototype.setFontBrunoAce; + unloadCustomBoxclkFonts(); // Remove custom fonts // Restore original drawString function (no outlines) g.drawString = g_drawString; restoreSetColor(); widgets.show(); } }); - loadCustomFont(); draw(boxes); }; /** * --------------------------------------------------------------- - * 11. Main execution part + * 10. Main execution part * --------------------------------------------------------------- */ Bangle.loadWidgets(); diff --git a/apps/boxclk/boxclk-1.json b/apps/boxclk/boxclk-1.json index 99e225f04..d4fe65b25 100644 --- a/apps/boxclk/boxclk-1.json +++ b/apps/boxclk/boxclk-1.json @@ -1,15 +1,15 @@ { "time": { - "font": "6x8", - "fontSize": 3, + "font": "Orbitron", + "fontSize": 1, "outline": 2, "color": "#0ff", "outlineColor": "#00f", "border": "#0f0", - "xPadding": -1, - "yPadding": -2.5, - "xOffset": 2, - "yOffset": 0, + "xPadding": 0, + "yPadding": -3.5, + "xOffset": 0, + "yOffset": 2, "boxPos": { "x": "0.33", "y": "0.29" @@ -35,7 +35,7 @@ "dow": { "font": "6x8", "fontSize": 2, - "outline": 1, + "outline": 2, "color": "#000", "outlineColor": "#fff", "border": "#0f0", @@ -45,13 +45,13 @@ "yOffset": 1, "boxPos": { "x": "0.5", - "y": "0.82" + "y": "0.83" } }, "step": { "font": "6x8", "fontSize": 2, - "outline": 1, + "outline": 2, "color": "#000", "outlineColor": "#fff", "border": "#0f0", diff --git a/apps/boxclk/lib.js b/apps/boxclk/lib.js new file mode 100644 index 000000000..fec5f95e8 --- /dev/null +++ b/apps/boxclk/lib.js @@ -0,0 +1,53 @@ +/************************************************* + * Name: boxclk.lib + * Type: Font Library + * Desc: Add your custom fonts for Box Clock below + *************************************************/ + +// Create an empty object for exporting module's functions +var exports={}; + +// Array to hold the names of the custom fonts +let fontNames = []; + +// Add custom fonts below. Each font is a function that's added to the Graphics.prototype +// Use the Espruino Font Converter tool to convert your font into the appropriate format +// Use the name beginning after "setFont", for example "BrunoAce" in your JSON config +// This module and the main app will automatically delete the custom fonts in setUI + +Graphics.prototype.setFontBrunoAce = function() { + // Actual height 23 (24 - 2) + return this.setFontCustom( + E.toString(require('heatshrink').decompress(atob('ABMHwADBh4DKg4bKgIPDAYUfAYV/AYX/AQMD/gmC+ADBn/AByE/GIU8AYUwLxcfAYX/8AnB//4JIP/FgMP4F+CQQBBjwJBFYRbBAd43DHoJpBh/g/xPEK4ZfDgEEORKDDAY8////wADLfZrTCgITBnhEBAYJMBAYMPw4DCM4QDjhwDCjwDBn0+AYMf/gDBh/4AYMH+ADBLpc4ToK/NGYZfnAYcfL4U/x5fBW4LvB/7vC+LvBgHAsBfIn76Cn4WBcYQDFEgJ+CQQYDyH4L/BAZbHLNYjjCAZc8ngDunycBZ4KkBa4KwBnEHY4UB+BfMgf/ZgMH/4XBc4cf4F/gE+ZgRjwAYcfj5jBM4U4M4RQBM4UA8BjIngDFEYJ8BAYUDAYQvCM4ZxBC4V+AYQvBnkBQ4M8gabBJQPAI4WAAYM/GYQaBAYJKCnqyCn5OCn4aBAYIaBAYJPCU4IABnBhIuDXCFAMD+Z/BY4IDBQwOPwEfv6TDAYUPAcwrDAYQ7BAYY/BI4cD8bLCK4RfEAA0BRYTeDcwIrFn0Pw43Bg4DugYDBjxBBU4SvDMYMH/5QBgP/LAQAP8EHN4UPwADHB4YAHA'))), + 46, + atob("CBEdChgYGhgaGBsaCQ=="), + 32|65536 + ); +}; + +Graphics.prototype.setFontOrbitron = function() { + // Actual height 24 (25 - 2) + return this.setFontCustom( + E.toString(require('heatshrink').decompress(atob('AA3AAQMBAYwLDAA8DBYUHwADBjwLCngDCvADC+AWJh4OCDQYWGgPgDQsPGI0cMBUf///wE/AYPAAYc4BoIDCnoDCvIDC+IDBgPhAYMDAYfBAYMHwIDBh6HBnEeAYU8AYV4AYX4AYXwAYM58ADBnfAAYM/wADCI4RTDh4DBMhNAYIqeEQ40+XIx7HAYb/SV4MBC4M+gYDCg6fCg5vCAfxnBAYMf/wDBh/8SIYAJgRrDToOAS4KhBAYKpBf4IvChwD5n5jCj7TCh4DBdoK/BMo3wAQMBAYUDAY0HAYUPuB4CAYU8AYV4AYXwAYMB8ADBQIIDBRoIDBh4DCj8AAYKTBAYK7BJ4IDHFAIrCAZgAFO4I1BAYR/CAYK/7AZDABAYMHYYM4YZAAJb4RrBR4xn/gADDNYT0BKYL8BNYs4AfybHU4XAKwJbCXa8HQYQD+M42AYQK7FAA8H/BrC/0BNYQjDM/5rdMoMA4AdBAIwLCC44A='))), + 46, + atob("BxEbDRsaFxsaFRsbBw=="), + 32|65536 + ); +}; + +// Extract the names of the custom fonts added to the Graphics.prototype +for (let prop in Graphics.prototype) { + if (prop.startsWith('setFont')) { + fontNames.push(prop.slice(7)); // remove 'setFont' from the start + } +} + +// Function to remove the custom fonts from the Graphics.prototype +function unloadCustomBoxClkFonts() { + for (let i = 0; i < fontNames.length; i++) { + delete Graphics.prototype[fontNames[i]]; + } +} + +// Export the unload function +exports.unloadCustomBoxClkFonts = unloadCustomBoxClkFonts; \ No newline at end of file diff --git a/apps/boxclk/metadata.json b/apps/boxclk/metadata.json index 6717b79d8..2d2507e8d 100644 --- a/apps/boxclk/metadata.json +++ b/apps/boxclk/metadata.json @@ -12,11 +12,13 @@ "type": "clock", "tags": "clock", "supports": ["BANGLEJS2"], + "provides_modules" : ["boxclk.lib"], "readme": "README.md", "allow_emulator": true, "storage": [ {"name":"boxclk.app.js","url":"app.js"}, {"name":"boxclk.settings.js","url":"settings.js"}, + {"name":"boxclk.lib","url":"lib.js"}, {"name":"boxclk.img","url":"icon.js","evaluate":true}, {"name":"boxclk.beachhouse.img","url":"beachhouse.js","evaluate":true} ], diff --git a/apps/boxclk/screenshot-1.png b/apps/boxclk/screenshot-1.png index c6e22d26297899f6f7d588db4559a71f85aacb1b..25b911aa86557ed990215a0404cd9f7105c4cab9 100644 GIT binary patch literal 5782 zcmV;H7HR2;P)Py0P)S5VRCr$PUF({pDh%v>|A(Ia6j8v0R6+o|WqzDJGja(@Q5FI9-{dbk zfiLyIKN-LqzPDoQ$JYbPuO9vc0PNAtYGZkzj|Tt%w=zX*{XPSq-|F&Of=_yyGET(|59hA+{Oe<*W^~8;G{{_64N_(`p%e@Bgqv4w_WL z=1-~BH(nP39D){Iqrbhjf_P`#wEGx)%fC($_F?2XAa0F^)`h+M6962*69`WaUh7~_ z#+|^lC^M&wJO_$e?`|uZDCfpl+#9@`2Pyzgz_?iHW;!=4fH5-zS4OtRcdW z=fawYGDcp~RH$7~7&u)Z9iS~1_bFzg8|*2z&_V!jXU4U*Z)EBxf;isJ(*^M_fVhwl z`TcqyY{b_6f6Nmn&ngh$MO&^iamm=pKr(I3{k@IheX|y*L+a(uJDqcC)5khnD+UeR zc3XHf<8oS9VsOFta~L_-pp@TZYBDf!TU>4MYp*pl3z2Ftt?9g>B~#`ti+RGdct>qL z1H?f#B*zW2@s%RbvOw2H(Z9UFz%hA$Nq?;gCuq5BLTpgVHpG;PRIa>UrdqW1k@B2Y zW}Gz!%!`39_Zzo8&xJ#_`n_&e6gH%FlQ!d}Egx2vwJe8py{?^SYU7t_-~&oAOQ1Z@ zz%p;bh$OfYRPR|2MfozDQP#h}>74bDX5H<20Qndu4xP`-LTK;Vy7Hhz)C>Gl?@H^S z*6R|6z=0;s)U~zD)N&SMwCWt62iAenQW}V>4!q}TH-|!%Nxi|FD)uvVk7(IeL!|o5 zEStf^7O>>&-NUoTNml<&E(~`7fbpTGnpcYDtm_g}XV)_%})Fxc-o z3JkPHrOc4B72Kq|Gq#R_)3X(x;g{*gULswf=bIt+HuIVoc;l2g zWum3~G+8b)YYAcr^nI>pvyHe@l(Uh`h5)lRAAscG0jJtp893e1>nDH0ojf^+&U&ti zfoUe?m{$5b2UcsnKH#r1wZl$cKTt@sN4}oNyW{;rvG33X;E-LU4wFfs(=xHt-Wae- zd29AmooeM696IKtm<-xW`X>jwT(xd#!y!k(hbWo=Ov?ueY^WC2wqpgc)DPC~B`2Z= zPE@wx$&!(&H3`OE*$b(k=;`a(Ls<)(0bJL<5-3mxM%%$a#%pwRQqldWwJ@|I9P=0# z465!&Fb}XE*^OKR^K!)m;2gXt$VQd3YH7(nY?4#~VbI7=VqzKW))J`@O`ZTcQOq;3 z8o<7?K?05S`UDUo`Clnb!^HnLL7Xsdk$JqOI8VQ&4h*H#0NyHD;?!d&?%1C^+ z?>E6qE!?iP!@NUC;R}gal46 zjjDr(UOq_eOXJiXTnfG2f9$8#Mn8t+3rbCEvi2=gZEWl1fgQ<=&^4$`q{b@OV?Pq; zI2bi_omItM-PU7v{C2>L7Tc`#sEv6RLR!8TE*S?kDK(r9+<<7r3jB%x>#8e?D%Af$uq zZwKHsYaK+#2srjL09b3sIZKpx0T{eV!86TE`8WC7JRKZa1DwIAL^PC>8Mp?HDg#@Y zwz9lOZr``+vK_4qjDS?KVll7*y|n}F*=2Cj7jF|doBp%K;XJEh_jUXAt`WRtnarGZ7)-2m)!JCzo4 zqFrVZ5_=*lsdZI?gTs<6di_m z*~4}1)jlDNV;*>AA%b%{F)*VUJ%CFxpR`1Z4DHOolr0^>yQ?Td4J`&PfOUTp3$w72 z7`SsVuQ`a$3@3v)E$-BOHkyLv7X#<9c4y$MdDWr|1z~w##n%5&Rs}Ty0kB5dfc@^> z5|d;x@CXKW52&R<4D9tMH^3c1i+L3wm(05~a3>9nF|e#zrN@7)*Rd=M|E{!sdUfxVr=Y0s$a)Bbt^n43i2V@<}i zcH(m9{sse=03E@?Bl<{VwHTPBg*FE6!8EJQss|PWdonOKCniFYxxu(vG@_5oV4p06 zs{^JsW@O-6ij5l&n(*xH56q6X9XmOn%vyn&m+c1r)=In)*H0;^e2Ql!$OZyX@#W~@hV&LSJttbmu08D2iWRW%-R8s%H!N6#MC2u_C zdXx{FirD8UC?ysHn*as1?@Zblxw4V~+&or3VA+7y0G3$@ zG#?B}ubKvFHM~cClwsqhL1gOesNz5B-F*PMh}4@W1CIr7jLtX^hdl80UkM)~fU(z1 zrJMFrm;J7n%*!#cRF2ZXHm1cMsV|Q_NLqL(h=+ZR=(yAQ=7Gn~z*cCN%*!#cRE}qG z9Rt@vuQ-jCgkdOn&wz|$U=905o(}tW><=2WR`|8oFEwnbantFj%~FhH;Ow@TxPQvm z>Q4r4j}OuUs(oWyqJ%&?eM*^9!b0eU<{7%oy0^Eg_0o=A_TYFtBBH2vkqmpf&1wDYzP{SS28e~bttn9a~Zh4sZlb^9OfNAU9>$a7`R-} z-FL9GoqLsUW8nKZCFth2gCF(w&4JFSbyV7`k$(y~sY`-qA4_-tIF?8UXyvfsCj!cqhLx_@-xsXYzK16U=WX@=_pQ+YU|&PNqct7) zTNqf!yrnk(4sUu`=>XtwyKP}0#K0#ptl=!gxyiyM`M9u$ZI3{}+PWT4D%%)?3kLxA z82s!uF_2?>X<86p<+Wbe&eLAloe1K67R5vAeeHM=fOVi8$-sd+uWv7#iH!B+8!->SxD`0IcCN9oTIzKe^|9^}sE%9vcJ4VeV8s<~DwL_Q-=DcI>}(mNPE` zFb2xL%*$^dQ^)7&DVL7p!f1BaPVe3UMT5ZnM?IH$^sgZhyzGkrj5x&xa$TyeBP`*(^!$*+tJlzo_(6B`a1vDCmP^ZI$R+EUhk%cRuV%P{b-ff#kl z2(aTX?Le(Qv%u4`5Fv#ZejFyFV&DmYkKhe^21;S2swf7+KBvpjlv$4;mwDhpBot-C z1n|b`l1`rkDuV{E0%p&`80gz%#l^hZL)-YsXT@z+zvNkndB$LY!ob$H$za`Ko5{eD zdn&Ia!W^tDH5V@{3$cf*J}JDISBVTm@ws3!7~EXtivaA)yt>qvm67``*!al53&dXp z;O5DiG@zRdS_UpBho|MMt=t1&0AL;1`pN;EiRS@rG4MR!ck8)r66hJY+dx*sg$EwU zz+=It1*cSgA#AJ%9thwT2eg47UD(}aN{h{_Zi@%L0Kgb1C1&)#-s1FC*UtlA0AOmc z7^tNM9nQFZ4qq+#df*EIOoP{(VaxV>-M(7$^1v4YxHj~*9kuaKFnERWz3u!MfZrR) zw~l-P_^pvQjr)0HNsBu{`(tjG#TKPt>1Qn@hi2+u`cf@1(XTg1Ry=>hJ|%3@WHU zvDWUT<^p)L=OGMSI+~k#l4Ph|?-@*OAj|Pdlkq znAAQuJ{<$cR&Wh0t@0(nOU%o)k4l+yM1{utItE?<4lgj#En@EQktTBK=LKMu7zxaA z?$pqmX=IBM6I_AFU$+=1HaerFfN}uPPC$vVQG2agUIIF5U+bMwnoufu358uH#CZe} zOb@64oV;^O%V-P00R;=d(9{XAkxD@Xa5K#u!21Y8s08A5%HeS~98h}b=y8>9NA-NfB)r8s!h4x>zD``Hh z74Jw6M}g7?V0{(?wQB)bpaN-C%*|l5p2S45 zCZoTrrtRP7ECefT+_%iRiHVL|k`CHCnKq7T`7R91&1_VgqK?!K{I&?$8X&%+qwT*h zfG-Btju-W}HD0Knq&r#5xNZRUKD6xJo@KCnUUSUH_$)TBI+zDKejdJxT}EBpQgPu4@A78>7(liaz$l|?+XqZ`EFx&#tS3J>rJ6WpViy2MI=}t9zXX|{ zDUKc;-jo(#y~~et0KmNQH410g4-j*&SBT}xdg<@vj$R`JXOGO^HnGEPU}GH1cHp>x z*m~*>NNG{1P3zf4c~kz$`_IdOCuMH{KCZO@cz+p8c-A0&Lj#qCfjEBy?@8ljvibZy z7cEm$K0XmVTX`pdDeW6w@)uRE$4Sz(oW;pfSnX) ztaWLw7l3QpE*;1t8Mq2yg0Zvm1aB7Yp?P7Lfj4bi|Cr!G_r(d0Utr>Q0$5<+gp4yL zzW)-~P14FK!B$VTETF2?#3%s!ABSZ3HupQTdd zsz)*Ku0V>rdKJLera^r*nuGkBY;j?y4b;=hTLCH^&e4uD#BOAkr;IzQffHdYE%K=0 zkQ$hN1wsYD`Pl;v6PKEJEOTgK@s#rEeUn>-Uw^+=P`$R*1qOyRaI)e*CttF8AuZ~P zb3tkbzAxFRrQ;>oQ;B}{Ig5m6U#pK*x2(GkwoXK7#OVceP%z(#Dz(0kdbZC6{KUMpdTX zhPR#G?b$}ff*D}m*rS1gbJ{PpuYD+6sw_3j+LBc7u>baytyFK;b#JhR)K_SABuOCJ zH-Y0`T(-{uU@DM4P9CRqy%#34z-{YyoS$1{gbdyei#VG@LoJ_4fLk!SKiskrCHsL` z!?fkLc=B3H&o1#`&wiH z7z)TLgnK{>Uc6Py1J4r-ARCr$PUE8*-C=A^5{~vv3wTK2xNF@Z&ZuiTXX}N?@6h%P%@9*#L-{1T9 zdf=fR_)iD$2j8D$?_aD3UcW~8698~THE$WO2gY~+0B|o;^yVMa@b#s>eu?M<0KlJW zyw3LKvo-DCzkh#!|NZy(7x3?YpK^x(&GF0dX563x9l#kBW@A$){rmg(_g|of=D{i` zdA)UIt8)5kFvNm-2d~?&=8h;bME8eo&Dg;TcCpWhC}({@`vK9Xylp`lz_eDz-s<1& z&^t{_;q#|f>MuT50h~H5yT(4f_JVk0Tv~nZd(Xc?JsiWxYe3xFA66HRu1^7Q0#715 zJ9xc~Js5WZ)1u5w8F>v9t=|2tWU`!_WASM4emu|sFahtufF2NI&MLJnSvPu^_Rz9I zId$LH>8;q%?ZZ+*pzpqKcWRPabm^F~pb-Xnj1D=v|)P@EYMIa__zFDJ%wR-Oi z;t5Anl;77WWi0*$w^>TPh)ecQE66%Xc#M9YLI@bGjh@ z1`t;gqMWa{#%63?|HD0S%BTVZUbN&U6W5GQ8d7L$>GwW{kBwTO4r!-5X1d_eW{h>d zQXCq%Z(6uD<4RgsV{payYZ$rIpq$@xXfiQzU%&d`*Pm-@6oP6ntLd_#HB*))t8qe_ ze4w^o0pcVZ$Z^A>eYFVmEYPjJ7@uBY;2gX^rN7mL1GG{!As47c8*<1*OIJUyLoL?) zNP0;t3(lGY=9hs__dB;ekA*|A`aLHr4jbCK$r|yprcW!&R+K|~-qy}5wegQ>;2lai zN?<(CATlpuL>62G)mzlVkiL#))cH?v21h-#QFnQsKt6|wQ|0TT5Y{={mL8Odc7b2( zU2PrI`&`2i*iceTTU+Z)tw%9ttIqjxU>g`cseyjAf%jPLmQZLiX*77LVn0Inh?ea& zM9VLXvK3710ZX~w-95XXWR2hC!f*!w7;h@oyjowbdaf~b@f`DErE_%VrKjm;YT~G~ z5EnTTE{9OZH_t-U;Q<}U+Z2`0mN&HPQt&cNoV9XOBcst0gy|VgJWEdWAF$b@8`UYn zWPfBUFc1eZaGFlqeRm#izXMa(GDC}2NQ3Um*fs{HXDcGRU#A;?3c5fqH$(homN_x- z<{@*)L{IfJSgtc`4Pp)SW1bhIjhQLx(I`bjfKgjEKy&bfQ*FHrOn3Cg$)7ZnlY{7@ z=eih}XHto2wcjPMdh?9|f0L;LcJju7LK{8$^RmAO&KHJ#hb{o8=puKROaq;jiM8_P zfK`iIi>K;LE63!}IVZ(*(4Nwt9PA3!y0s0v90gyZ=mIb=A2hI`TG(2S7sOgUSh=U1 z$QqcaY{#1=Gec_{jH99#T0Pm*=evix7Ip);t$j66pbU(bgMm!e=;)y0>oIF#Xhk^Z zH7*!b!;fI@VBMn|r39AciVMIccu|neO6S$mntj+HX#&Ebk?+LBI@rA_s1PM@039fn znb-{ASlOU~#`}B$h>`fO7N!yU|2siU7`KW%UP7FQ->3sqDl>pTnd;T(Z~cD&6Q3(1 z_1(Vj1TVL6JJ$|J5aPnXS0*+C_}=ot%h*~z477zaEsU(pyuSwGyfJ~?M`8l-DyFUB zv&Ie^h?|amwXiT`&u!{7Xal1VYe1th!fd1cMV*D~4kb(D+v4>J5FduO| zC7m`HG?-}l(dRyUHS2)gV+RB0GZQ}n;>evi6b!$S&H-Kv6Duc*?!3+H4WRM)g3m%| z;Ed9!Hh9?OgI2!QPTRqyRNM8>e_Cz!Ye=!6w3Mc6-#XMLmX39*9Zb(GR~rHZv^~rV zFtG&=&rFMf7}CI+=9Rh?1t|s#Z5N>bIchI*o;i9)?x!>`5Pf(VxO1V&$%(Kt5z1MK zdo1KIhV-*PR=yIhO!vw97}#$*pR<=?qwVQ0FKJ|Y{pYTlfhfgV5M$u#_mEzK2w>lI zO23K0FJW|(_=V5C?D4gN+d$PXz7U4xu{%fK*0jA!70j;3EbDi2pn?YzpKBR&vfkN$nrW)JKGb2FtCt!NaoRzgt2 zVXO^FC;*t>d9y_ec6*}$b9rA!^M??Nin1r59E#ndH2?$uR#Zan>+uY%;fxiA`;Ui& z02$St-fCohb-g2hJ-#h*$gWZG38?Z28mg!>PR}1rRC6}88Ef8s)*WegPHUJFF zCgDbebw-m5UI6_dx#=vPrX1Rk<#hueMcjCU1fo}w0I4;uA z#5VBKH3>2@?+o2!n>z}jgWIBkXEAVNfu=Agyg-A>A>NzLz~2R8Cj(nYW{YdQOwdy% z%zdPx*3g{nBT@TmZe^I*$G}=e&v`zVfknSqHcOE1*BIU2K}`lW6n7!qWejXE`o>8o zG4PE&&@|15uJ(Z_UVK3wdKviQrb!H}F(UU|>rx-MQ0?wLmDdekOS5(t{j!XB8F&B# zW4B&9-sgN7cm@MYh(M`DW8U89m>pvnIG>ehfEP2b*nj>m2F?z^`q{|9SfSsO%7Ug- z24UbgFmQMr_3Iuv@C*boo?5eEK%H?bXnIUehyYF% zu3l(q&0hU{5(DqNw5{-}H#NRVMtr_fzqQZsVetll`DlbL(pG~?tN%L~*fPy(9=XHw zEFV6cxs6d!O1up0>OI>a;1_%b4ScR}4hH@P=B0iqZmPd9u`DOPl7Y9SK%R{lfR@j% zGO6{vFZ$5liL*o@p3cA}cpK4|;!e8j;_fRMIBy0>Ygzwu8}qi$L>PABzLbG$ZVA@F zc^Q}D!MgUvR*kM1+n5Pu;M}Zy&2G+D{@&i1^f7YZS%|svVNSo+Q3y01tT1pf^o=lD zmmFo-9AwE%U2o%F8GJnh&js(?{y*cuDH@FYsQ|_=Ihiw3TaBujS7Kr<9jAePOe@8U z0r}7vD^o#C7E~yx5a3@!_#9C+>s^fmm$-lls5Yv07ea&m(I$l*7VnwwB?kIfq5oA7bz>E z4)gl1wi}?6)lV!(TgaBrF_5=U zrP;LaZ-MuNpbh|Q%yn0Q+CUhqc>xA?Yv0}9ljF9ld$|L^t4&`~zYY973~XcGdV#&d zH*4w)0PxeMEewPh_|Rwrz`S`n+|9ECIBlpV0=~n-Zw@X30K8`8jja^}IkuN(J_%QH+UAoz1X?suFWX}fTgMh7Vveo}X0LDN$mU-pv zWBjZwZO6&n#jH(d?=AT(F#o%}`JZN%aUlL703##Y2Xb4et>)_vv7@>Kk-v2ESKM249!}Tb_HW;i7 zTn~;&%ipp}4?FwyOXm?-W++h!-kg$0Jinr_N_4TcaKXtY;E|~)Z@-E zXOG#y`^hyNz}7~mdj--6r~mz}pmIHJN<-Rw91_L;~X5IR$8TJKm+h6qzRj20s zY4yJ){lT3=N84u5J2Eg~)Y>r|!>Rz@-#9qa*&AKj(VIVti7-1_vy$ddtN)So6u>Pq z!o7s~A(uCdfhki+qp$|+VHA-NSB4?iC;dy2TZAz*=Bn$~m_NNc*)2PekB7Jz;1842Llz_Iw;&beid$4Q9P zG37nDk~}~eNs=xaU?@oX0Q||_1~J!0ZNa9s9|gEi7R`ww4FmA@$+}&jA{tDao;D|v zOEl<3&K>}7^^sT5xv6k2fN?JRgeKFca?1?`DTbbZ*8m->>l1*rGVxaPDFXnUnB&-~ zq2WTsIt{d0G9>Vpw=C+@@>x08fyY-ncObO1oL54Om`b;{2)(8O)cU;cJ}rMM{U|LQ z0AK=??Q7!+%yoF+(|~hRBVWUL-LT*nUf1ch7r@-u(gsvZW20>7WgL!O=_U~}gJ=Nc z+E3*}D?iu%R(W1OTn5R`ZBgYNTJGY||H?gdDME1hJ&WE-BWkPP7C@!OmQ&tVaWM^A z7{(d_(K*?Y3WcMcG|4(Af|C8Z+UBg(*RpO zzs^|N3_|Vm0N7GKvIcpCgrJQ^1U#3@E4tx6%Uw1M7S9n9)(?V71v( z-Q7NWi+(K!0WjTB%RfiF`*e4ZjIwW3xxWU{c6$di@ZFs~3S|A|#w`Np^+As6l%JVB zkFeA)B_;LNN0P%e@I3cagZy_{`8rcERb(x$#N^xZuitoaaOQ&tF!j4bdT2jIR=z;o9C=5k7h zgRI-*T1VXjz~vh;wcXnecfXO}OFdaRBb=3QOJ|2G;6%7J#>) z9=QjygK^n%uEp~UK3+<^0B(fQCmdW zztjJx5xeRV8~2bnK9JG~k$jwdn~+aXk7`naizH}Z)3&K=)7SVEh%!(^rC`AYzG*F|6lGOYMmH_ui?d@0M3RWV6(~tq|7mns6l+R@>-n&$OA$M z(5q_cElg$xF29Yy%lWNPT4@HmVNZKZ2lSV!=~?SLWvG0(bkx@IeMb*%-ar;^q(l>d z8Rc5#N8`ef2G+i>R$eRholI=&{HWCQwAW1VQl_Pvmib+h2ohOqT9}X_5{*y+41+fZ zTFAit78wx*M^8DMd^pH=CWt`>W&uoKB`)?jEqvzV7Ll@!d9CLNFA0mN)$rE@-bah)T?P^uDt48kePw6OE#gF zoslUMC+g^b=gH#o=cg?Lpeg!Lf;o|a6dj26KqCs#lm>)>Jz=y+2G+I_d5xT$9>c)7 zpyT!pP_$cV!W01rL=Syk@buJH?-qiDN%+ zYO!i&+Bynh?T;v1>w0VSQbkJZlxSMYPZoA$tUBYs=rkp0WwK-E(ZE~$wVEwG~Q zBTR}H+e$e{J=M^ecz#kwDi~f za{HQoTf<_@H>F*reMkFH0rN3htAl~d zN^9+lntpZZEb#93U*59yT0T182=Mx6NPBB7%v&?CPGSxKb4`eG@~js&=j~+KyL(2C zd4BGZ5juDSB}9bVV+H|k$?W=Y%Vwk;2VxK7+L<@|D2Rb)xcsf-`5r*Qjkoj#Fz%~2 zCF=nclxRAen_mFi{Pm`WJb;3=P6riUBzggC_t~4H=>aQv``q~gxX*uY?!_K>0lc^a v-s<~2@B+Bce{b%^9(Vz~xC7qm`#kVJO@Lm9u|#q=00000NkvXXu0mjfPc?#@ From a11792e31da0c0d2bd2b528d59c867fab956b91f Mon Sep 17 00:00:00 2001 From: stweedo Date: Thu, 22 Jun 2023 00:40:57 -0500 Subject: [PATCH 14/16] Update name --- apps/boxclk/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/boxclk/app.js b/apps/boxclk/app.js index 1d7d6c590..29c7a9594 100644 --- a/apps/boxclk/app.js +++ b/apps/boxclk/app.js @@ -364,7 +364,7 @@ Bangle.removeListener('drag', dragHandler); if (drawTimeout) clearTimeout(drawTimeout); drawTimeout = undefined; - unloadCustomBoxclkFonts(); // Remove custom fonts + unloadCustomBoxClkFonts(); // Remove custom fonts // Restore original drawString function (no outlines) g.drawString = g_drawString; restoreSetColor(); From 83981d4a6c07901426e108f30775300d743ccd92 Mon Sep 17 00:00:00 2001 From: stweedo Date: Thu, 22 Jun 2023 01:45:38 -0500 Subject: [PATCH 15/16] Revert "Update name" This reverts commit a11792e31da0c0d2bd2b528d59c867fab956b91f. --- apps/boxclk/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/boxclk/app.js b/apps/boxclk/app.js index 29c7a9594..1d7d6c590 100644 --- a/apps/boxclk/app.js +++ b/apps/boxclk/app.js @@ -364,7 +364,7 @@ Bangle.removeListener('drag', dragHandler); if (drawTimeout) clearTimeout(drawTimeout); drawTimeout = undefined; - unloadCustomBoxClkFonts(); // Remove custom fonts + unloadCustomBoxclkFonts(); // Remove custom fonts // Restore original drawString function (no outlines) g.drawString = g_drawString; restoreSetColor(); From e5e6b228103828fb29160b08a696b0e31a20c263 Mon Sep 17 00:00:00 2001 From: stweedo Date: Thu, 22 Jun 2023 01:47:02 -0500 Subject: [PATCH 16/16] Revert "Add new custom font library module" This reverts commit 4922e135e3865a5817d1f9c57e0c305c4c553bcd. --- apps/boxclk/ChangeLog | 2 +- apps/boxclk/README.md | 4 +-- apps/boxclk/app.js | 35 +++++++++++++++++------ apps/boxclk/boxclk-1.json | 18 ++++++------ apps/boxclk/lib.js | 53 ----------------------------------- apps/boxclk/metadata.json | 2 -- apps/boxclk/screenshot-1.png | Bin 5782 -> 6017 bytes 7 files changed, 38 insertions(+), 76 deletions(-) delete mode 100644 apps/boxclk/lib.js diff --git a/apps/boxclk/ChangeLog b/apps/boxclk/ChangeLog index 105c8384c..f35b35819 100644 --- a/apps/boxclk/ChangeLog +++ b/apps/boxclk/ChangeLog @@ -1,3 +1,3 @@ 0.01: New App! 0.02: New config options such as step, meridian, short/long formats, custom prefix/suffix -0.03: New Font Library Module! Also allows short or long month. +0.03: Allows showing the month in short or long format by setting `"shortMonth"` to true or false diff --git a/apps/boxclk/README.md b/apps/boxclk/README.md index 5baa9c439..c72d932a4 100644 --- a/apps/boxclk/README.md +++ b/apps/boxclk/README.md @@ -24,7 +24,7 @@ Here's an example of what a configuration might contain: { "customBox": { "string": "Your text here", - "font": "CustomFont", // Add custom fonts to "boxclk.lib" + "font": "CustomFont", // Custom fonts must be removed in setUI "fontSize": 1, "outline": 2, "color": "#FF9900", // Use 6 or 3 digit hex color codes @@ -54,7 +54,7 @@ __Breakdown of Parameters:__ * **string:** The text string to be displayed inside the box. This is only required for custom Box Names. -* **font:** The font name given to g.setFont(). To use a custom font, use the Espruino Font Converter and add it to "boxclk.lib" next to the other custom fonts. Use the font name beginning after "setFont" in your JSON config. +* **font:** The font name given to g.setFont(). * **fontSize:** The size of the font. diff --git a/apps/boxclk/app.js b/apps/boxclk/app.js index 1d7d6c590..0b0ca8e65 100644 --- a/apps/boxclk/app.js +++ b/apps/boxclk/app.js @@ -7,7 +7,6 @@ let storage = require("Storage"); let locale = require("locale"); let widgets = require("widget_utils"); - let customFonts = require("boxclk.lib"); let date = new Date(); let bgImage; let configNumber = (storage.readJSON("boxclk.json", 1) || {}).selectedConfig || 0; @@ -47,7 +46,24 @@ /** * --------------------------------------------------------------- - * 4. Initial settings of boxes and their positions + * 4. Font loading function + * --------------------------------------------------------------- + */ + let loadCustomFont = function() { + Graphics.prototype.setFontBrunoAce = function() { + // Actual height 23 (24 - 2) + return this.setFontCustom( + E.toString(require('heatshrink').decompress(atob('ABMHwADBh4DKg4bKgIPDAYUfAYV/AYX/AQMD/gmC+ADBn/AByE/GIU8AYUwLxcfAYX/8AnB//4JIP/FgMP4F+CQQBBjwJBFYRbBAd43DHoJpBh/g/xPEK4ZfDgEEORKDDAY8////wADLfZrTCgITBnhEBAYJMBAYMPw4DCM4QDjhwDCjwDBn0+AYMf/gDBh/4AYMH+ADBLpc4ToK/NGYZfnAYcfL4U/x5fBW4LvB/7vC+LvBgHAsBfIn76Cn4WBcYQDFEgJ+CQQYDyH4L/BAZbHLNYjjCAZc8ngDunycBZ4KkBa4KwBnEHY4UB+BfMgf/ZgMH/4XBc4cf4F/gE+ZgRjwAYcfj5jBM4U4M4RQBM4UA8BjIngDFEYJ8BAYUDAYQvCM4ZxBC4V+AYQvBnkBQ4M8gabBJQPAI4WAAYM/GYQaBAYJKCnqyCn5OCn4aBAYIaBAYJPCU4IABnBhIuDXCFAMD+Z/BY4IDBQwOPwEfv6TDAYUPAcwrDAYQ7BAYY/BI4cD8bLCK4RfEAA0BRYTeDcwIrFn0Pw43Bg4DugYDBjxBBU4SvDMYMH/5QBgP/LAQAP8EHN4UPwADHB4YAHA'))), + 46, + atob("CBEdChgYGhgaGBsaCQ=="), + 32|65536 + ); + }; + }; + + /** + * --------------------------------------------------------------- + * 5. Initial settings of boxes and their positions * --------------------------------------------------------------- */ for (let key in boxesConfig) { @@ -72,7 +88,7 @@ /** * --------------------------------------------------------------- - * 5. Text and drawing functions + * 6. Text and drawing functions * --------------------------------------------------------------- */ @@ -148,7 +164,7 @@ /** * --------------------------------------------------------------- - * 6. String forming helper functions + * 7. String forming helper functions * --------------------------------------------------------------- */ let isBool = function(val, defaultVal) { @@ -192,7 +208,7 @@ /** * --------------------------------------------------------------- - * 7. Main draw function + * 8. Main draw function * --------------------------------------------------------------- */ let draw = (function() { @@ -253,7 +269,7 @@ /** * --------------------------------------------------------------- - * 8. Helper function for touch event + * 9. Helper function for touch event * --------------------------------------------------------------- */ let touchInText = function(e, boxItem, boxKey) { @@ -277,7 +293,7 @@ /** * --------------------------------------------------------------- - * 9. Setup function to configure event handlers + * 10. Setup function to configure event handlers * --------------------------------------------------------------- */ let setup = function() { @@ -364,19 +380,20 @@ Bangle.removeListener('drag', dragHandler); if (drawTimeout) clearTimeout(drawTimeout); drawTimeout = undefined; - unloadCustomBoxclkFonts(); // Remove custom fonts + delete Graphics.prototype.setFontBrunoAce; // Restore original drawString function (no outlines) g.drawString = g_drawString; restoreSetColor(); widgets.show(); } }); + loadCustomFont(); draw(boxes); }; /** * --------------------------------------------------------------- - * 10. Main execution part + * 11. Main execution part * --------------------------------------------------------------- */ Bangle.loadWidgets(); diff --git a/apps/boxclk/boxclk-1.json b/apps/boxclk/boxclk-1.json index d4fe65b25..99e225f04 100644 --- a/apps/boxclk/boxclk-1.json +++ b/apps/boxclk/boxclk-1.json @@ -1,15 +1,15 @@ { "time": { - "font": "Orbitron", - "fontSize": 1, + "font": "6x8", + "fontSize": 3, "outline": 2, "color": "#0ff", "outlineColor": "#00f", "border": "#0f0", - "xPadding": 0, - "yPadding": -3.5, - "xOffset": 0, - "yOffset": 2, + "xPadding": -1, + "yPadding": -2.5, + "xOffset": 2, + "yOffset": 0, "boxPos": { "x": "0.33", "y": "0.29" @@ -35,7 +35,7 @@ "dow": { "font": "6x8", "fontSize": 2, - "outline": 2, + "outline": 1, "color": "#000", "outlineColor": "#fff", "border": "#0f0", @@ -45,13 +45,13 @@ "yOffset": 1, "boxPos": { "x": "0.5", - "y": "0.83" + "y": "0.82" } }, "step": { "font": "6x8", "fontSize": 2, - "outline": 2, + "outline": 1, "color": "#000", "outlineColor": "#fff", "border": "#0f0", diff --git a/apps/boxclk/lib.js b/apps/boxclk/lib.js deleted file mode 100644 index fec5f95e8..000000000 --- a/apps/boxclk/lib.js +++ /dev/null @@ -1,53 +0,0 @@ -/************************************************* - * Name: boxclk.lib - * Type: Font Library - * Desc: Add your custom fonts for Box Clock below - *************************************************/ - -// Create an empty object for exporting module's functions -var exports={}; - -// Array to hold the names of the custom fonts -let fontNames = []; - -// Add custom fonts below. Each font is a function that's added to the Graphics.prototype -// Use the Espruino Font Converter tool to convert your font into the appropriate format -// Use the name beginning after "setFont", for example "BrunoAce" in your JSON config -// This module and the main app will automatically delete the custom fonts in setUI - -Graphics.prototype.setFontBrunoAce = function() { - // Actual height 23 (24 - 2) - return this.setFontCustom( - E.toString(require('heatshrink').decompress(atob('ABMHwADBh4DKg4bKgIPDAYUfAYV/AYX/AQMD/gmC+ADBn/AByE/GIU8AYUwLxcfAYX/8AnB//4JIP/FgMP4F+CQQBBjwJBFYRbBAd43DHoJpBh/g/xPEK4ZfDgEEORKDDAY8////wADLfZrTCgITBnhEBAYJMBAYMPw4DCM4QDjhwDCjwDBn0+AYMf/gDBh/4AYMH+ADBLpc4ToK/NGYZfnAYcfL4U/x5fBW4LvB/7vC+LvBgHAsBfIn76Cn4WBcYQDFEgJ+CQQYDyH4L/BAZbHLNYjjCAZc8ngDunycBZ4KkBa4KwBnEHY4UB+BfMgf/ZgMH/4XBc4cf4F/gE+ZgRjwAYcfj5jBM4U4M4RQBM4UA8BjIngDFEYJ8BAYUDAYQvCM4ZxBC4V+AYQvBnkBQ4M8gabBJQPAI4WAAYM/GYQaBAYJKCnqyCn5OCn4aBAYIaBAYJPCU4IABnBhIuDXCFAMD+Z/BY4IDBQwOPwEfv6TDAYUPAcwrDAYQ7BAYY/BI4cD8bLCK4RfEAA0BRYTeDcwIrFn0Pw43Bg4DugYDBjxBBU4SvDMYMH/5QBgP/LAQAP8EHN4UPwADHB4YAHA'))), - 46, - atob("CBEdChgYGhgaGBsaCQ=="), - 32|65536 - ); -}; - -Graphics.prototype.setFontOrbitron = function() { - // Actual height 24 (25 - 2) - return this.setFontCustom( - E.toString(require('heatshrink').decompress(atob('AA3AAQMBAYwLDAA8DBYUHwADBjwLCngDCvADC+AWJh4OCDQYWGgPgDQsPGI0cMBUf///wE/AYPAAYc4BoIDCnoDCvIDC+IDBgPhAYMDAYfBAYMHwIDBh6HBnEeAYU8AYV4AYX4AYXwAYM58ADBnfAAYM/wADCI4RTDh4DBMhNAYIqeEQ40+XIx7HAYb/SV4MBC4M+gYDCg6fCg5vCAfxnBAYMf/wDBh/8SIYAJgRrDToOAS4KhBAYKpBf4IvChwD5n5jCj7TCh4DBdoK/BMo3wAQMBAYUDAY0HAYUPuB4CAYU8AYV4AYXwAYMB8ADBQIIDBRoIDBh4DCj8AAYKTBAYK7BJ4IDHFAIrCAZgAFO4I1BAYR/CAYK/7AZDABAYMHYYM4YZAAJb4RrBR4xn/gADDNYT0BKYL8BNYs4AfybHU4XAKwJbCXa8HQYQD+M42AYQK7FAA8H/BrC/0BNYQjDM/5rdMoMA4AdBAIwLCC44A='))), - 46, - atob("BxEbDRsaFxsaFRsbBw=="), - 32|65536 - ); -}; - -// Extract the names of the custom fonts added to the Graphics.prototype -for (let prop in Graphics.prototype) { - if (prop.startsWith('setFont')) { - fontNames.push(prop.slice(7)); // remove 'setFont' from the start - } -} - -// Function to remove the custom fonts from the Graphics.prototype -function unloadCustomBoxClkFonts() { - for (let i = 0; i < fontNames.length; i++) { - delete Graphics.prototype[fontNames[i]]; - } -} - -// Export the unload function -exports.unloadCustomBoxClkFonts = unloadCustomBoxClkFonts; \ No newline at end of file diff --git a/apps/boxclk/metadata.json b/apps/boxclk/metadata.json index 2d2507e8d..6717b79d8 100644 --- a/apps/boxclk/metadata.json +++ b/apps/boxclk/metadata.json @@ -12,13 +12,11 @@ "type": "clock", "tags": "clock", "supports": ["BANGLEJS2"], - "provides_modules" : ["boxclk.lib"], "readme": "README.md", "allow_emulator": true, "storage": [ {"name":"boxclk.app.js","url":"app.js"}, {"name":"boxclk.settings.js","url":"settings.js"}, - {"name":"boxclk.lib","url":"lib.js"}, {"name":"boxclk.img","url":"icon.js","evaluate":true}, {"name":"boxclk.beachhouse.img","url":"beachhouse.js","evaluate":true} ], diff --git a/apps/boxclk/screenshot-1.png b/apps/boxclk/screenshot-1.png index 25b911aa86557ed990215a0404cd9f7105c4cab9..c6e22d26297899f6f7d588db4559a71f85aacb1b 100644 GIT binary patch literal 6017 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 literal 5782 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