decentral1se
8 months ago
commit
909fa328cb
27 changed files with 1517 additions and 0 deletions
@ -0,0 +1,12 @@ |
|||
*.dll |
|||
*.dylib |
|||
*.exe |
|||
*.exe~ |
|||
*.out |
|||
*.so |
|||
*.test |
|||
build/bin |
|||
frontend/dist |
|||
go.work |
|||
node_modules |
|||
vendor/ |
@ -0,0 +1,9 @@ |
|||
# `snackbar` |
|||
|
|||
> **Extremely WIP GUI Prototype ™** |
|||
|
|||
## Hacking |
|||
|
|||
* Install [`wails`](https://wails.io), [`templ`](https://templ.guide) & [`npm`](https://www.npmjs.com) |
|||
* Run `wails doctor` to check your system can run everything |
|||
* Run `wails dev -browser` to start up the development server |
@ -0,0 +1,46 @@ |
|||
package main |
|||
|
|||
import ( |
|||
"context" |
|||
|
|||
"varia.zone/snackbar/components" |
|||
|
|||
"github.com/a-h/templ" |
|||
"github.com/go-chi/chi/v5" |
|||
"github.com/go-chi/chi/v5/middleware" |
|||
) |
|||
|
|||
// App is the application state.
|
|||
type App struct { |
|||
ctx context.Context |
|||
} |
|||
|
|||
// NewApp creates a new application state.
|
|||
func NewApp() *App { |
|||
return &App{} |
|||
} |
|||
|
|||
func (a *App) startup(ctx context.Context) { |
|||
a.ctx = ctx |
|||
} |
|||
|
|||
func (a App) domReady(ctx context.Context) { |
|||
} |
|||
|
|||
func (a *App) beforeClose(ctx context.Context) (prevent bool) { |
|||
return false |
|||
} |
|||
|
|||
func (a *App) shutdown(ctx context.Context) { |
|||
} |
|||
|
|||
// NewRouter creates a new web router.
|
|||
func NewRouter() *chi.Mux { |
|||
router := chi.NewRouter() |
|||
router.Use(middleware.Logger) |
|||
router.Use(middleware.Recoverer) |
|||
|
|||
router.Get("/", templ.Handler(components.NewSiteForm("/")).ServeHTTP) |
|||
|
|||
return router |
|||
} |
@ -0,0 +1,42 @@ |
|||
# Build Directory |
|||
|
|||
The build directory is used to house all the build files and assets for your |
|||
application. The structure is: |
|||
|
|||
* bin - Output directory |
|||
* darwin - macOS specific files |
|||
* windows - Windows specific files |
|||
|
|||
## Mac |
|||
|
|||
The `darwin` directory holds files specific to Mac builds. These may be |
|||
customised and used as part of the build. To return these files to the default |
|||
state, simply delete them and build with `wails build`. |
|||
|
|||
The directory contains the following files: |
|||
|
|||
- `Info.plist` - the main plist file used for Mac builds. It is used when |
|||
building using `wails build`. |
|||
- `Info.dev.plist` - same as the main plist file but used when building using |
|||
`wails dev`. |
|||
|
|||
## Windows |
|||
|
|||
The `windows` directory contains the manifest and rc files used when building |
|||
with `wails build`. These may be customised for your application. To return |
|||
these files to the default state, simply delete them and build with `wails |
|||
build`. |
|||
|
|||
- `icon.ico` - The icon used for the application. This is used when building |
|||
using `wails build`. If you wish to use a different icon, simply replace this |
|||
file with your own. If it is missing, a new `icon.ico` file will be created |
|||
using the `appicon.png` file in the build directory. |
|||
|
|||
- `installer/*` - The files used to create the Windows installer. These are |
|||
used when building using `wails build`. |
|||
|
|||
- `info.json` - Application details used for Windows builds. The data here will |
|||
be used by the Windows installer, as well as the application itself (right |
|||
click the exe -> properties -> details) |
|||
|
|||
- `wails.exe.manifest` - The main application manifest file. |
After Width: | Height: | Size: 130 KiB |
@ -0,0 +1,68 @@ |
|||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> |
|||
<plist version="1.0"> |
|||
<dict> |
|||
<key>CFBundlePackageType</key> |
|||
<string>APPL</string> |
|||
<key>CFBundleName</key> |
|||
<string>{{.Info.ProductName}}</string> |
|||
<key>CFBundleExecutable</key> |
|||
<string>{{.Name}}</string> |
|||
<key>CFBundleIdentifier</key> |
|||
<string>com.wails.{{.Name}}</string> |
|||
<key>CFBundleVersion</key> |
|||
<string>{{.Info.ProductVersion}}</string> |
|||
<key>CFBundleGetInfoString</key> |
|||
<string>{{.Info.Comments}}</string> |
|||
<key>CFBundleShortVersionString</key> |
|||
<string>{{.Info.ProductVersion}}</string> |
|||
<key>CFBundleIconFile</key> |
|||
<string>iconfile</string> |
|||
<key>LSMinimumSystemVersion</key> |
|||
<string>10.13.0</string> |
|||
<key>NSHighResolutionCapable</key> |
|||
<string>true</string> |
|||
<key>NSHumanReadableCopyright</key> |
|||
<string>{{.Info.Copyright}}</string> |
|||
{{if .Info.FileAssociations}} |
|||
<key>CFBundleDocumentTypes</key> |
|||
<array> |
|||
{{range .Info.FileAssociations}} |
|||
<dict> |
|||
<key>CFBundleTypeExtensions</key> |
|||
<array> |
|||
<string>{{.Ext}}</string> |
|||
</array> |
|||
<key>CFBundleTypeName</key> |
|||
<string>{{.Name}}</string> |
|||
<key>CFBundleTypeRole</key> |
|||
<string>{{.Role}}</string> |
|||
<key>CFBundleTypeIconFile</key> |
|||
<string>{{.IconName}}</string> |
|||
</dict> |
|||
{{end}} |
|||
</array> |
|||
{{end}} |
|||
{{if .Info.Protocols}} |
|||
<key>CFBundleURLTypes</key> |
|||
<array> |
|||
{{range .Info.Protocols}} |
|||
<dict> |
|||
<key>CFBundleURLName</key> |
|||
<string>com.wails.{{.Scheme}}</string> |
|||
<key>CFBundleURLSchemes</key> |
|||
<array> |
|||
<string>{{.Scheme}}</string> |
|||
</array> |
|||
<key>CFBundleTypeRole</key> |
|||
<string>{{.Role}}</string> |
|||
</dict> |
|||
{{end}} |
|||
</array> |
|||
{{end}} |
|||
<key>NSAppTransportSecurity</key> |
|||
<dict> |
|||
<key>NSAllowsLocalNetworking</key> |
|||
<true/> |
|||
</dict> |
|||
</dict> |
|||
</plist> |
@ -0,0 +1,63 @@ |
|||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> |
|||
<plist version="1.0"> |
|||
<dict> |
|||
<key>CFBundlePackageType</key> |
|||
<string>APPL</string> |
|||
<key>CFBundleName</key> |
|||
<string>{{.Info.ProductName}}</string> |
|||
<key>CFBundleExecutable</key> |
|||
<string>{{.Name}}</string> |
|||
<key>CFBundleIdentifier</key> |
|||
<string>com.wails.{{.Name}}</string> |
|||
<key>CFBundleVersion</key> |
|||
<string>{{.Info.ProductVersion}}</string> |
|||
<key>CFBundleGetInfoString</key> |
|||
<string>{{.Info.Comments}}</string> |
|||
<key>CFBundleShortVersionString</key> |
|||
<string>{{.Info.ProductVersion}}</string> |
|||
<key>CFBundleIconFile</key> |
|||
<string>iconfile</string> |
|||
<key>LSMinimumSystemVersion</key> |
|||
<string>10.13.0</string> |
|||
<key>NSHighResolutionCapable</key> |
|||
<string>true</string> |
|||
<key>NSHumanReadableCopyright</key> |
|||
<string>{{.Info.Copyright}}</string> |
|||
{{if .Info.FileAssociations}} |
|||
<key>CFBundleDocumentTypes</key> |
|||
<array> |
|||
{{range .Info.FileAssociations}} |
|||
<dict> |
|||
<key>CFBundleTypeExtensions</key> |
|||
<array> |
|||
<string>{{.Ext}}</string> |
|||
</array> |
|||
<key>CFBundleTypeName</key> |
|||
<string>{{.Name}}</string> |
|||
<key>CFBundleTypeRole</key> |
|||
<string>{{.Role}}</string> |
|||
<key>CFBundleTypeIconFile</key> |
|||
<string>{{.IconName}}</string> |
|||
</dict> |
|||
{{end}} |
|||
</array> |
|||
{{end}} |
|||
{{if .Info.Protocols}} |
|||
<key>CFBundleURLTypes</key> |
|||
<array> |
|||
{{range .Info.Protocols}} |
|||
<dict> |
|||
<key>CFBundleURLName</key> |
|||
<string>com.wails.{{.Scheme}}</string> |
|||
<key>CFBundleURLSchemes</key> |
|||
<array> |
|||
<string>{{.Scheme}}</string> |
|||
</array> |
|||
<key>CFBundleTypeRole</key> |
|||
<string>{{.Role}}</string> |
|||
</dict> |
|||
{{end}} |
|||
</array> |
|||
{{end}} |
|||
</dict> |
|||
</plist> |
After Width: | Height: | Size: 20 KiB |
@ -0,0 +1,15 @@ |
|||
{ |
|||
"fixed": { |
|||
"file_version": "{{.Info.ProductVersion}}" |
|||
}, |
|||
"info": { |
|||
"0000": { |
|||
"ProductVersion": "{{.Info.ProductVersion}}", |
|||
"CompanyName": "{{.Info.CompanyName}}", |
|||
"FileDescription": "{{.Info.ProductName}}", |
|||
"LegalCopyright": "{{.Info.Copyright}}", |
|||
"ProductName": "{{.Info.ProductName}}", |
|||
"Comments": "{{.Info.Comments}}" |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,114 @@ |
|||
Unicode true |
|||
|
|||
#### |
|||
## Please note: Template replacements don't work in this file. They are provided with default defines like |
|||
## mentioned underneath. |
|||
## If the keyword is not defined, "wails_tools.nsh" will populate them with the values from ProjectInfo. |
|||
## If they are defined here, "wails_tools.nsh" will not touch them. This allows to use this project.nsi manually |
|||
## from outside of Wails for debugging and development of the installer. |
|||
## |
|||
## For development first make a wails nsis build to populate the "wails_tools.nsh": |
|||
## > wails build --target windows/amd64 --nsis |
|||
## Then you can call makensis on this file with specifying the path to your binary: |
|||
## For a AMD64 only installer: |
|||
## > makensis -DARG_WAILS_AMD64_BINARY=..\..\bin\app.exe |
|||
## For a ARM64 only installer: |
|||
## > makensis -DARG_WAILS_ARM64_BINARY=..\..\bin\app.exe |
|||
## For a installer with both architectures: |
|||
## > makensis -DARG_WAILS_AMD64_BINARY=..\..\bin\app-amd64.exe -DARG_WAILS_ARM64_BINARY=..\..\bin\app-arm64.exe |
|||
#### |
|||
## The following information is taken from the ProjectInfo file, but they can be overwritten here. |
|||
#### |
|||
## !define INFO_PROJECTNAME "MyProject" # Default "{{.Name}}" |
|||
## !define INFO_COMPANYNAME "MyCompany" # Default "{{.Info.CompanyName}}" |
|||
## !define INFO_PRODUCTNAME "MyProduct" # Default "{{.Info.ProductName}}" |
|||
## !define INFO_PRODUCTVERSION "1.0.0" # Default "{{.Info.ProductVersion}}" |
|||
## !define INFO_COPYRIGHT "Copyright" # Default "{{.Info.Copyright}}" |
|||
### |
|||
## !define PRODUCT_EXECUTABLE "Application.exe" # Default "${INFO_PROJECTNAME}.exe" |
|||
## !define UNINST_KEY_NAME "UninstKeyInRegistry" # Default "${INFO_COMPANYNAME}${INFO_PRODUCTNAME}" |
|||
#### |
|||
## !define REQUEST_EXECUTION_LEVEL "admin" # Default "admin" see also https://nsis.sourceforge.io/Docs/Chapter4.html |
|||
#### |
|||
## Include the wails tools |
|||
#### |
|||
!include "wails_tools.nsh" |
|||
|
|||
# The version information for this two must consist of 4 parts |
|||
VIProductVersion "${INFO_PRODUCTVERSION}.0" |
|||
VIFileVersion "${INFO_PRODUCTVERSION}.0" |
|||
|
|||
VIAddVersionKey "CompanyName" "${INFO_COMPANYNAME}" |
|||
VIAddVersionKey "FileDescription" "${INFO_PRODUCTNAME} Installer" |
|||
VIAddVersionKey "ProductVersion" "${INFO_PRODUCTVERSION}" |
|||
VIAddVersionKey "FileVersion" "${INFO_PRODUCTVERSION}" |
|||
VIAddVersionKey "LegalCopyright" "${INFO_COPYRIGHT}" |
|||
VIAddVersionKey "ProductName" "${INFO_PRODUCTNAME}" |
|||
|
|||
# Enable HiDPI support. https://nsis.sourceforge.io/Reference/ManifestDPIAware |
|||
ManifestDPIAware true |
|||
|
|||
!include "MUI.nsh" |
|||
|
|||
!define MUI_ICON "..\icon.ico" |
|||
!define MUI_UNICON "..\icon.ico" |
|||
# !define MUI_WELCOMEFINISHPAGE_BITMAP "resources\leftimage.bmp" #Include this to add a bitmap on the left side of the Welcome Page. Must be a size of 164x314 |
|||
!define MUI_FINISHPAGE_NOAUTOCLOSE # Wait on the INSTFILES page so the user can take a look into the details of the installation steps |
|||
!define MUI_ABORTWARNING # This will warn the user if they exit from the installer. |
|||
|
|||
!insertmacro MUI_PAGE_WELCOME # Welcome to the installer page. |
|||
# !insertmacro MUI_PAGE_LICENSE "resources\eula.txt" # Adds a EULA page to the installer |
|||
!insertmacro MUI_PAGE_DIRECTORY # In which folder install page. |
|||
!insertmacro MUI_PAGE_INSTFILES # Installing page. |
|||
!insertmacro MUI_PAGE_FINISH # Finished installation page. |
|||
|
|||
!insertmacro MUI_UNPAGE_INSTFILES # Uinstalling page |
|||
|
|||
!insertmacro MUI_LANGUAGE "English" # Set the Language of the installer |
|||
|
|||
## The following two statements can be used to sign the installer and the uninstaller. The path to the binaries are provided in %1 |
|||
#!uninstfinalize 'signtool --file "%1"' |
|||
#!finalize 'signtool --file "%1"' |
|||
|
|||
Name "${INFO_PRODUCTNAME}" |
|||
OutFile "..\..\bin\${INFO_PROJECTNAME}-${ARCH}-installer.exe" # Name of the installer's file. |
|||
InstallDir "$PROGRAMFILES64\${INFO_COMPANYNAME}\${INFO_PRODUCTNAME}" # Default installing folder ($PROGRAMFILES is Program Files folder). |
|||
ShowInstDetails show # This will always show the installation details. |
|||
|
|||
Function .onInit |
|||
!insertmacro wails.checkArchitecture |
|||
FunctionEnd |
|||
|
|||
Section |
|||
!insertmacro wails.setShellContext |
|||
|
|||
!insertmacro wails.webview2runtime |
|||
|
|||
SetOutPath $INSTDIR |
|||
|
|||
!insertmacro wails.files |
|||
|
|||
CreateShortcut "$SMPROGRAMS\${INFO_PRODUCTNAME}.lnk" "$INSTDIR\${PRODUCT_EXECUTABLE}" |
|||
CreateShortCut "$DESKTOP\${INFO_PRODUCTNAME}.lnk" "$INSTDIR\${PRODUCT_EXECUTABLE}" |
|||
|
|||
!insertmacro wails.associateFiles |
|||
!insertmacro wails.associateCustomProtocols |
|||
|
|||
!insertmacro wails.writeUninstaller |
|||
SectionEnd |
|||
|
|||
Section "uninstall" |
|||
!insertmacro wails.setShellContext |
|||
|
|||
RMDir /r "$AppData\${PRODUCT_EXECUTABLE}" # Remove the WebView2 DataPath |
|||
|
|||
RMDir /r $INSTDIR |
|||
|
|||
Delete "$SMPROGRAMS\${INFO_PRODUCTNAME}.lnk" |
|||
Delete "$DESKTOP\${INFO_PRODUCTNAME}.lnk" |
|||
|
|||
!insertmacro wails.unassociateFiles |
|||
!insertmacro wails.unassociateCustomProtocols |
|||
|
|||
!insertmacro wails.deleteUninstaller |
|||
SectionEnd |
@ -0,0 +1,249 @@ |
|||
# DO NOT EDIT - Generated automatically by `wails build` |
|||
|
|||
!include "x64.nsh" |
|||
!include "WinVer.nsh" |
|||
!include "FileFunc.nsh" |
|||
|
|||
!ifndef INFO_PROJECTNAME |
|||
!define INFO_PROJECTNAME "{{.Name}}" |
|||
!endif |
|||
!ifndef INFO_COMPANYNAME |
|||
!define INFO_COMPANYNAME "{{.Info.CompanyName}}" |
|||
!endif |
|||
!ifndef INFO_PRODUCTNAME |
|||
!define INFO_PRODUCTNAME "{{.Info.ProductName}}" |
|||
!endif |
|||
!ifndef INFO_PRODUCTVERSION |
|||
!define INFO_PRODUCTVERSION "{{.Info.ProductVersion}}" |
|||
!endif |
|||
!ifndef INFO_COPYRIGHT |
|||
!define INFO_COPYRIGHT "{{.Info.Copyright}}" |
|||
!endif |
|||
!ifndef PRODUCT_EXECUTABLE |
|||
!define PRODUCT_EXECUTABLE "${INFO_PROJECTNAME}.exe" |
|||
!endif |
|||
!ifndef UNINST_KEY_NAME |
|||
!define UNINST_KEY_NAME "${INFO_COMPANYNAME}${INFO_PRODUCTNAME}" |
|||
!endif |
|||
!define UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${UNINST_KEY_NAME}" |
|||
|
|||
!ifndef REQUEST_EXECUTION_LEVEL |
|||
!define REQUEST_EXECUTION_LEVEL "admin" |
|||
!endif |
|||
|
|||
RequestExecutionLevel "${REQUEST_EXECUTION_LEVEL}" |
|||
|
|||
!ifdef ARG_WAILS_AMD64_BINARY |
|||
!define SUPPORTS_AMD64 |
|||
!endif |
|||
|
|||
!ifdef ARG_WAILS_ARM64_BINARY |
|||
!define SUPPORTS_ARM64 |
|||
!endif |
|||
|
|||
!ifdef SUPPORTS_AMD64 |
|||
!ifdef SUPPORTS_ARM64 |
|||
!define ARCH "amd64_arm64" |
|||
!else |
|||
!define ARCH "amd64" |
|||
!endif |
|||
!else |
|||
!ifdef SUPPORTS_ARM64 |
|||
!define ARCH "arm64" |
|||
!else |
|||
!error "Wails: Undefined ARCH, please provide at least one of ARG_WAILS_AMD64_BINARY or ARG_WAILS_ARM64_BINARY" |
|||
!endif |
|||
!endif |
|||
|
|||
!macro wails.checkArchitecture |
|||
!ifndef WAILS_WIN10_REQUIRED |
|||
!define WAILS_WIN10_REQUIRED "This product is only supported on Windows 10 (Server 2016) and later." |
|||
!endif |
|||
|
|||
!ifndef WAILS_ARCHITECTURE_NOT_SUPPORTED |
|||
!define WAILS_ARCHITECTURE_NOT_SUPPORTED "This product can't be installed on the current Windows architecture. Supports: ${ARCH}" |
|||
!endif |
|||
|
|||
${If} ${AtLeastWin10} |
|||
!ifdef SUPPORTS_AMD64 |
|||
${if} ${IsNativeAMD64} |
|||
Goto ok |
|||
${EndIf} |
|||
!endif |
|||
|
|||
!ifdef SUPPORTS_ARM64 |
|||
${if} ${IsNativeARM64} |
|||
Goto ok |
|||
${EndIf} |
|||
!endif |
|||
|
|||
IfSilent silentArch notSilentArch |
|||
silentArch: |
|||
SetErrorLevel 65 |
|||
Abort |
|||
notSilentArch: |
|||
MessageBox MB_OK "${WAILS_ARCHITECTURE_NOT_SUPPORTED}" |
|||
Quit |
|||
${else} |
|||
IfSilent silentWin notSilentWin |
|||
silentWin: |
|||
SetErrorLevel 64 |
|||
Abort |
|||
notSilentWin: |
|||
MessageBox MB_OK "${WAILS_WIN10_REQUIRED}" |
|||
Quit |
|||
${EndIf} |
|||
|
|||
ok: |
|||
!macroend |
|||
|
|||
!macro wails.files |
|||
!ifdef SUPPORTS_AMD64 |
|||
${if} ${IsNativeAMD64} |
|||
File "/oname=${PRODUCT_EXECUTABLE}" "${ARG_WAILS_AMD64_BINARY}" |
|||
${EndIf} |
|||
!endif |
|||
|
|||
!ifdef SUPPORTS_ARM64 |
|||
${if} ${IsNativeARM64} |
|||
File "/oname=${PRODUCT_EXECUTABLE}" "${ARG_WAILS_ARM64_BINARY}" |
|||
${EndIf} |
|||
!endif |
|||
!macroend |
|||
|
|||
!macro wails.writeUninstaller |
|||
WriteUninstaller "$INSTDIR\uninstall.exe" |
|||
|
|||
SetRegView 64 |
|||
WriteRegStr HKLM "${UNINST_KEY}" "Publisher" "${INFO_COMPANYNAME}" |
|||
WriteRegStr HKLM "${UNINST_KEY}" "DisplayName" "${INFO_PRODUCTNAME}" |
|||
WriteRegStr HKLM "${UNINST_KEY}" "DisplayVersion" "${INFO_PRODUCTVERSION}" |
|||
WriteRegStr HKLM "${UNINST_KEY}" "DisplayIcon" "$INSTDIR\${PRODUCT_EXECUTABLE}" |
|||
WriteRegStr HKLM "${UNINST_KEY}" "UninstallString" "$\"$INSTDIR\uninstall.exe$\"" |
|||
WriteRegStr HKLM "${UNINST_KEY}" "QuietUninstallString" "$\"$INSTDIR\uninstall.exe$\" /S" |
|||
|
|||
${GetSize} "$INSTDIR" "/S=0K" $0 $1 $2 |
|||
IntFmt $0 "0x%08X" $0 |
|||
WriteRegDWORD HKLM "${UNINST_KEY}" "EstimatedSize" "$0" |
|||
!macroend |
|||
|
|||
!macro wails.deleteUninstaller |
|||
Delete "$INSTDIR\uninstall.exe" |
|||
|
|||
SetRegView 64 |
|||
DeleteRegKey HKLM "${UNINST_KEY}" |
|||
!macroend |
|||
|
|||
!macro wails.setShellContext |
|||
${If} ${REQUEST_EXECUTION_LEVEL} == "admin" |
|||
SetShellVarContext all |
|||
${else} |
|||
SetShellVarContext current |
|||
${EndIf} |
|||
!macroend |
|||
|
|||
# Install webview2 by launching the bootstrapper |
|||
# See https://docs.microsoft.com/en-us/microsoft-edge/webview2/concepts/distribution#online-only-deployment |
|||
!macro wails.webview2runtime |
|||
!ifndef WAILS_INSTALL_WEBVIEW_DETAILPRINT |
|||
!define WAILS_INSTALL_WEBVIEW_DETAILPRINT "Installing: WebView2 Runtime" |
|||
!endif |
|||
|
|||
SetRegView 64 |
|||
# If the admin key exists and is not empty then webview2 is already installed |
|||
ReadRegStr $0 HKLM "SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}" "pv" |
|||
${If} $0 != "" |
|||
Goto ok |
|||
${EndIf} |
|||
|
|||
${If} ${REQUEST_EXECUTION_LEVEL} == "user" |
|||
# If the installer is run in user level, check the user specific key exists and is not empty then webview2 is already installed |
|||
ReadRegStr $0 HKCU "Software\Microsoft\EdgeUpdate\Clients{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}" "pv" |
|||
${If} $0 != "" |
|||
Goto ok |
|||
${EndIf} |
|||
${EndIf} |
|||
|
|||
SetDetailsPrint both |
|||
DetailPrint "${WAILS_INSTALL_WEBVIEW_DETAILPRINT}" |
|||
SetDetailsPrint listonly |
|||
|
|||
InitPluginsDir |
|||
CreateDirectory "$pluginsdir\webview2bootstrapper" |
|||
SetOutPath "$pluginsdir\webview2bootstrapper" |
|||
File "tmp\MicrosoftEdgeWebview2Setup.exe" |
|||
ExecWait '"$pluginsdir\webview2bootstrapper\MicrosoftEdgeWebview2Setup.exe" /silent /install' |
|||
|
|||
SetDetailsPrint both |
|||
ok: |
|||
!macroend |
|||
|
|||
# Copy of APP_ASSOCIATE and APP_UNASSOCIATE macros from here https://gist.github.com/nikku/281d0ef126dbc215dd58bfd5b3a5cd5b |
|||
!macro APP_ASSOCIATE EXT FILECLASS DESCRIPTION ICON COMMANDTEXT COMMAND |
|||
; Backup the previously associated file class |
|||
ReadRegStr $R0 SHELL_CONTEXT "Software\Classes\.${EXT}" "" |
|||
WriteRegStr SHELL_CONTEXT "Software\Classes\.${EXT}" "${FILECLASS}_backup" "$R0" |
|||
|
|||
WriteRegStr SHELL_CONTEXT "Software\Classes\.${EXT}" "" "${FILECLASS}" |
|||
|
|||
WriteRegStr SHELL_CONTEXT "Software\Classes\${FILECLASS}" "" `${DESCRIPTION}` |
|||
WriteRegStr SHELL_CONTEXT "Software\Classes\${FILECLASS}\DefaultIcon" "" `${ICON}` |
|||
WriteRegStr SHELL_CONTEXT "Software\Classes\${FILECLASS}\shell" "" "open" |
|||
WriteRegStr SHELL_CONTEXT "Software\Classes\${FILECLASS}\shell\open" "" `${COMMANDTEXT}` |
|||
WriteRegStr SHELL_CONTEXT "Software\Classes\${FILECLASS}\shell\open\command" "" `${COMMAND}` |
|||
!macroend |
|||
|
|||
!macro APP_UNASSOCIATE EXT FILECLASS |
|||
; Backup the previously associated file class |
|||
ReadRegStr $R0 SHELL_CONTEXT "Software\Classes\.${EXT}" `${FILECLASS}_backup` |
|||
WriteRegStr SHELL_CONTEXT "Software\Classes\.${EXT}" "" "$R0" |
|||
|
|||
DeleteRegKey SHELL_CONTEXT `Software\Classes\${FILECLASS}` |
|||
!macroend |
|||
|
|||
!macro wails.associateFiles |
|||
; Create file associations |
|||
{{range .Info.FileAssociations}} |
|||
!insertmacro APP_ASSOCIATE "{{.Ext}}" "{{.Name}}" "{{.Description}}" "$INSTDIR\{{.IconName}}.ico" "Open with ${INFO_PRODUCTNAME}" "$INSTDIR\${PRODUCT_EXECUTABLE} $\"%1$\"" |
|||
|
|||
File "..\{{.IconName}}.ico" |
|||
{{end}} |
|||
!macroend |
|||
|
|||
!macro wails.unassociateFiles |
|||
; Delete app associations |
|||
{{range .Info.FileAssociations}} |
|||
!insertmacro APP_UNASSOCIATE "{{.Ext}}" "{{.Name}}" |
|||
|
|||
Delete "$INSTDIR\{{.IconName}}.ico" |
|||
{{end}} |
|||
!macroend |
|||
|
|||
!macro CUSTOM_PROTOCOL_ASSOCIATE PROTOCOL DESCRIPTION ICON COMMAND |
|||
DeleteRegKey SHELL_CONTEXT "Software\Classes\${PROTOCOL}" |
|||
WriteRegStr SHELL_CONTEXT "Software\Classes\${PROTOCOL}" "" "${DESCRIPTION}" |
|||
WriteRegStr SHELL_CONTEXT "Software\Classes\${PROTOCOL}" "URL Protocol" "" |
|||
WriteRegStr SHELL_CONTEXT "Software\Classes\${PROTOCOL}\DefaultIcon" "" "${ICON}" |
|||
WriteRegStr SHELL_CONTEXT "Software\Classes\${PROTOCOL}\shell" "" "" |
|||
WriteRegStr SHELL_CONTEXT "Software\Classes\${PROTOCOL}\shell\open" "" "" |
|||
WriteRegStr SHELL_CONTEXT "Software\Classes\${PROTOCOL}\shell\open\command" "" "${COMMAND}" |
|||
!macroend |
|||
|
|||
!macro CUSTOM_PROTOCOL_UNASSOCIATE PROTOCOL |
|||
DeleteRegKey SHELL_CONTEXT "Software\Classes\${PROTOCOL}" |
|||
!macroend |
|||
|
|||
!macro wails.associateCustomProtocols |
|||
; Create custom protocols associations |
|||
{{range .Info.Protocols}} |
|||
!insertmacro CUSTOM_PROTOCOL_ASSOCIATE "{{.Scheme}}" "{{.Description}}" "$INSTDIR\${PRODUCT_EXECUTABLE},0" "$INSTDIR\${PRODUCT_EXECUTABLE} $\"%1$\"" |
|||
|
|||
{{end}} |
|||
!macroend |
|||
|
|||
!macro wails.unassociateCustomProtocols |
|||
; Delete app custom protocol associations |
|||
{{range .Info.Protocols}} |
|||
!insertmacro CUSTOM_PROTOCOL_UNASSOCIATE "{{.Scheme}}" |
|||
{{end}} |
|||
!macroend |
@ -0,0 +1,15 @@ |
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> |
|||
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3"> |
|||
<assemblyIdentity type="win32" name="com.wails.{{.Name}}" version="{{.Info.ProductVersion}}.0" processorArchitecture="*"/> |
|||
<dependency> |
|||
<dependentAssembly> |
|||
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*"/> |
|||
</dependentAssembly> |
|||
</dependency> |
|||
<asmv3:application> |
|||
<asmv3:windowsSettings> |
|||
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true/pm</dpiAware> <!-- fallback for Windows 7 and 8 --> |
|||
<dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">permonitorv2,permonitor</dpiAwareness> <!-- falls back to per-monitor if per-monitor v2 is not supported --> |
|||
</asmv3:windowsSettings> |
|||
</asmv3:application> |
|||
</assembly> |
@ -0,0 +1,33 @@ |
|||
package components |
|||
|
|||
import "net/http" |
|||
|
|||
templ TextInput(name string, placeholder string, method string, endpoint string, hxTrigger string) { |
|||
<input |
|||
type="text" |
|||
name={ name } |
|||
placeholder={ placeholder } |
|||
hx-target="#result" |
|||
if method == "get" { |
|||
hx-get={ endpoint } |
|||
} |
|||
if method == "post" { |
|||
hx-post={ endpoint } |
|||
} |
|||
hx-trigger={ hxTrigger } |
|||
class={ "input join-item input-bordered input-primary w-full max-w-xs px-4 py-3 my-8" } |
|||
/> |
|||
} |
|||
|
|||
templ NewSiteForm(endpoint string) { |
|||
<div class="result" id="result">Please enter name of your new Hugo site below 👇</div> |
|||
@TextInput("name","Enter Name","post",endpoint,"keyup changed delay:100ms") |
|||
} |
|||
|
|||
func NewSite(w http.ResponseWriter, r *http.Request) { |
|||
if r.FormValue("name") != "" { |
|||
w.Write([]byte("New site created: " + r.FormValue("name") + " ✅" )) |
|||
return |
|||
} |
|||
w.Write([]byte("Please enter name of your new Hugo site below 👇")) |
|||
} |
@ -0,0 +1,172 @@ |
|||
// Code generated by templ - DO NOT EDIT.
|
|||
|
|||
// templ: version: v0.2.648
|
|||
package components |
|||
|
|||
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
|||
|
|||
import "github.com/a-h/templ" |
|||
import "context" |
|||
import "io" |
|||
import "bytes" |
|||
|
|||
import "net/http" |
|||
|
|||
func TextInput(name string, placeholder string, method string, endpoint string, hxTrigger string) templ.Component { |
|||
return templ.ComponentFunc(func(ctx context.Context, templ_7745c5c3_W io.Writer) (templ_7745c5c3_Err error) { |
|||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templ_7745c5c3_W.(*bytes.Buffer) |
|||
if !templ_7745c5c3_IsBuffer { |
|||
templ_7745c5c3_Buffer = templ.GetBuffer() |
|||
defer templ.ReleaseBuffer(templ_7745c5c3_Buffer) |
|||
} |
|||
ctx = templ.InitializeContext(ctx) |
|||
templ_7745c5c3_Var1 := templ.GetChildren(ctx) |
|||
if templ_7745c5c3_Var1 == nil { |
|||
templ_7745c5c3_Var1 = templ.NopComponent |
|||
} |
|||
ctx = templ.ClearChildren(ctx) |
|||
var templ_7745c5c3_Var2 = []any{"input join-item input-bordered input-primary w-full max-w-xs px-4 py-3 my-8"} |
|||
templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var2...) |
|||
if templ_7745c5c3_Err != nil { |
|||
return templ_7745c5c3_Err |
|||
} |
|||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<input type=\"text\" name=\"") |
|||
if templ_7745c5c3_Err != nil { |
|||
return templ_7745c5c3_Err |
|||
} |
|||
var templ_7745c5c3_Var3 string |
|||
templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(name) |
|||
if templ_7745c5c3_Err != nil { |
|||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `components/templates.templ`, Line: 8, Col: 14} |
|||
} |
|||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3)) |
|||
if templ_7745c5c3_Err != nil { |
|||
return templ_7745c5c3_Err |
|||
} |
|||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\" placeholder=\"") |
|||
if templ_7745c5c3_Err != nil { |
|||
return templ_7745c5c3_Err |
|||
} |
|||
var templ_7745c5c3_Var4 string |
|||
templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.JoinStringErrs(placeholder) |
|||
if templ_7745c5c3_Err != nil { |
|||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `components/templates.templ`, Line: 9, Col: 28} |
|||
} |
|||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var4)) |
|||
if templ_7745c5c3_Err != nil { |
|||
return templ_7745c5c3_Err |
|||
} |
|||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\" hx-target=\"#result\"") |
|||
if templ_7745c5c3_Err != nil { |
|||
return templ_7745c5c3_Err |
|||
} |
|||
if method == "get" { |
|||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(" hx-get=\"") |
|||
if templ_7745c5c3_Err != nil { |
|||
return templ_7745c5c3_Err |
|||
} |
|||
var templ_7745c5c3_Var5 string |
|||
templ_7745c5c3_Var5, templ_7745c5c3_Err = templ.JoinStringErrs(endpoint) |
|||
if templ_7745c5c3_Err != nil { |
|||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `components/templates.templ`, Line: 12, Col: 20} |
|||
} |
|||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var5)) |
|||
if templ_7745c5c3_Err != nil { |
|||
return templ_7745c5c3_Err |
|||
} |
|||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\"") |
|||
if templ_7745c5c3_Err != nil { |
|||
return templ_7745c5c3_Err |
|||
} |
|||
} |
|||
if method == "post" { |
|||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(" hx-post=\"") |
|||
if templ_7745c5c3_Err != nil { |
|||
return templ_7745c5c3_Err |
|||
} |
|||
var templ_7745c5c3_Var6 string |
|||
templ_7745c5c3_Var6, templ_7745c5c3_Err = templ.JoinStringErrs(endpoint) |
|||
if templ_7745c5c3_Err != nil { |
|||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `components/templates.templ`, Line: 15, Col: 21} |
|||
} |
|||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var6)) |
|||
if templ_7745c5c3_Err != nil { |
|||
return templ_7745c5c3_Err |
|||
} |
|||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\"") |
|||
if templ_7745c5c3_Err != nil { |
|||
return templ_7745c5c3_Err |
|||
} |
|||
} |
|||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(" hx-trigger=\"") |
|||
if templ_7745c5c3_Err != nil { |
|||
return templ_7745c5c3_Err |
|||
} |
|||
var templ_7745c5c3_Var7 string |
|||
templ_7745c5c3_Var7, templ_7745c5c3_Err = templ.JoinStringErrs(hxTrigger) |
|||
if templ_7745c5c3_Err != nil { |
|||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `components/templates.templ`, Line: 17, Col: 25} |
|||
} |
|||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var7)) |
|||
if templ_7745c5c3_Err != nil { |
|||
return templ_7745c5c3_Err |
|||
} |
|||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\" class=\"") |
|||
if templ_7745c5c3_Err != nil { |
|||
return templ_7745c5c3_Err |
|||
} |
|||
var templ_7745c5c3_Var8 string |
|||
templ_7745c5c3_Var8, templ_7745c5c3_Err = templ.JoinStringErrs(templ.CSSClasses(templ_7745c5c3_Var2).String()) |
|||
if templ_7745c5c3_Err != nil { |
|||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `components/templates.templ`, Line: 1, Col: 0} |
|||
} |
|||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var8)) |
|||
if templ_7745c5c3_Err != nil { |
|||
return templ_7745c5c3_Err |
|||
} |
|||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\">") |
|||
if templ_7745c5c3_Err != nil { |
|||
return templ_7745c5c3_Err |
|||
} |
|||
if !templ_7745c5c3_IsBuffer { |
|||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteTo(templ_7745c5c3_W) |
|||
} |
|||
return templ_7745c5c3_Err |
|||
}) |
|||
} |
|||
|
|||
func NewSiteForm(endpoint string) templ.Component { |
|||
return templ.ComponentFunc(func(ctx context.Context, templ_7745c5c3_W io.Writer) (templ_7745c5c3_Err error) { |
|||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templ_7745c5c3_W.(*bytes.Buffer) |
|||
if !templ_7745c5c3_IsBuffer { |
|||
templ_7745c5c3_Buffer = templ.GetBuffer() |
|||
defer templ.ReleaseBuffer(templ_7745c5c3_Buffer) |
|||
} |
|||
ctx = templ.InitializeContext(ctx) |
|||
templ_7745c5c3_Var9 := templ.GetChildren(ctx) |
|||
if templ_7745c5c3_Var9 == nil { |
|||
templ_7745c5c3_Var9 = templ.NopComponent |
|||
} |
|||
ctx = templ.ClearChildren(ctx) |
|||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<div class=\"result\" id=\"result\">Please enter name of your new Hugo site below 👇</div>") |
|||
if templ_7745c5c3_Err != nil { |
|||
return templ_7745c5c3_Err |
|||
} |
|||
templ_7745c5c3_Err = TextInput("name", "Enter Name", "post", endpoint, "keyup changed delay:100ms").Render(ctx, templ_7745c5c3_Buffer) |
|||
if templ_7745c5c3_Err != nil { |
|||
return templ_7745c5c3_Err |
|||
} |
|||
if !templ_7745c5c3_IsBuffer { |
|||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteTo(templ_7745c5c3_W) |
|||
} |
|||
return templ_7745c5c3_Err |
|||
}) |
|||
} |
|||
|
|||
func NewSite(w http.ResponseWriter, r *http.Request) { |
|||
if r.FormValue("name") != "" { |
|||
w.Write([]byte("New site created: " + r.FormValue("name") + " ✅")) |
|||
return |
|||
} |
|||
w.Write([]byte("Please enter name of your new Hugo site below 👇")) |
|||
} |
@ -0,0 +1,13 @@ |
|||
<!DOCTYPE html> |
|||
<html lang="en"> |
|||
<head> |
|||
<meta charset="UTF-8"/> |
|||
<meta content="width=device-width, initial-scale=1.0" name="viewport"/> |
|||
<title>Snackbar</title> |
|||
<!-- TODO(d1): vendor this locally --> |
|||
<script src="https://unpkg.com/htmx.org@1.9.6"></script> |
|||
</head> |
|||
<body> |
|||
<div id="app"></div> |
|||
</body> |
|||
</html> |
@ -0,0 +1,13 @@ |
|||
{ |
|||
"name": "frontend", |
|||
"private": true, |
|||
"version": "0.0.0", |
|||
"scripts": { |
|||
"dev": "vite", |
|||
"build": "vite build", |
|||
"preview": "vite preview" |
|||
}, |
|||
"devDependencies": { |
|||
"vite": "^3.0.7" |
|||
} |
|||
} |
@ -0,0 +1 @@ |
|||
12a10e92fe971e5bd12d427dfbcf9918 |
@ -0,0 +1,24 @@ |
|||
{ |
|||
"name": "@wailsapp/runtime", |
|||
"version": "2.0.0", |
|||
"description": "Wails Javascript runtime library", |
|||
"main": "runtime.js", |
|||
"types": "runtime.d.ts", |
|||
"scripts": { |
|||
}, |
|||
"repository": { |
|||
"type": "git", |
|||
"url": "git+https://github.com/wailsapp/wails.git" |
|||
}, |
|||
"keywords": [ |
|||
"Wails", |
|||
"Javascript", |
|||
"Go" |
|||
], |
|||
"author": "Lea Anthony <lea.anthony@gmail.com>", |
|||
"license": "MIT", |
|||
"bugs": { |
|||
"url": "https://github.com/wailsapp/wails/issues" |
|||
}, |
|||
"homepage": "https://github.com/wailsapp/wails#readme" |
|||
} |
@ -0,0 +1,235 @@ |
|||
/* |
|||
_ __ _ __ |
|||
| | / /___ _(_) /____ |
|||
| | /| / / __ `/ / / ___/
|
|||
| |/ |/ / /_/ / / (__ ) |
|||
|__/|__/\__,_/_/_/____/ |
|||
The electron alternative for Go |
|||
(c) Lea Anthony 2019-present |
|||
*/ |
|||
|
|||
export interface Position { |
|||
x: number; |
|||
y: number; |
|||
} |
|||
|
|||
export interface Size { |
|||
w: number; |
|||
h: number; |
|||
} |
|||
|
|||
export interface Screen { |
|||
isCurrent: boolean; |
|||
isPrimary: boolean; |
|||
width : number |
|||
height : number |
|||
} |
|||
|
|||
// Environment information such as platform, buildtype, ...
|
|||
export interface EnvironmentInfo { |
|||
buildType: string; |
|||
platform: string; |
|||
arch: string; |
|||
} |
|||
|
|||
// [EventsEmit](https://wails.io/docs/reference/runtime/events#eventsemit)
|
|||
// emits the given event. Optional data may be passed with the event.
|
|||
// This will trigger any event listeners.
|
|||
export function EventsEmit(eventName: string, ...data: any): void; |
|||
|
|||
// [EventsOn](https://wails.io/docs/reference/runtime/events#eventson) sets up a listener for the given event name.
|
|||
export function EventsOn(eventName: string, callback: (...data: any) => void): () => void; |
|||
|
|||
// [EventsOnMultiple](https://wails.io/docs/reference/runtime/events#eventsonmultiple)
|
|||
// sets up a listener for the given event name, but will only trigger a given number times.
|
|||
export function EventsOnMultiple(eventName: string, callback: (...data: any) => void, maxCallbacks: number): () => void; |
|||
|
|||
// [EventsOnce](https://wails.io/docs/reference/runtime/events#eventsonce)
|
|||
// sets up a listener for the given event name, but will only trigger once.
|
|||
export function EventsOnce(eventName: string, callback: (...data: any) => void): () => void; |
|||
|
|||
// [EventsOff](https://wails.io/docs/reference/runtime/events#eventsoff)
|
|||
// unregisters the listener for the given event name.
|
|||
export function EventsOff(eventName: string, ...additionalEventNames: string[]): void; |
|||
|
|||
// [EventsOffAll](https://wails.io/docs/reference/runtime/events#eventsoffall)
|
|||
// unregisters all listeners.
|
|||
export function EventsOffAll(): void; |
|||
|
|||
// [LogPrint](https://wails.io/docs/reference/runtime/log#logprint)
|
|||
// logs the given message as a raw message
|
|||
export function LogPrint(message: string): void; |
|||
|
|||
// [LogTrace](https://wails.io/docs/reference/runtime/log#logtrace)
|
|||
// logs the given message at the `trace` log level.
|
|||
export function LogTrace(message: string): void; |
|||
|
|||
// [LogDebug](https://wails.io/docs/reference/runtime/log#logdebug)
|
|||
// logs the given message at the `debug` log level.
|
|||
export function LogDebug(message: string): void; |
|||
|
|||
// [LogError](https://wails.io/docs/reference/runtime/log#logerror)
|
|||
// logs the given message at the `error` log level.
|
|||
export function LogError(message: string): void; |
|||
|
|||
// [LogFatal](https://wails.io/docs/reference/runtime/log#logfatal)
|
|||
// logs the given message at the `fatal` log level.
|
|||
// The application will quit after calling this method.
|
|||
export function LogFatal(message: string): void; |
|||
|
|||
// [LogInfo](https://wails.io/docs/reference/runtime/log#loginfo)
|
|||
// logs the given message at the `info` log level.
|
|||
export function LogInfo(message: string): void; |
|||
|
|||
// [LogWarning](https://wails.io/docs/reference/runtime/log#logwarning)
|
|||
// logs the given message at the `warning` log level.
|
|||
export function LogWarning(message: string): void; |
|||
|
|||
// [WindowReload](https://wails.io/docs/reference/runtime/window#windowreload)
|
|||
// Forces a reload by the main application as well as connected browsers.
|
|||
export function WindowReload(): void; |
|||
|
|||
// [WindowReloadApp](https://wails.io/docs/reference/runtime/window#windowreloadapp)
|
|||
// Reloads the application frontend.
|
|||
export function WindowReloadApp(): void; |
|||
|
|||
// [WindowSetAlwaysOnTop](https://wails.io/docs/reference/runtime/window#windowsetalwaysontop)
|
|||
// Sets the window AlwaysOnTop or not on top.
|
|||
export function WindowSetAlwaysOnTop(b: boolean): void; |
|||
|
|||
// [WindowSetSystemDefaultTheme](https://wails.io/docs/next/reference/runtime/window#windowsetsystemdefaulttheme)
|
|||
// *Windows only*
|
|||
// Sets window theme to system default (dark/light).
|
|||
export function WindowSetSystemDefaultTheme(): void; |
|||
|
|||
// [WindowSetLightTheme](https://wails.io/docs/next/reference/runtime/window#windowsetlighttheme)
|
|||
// *Windows only*
|
|||
// Sets window to light theme.
|
|||
export function WindowSetLightTheme(): void; |
|||
|
|||
// [WindowSetDarkTheme](https://wails.io/docs/next/reference/runtime/window#windowsetdarktheme)
|
|||
// *Windows only*
|
|||
// Sets window to dark theme.
|
|||
export function WindowSetDarkTheme(): void; |
|||
|
|||
// [WindowCenter](https://wails.io/docs/reference/runtime/window#windowcenter)
|
|||
// Centers the window on the monitor the window is currently on.
|
|||
export function WindowCenter(): void; |
|||
|
|||
// [WindowSetTitle](https://wails.io/docs/reference/runtime/window#windowsettitle)
|
|||
// Sets the text in the window title bar.
|
|||
export function WindowSetTitle(title: string): void; |
|||
|
|||
// [WindowFullscreen](https://wails.io/docs/reference/runtime/window#windowfullscreen)
|
|||
// Makes the window full screen.
|
|||
export function WindowFullscreen(): void; |
|||
|
|||
// [WindowUnfullscreen](https://wails.io/docs/reference/runtime/window#windowunfullscreen)
|
|||
// Restores the previous window dimensions and position prior to full screen.
|
|||
export function WindowUnfullscreen(): void; |
|||
|
|||
// [WindowIsFullscreen](https://wails.io/docs/reference/runtime/window#windowisfullscreen)
|
|||
// Returns the state of the window, i.e. whether the window is in full screen mode or not.
|
|||
export function WindowIsFullscreen(): Promise<boolean>; |
|||
|
|||
// [WindowSetSize](https://wails.io/docs/reference/runtime/window#windowsetsize)
|
|||
// Sets the width and height of the window.
|
|||
export function WindowSetSize(width: number, height: number): Promise<Size>; |
|||
|
|||
// [WindowGetSize](https://wails.io/docs/reference/runtime/window#windowgetsize)
|
|||
// Gets the width and height of the window.
|
|||
export function WindowGetSize(): Promise<Size>; |
|||
|
|||
// [WindowSetMaxSize](https://wails.io/docs/reference/runtime/window#windowsetmaxsize)
|
|||
// Sets the maximum window size. Will resize the window if the window is currently larger than the given dimensions.
|
|||
// Setting a size of 0,0 will disable this constraint.
|
|||
export function WindowSetMaxSize(width: number, height: number): void; |
|||
|
|||
// [WindowSetMinSize](https://wails.io/docs/reference/runtime/window#windowsetminsize)
|
|||
// Sets the minimum window size. Will resize the window if the window is currently smaller than the given dimensions.
|
|||
// Setting a size of 0,0 will disable this constraint.
|
|||
export function WindowSetMinSize(width: number, height: number): void; |
|||
|
|||
// [WindowSetPosition](https://wails.io/docs/reference/runtime/window#windowsetposition)
|
|||
// Sets the window position relative to the monitor the window is currently on.
|
|||
export function WindowSetPosition(x: number, y: number): void; |
|||
|
|||
// [WindowGetPosition](https://wails.io/docs/reference/runtime/window#windowgetposition)
|
|||
// Gets the window position relative to the monitor the window is currently on.
|
|||
export function WindowGetPosition(): Promise<Position>; |
|||
|
|||
// [WindowHide](https://wails.io/docs/reference/runtime/window#windowhide)
|
|||
// Hides the window.
|
|||
export function WindowHide(): void; |
|||
|
|||
// [WindowShow](https://wails.io/docs/reference/runtime/window#windowshow)
|
|||
// Shows the window, if it is currently hidden.
|
|||
export function WindowShow(): void; |
|||
|
|||
// [WindowMaximise](https://wails.io/docs/reference/runtime/window#windowmaximise)
|
|||
// Maximises the window to fill the screen.
|
|||
export function WindowMaximise(): void; |
|||
|
|||
// [WindowToggleMaximise](https://wails.io/docs/reference/runtime/window#windowtogglemaximise)
|
|||
// Toggles between Maximised and UnMaximised.
|
|||
export function WindowToggleMaximise(): void; |
|||
|
|||
// [WindowUnmaximise](https://wails.io/docs/reference/runtime/window#windowunmaximise)
|
|||
// Restores the window to the dimensions and position prior to maximising.
|
|||
export function WindowUnmaximise(): void; |
|||
|
|||
// [WindowIsMaximised](https://wails.io/docs/reference/runtime/window#windowismaximised)
|
|||
// Returns the state of the window, i.e. whether the window is maximised or not.
|
|||
export function WindowIsMaximised(): Promise<boolean>; |
|||
|
|||
// [WindowMinimise](https://wails.io/docs/reference/runtime/window#windowminimise)
|
|||
// Minimises the window.
|
|||
export function WindowMinimise(): void; |
|||
|
|||
// [WindowUnminimise](https://wails.io/docs/reference/runtime/window#windowunminimise)
|
|||
// Restores the window to the dimensions and position prior to minimising.
|
|||
export function WindowUnminimise(): void; |
|||
|
|||
// [WindowIsMinimised](https://wails.io/docs/reference/runtime/window#windowisminimised)
|
|||
// Returns the state of the window, i.e. whether the window is minimised or not.
|
|||
export function WindowIsMinimised(): Promise<boolean>; |
|||
|
|||
// [WindowIsNormal](https://wails.io/docs/reference/runtime/window#windowisnormal)
|
|||
// Returns the state of the window, i.e. whether the window is normal or not.
|
|||
export function WindowIsNormal(): Promise<boolean>; |
|||
|
|||
// [WindowSetBackgroundColour](https://wails.io/docs/reference/runtime/window#windowsetbackgroundcolour)
|
|||
// Sets the background colour of the window to the given RGBA colour definition. This colour will show through for all transparent pixels.
|
|||
export function WindowSetBackgroundColour(R: number, G: number, B: number, A: number): void; |
|||
|
|||
// [ScreenGetAll](https://wails.io/docs/reference/runtime/window#screengetall)
|
|||
// Gets the all screens. Call this anew each time you want to refresh data from the underlying windowing system.
|
|||
export function ScreenGetAll(): Promise<Screen[]>; |
|||
|
|||
// [BrowserOpenURL](https://wails.io/docs/reference/runtime/browser#browseropenurl)
|
|||
// Opens the given URL in the system browser.
|
|||
export function BrowserOpenURL(url: string): void; |
|||
|
|||
// [Environment](https://wails.io/docs/reference/runtime/intro#environment)
|
|||
// Returns information about the environment
|
|||
export function Environment(): Promise<EnvironmentInfo>; |
|||
|
|||
// [Quit](https://wails.io/docs/reference/runtime/intro#quit)
|
|||
// Quits the application.
|
|||
export function Quit(): void; |
|||
|
|||
// [Hide](https://wails.io/docs/reference/runtime/intro#hide)
|
|||
// Hides the application.
|
|||
export function Hide(): void; |
|||
|
|||
// [Show](https://wails.io/docs/reference/runtime/intro#show)
|
|||
// Shows the application.
|
|||
export function Show(): void; |
|||
|
|||
// [ClipboardGetText](https://wails.io/docs/reference/runtime/clipboard#clipboardgettext)
|
|||
// Returns the current text stored on clipboard
|
|||
export function ClipboardGetText(): Promise<string>; |
|||
|
|||
// [ClipboardSetText](https://wails.io/docs/reference/runtime/clipboard#clipboardsettext)
|
|||
// Sets a text on the clipboard
|
|||
export function ClipboardSetText(text: string): Promise<boolean>; |
@ -0,0 +1,202 @@ |
|||
/* |
|||
_ __ _ __ |
|||
| | / /___ _(_) /____ |
|||
| | /| / / __ `/ / / ___/
|
|||
| |/ |/ / /_/ / / (__ ) |
|||
|__/|__/\__,_/_/_/____/ |
|||
The electron alternative for Go |
|||
(c) Lea Anthony 2019-present |
|||
*/ |
|||
|
|||
export function LogPrint(message) { |
|||
window.runtime.LogPrint(message); |
|||
} |
|||
|
|||
export function LogTrace(message) { |
|||
window.runtime.LogTrace(message); |
|||
} |
|||
|
|||
export function LogDebug(message) { |
|||
window.runtime.LogDebug(message); |
|||
} |
|||
|
|||
export function LogInfo(message) { |
|||
window.runtime.LogInfo(message); |
|||
} |
|||
|
|||
export function LogWarning(message) { |
|||
window.runtime.LogWarning(message); |
|||
} |
|||
|
|||
export function LogError(message) { |
|||
window.runtime.LogError(message); |
|||
} |
|||
|
|||
export function LogFatal(message) { |
|||
window.runtime.LogFatal(message); |
|||
} |
|||
|
|||
export function EventsOnMultiple(eventName, callback, maxCallbacks) { |
|||
return window.runtime.EventsOnMultiple(eventName, callback, maxCallbacks); |
|||
} |
|||
|
|||
export function EventsOn(eventName, callback) { |
|||
return EventsOnMultiple(eventName, callback, -1); |
|||
} |
|||
|
|||
export function EventsOff(eventName, ...additionalEventNames) { |
|||
return window.runtime.EventsOff(eventName, ...additionalEventNames); |
|||
} |
|||
|
|||
export function EventsOnce(eventName, callback) { |
|||
return EventsOnMultiple(eventName, callback, 1); |
|||
} |
|||
|
|||
export function EventsEmit(eventName) { |
|||
let args = [eventName].slice.call(arguments); |
|||
return window.runtime.EventsEmit.apply(null, args); |
|||
} |
|||
|
|||
export function WindowReload() { |
|||
window.runtime.WindowReload(); |
|||
} |
|||
|
|||
export function WindowReloadApp() { |
|||
window.runtime.WindowReloadApp(); |
|||
} |
|||
|
|||
export function WindowSetAlwaysOnTop(b) { |
|||
window.runtime.WindowSetAlwaysOnTop(b); |
|||
} |
|||
|
|||
export function WindowSetSystemDefaultTheme() { |
|||
window.runtime.WindowSetSystemDefaultTheme(); |
|||
} |
|||
|
|||
export function WindowSetLightTheme() { |
|||
window.runtime.WindowSetLightTheme(); |
|||
} |
|||
|
|||
export function WindowSetDarkTheme() { |
|||
window.runtime.WindowSetDarkTheme(); |
|||
} |
|||
|
|||
export function WindowCenter() { |
|||
window.runtime.WindowCenter(); |
|||
} |
|||
|
|||
export function WindowSetTitle(title) { |
|||
window.runtime.WindowSetTitle(title); |
|||
} |
|||
|
|||
export function WindowFullscreen() { |
|||
window.runtime.WindowFullscreen(); |
|||
} |
|||
|
|||
export function WindowUnfullscreen() { |
|||
window.runtime.WindowUnfullscreen(); |
|||
} |
|||
|
|||
export function WindowIsFullscreen() { |
|||
return window.runtime.WindowIsFullscreen(); |
|||
} |
|||
|
|||
export function WindowGetSize() { |
|||
return window.runtime.WindowGetSize(); |
|||
} |
|||
|
|||
export function WindowSetSize(width, height) { |
|||
window.runtime.WindowSetSize(width, height); |
|||
} |
|||
|
|||
export function WindowSetMaxSize(width, height) { |
|||
window.runtime.WindowSetMaxSize(width, height); |
|||
} |
|||
|
|||
export function WindowSetMinSize(width, height) { |
|||
window.runtime.WindowSetMinSize(width, height); |
|||
} |
|||
|
|||
export function WindowSetPosition(x, y) { |
|||
window.runtime.WindowSetPosition(x, y); |
|||
} |
|||
|
|||
export function WindowGetPosition() { |
|||
return window.runtime.WindowGetPosition(); |
|||
} |
|||
|
|||
export function WindowHide() { |
|||
window.runtime.WindowHide(); |
|||
} |
|||
|
|||
export function WindowShow() { |
|||
window.runtime.WindowShow(); |
|||
} |
|||
|
|||
export function WindowMaximise() { |
|||
window.runtime.WindowMaximise(); |
|||
} |
|||
|
|||
export function WindowToggleMaximise() { |
|||
window.runtime.WindowToggleMaximise(); |
|||
} |
|||
|
|||
export function WindowUnmaximise() { |
|||
window.runtime.WindowUnmaximise(); |
|||
} |
|||
|
|||
export function WindowIsMaximised() { |
|||
return window.runtime.WindowIsMaximised(); |
|||
} |
|||
|
|||
export function WindowMinimise() { |
|||
window.runtime.WindowMinimise(); |
|||
} |
|||
|
|||
export function WindowUnminimise() { |
|||
window.runtime.WindowUnminimise(); |
|||
} |
|||
|
|||
export function WindowSetBackgroundColour(R, G, B, A) { |
|||
window.runtime.WindowSetBackgroundColour(R, G, B, A); |
|||
} |
|||
|
|||
export function ScreenGetAll() { |
|||
return window.runtime.ScreenGetAll(); |
|||
} |
|||
|
|||
export function WindowIsMinimised() { |
|||
return window.runtime.WindowIsMinimised(); |
|||
} |
|||
|
|||
export function WindowIsNormal() { |
|||
return window.runtime.WindowIsNormal(); |
|||
} |
|||
|
|||
export function BrowserOpenURL(url) { |
|||
window.runtime.BrowserOpenURL(url); |
|||
} |
|||
|
|||
export function Environment() { |
|||
return window.runtime.Environment(); |
|||
} |
|||
|
|||
export function Quit() { |
|||
window.runtime.Quit(); |
|||
} |
|||
|
|||
export function Hide() { |
|||
window.runtime.Hide(); |
|||
} |
|||
|
|||
export function Show() { |
|||
window.runtime.Show(); |
|||
} |
|||
|
|||
export function ClipboardGetText() { |
|||
return window.runtime.ClipboardGetText(); |
|||
} |
|||
|
|||
export function ClipboardSetText(text) { |
|||
return window.runtime.ClipboardSetText(text); |
|||
} |
@ -0,0 +1,43 @@ |
|||
module varia.zone/snackbar |
|||
|
|||
go 1.21 |
|||
|
|||
toolchain go1.21.1 |
|||
|
|||
require ( |
|||
github.com/a-h/templ v0.2.648 |
|||
github.com/go-chi/chi/v5 v5.0.12 |
|||
github.com/wailsapp/wails/v2 v2.8.0 |
|||
) |
|||
|
|||
require ( |
|||
github.com/bep/debounce v1.2.1 // indirect |
|||
github.com/go-ole/go-ole v1.3.0 // indirect |
|||
github.com/godbus/dbus/v5 v5.1.0 // indirect |
|||
github.com/google/uuid v1.6.0 // indirect |
|||
github.com/jchv/go-winloader v0.0.0-20210711035445-715c2860da7e // indirect |
|||
github.com/labstack/echo/v4 v4.11.4 // indirect |
|||
github.com/labstack/gommon v0.4.2 // indirect |
|||
github.com/leaanthony/go-ansi-parser v1.6.1 // indirect |
|||
github.com/leaanthony/gosod v1.0.3 // indirect |
|||
github.com/leaanthony/slicer v1.6.0 // indirect |
|||
github.com/leaanthony/u v1.1.1 // indirect |
|||
github.com/mattn/go-colorable v0.1.13 // indirect |
|||
github.com/mattn/go-isatty v0.0.20 // indirect |
|||
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect |
|||
github.com/pkg/errors v0.9.1 // indirect |
|||
github.com/rivo/uniseg v0.4.7 // indirect |
|||
github.com/samber/lo v1.39.0 // indirect |
|||
github.com/tkrajina/go-reflector v0.5.6 // indirect |
|||
github.com/valyala/bytebufferpool v1.0.0 // indirect |
|||
github.com/valyala/fasttemplate v1.2.2 // indirect |
|||
github.com/wailsapp/go-webview2 v1.0.10 // indirect |
|||
github.com/wailsapp/mimetype v1.4.1 // indirect |
|||
golang.org/x/crypto v0.22.0 // indirect |
|||
golang.org/x/exp v0.0.0-20240409090435-93d18d7e34b8 // indirect |
|||
golang.org/x/net v0.24.0 // indirect |
|||
golang.org/x/sys v0.19.0 // indirect |
|||
golang.org/x/text v0.14.0 // indirect |
|||
) |
|||
|
|||
// replace github.com/wailsapp/wails/v2 v2.8.0 => /home/decentral1se/go/pkg/mod |
@ -0,0 +1,87 @@ |
|||
github.com/a-h/templ v0.2.648 h1:A1ggHGIE7AONOHrFaDTM8SrqgqHL6fWgWCijQ21Zy9I= |
|||
github.com/a-h/templ v0.2.648/go.mod h1:SA7mtYwVEajbIXFRh3vKdYm/4FYyLQAtPH1+KxzGPA8= |
|||
github.com/bep/debounce v1.2.1 h1:v67fRdBA9UQu2NhLFXrSg0Brw7CexQekrBwDMM8bzeY= |
|||
github.com/bep/debounce v1.2.1/go.mod h1:H8yggRPQKLUhUoqrJC1bO2xNya7vanpDl7xR3ISbCJ0= |
|||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= |
|||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= |
|||
github.com/go-chi/chi/v5 v5.0.12 h1:9euLV5sTrTNTRUU9POmDUvfxyj6LAABLUcEWO+JJb4s= |
|||
github.com/go-chi/chi/v5 v5.0.12/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= |
|||
github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= |
|||
github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= |
|||
github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= |
|||
github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= |
|||
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= |
|||
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= |
|||
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= |
|||
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= |
|||
github.com/jchv/go-winloader v0.0.0-20210711035445-715c2860da7e h1:Q3+PugElBCf4PFpxhErSzU3/PY5sFL5Z6rfv4AbGAck= |
|||
github.com/jchv/go-winloader v0.0.0-20210711035445-715c2860da7e/go.mod h1:alcuEEnZsY1WQsagKhZDsoPCRoOijYqhZvPwLG0kzVs= |
|||
github.com/labstack/echo/v4 v4.11.4 h1:vDZmA+qNeh1pd/cCkEicDMrjtrnMGQ1QFI9gWN1zGq8= |
|||
github.com/labstack/echo/v4 v4.11.4/go.mod h1:noh7EvLwqDsmh/X/HWKPUl1AjzJrhyptRyEbQJfxen8= |
|||
github.com/labstack/gommon v0.4.2 h1:F8qTUNXgG1+6WQmqoUWnz8WiEU60mXVVw0P4ht1WRA0= |
|||
github.com/labstack/gommon v0.4.2/go.mod h1:QlUFxVM+SNXhDL/Z7YhocGIBYOiwB0mXm1+1bAPHPyU= |
|||
github.com/leaanthony/debme v1.2.1 h1:9Tgwf+kjcrbMQ4WnPcEIUcQuIZYqdWftzZkBr+i/oOc= |
|||
github.com/leaanthony/debme v1.2.1/go.mod h1:3V+sCm5tYAgQymvSOfYQ5Xx2JCr+OXiD9Jkw3otUjiA= |
|||
github.com/leaanthony/go-ansi-parser v1.6.1 h1:xd8bzARK3dErqkPFtoF9F3/HgN8UQk0ed1YDKpEz01A= |
|||
github.com/leaanthony/go-ansi-parser v1.6.1/go.mod h1:+vva/2y4alzVmmIEpk9QDhA7vLC5zKDTRwfZGOp3IWU= |
|||
github.com/leaanthony/gosod v1.0.3 h1:Fnt+/B6NjQOVuCWOKYRREZnjGyvg+mEhd1nkkA04aTQ= |
|||
github.com/leaanthony/gosod v1.0.3/go.mod h1:BJ2J+oHsQIyIQpnLPjnqFGTMnOZXDbvWtRCSG7jGxs4= |
|||
github.com/leaanthony/slicer v1.5.0/go.mod h1:FwrApmf8gOrpzEWM2J/9Lh79tyq8KTX5AzRtwV7m4AY= |
|||
github.com/leaanthony/slicer v1.6.0 h1:1RFP5uiPJvT93TAHi+ipd3NACobkW53yUiBqZheE/Js= |
|||
github.com/leaanthony/slicer v1.6.0/go.mod h1:o/Iz29g7LN0GqH3aMjWAe90381nyZlDNquK+mtH2Fj8= |
|||
github.com/leaanthony/u v1.1.1 h1:TUFjwDGlNX+WuwVEzDqQwC2lOv0P4uhTQw7CMFdiK7M= |
|||
github.com/leaanthony/u v1.1.1/go.mod h1:9+o6hejoRljvZ3BzdYlVL0JYCwtnAsVuN9pVTQcaRfI= |
|||
github.com/matryer/is v1.4.0 h1:sosSmIWwkYITGrxZ25ULNDeKiMNzFSr4V/eqBQP0PeE= |
|||
github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= |
|||
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= |
|||
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= |
|||
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= |
|||
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= |
|||
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= |
|||
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ= |
|||
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU= |
|||
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= |
|||
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= |
|||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= |
|||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= |
|||
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= |
|||
github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= |
|||
github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= |
|||
github.com/samber/lo v1.39.0 h1:4gTz1wUhNYLhFSKl6O+8peW0v2F4BCY034GRpU9WnuA= |
|||
github.com/samber/lo v1.39.0/go.mod h1:+m/ZKRl6ClXCE2Lgf3MsQlWfh4bn1bz6CXEOxnEXnEA= |
|||
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= |
|||
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= |
|||
github.com/tkrajina/go-reflector v0.5.6 h1:hKQ0gyocG7vgMD2M3dRlYN6WBBOmdoOzJ6njQSepKdE= |
|||
github.com/tkrajina/go-reflector v0.5.6/go.mod h1:ECbqLgccecY5kPmPmXg1MrHW585yMcDkVl6IvJe64T4= |
|||
github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= |
|||
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= |
|||
github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo= |
|||
github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= |
|||
github.com/wailsapp/go-webview2 v1.0.10 h1:PP5Hug6pnQEAhfRzLCoOh2jJaPdrqeRgJKZhyYyDV/w= |
|||
github.com/wailsapp/go-webview2 v1.0.10/go.mod h1:Uk2BePfCRzttBBjFrBmqKGJd41P6QIHeV9kTgIeOZNo= |
|||
github.com/wailsapp/mimetype v1.4.1 h1:pQN9ycO7uo4vsUUuPeHEYoUkLVkaRntMnHJxVwYhwHs= |
|||
github.com/wailsapp/mimetype v1.4.1/go.mod h1:9aV5k31bBOv5z6u+QP8TltzvNGJPmNJD4XlAL3U+j3o= |
|||
github.com/wailsapp/wails/v2 v2.8.0 h1:b2NNn99uGPiN6P5bDsnPwOJZWtAOUhNLv7Vl+YxMTr4= |
|||
github.com/wailsapp/wails/v2 v2.8.0/go.mod h1:EFUGWkUX3KofO4fmKR/GmsLy3HhPH7NbyOEaMt8lBF0= |
|||
golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30= |
|||
golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M= |
|||
golang.org/x/exp v0.0.0-20240409090435-93d18d7e34b8 h1:ESSUROHIBHg7USnszlcdmjBEwdMj9VUvU+OPk4yl2mc= |
|||
golang.org/x/exp v0.0.0-20240409090435-93d18d7e34b8/go.mod h1:/lliqkxwWAhPjf5oSOIJup2XcqJaw8RGS6k3TGEc7GI= |
|||
golang.org/x/net v0.0.0-20210505024714-0287a6fb4125/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= |
|||
golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w= |
|||
golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8= |
|||
golang.org/x/sys v0.0.0-20200810151505-1b9f1253b3ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= |
|||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= |
|||
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= |
|||
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= |
|||
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= |
|||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= |
|||
golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o= |
|||
golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= |
|||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= |
|||
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= |
|||
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= |
|||
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= |
|||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= |
|||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= |
|||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= |
@ -0,0 +1,48 @@ |
|||
package main |
|||
|
|||
import ( |
|||
"embed" |
|||
"log" |
|||
"net/http" |
|||
|
|||
"github.com/wailsapp/wails/v2" |
|||
"github.com/wailsapp/wails/v2/pkg/options" |
|||
"github.com/wailsapp/wails/v2/pkg/options/assetserver" |
|||
) |
|||
|
|||
//go:embed all:frontend/dist components
|
|||
var assets embed.FS |
|||
|
|||
//go:embed build/appicon.png
|
|||
var icon []byte |
|||
var version = "0.0.0" |
|||
|
|||
func main() { |
|||
app := NewApp() |
|||
router := NewRouter() |
|||
|
|||
err := wails.Run(&options.App{ |
|||
Title: "snackbar", |
|||
Width: 1040, |
|||
Height: 768, |
|||
StartHidden: true, |
|||
AssetServer: &assetserver.Options{ |
|||
Assets: assets, |
|||
Middleware: func(next http.Handler) http.Handler { |
|||
router.NotFound(next.ServeHTTP) |
|||
return router |
|||
}, |
|||
}, |
|||
OnStartup: app.startup, |
|||
OnDomReady: app.domReady, |
|||
OnBeforeClose: app.beforeClose, |
|||
OnShutdown: app.shutdown, |
|||
Bind: []interface{}{ |
|||
app, |
|||
}, |
|||
}) |
|||
|
|||
if err != nil { |
|||
log.Fatal(err) |
|||
} |
|||
} |
@ -0,0 +1,13 @@ |
|||
{ |
|||
"$schema": "https://wails.io/schemas/config.v2.json", |
|||
"name": "snackbar", |
|||
"outputfilename": "snackbar", |
|||
"frontend:install": "npm install", |
|||
"frontend:build": "npm run build", |
|||
"frontend:dev:watcher": "npm run dev", |
|||
"frontend:dev:serverUrl": "auto", |
|||
"author": { |
|||
"name": "decentral1se", |
|||
"email": "cellarspoon@riseup.net" |
|||
} |
|||
} |
Reference in new issue