diff --git a/v2/test/kitchensink/events.go b/v2/test/kitchensink/events.go
index 159fa83e7..e8e4d2774 100644
--- a/v2/test/kitchensink/events.go
+++ b/v2/test/kitchensink/events.go
@@ -16,8 +16,8 @@ func (e *Events) WailsInit(runtime *wails.Runtime) error {
return nil
}
-// Subscribe will subscribe
-func (e *Events) Subscribe(eventName string) {
+// On will subscribe to the given event name
+func (e *Events) On(eventName string) {
e.runtime.Events.On(eventName, func(args ...interface{}) {
type callbackData struct {
Name string
@@ -27,3 +27,20 @@ func (e *Events) Subscribe(eventName string) {
e.runtime.Events.Emit("event fired by go subscriber", result)
})
}
+
+// Once will subscribe to the given event name
+func (e *Events) Once(eventName string) {
+ e.runtime.Events.Once(eventName, func(args ...interface{}) {
+ type callbackData struct {
+ Name string
+ Data []interface{}
+ }
+ result := callbackData{Name: eventName, Data: args}
+ e.runtime.Events.Emit("once event fired by go subscriber", result)
+ })
+}
+
+// Emit will emit
+func (e *Events) Emit(eventName string, data []interface{}) {
+ e.runtime.Events.Emit(eventName, data...)
+}
diff --git a/v2/test/kitchensink/frontend/package-lock.json b/v2/test/kitchensink/frontend/package-lock.json
index 8743a7f36..91d44a25a 100644
--- a/v2/test/kitchensink/frontend/package-lock.json
+++ b/v2/test/kitchensink/frontend/package-lock.json
@@ -135,9 +135,9 @@
}
},
"@wails/runtime": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/@wails/runtime/-/runtime-1.0.4.tgz",
- "integrity": "sha512-x7marEg5nU//qUVRJAF9Hp0oyW75bevHv6jWAzoU977KQPoWtuCkxWm8B5X1u40rq1O0DHWy58R4CujwpewUTw==",
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@wails/runtime/-/runtime-1.0.5.tgz",
+ "integrity": "sha512-B7nX207vC4ykXCdNEX7e54U4DhBPoPMuoVs3hhJuhRGFXGeUCaItWy0FjUW2YO2NGaR+NjluX19jAsfnHjTk4A==",
"dev": true
},
"alphanum-sort": {
@@ -2976,9 +2976,9 @@
"dev": true
},
"rollup": {
- "version": "2.29.0",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.29.0.tgz",
- "integrity": "sha512-gtU0sjxMpsVlpuAf4QXienPmUAhd6Kc7owQ4f5lypoxBW18fw2UNYZ4NssLGsri6WhUZkE/Ts3EMRebN+gNLiQ==",
+ "version": "2.32.0",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.32.0.tgz",
+ "integrity": "sha512-0FIG1jY88uhCP2yP4CfvtKEqPDRmsUwfY1kEOOM+DH/KOGATgaIFd/is1+fQOxsvh62ELzcFfKonwKWnHhrqmw==",
"dev": true,
"requires": {
"fsevents": "~2.1.2"
diff --git a/v2/test/kitchensink/frontend/package.json b/v2/test/kitchensink/frontend/package.json
index 94d929cce..03b02025e 100644
--- a/v2/test/kitchensink/frontend/package.json
+++ b/v2/test/kitchensink/frontend/package.json
@@ -11,12 +11,12 @@
"@rollup/plugin-commonjs": "^11.0.0",
"@rollup/plugin-node-resolve": "^7.0.0",
"@rollup/plugin-url": "^5.0.1",
- "@wails/runtime": "^1.0.4",
+ "@wails/runtime": "^1.0.5",
"focus-visible": "^5.2.0",
"halfmoon": "^1.1.1",
"postcss": "^8.1.1",
"postcss-import": "^12.0.1",
- "rollup": "^2.29.0",
+ "rollup": "^2.32.0",
"rollup-plugin-livereload": "^1.0.0",
"rollup-plugin-postcss": "^3.1.8",
"rollup-plugin-string": "^3.0.0",
diff --git a/v2/test/kitchensink/frontend/src/App.css b/v2/test/kitchensink/frontend/src/App.css
index 986946cca..6c705eac2 100644
--- a/v2/test/kitchensink/frontend/src/App.css
+++ b/v2/test/kitchensink/frontend/src/App.css
@@ -56,10 +56,10 @@
.inner-content {
position: absolute;
- top: 40px;
- bottom: 40px;
+ top: 20px;
+ bottom: 20px;
width: 99%;
- overflow-y: auto;
+ overflow-y: hidden;
}
.content-wrapper {
@@ -106,14 +106,19 @@
}
.list {
- margin-top: 2rem;
- margin-left: 2rem;
+ margin-top: 1.5rem;
+ margin-left: 1.5rem;
}
.list li {
margin-bottom: 0.5rem;
}
+ .page-header {
+ position: fixed;
+ top: 50px;
+ }
+
/* * {
font-family: 'Roboto';
} */
diff --git a/v2/test/kitchensink/frontend/src/MainPage.svelte b/v2/test/kitchensink/frontend/src/MainPage.svelte
index 66f494f2f..c116a9434 100644
--- a/v2/test/kitchensink/frontend/src/MainPage.svelte
+++ b/v2/test/kitchensink/frontend/src/MainPage.svelte
@@ -7,6 +7,7 @@
+
{$selectedPage || "" }
{#if $selectedPage == undefined} {/if}
{#if $selectedPage == "Logging"} {/if}
@@ -14,10 +15,19 @@
\ No newline at end of file
diff --git a/v2/test/kitchensink/frontend/src/components/CodeBlock.svelte b/v2/test/kitchensink/frontend/src/components/CodeBlock.svelte
index e5ba831f8..e96f368f3 100644
--- a/v2/test/kitchensink/frontend/src/components/CodeBlock.svelte
+++ b/v2/test/kitchensink/frontend/src/components/CodeBlock.svelte
@@ -29,7 +29,7 @@
export let id = "toggle-" + Date.now().toString() + Math.random().toString();
// Handle hiding example
- let showRun = true;
+ let showRun = false;
function toggleRun() {
showRun = !showRun;
@@ -150,7 +150,7 @@
}
.codeblock {
- background-color: #3F3F4B;
+ /* background-color: #3F3F4B; */
border-radius: 5px;
border: 1px solid #555;
padding: 5px;
@@ -159,7 +159,7 @@
}
.codeblock-light {
- background-color: #e5e5e5;
+ /* background-color: #e5e5e5; */
border-radius: 5px;
border: 1px solid #ccc;
padding: 5px;
diff --git a/v2/test/kitchensink/frontend/src/pages/events/Emit/Emit.svelte b/v2/test/kitchensink/frontend/src/pages/events/Emit/Emit.svelte
new file mode 100644
index 000000000..27b096828
--- /dev/null
+++ b/v2/test/kitchensink/frontend/src/pages/events/Emit/Emit.svelte
@@ -0,0 +1,81 @@
+
+
+
+
+
diff --git a/v2/test/kitchensink/frontend/src/pages/events/Emit/code.go b/v2/test/kitchensink/frontend/src/pages/events/Emit/code.go
new file mode 100644
index 000000000..faf7f9cc3
--- /dev/null
+++ b/v2/test/kitchensink/frontend/src/pages/events/Emit/code.go
@@ -0,0 +1,26 @@
+package main
+
+import (
+ "io/ioutil"
+
+ wails "github.com/wailsapp/wails/v2"
+)
+
+type MyStruct struct {
+ runtime *wails.Runtime
+}
+
+func (m *MyStruct) WailsInit(runtime *wails.Runtime) error {
+
+ // Load notes
+ data, err := ioutil.ReadFile("notes.txt")
+ if err != nil {
+ return err
+ }
+
+ // Emit an event with the loaded data
+ runtime.Events.Emit("notes loaded", string(data))
+
+ m.runtime = runtime
+ return nil
+}
diff --git a/v2/test/kitchensink/frontend/src/pages/events/Emit/code.jsx b/v2/test/kitchensink/frontend/src/pages/events/Emit/code.jsx
new file mode 100644
index 000000000..88ea69959
--- /dev/null
+++ b/v2/test/kitchensink/frontend/src/pages/events/Emit/code.jsx
@@ -0,0 +1,6 @@
+import { Events } from '@wails/runtime';
+
+function processButtonPress(name, address) {
+ Events.Emit("new user", name, address);
+}
+
diff --git a/v2/test/kitchensink/frontend/src/pages/events/Emit/description.txt b/v2/test/kitchensink/frontend/src/pages/events/Emit/description.txt
new file mode 100644
index 000000000..9625c8f6e
--- /dev/null
+++ b/v2/test/kitchensink/frontend/src/pages/events/Emit/description.txt
@@ -0,0 +1,2 @@
+Events.Emit() is used to emit application-wide events. Data may be passed with the event.
+Any subscribers listening for events using Events.On will be called, passing the optional data.
diff --git a/v2/test/kitchensink/frontend/src/pages/events/Events.svelte b/v2/test/kitchensink/frontend/src/pages/events/Events.svelte
index 1ddbdffa6..c34f92a4e 100644
--- a/v2/test/kitchensink/frontend/src/pages/events/Events.svelte
+++ b/v2/test/kitchensink/frontend/src/pages/events/Events.svelte
@@ -1,11 +1,10 @@
-
Events
-
Wails includes a unified events system which allows you to send events in either Go or Javascript and receive them in either Go or Javascript. The events methods may be accessed through the
runtime.Events object. Available methods are:
diff --git a/v2/test/kitchensink/frontend/src/pages/events/On/On.svelte b/v2/test/kitchensink/frontend/src/pages/events/On/On.svelte
index a350fcc08..2a3cf60c9 100644
--- a/v2/test/kitchensink/frontend/src/pages/events/On/On.svelte
+++ b/v2/test/kitchensink/frontend/src/pages/events/On/On.svelte
@@ -2,11 +2,13 @@
import { Events } from '@wails/runtime';
import { writable } from 'svelte/store';
import CodeBlock from '../../../components/CodeBlock.svelte';
+ import CodeSnippet from '../../../components/CodeSnippet.svelte';
import description from './description.txt';
import { UniqueID } from '../../../utils/utils';
import FakeTerm from '../../../components/FakeTerm.svelte';
import jsCode from './code.jsx';
import goCode from './code.go';
+ import { loggingOutput } from './store';
let isJs = false;
$: lang = isJs ? 'Javascript' : 'Go';
@@ -16,8 +18,6 @@
let id = UniqueID('events');
let eventName = "";
- let loggingOutput = writable("");
-
function updateLog(eventName, data, source) {
loggingOutput.update( (log) => {
@@ -37,7 +37,7 @@
return
}
- let name = eventName + " (" + (isJs ? 'JS' : 'Go') + ")"
+ let name = '"' + eventName + '" (' + (isJs ? 'JS' : 'Go') + ")"
if( $listeners.includes(name) ) {
return
}
@@ -54,33 +54,37 @@
} else {
// We call a function in Go to register a subscriber
// for us
- backend.main.Events.Subscribe(eventName);
+ backend.main.Events.On(eventName);
}
}
+ $: testcodeJs = "import { Events } from '@wails/runtime';\nEvents.On('" + eventName + "', callback);";
+ $: testcodeGo = '// runtime is given through WailsInit()\nruntime.Events.On("' + eventName + '", func(optionalData ...interface{} {\n // Process data\n}))';
+
diff --git a/v2/test/kitchensink/frontend/src/pages/events/On/store.js b/v2/test/kitchensink/frontend/src/pages/events/On/store.js
new file mode 100644
index 000000000..33c7387ff
--- /dev/null
+++ b/v2/test/kitchensink/frontend/src/pages/events/On/store.js
@@ -0,0 +1,3 @@
+import { writable } from 'svelte/store';
+
+export let loggingOutput = writable("");
\ No newline at end of file
diff --git a/v2/test/kitchensink/frontend/src/pages/events/Once/Once.svelte b/v2/test/kitchensink/frontend/src/pages/events/Once/Once.svelte
new file mode 100644
index 000000000..8444cd2d9
--- /dev/null
+++ b/v2/test/kitchensink/frontend/src/pages/events/Once/Once.svelte
@@ -0,0 +1,106 @@
+
+
+
+
+
diff --git a/v2/test/kitchensink/frontend/src/pages/events/Once/code.go b/v2/test/kitchensink/frontend/src/pages/events/Once/code.go
new file mode 100644
index 000000000..d712ab702
--- /dev/null
+++ b/v2/test/kitchensink/frontend/src/pages/events/Once/code.go
@@ -0,0 +1,19 @@
+package main
+
+import wails "github.com/wailsapp/wails/v2"
+
+type MyStruct struct {
+ runtime *wails.Runtime
+}
+
+func (m *MyStruct) WailsInit(runtime *wails.Runtime) error {
+
+ runtime.Events.On("notes updated", func(optionalData ...interface{}) {
+ // Get notes
+ notes := optionalData[0].(*Notes)
+ // Save the notes to disk
+ })
+
+ m.runtime = runtime
+ return nil
+}
diff --git a/v2/test/kitchensink/frontend/src/pages/events/Once/code.jsx b/v2/test/kitchensink/frontend/src/pages/events/Once/code.jsx
new file mode 100644
index 000000000..9bc9ae422
--- /dev/null
+++ b/v2/test/kitchensink/frontend/src/pages/events/Once/code.jsx
@@ -0,0 +1,8 @@
+import { Events } from '@wails/runtime';
+
+let notes = [];
+
+// Do some things
+Events.On("notes loaded", (newNotes) => {
+ notes = newNotes;
+});
diff --git a/v2/test/kitchensink/frontend/src/pages/events/Once/description.txt b/v2/test/kitchensink/frontend/src/pages/events/Once/description.txt
new file mode 100644
index 000000000..8642157ba
--- /dev/null
+++ b/v2/test/kitchensink/frontend/src/pages/events/Once/description.txt
@@ -0,0 +1,2 @@
+Events.Once() is used to subscribe to events.
+The given callback will be called when an event matching the given event name is received, but only once.
diff --git a/v2/test/kitchensink/frontend/src/pages/logging/Logging.svelte b/v2/test/kitchensink/frontend/src/pages/logging/Logging.svelte
index d572b37aa..5b0817417 100644
--- a/v2/test/kitchensink/frontend/src/pages/logging/Logging.svelte
+++ b/v2/test/kitchensink/frontend/src/pages/logging/Logging.svelte
@@ -8,8 +8,6 @@
-
Logging
-
Logging is part of the Wails Runtime and is accessed through the runtime.Log object.
There are {loglevels.length} methods available:
@@ -44,5 +42,5 @@ I am a Print message
-
+