From 53d4e1d6e527b8d900967f1b0285bcb9e36bdf07 Mon Sep 17 00:00:00 2001 From: vantezzen Date: Sat, 28 Sep 2019 12:59:31 +0200 Subject: Add packaging script --- .gitignore | 4 +- README.md | 11 +- all.json | 511 +++++++++++++++++++------------- scripts/package.js | 101 +++++++ scripts/package.json | 16 + scripts/recipe_src/readme.txt | 2 + scripts/yarn.lock | 199 +++++++++++++ standardnotes.tar.gz | Bin 0 -> 12470 bytes uncompressed/standardnotes/LICENSE | 21 ++ uncompressed/standardnotes/README.md | 2 + uncompressed/standardnotes/darkmode.css | 429 +++++++++++++++++++++++++++ uncompressed/standardnotes/icon.png | Bin 0 -> 14811 bytes uncompressed/standardnotes/icon.svg | 18 ++ uncompressed/standardnotes/index.js | 4 + uncompressed/standardnotes/package.json | 13 + uncompressed/standardnotes/webview.js | 2 + 16 files changed, 1117 insertions(+), 216 deletions(-) create mode 100644 scripts/package.js create mode 100644 scripts/package.json create mode 100644 scripts/recipe_src/readme.txt create mode 100644 scripts/yarn.lock create mode 100644 standardnotes.tar.gz create mode 100755 uncompressed/standardnotes/LICENSE create mode 100755 uncompressed/standardnotes/README.md create mode 100755 uncompressed/standardnotes/darkmode.css create mode 100755 uncompressed/standardnotes/icon.png create mode 100755 uncompressed/standardnotes/icon.svg create mode 100755 uncompressed/standardnotes/index.js create mode 100755 uncompressed/standardnotes/package.json create mode 100755 uncompressed/standardnotes/webview.js diff --git a/.gitignore b/.gitignore index d3c4f00..2e0b495 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ .DS_Store -scripts \ No newline at end of file +scripts/node_modules +scripts/recipe_src/* +!scripts/recipe_src/readme.txt \ No newline at end of file diff --git a/README.md b/README.md index 245bab0..cb8c713 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,13 @@ # recipes Recipes for Ferdi. -Copyright on these recipes is on their original creators. \ No newline at end of file +Copyright on these recipes is on their original creators. + +## Adding your own recipes +After creating your own recipe using [Franz's guide](https://github.com/meetfranz/plugins/blob/master/docs/integration.md) you can add them to this repository. + +1. Copy your recipe files into `scripts/recipe_src` +2. Open a terminal at `scripts/` +3. Run `yarn install` to install all dependencies +4. Run `yarn package` to package your new recipe +5. Create a PR to with your new changes \ No newline at end of file diff --git a/all.json b/all.json index 8a01311..6b163dc 100644 --- a/all.json +++ b/all.json @@ -1,711 +1,794 @@ -[{ +[ + { "author": "Daniel Weinberger", "featured": false, "id": "android-messages", "name": "Android Messages", "version": "1.2.0", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/android-messages/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/android-messages/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/android-messages/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/android-messages/src/icon.svg" } -}, { + }, + { "author": "Koma", "featured": false, "id": "chatwork", "name": "chatwork", "version": "1.0.3", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/chatwork/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/chatwork/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/chatwork/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/chatwork/src/icon.svg" } -}, { + }, + { "author": "Stefan Malzner ", "featured": false, "id": "ciscospark", "name": "Cisco Spark", "version": "1.0.0", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/ciscospark/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/ciscospark/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/ciscospark/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/ciscospark/src/icon.svg" } -}, { + }, + { "author": "Stefan Malzner ", "featured": false, "id": "franz-custom-website", "name": "Custom Website", "version": "1.0.0", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/franz-custom-website/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/franz-custom-website/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/franz-custom-website/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/franz-custom-website/src/icon.svg" } -}, { + }, + { "author": "Stefan Malzner ", "featured": false, "id": "discord", "name": "Discord", "version": "1.0.3", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/discord/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/discord/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/discord/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/discord/src/icon.svg" } -}, { + }, + { "author": "Stefan Malzner ", "featured": false, "id": "facebookpages", "name": "Facebook Pages", "version": "1.1.0", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/facebookpages/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/facebookpages/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/facebookpages/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/facebookpages/src/icon.svg" } -}, { + }, + { "author": "Alan Plum ", "featured": false, "id": "fastmail", "name": "FastMail", "version": "1.0.0", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/fastmail/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/fastmail/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/fastmail/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/fastmail/src/icon.svg" } -}, { + }, + { "author": "Stefan Malzner ", "featured": false, "id": "flowdock", "name": "Flowdock", "version": "1.0.0", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/flowdock/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/flowdock/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/flowdock/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/flowdock/src/icon.svg" } -}, { + }, + { "author": "Wojciech Zięciak ", "featured": false, "id": "gadugadu", "name": "Gadu-Gadu", "version": "1.0.2", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/gadugadu/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/gadugadu/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/gadugadu/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/gadugadu/src/icon.svg" } -}, { + }, + { "author": "Sudhir Ganesan", "featured": false, "id": "github", "name": "GitHub", "version": "1.0.1", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/github/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/github/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/github/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/github/src/icon.svg" } -}, { + }, + { "author": "Brian Gilbert ", "featured": false, "id": "gitter", "name": "Gitter", "version": "1.0.2", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/gitter/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/gitter/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/gitter/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/gitter/src/icon.svg" } -}, { + }, + { "author": "Jonathan Juursema ", "featured": false, "id": "glowingbear", "name": "Glowing Bear", "version": "1.0.0", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/glowingbear/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/glowingbear/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/glowingbear/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/glowingbear/src/icon.svg" } -}, { + }, + { "author": "Stefan Malzner ", "featured": false, "id": "gmail", "name": "Gmail", "version": "1.1.1", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/gmail/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/gmail/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/gmail/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/gmail/src/icon.svg" } -}, { + }, + { "author": "SiloCityLabs LLC", "featured": false, "id": "googleallo", "name": "Google Allo", "version": "1.0.0", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/googleallo/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/googleallo/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/googleallo/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/googleallo/src/icon.svg" } -}, { + }, + { "author": "Rico Herwig ", "featured": false, "id": "googlecalendar", "name": "Google Calendar", "version": "1.0.0", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/googlecalendar/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/googlecalendar/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/googlecalendar/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/googlecalendar/src/icon.svg" } -}, { + }, + { "author": "SiloCityLabs LLC", "featured": false, "id": "googlekeep", "name": "Google Keep", "version": "1.0.0", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/googlekeep/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/googlekeep/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/googlekeep/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/googlekeep/src/icon.svg" } -}, { + }, + { "author": "Behind The Math ", "featured": false, "id": "ex-google-voice", "name": "Google Voice", "version": "0.3.2", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/ex-google-voice/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/ex-google-voice/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/ex-google-voice/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/ex-google-voice/src/icon.svg" } -}, { + }, + { "author": "Stefan Malzner ", "featured": false, "id": "grape", "name": "Grape", "version": "1.0.0", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/grape/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/grape/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/grape/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/grape/src/icon.svg" } -}, { + }, + { "author": "Stefan Malzner ", "featured": false, "id": "groupme", "name": "GroupMe", "version": "1.0.0", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/groupme/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/groupme/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/groupme/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/groupme/src/icon.svg" } -}, { + }, + { "author": "Stefan Malzner ", "featured": false, "id": "hangouts", "name": "Hangouts", "version": "1.0.0", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/hangouts/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/hangouts/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/hangouts/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/hangouts/src/icon.svg" } -}, { + }, + { "author": "Stefan Malzner ", "featured": false, "id": "hangoutschat", "name": "Hangouts Chat", "version": "1.0.0", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/hangoutschat/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/hangoutschat/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/hangoutschat/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/hangoutschat/src/icon.svg" } -}, { + }, + { "author": "Stefan Malzner ", "featured": false, "id": "hipchat", "name": "HipChat", "version": "1.0.1", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/hipchat/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/hipchat/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/hipchat/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/hipchat/src/icon.svg" } -}, { + }, + { "author": "Stefan Malzner ", "featured": false, "id": "icq", "name": "ICQ", "version": "1.0.1", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/icq/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/icq/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/icq/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/icq/src/icon.svg" } -}, { + }, + { "author": "", "featured": false, "id": "idobata", "name": "Idobata", "version": "0.1.0", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/idobata/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/idobata/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/idobata/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/idobata/src/icon.svg" } -}, { + }, + { "author": "Stefan Malzner ", "featured": false, "id": "gmailinbox", "name": "Inbox by Gmail", "version": "1.0.1", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/gmailinbox/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/gmailinbox/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/gmailinbox/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/gmailinbox/src/icon.svg" } -}, { + }, + { "author": "Alberto Murillo ", "featured": false, "id": "irccloud", "name": "IRCCloud", "version": "1.0.2", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/irccloud/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/irccloud/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/irccloud/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/irccloud/src/icon.svg" } -}, { + }, + { "author": "Stefan Malzner ", "featured": false, "id": "linkedin", "name": "LinkedIn", "version": "1.0.0", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/linkedin/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/linkedin/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/linkedin/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/linkedin/src/icon.svg" } -}, { + }, + { "author": "Jonas Hilke ", "featured": false, "id": "mailbox.org", "name": "mailbox.org", "version": "1.1.1", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/mailbox.org/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/mailbox.org/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/mailbox.org/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/mailbox.org/src/icon.svg" } -}, { + }, + { "author": "Stefan Malzner ", "featured": false, "id": "mattermost", "name": "Mattermost", "version": "1.2.1", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/mattermost/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/mattermost/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/mattermost/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/mattermost/src/icon.svg" } -}, { + }, + { "author": "Stefan Malzner ", "featured": false, "id": "messenger", "name": "Messenger", "version": "1.0.8", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/messenger/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/messenger/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/messenger/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/messenger/src/icon.svg" } -}, { + }, + { "author": "Stefan Malzner ", "featured": false, "id": "kaizala", "name": "Microsoft Kaizala", "version": "1.0.0", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/kaizala/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/kaizala/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/kaizala/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/kaizala/src/icon.svg" } -}, { + }, + { "author": "Stefan Malzner ", "featured": false, "id": "msteams", "name": "Microsoft Teams", "version": "1.1.0", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/msteams/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/msteams/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/msteams/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/msteams/src/icon.svg" } -}, { + }, + { "author": "Stefan Malzner ", "featured": false, "id": "mysms", "name": "MySMS", "version": "1.0.0", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/mysms/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/mysms/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/mysms/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/mysms/src/icon.svg" } -}, { + }, + { "author": "Adam Birds ", "featured": false, "id": "office365-owa", "name": "Office 365 - Outlook", "version": "1.0.1", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/office365-owa/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/office365-owa/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/office365-owa/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/office365-owa/src/icon.svg" } -}, { + }, + { "author": "Wouter Van Speybroeck ", "featured": false, "id": "outlook", "name": "Outlook", "version": "1.0.0", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/outlook/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/outlook/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/outlook/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/outlook/src/icon.svg" } -}, { + }, + { "author": "YWJamesLin ", "featured": false, "id": "plurk", "name": "Plurk", "version": "1.0.0", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/plurk/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/plurk/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/plurk/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/plurk/src/icon.svg" } -}, { + }, + { "author": "Diego bersanetti ", "featured": false, "id": "pocket", "name": "Pocket", "version": "1.0.0", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/pocket/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/pocket/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/pocket/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/pocket/src/icon.svg" } -}, { + }, + { "author": "Lukas Reineke ", "featured": false, "id": "proton-mail", "name": "proton-mail", "version": "1.0.0", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/proton-mail/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/proton-mail/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/proton-mail/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/proton-mail/src/icon.svg" } -}, { + }, + { "author": "Nico Rodriguez ", "featured": false, "id": "pulseSMS", "name": "Pulse SMS", "version": "1.0.0", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/pulseSMS/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/pulseSMS/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/pulseSMS/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/pulseSMS/src/icon.svg" } -}, { + }, + { "author": "Diego bersanetti ", "featured": false, "id": "pushbullet", "name": "Pushbullet", "version": "1.0.0", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/pushbullet/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/pushbullet/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/pushbullet/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/pushbullet/src/icon.svg" } -}, { + }, + { "author": "Marcel Deglau ", "featured": false, "id": "rainloop", "name": "RainLoop", "version": "1.0.0", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/rainloop/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/rainloop/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/rainloop/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/rainloop/src/icon.svg" } -}, { + }, + { "author": "Sylvain Cecchetto ", "featured": false, "id": "riot", "name": "Riot", "version": "1.0.1", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/riot/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/riot/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/riot/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/riot/src/icon.svg" } -}, { + }, + { "author": "Stefan Malzner ", "featured": false, "id": "rocketchat", "name": "Rocket.Chat", "version": "1.0.6", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/rocketchat/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/rocketchat/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/rocketchat/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/rocketchat/src/icon.svg" } -}, { + }, + { "author": "Jonathan Juursema ", "featured": false, "id": "roundcube", "name": "Roundcube", "version": "1.0.0", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/roundcube/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/roundcube/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/roundcube/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/roundcube/src/icon.svg" } -}, { + }, + { "author": "Patrick Daniel", "featured": false, "id": "sendtask", "name": "Sendtask", "version": "1.0.2", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/sendtask/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/sendtask/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/sendtask/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/sendtask/src/icon.svg" } -}, { + }, + { "author": "Stefan Malzner ", "featured": false, "id": "skype", "name": "Skype", "version": "1.1.1", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/skype/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/skype/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/skype/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/skype/src/icon.svg" } -}, { + }, + { "author": "Stefan Malzner ", "featured": false, "id": "slack", "name": "Slack", "version": "1.0.9", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/slack/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/slack/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/slack/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/slack/src/icon.svg" } -}, { + }, + { "author": "Max Stoiber", "featured": false, "id": "withspectrum", "name": "Spectrum", "version": "1.0.0", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/withspectrum/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/withspectrum/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/withspectrum/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/withspectrum/src/icon.svg" } -}, { + }, + { "author": "Kevin Oestmark ", "featured": false, "id": "steamchat", "name": "SteamChat", "version": "1.0.1", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/steamchat/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/steamchat/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/steamchat/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/steamchat/src/icon.svg" } -}, { + }, + { "author": "Tobias Theobald ", "featured": false, "id": "stride", "name": "Stride", "version": "1.1.0", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/stride/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/stride/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/stride/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/stride/src/icon.svg" } -}, { + }, + { "author": "Brian Gilbert ", "featured": false, "id": "tawk", "name": "Tawk.to", "version": "1.0.0", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/tawk/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/tawk/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/tawk/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/tawk/src/icon.svg" } -}, { + }, + { "author": "Retzudo , Ported by Koma ", "featured": false, "id": "teamwork-projects", "name": "Teamwork Projects", "version": "0.1.0", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/teamwork-projects/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/teamwork-projects/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/teamwork-projects/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/teamwork-projects/src/icon.svg" } -}, { + }, + { "author": "Stefan Malzner ", "featured": false, "id": "telegram", "name": "Telegram", "version": "1.0.5", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/telegram/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/telegram/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/telegram/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/telegram/src/icon.svg" } -}, { + }, + { "author": "Jonathan Juursema ", "featured": false, "id": "thelounge", "name": "The Lounge", "version": "1.0.0", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/thelounge/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/thelounge/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/thelounge/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/thelounge/src/icon.svg" } -}, { + }, + { "author": "Anna Damm ", "featured": false, "id": "threema", "name": "Threema", "version": "1.0.0", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/threema/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/threema/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/threema/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/threema/src/icon.svg" } -}, { + }, + { "author": "Alex Ward , Mike Burke ", "featured": false, "id": "todoist", "name": "Todoist", "version": "1.1.0", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/todoist/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/todoist/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/todoist/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/todoist/src/icon.svg" } -}, { + }, + { "author": "Franz ", "featured": false, "id": "toggl", "name": "toggl", "version": "1.0.1", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/toggl/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/toggl/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/toggl/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/toggl/src/icon.svg" } -}, { + }, + { "author": "Thom van Hal ", "featured": false, "id": "trello", "name": "Trello", "version": "1.0.0", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/trello/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/trello/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/trello/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/trello/src/icon.svg" } -}, { + }, + { "author": "Stefan Malzner ", "featured": false, "id": "tweetdeck", "name": "Tweetdeck", "version": "1.0.2", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/tweetdeck/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/tweetdeck/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/tweetdeck/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/tweetdeck/src/icon.svg" } -}, { + }, + { "author": "Stuart Clark ", "featured": false, "id": "twist", "name": "twist", "version": "1.0.0", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/twist/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/twist/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/twist/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/twist/src/icon.svg" } -}, { + }, + { "author": "Colin O'Dell ; RedbackThomson ", "featured": false, "id": "twitch", "name": "Twitch", "version": "1.0.0", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/twitch/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/twitch/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/twitch/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/twitch/src/icon.svg" } -}, { + }, + { "author": "Pieter Levels , Stefan Malzner ", "featured": false, "id": "twitter-dm", "name": "Twitter DM", "version": "1.0.0", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/twitter-dm/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/twitter-dm/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/twitter-dm/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/twitter-dm/src/icon.svg" } -}, { + }, + { "author": "Stefan Malzner ", "featured": false, "id": "vk", "name": "VK", "version": "1.0.0", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/vk/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/vk/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/vk/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/vk/src/icon.svg" } -}, { + }, + { "author": "Stefan Malzner ", "featured": false, "id": "voxer", "name": "Voxer", "version": "1.0.2", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/voxer/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/voxer/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/voxer/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/voxer/src/icon.svg" } -}, { + }, + { "author": "Koma", "featured": false, "id": "wechat", "name": "WeChat", "version": "1.0.0", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/wechat/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/wechat/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/wechat/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/wechat/src/icon.svg" } -}, { + }, + { "author": "Stefan Malzner ", "featured": false, "id": "whatsapp", "name": "WhatsApp", "version": "1.0.17", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/whatsapp/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/whatsapp/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/whatsapp/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/whatsapp/src/icon.svg" } -}, { + }, + { "author": "Rico Herwig ", "featured": false, "id": "workplace", "name": "Workplace", "version": "1.0.0", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/workplace/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/workplace/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/workplace/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/workplace/src/icon.svg" } -}, { + }, + { "author": "Volker Tietz ", "featured": false, "id": "xing", "name": "XING", "version": "1.1.0", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/xing/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/xing/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/xing/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/xing/src/icon.svg" } -}, { + }, + { "author": "Dave Reid ", "featured": false, "id": "yammer", "name": "Yammer", "version": "1.0.0", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/yammer/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/yammer/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/yammer/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/yammer/src/icon.svg" } -}, { + }, + { "author": "Stefan Malzner ", "featured": false, "id": "zendesk", "name": "zendesk", "version": "1.0.2", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/zendesk/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/zendesk/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/zendesk/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/zendesk/src/icon.svg" } -}, { + }, + { "author": "Adam Birds ", "featured": false, "id": "zulip", "name": "Zulip", "version": "1.0.0", "icons": { - "png": "https://cdn.franzinfra.com/recipes/dist/zulip/src/icon.png", - "svg": "https://cdn.franzinfra.com/recipes/dist/zulip/src/icon.svg" + "png": "https://cdn.franzinfra.com/recipes/dist/zulip/src/icon.png", + "svg": "https://cdn.franzinfra.com/recipes/dist/zulip/src/icon.svg" } -}] \ No newline at end of file + }, + { + "author": "vantezzen ", + "featured": false, + "id": "standardnotes", + "name": "StandardNotes", + "version": "1.0.0", + "icons": { + "png": "https://cdn.jsdelivr.net/gh/getferdi/recipes/uncompressed/standardnotes/icon.png", + "svg": "https://cdn.jsdelivr.net/gh/getferdi/recipes/uncompressed/standardnotes/icon.svg" + } + } +] diff --git a/scripts/package.js b/scripts/package.js new file mode 100644 index 0000000..581d23c --- /dev/null +++ b/scripts/package.js @@ -0,0 +1,101 @@ +/** + * Package recipe into tar.gz file + */ +const targz = require('targz'); +const fs = require('fs-extra'); +const path = require('path'); + +console.log('Ferdi Recipe Packager v1.0.0'); + +// Publicly availible link to this repository's uncompressed folder +// Used for generating public icon URLs +const repo = 'https://cdn.jsdelivr.net/gh/getferdi/recipes/uncompressed/'; + +// Helper: Compress src folder into dest file +const compress = (src, dest) => new Promise((resolve, reject) => { + targz.compress({ + src, + dest, + }, (err) => { + if (err) { + reject(err); + } else { + resolve(dest); + } + }); +}); + +// Create paths to important files +const recipeSrc = path.join(__dirname, 'recipe_src'); +const packageJson = path.join(recipeSrc, 'package.json'); +const svgIcon = path.join(recipeSrc, 'icon.svg'); +const pngIcon = path.join(recipeSrc, 'icon.png'); +const allJson = path.join('../', 'all.json'); + +// Let us work in an async environment +(async () => { + // Check that package.json exists + if (!await fs.pathExists(packageJson)) { + console.log(`Error: Please add your recipe to ${recipeSrc}. (package.json not found)`); + return; + } + // Check that icons exist + if (!await fs.pathExists(svgIcon) || !await fs.pathExists(pngIcon)) { + console.log(`Error: Please make sure your recipe contains an icon.png and an icon.svg file.`); + return; + } + + // Read package.json + const config = await fs.readJson(packageJson) + + // Make sure it contains all required fields + if (!config || !config.id || !config.name || !config.config) { + console.log(`Error: Your package.json does not contain all required fields. +Please make sure it contains: id, name, config`); + return; + } + + // Move readme.txt outside of recipe_src folder + await fs.move(path.join(recipeSrc, 'readme.txt'), './readme.txt'); + + // Package to .tar.gz + console.log(`Packaging ${config.id}...`); + compress(recipeSrc, path.join('../', `${config.id}.tar.gz`)); + + // Copy recipe src folder to /uncompressed/:id folder + console.log('Copying to uncompressed recipes'); + await fs.copy('recipe_src', path.join('../', 'uncompressed', `${config.id}`)); + + // Add recipe to all.json + console.log('Adding to all.json'); + const packageInfo = { + "author": config.author || '', + "featured": false, + "id": config.id, + "name": config.name, + "version": config.version || '1.0.0', + "icons": { + "png": `${repo}${config.id}/icon.png`, + "svg": `${repo}${config.id}/icon.svg`, + }, + }; + let all = await fs.readJson(allJson); + // Check if package ID already exists + const packageIndex = all.findIndex(e => e.id === config.id) + if (packageIndex !== -1) { + console.log('Package with ID already exists - overwriting'); + all[packageIndex] = packageInfo; + } else { + console.log('No package with ID found - creating new.'); + all.push(packageInfo); + } + await fs.writeJson(allJson, all, { + spaces: 2, + EOL: '\n', + }); + + // Move readme.txt back into recipe_src + await fs.move('./readme.txt', path.join(recipeSrc, 'readme.txt')); + + console.log(`Successfully packaged and added new package ${config.id}`); +})(); \ No newline at end of file diff --git a/scripts/package.json b/scripts/package.json new file mode 100644 index 0000000..b491b01 --- /dev/null +++ b/scripts/package.json @@ -0,0 +1,16 @@ +{ + "name": "ferdi-recipes-scripts", + "version": "1.0.0", + "description": "Scripts for managing the ferdi-recipes repository", + "main": "index.js", + "repository": "https://github.com/getferdi/recipes", + "author": "The Ferdi Team", + "license": "MIT", + "dependencies": { + "fs-extra": "^8.1.0", + "targz": "^1.0.1" + }, + "scripts": { + "package": "node package.js" + } +} diff --git a/scripts/recipe_src/readme.txt b/scripts/recipe_src/readme.txt new file mode 100644 index 0000000..730ba44 --- /dev/null +++ b/scripts/recipe_src/readme.txt @@ -0,0 +1,2 @@ +Please put your recipe files into this directory. +Do not delete this file - the packaging script will ignore it while packaging. \ No newline at end of file diff --git a/scripts/yarn.lock b/scripts/yarn.lock new file mode 100644 index 0000000..1fba1d2 --- /dev/null +++ b/scripts/yarn.lock @@ -0,0 +1,199 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +bl@^1.0.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c" + integrity sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA== + dependencies: + readable-stream "^2.3.5" + safe-buffer "^5.1.1" + +buffer-alloc-unsafe@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" + integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== + +buffer-alloc@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" + integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== + dependencies: + buffer-alloc-unsafe "^1.1.0" + buffer-fill "^1.0.0" + +buffer-fill@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" + integrity sha1-+PeLdniYiO858gXNY39o5wISKyw= + +chownr@^1.0.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.3.tgz#42d837d5239688d55f303003a508230fa6727142" + integrity sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw== + +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.2" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02" + integrity sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q== + +inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= + +mkdirp@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= + dependencies: + minimist "0.0.8" + +once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +pump@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/pump/-/pump-1.0.3.tgz#5dfe8311c33bbf6fc18261f9f34702c47c08a954" + integrity sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +readable-stream@^2.3.0, readable-stream@^2.3.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" + integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +safe-buffer@^5.1.1: + version "5.2.0" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" + integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +tar-fs@^1.8.1: + version "1.16.3" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-1.16.3.tgz#966a628841da2c4010406a82167cbd5e0c72d509" + integrity sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw== + dependencies: + chownr "^1.0.1" + mkdirp "^0.5.1" + pump "^1.0.0" + tar-stream "^1.1.2" + +tar-stream@^1.1.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555" + integrity sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A== + dependencies: + bl "^1.0.0" + buffer-alloc "^1.2.0" + end-of-stream "^1.0.0" + fs-constants "^1.0.0" + readable-stream "^2.3.0" + to-buffer "^1.1.1" + xtend "^4.0.0" + +targz@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/targz/-/targz-1.0.1.tgz#8f76a523694cdedfbb5d60a4076ff6eeecc5398f" + integrity sha1-j3alI2lM3t+7XWCkB2/27uzFOY8= + dependencies: + tar-fs "^1.8.1" + +to-buffer@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80" + integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg== + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +xtend@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== diff --git a/standardnotes.tar.gz b/standardnotes.tar.gz new file mode 100644 index 0000000..f96e62e Binary files /dev/null and b/standardnotes.tar.gz differ diff --git a/uncompressed/standardnotes/LICENSE b/uncompressed/standardnotes/LICENSE new file mode 100755 index 0000000..9fc7072 --- /dev/null +++ b/uncompressed/standardnotes/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 vantezzen + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/uncompressed/standardnotes/README.md b/uncompressed/standardnotes/README.md new file mode 100755 index 0000000..39b197c --- /dev/null +++ b/uncompressed/standardnotes/README.md @@ -0,0 +1,2 @@ +# StandardNotes for Franz +This repository hosts the [StandardNotes](https://standardnotes.org/) Recipe for [Franz](https://meetfranz.com/). \ No newline at end of file diff --git a/uncompressed/standardnotes/darkmode.css b/uncompressed/standardnotes/darkmode.css new file mode 100755 index 0000000..076881a --- /dev/null +++ b/uncompressed/standardnotes/darkmode.css @@ -0,0 +1,429 @@ +/** + * Material Dark Theme for StandardNotes + * + * https://github.com/vantezzen/sn-theme-material + */ + +:root { + --background-1: #263238; + --background-2: #263238; + --foreground-color: #FFFFFF; + --highlight-color: #009688; + --date-color: #EEFFFF; + --border-color: #37474F; + --pre-color: #d6dbdb; + --accent-1: #93A1A1; + --accent-2: #D6488A; + --accent-3: #6B71C4; + --accent-4: #859901; + --accent-5: #B58900; + --content-1: #AABBC3; + --content-2: #AABBC3; + --content-3: #AABBC3; + --content-4: #AABBC3; + /* Footer */ + --footer-bar-border-top-color: 0; + /* Column Menus */ + --menu-item-sep-color: rgba(0, 0, 0, 0.1); + --sn-component-foreground-color: var(--content-1); + --sn-component-background-color: var(--border-color); + --sn-component-foreground-highlight-color: var(--highlight-color); + --sn-component-outer-border-color: transparent; + --sn-component-inner-border-color: var(--highlight-color); + --sn-stylekit-info-color: var(--highlight-color); + --sn-stylekit-info-contrast-color: var(--foreground-color); + --sn-stylekit-shadow-color: var(--background-2); + --sn-stylekit-background-color: var(--background-1); + --sn-stylekit-border-color: var(--border-color); + --sn-stylekit-contrast-background-color: var(--background-2); + --sn-stylekit-contrast-foreground-color: black; + --sn-stylekit-contrast-border-color: var(--border-color); + --sn-stylekit-scrollbar-track-border-color: var(--border-color); + --sn-desktop-titlebar-bg-color: var(--background-1); + --sn-desktop-titlebar-border-color: var(--border-color); + --sn-desktop-titlebar-ui-color: var(--foreground-color); + --sn-desktop-titlebar-ui-hover-color: var(--highlight-color); + } + + /* General */ + .windows-web ::-webkit-scrollbar, .windows-desktop ::-webkit-scrollbar, .linux-web ::-webkit-scrollbar, .linux-desktop ::-webkit-scrollbar { + border-left-color: var(--border-color) !important; + } + + .windows-web ::-webkit-scrollbar-thumb, .windows-desktop ::-webkit-scrollbar-thumb, .linux-web ::-webkit-scrollbar-thumb, .linux-desktop ::-webkit-scrollbar-thumb { + background-color: var(--highlight-color) !important; + } + + ::-moz-selection { + background: var(--highlight-color) !important; + /* WebKit/Blink Browsers */ + color: var(--foreground-color) !important; + } + + ::selection { + background: var(--highlight-color) !important; + /* WebKit/Blink Browsers */ + color: var(--foreground-color) !important; + } + + ::-moz-selection { + background: var(--highlight-color) !important; + /* Gecko Browsers */ + color: var(--foreground-color) !important; + } + + panel-resizer { + background-color: var(--background-2) !important; + } + + input { + color: var(--content-4) !important; + } + + body { + color: var(--foreground-color) !important; + font-family: -apple-system, BlinkMacSystemFont, Avenir Next, Avenir, Segoe UI, Roboto, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol; + font-weight: 200; + } + + .app .section > .content { + background-color: var(--background-1) !important; + } + + .add-button { + background-color: var(--background-1) !important; + color: var(--foreground-color) !important; + } + + .blue { + /*legacy*/ + color: var(--highlight-color) !important; + } + + .tinted { + color: var(--highlight-color) !important; + } + + .tinted-selected { + color: var(--foreground-color) !important; + } + + .app-bar { + background-color: var(--background-1) !important; + border-color: var(--border-color) !important; + } + + .app-bar .item.border { + border-color: var(--border-color) !important; + } + + .app-bar .item:hover > .label, + .app-bar .item:hover > .sublabel, + .app-bar .item:hover > .column > .label, + .app-bar .item:hover > .column > .sublabel { + color: var(--highlight-color) !important; + } + + .section-title-bar { + color: var(--foreground-color) !important; + background-color: var(--background-1) !important; + } + + .section-title-bar-header .title { + color: var(--foreground-color) !important; + } + + /* Tags */ + .app .tags, .tags .content { + background-color: var(--background-1) !important; + } + + #tags-title-bar { + color: var(--foreground-color) !important; + } + + .tags .tag { + color: var(--foreground-color) !important; + padding: 12px 12px; + } + + .tags .tag > .info > .title { + color: var(--accent-1) !important; + } + + .tags .tag a { + color: var(--foreground-color) !important; + } + + .tags .tag.selected > .info > .title { + color: var(--foreground-color) !important; + } + + .tags .tag > .info > .count { + color: var(--foreground-color) !important; + } + + .tags .tag.selected { + background-color: var(--highlight-color) !important; + color: var(--foreground-color) !important; + } + + .tags .tag:hover:not(.selected) { + background-color: var(--highlight-color) !important; + color: var(--foreground-color) !important; + } + + .tags .tag:hover:not(.selected) .info > .title { + color: var(--foreground-color) !important; + } + + /* Notes */ + .app .notes .content { + background-color: var(--background-1) !important; + } + + .notes { + border-left: 0 !important; + border-right: 0 !important; + } + + #notes-title-bar { + color: var(--foreground-color) !important; + background-color: var(--background-1) !important; + } + + .notes .filter-section .filter-bar { + background-color: var(--background-1) !important; + } + + .notes .note.selected { + background-color: var(--highlight-color) !important; + color: var(--foreground-color) !important; + border-left: 0 !important; + border-right: 0 !important; + } + + #notes-column #notes-title-bar, .notes #notes-title-bar { + border-left: 1px solid var(--background-2) !important; + border-right: 1px solid var(--background-2) !important; + } + + .notes .note { + border-bottom: 1px solid var(--background-2) !important; + background-color: var(--background-1) !important; + color: var(--accent-1); + } + + .note .name { + color: var(--foreground-color); + } + + .note .date { + color: var(--date-color) !important; + } + + .note.selected .date { + color: var(--foreground-color) !important; + } + + .notes .scrollable { + border: 0 !important; + } + + /* Editor */ + #editor-title-bar { + background-color: var(--background-1) !important; + } + + #editor-title-bar > .title > .input { + color: var(--foreground-color) !important; + } + + .editor, .editor-content { + background-color: var(--background-1) !important; + } + + .editor-content .editable { + background-color: var(--background-1); + color: var(--content-4); + font-weight: 400; + line-height: 1.2; + } + + #editor-title-bar .editor-tags .tags-input { + color: var(--foreground-color) !important; + } + + #editor-title-bar #save-status { + color: #4C4C4C !important; + } + + #editor-pane-component-stack .component:first-child { + border-top: 1px solid var(--border-color) !important; + } + + /* Editors */ + .CodeMirror { + background-color: var(--background-1) !important; + color: var(--content-4) !important; + border: 0 !important; + } + + .CodeMirror-cursor { + border-color: white; + } + + .CodeMirror-selected { + background-color: var(--highlight-color) !important; + } + + .CodeMirror-selectedtext { + color: var(--foreground-color) !important; + } + + .CodeMirror-gutters { + background-color: var(--background-1) !important; + color: var(--content-4) !important; + border-color: var(--border-color) !important; + } + + .CodeMirror .cm-header { + font-family: arial; + color: var(--content-4) !important; + } + + .CodeMirror .cm-variable-2 { + font-family: arial; + color: var(--highlight-color) !important; + } + + .CodeMirror .cm-link, .cm-string, .cm-keyword { + font-family: arial; + color: var(--content-4) !important; + } + + .CodeMirror .CodeMirror-linenumber { + color: gray !important; + } + + /* Code Editor bottom toolbar */ + #select-wrapper { + background-color: var(--background-1) !important; + color: var(--content-4) !important; + border-color: var(--border-color) !important; + } + + /* Advanced Markdown top toolbar */ + .editor-toolbar { + background-color: var(--background-1) !important; + border-color: var(--border-color) !important; + } + + .editor-toolbar::before, ::after { + background: 0 !important; + } + + .editor-toolbar a { + color: var(--content-4) !important; + } + + .editor-toolbar a.active, .editor-toolbar a:hover { + border-color: transparent; + background: var(--border-color); + } + + .editor-toolbar.disabled-for-preview a:not(.no-disable) { + background: inherit; + } + + .editor-preview-active, .editor-preview-active-side { + background-color: var(--background-1) !important; + border: 0 !important; + border-left: 1px solid var(--border-color) !important; + color: var(--content-4) !important; + } + + .editor-preview-active { + border: 0 !important; + } + + #sn-advanced-markdown-editor .editor-preview.editor-preview-active pre, #sn-advanced-markdown-editor .editor-preview-side.editor-preview-active-side pre { + background-color: var(--border-color); + padding: 20px; + } + + /* Simple Markdown Editor */ + #simple-markdown { + background-color: var(--background-1) !important; + color: var(--content-4) !important; + } + + #simple-markdown #editor { + background-color: var(--background-1) !important; + color: var(--content-4) !important; + } + + #simple-markdown #column-resizer { + background-color: var(--highlight-color) !important; + } + + /* Plus Editor */ + #plus-editor .note-editor.note-frame.fullscreen .note-editable { + background-color: var(--background-1) !important; + color: var(--content-4) !important; + } + + #plus-editor .panel-default > .panel-heading { + background-color: var(--border-color) !important; + } + + #plus-editor .btn-default { + color: var(--content-4) !important; + background-color: var(--background-1) !important; + border-color: var(--background-1) !important; + } + + #plus-editor .panel-heading { + border-color: var(--border-color) !important; + } + + #plus-editor .dropdown-menu > li > a { + color: var(--content-4); + } + + #plus-editor pre { + background-color: var(--pre-color); + } + + .component-stack-border { + border-color: var(--border-color) !important; + } + + /*SN Components */ + :root { + --body-text-color: var(--content-4); + --body-background-color: var(--background-1); + --element-text-color: var(--content-4); + --element-background-color: var(--background-1); + --tint-color: var(--highlight-color); + } + + .sn-component .element-background-color { + background-color: var(--element-background-color); + } + + .sn-component .body-background-color { + background-color: var(--body-background-color); + } + + .sn-component .element-text-color { + color: var(--element-text-color); + } + + .sn-component .body-text-color { + color: var(--body-text-color); + } + + .sn-component .border-color { + border-color: var(--border-color) !important; + } \ No newline at end of file diff --git a/uncompressed/standardnotes/icon.png b/uncompressed/standardnotes/icon.png new file mode 100755 index 0000000..a9a17d3 Binary files /dev/null and b/uncompressed/standardnotes/icon.png differ diff --git a/uncompressed/standardnotes/icon.svg b/uncompressed/standardnotes/icon.svg new file mode 100755 index 0000000..22a3f44 --- /dev/null +++ b/uncompressed/standardnotes/icon.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/uncompressed/standardnotes/index.js b/uncompressed/standardnotes/index.js new file mode 100755 index 0000000..d97fcff --- /dev/null +++ b/uncompressed/standardnotes/index.js @@ -0,0 +1,4 @@ +"use strict"; + +module.exports = Franz => Franz; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdvb2dsZWtlZXAvaW5kZXguanMiXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsIkZyYW56Il0sIm1hcHBpbmdzIjoiOztBQUFBQSxPQUFPQyxPQUFQLEdBQWlCQyxTQUFTQSxLQUExQiIsImZpbGUiOiJnb29nbGVrZWVwL2luZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBGcmFueiA9PiBGcmFuejsiXX0= \ No newline at end of file diff --git a/uncompressed/standardnotes/package.json b/uncompressed/standardnotes/package.json new file mode 100755 index 0000000..1556279 --- /dev/null +++ b/uncompressed/standardnotes/package.json @@ -0,0 +1,13 @@ +{ + "id": "standardnotes", + "name": "StandardNotes", + "version": "1.0.0", + "description": "StandardNotes", + "main": "index.js", + "author": "vantezzen ", + "license": "MIT", + "repository": "https://github.com/vantezzen/franz-recipe-standardnotes", + "config": { + "serviceURL": "https://app.standardnotes.org/" + } +} diff --git a/uncompressed/standardnotes/webview.js b/uncompressed/standardnotes/webview.js new file mode 100755 index 0000000..e1c06d0 --- /dev/null +++ b/uncompressed/standardnotes/webview.js @@ -0,0 +1,2 @@ +"use strict"; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJnb29nbGVrZWVwL3dlYnZpZXcuanMiLCJzb3VyY2VzQ29udGVudCI6W119 \ No newline at end of file -- cgit v1.2.3-54-g00ecf