Compare commits

...

26 Commits

Author SHA1 Message Date
Travis McLane
3fc572eea0 always specify '-H windowsgui' for windows 2020-09-14 21:42:47 -05:00
Ilgıt Yıldırım
fe2c5e8611 handle Set error on Update method 2020-09-13 18:50:41 +10:00
Lea Anthony
422ee22d0c Updated contributors 2020-09-11 06:40:36 +10:00
Lea Anthony
22f94cfdb6 Merge branch 'artooro-angular-routing-fix' into develop 2020-09-11 06:39:15 +10:00
Arthur Wiebe
5d754f40de resolve angular routing broken when app is built 2020-09-09 22:06:14 -04:00
Lea Anthony
c9b26c6352 Merge branch 'develop' 2020-09-10 06:55:39 +10:00
Lea Anthony
6f0696631f v1.8.0 2020-09-10 06:45:42 +10:00
Lea Anthony
fefb54de12 v1.7.2-pre12 2020-09-10 06:40:13 +10:00
Lea Anthony
b4224066f7 css fix for vanilla 2020-09-10 06:39:36 +10:00
Lea Anthony
3d9ef75488 v1.7.2-pre11 2020-09-10 06:19:07 +10:00
Lea Anthony
79ecb0704e test fix 2020-09-10 06:17:17 +10:00
Lea Anthony
8154887824 v1.7.2-pre10 2020-09-09 06:58:30 +10:00
Lea Anthony
39ae91a250 Simplify Subscribe() 2020-09-09 06:27:57 +10:00
Lea Anthony
861f5f2a1c v1.7.2-pre9 2020-09-08 07:06:27 +10:00
Lea Anthony
89ed00d6ed Fix svelte for Windows 2020-09-08 07:04:01 +10:00
Lea Anthony
1e1834158b fix vanilla template for windows 2020-09-07 20:45:20 +10:00
Lea Anthony
bc0478b2b2 Update README.md 2020-09-06 15:45:37 +10:00
Lea Anthony
f86996705b v1.7.1 2020-07-03 20:07:02 +10:00
Lea Anthony
254aa664d7 Fix contributors 2020-07-03 20:07:02 +10:00
Lea Anthony
c8371ee824 v1.7.0-pre2 2020-07-03 20:07:02 +10:00
Lea Anthony
02e0250555 fix: vanilla template for windows 2020-07-03 20:07:02 +10:00
Lea Anthony
e1b025cab6 fix: windows icon name 2020-07-03 20:07:02 +10:00
Lea Anthony
626854f1b7 free filter memory 2020-07-03 20:07:02 +10:00
Lea Anthony
98468d1c4d v1.7.0-pre1 2020-07-03 20:07:02 +10:00
Lea Anthony
1062aeb136 Add ldflags option to build 2020-07-03 20:07:02 +10:00
Lea Anthony
aa93e5d8d2 Merge branch 'develop' 2020-06-19 09:42:15 +10:00
11 changed files with 117 additions and 20 deletions

View File

@@ -33,3 +33,5 @@ Wails is what it is because of the time and effort given by these great people.
* [artem](https://github.com/Unix4ever) * [artem](https://github.com/Unix4ever)
* [Tim Kipp](https://github.com/timkippdev) * [Tim Kipp](https://github.com/timkippdev)
* [Dmitry Gomzyakov](https://github.com/kyoto44) * [Dmitry Gomzyakov](https://github.com/kyoto44)
* [Arthur Wiebe](https://github.com/artooro)
* [Ilgıt Yıldırım](https://github.com/ilgityildirim)

View File

@@ -12,7 +12,6 @@
<a href="https://houndci.com"><img src="https://img.shields.io/badge/Reviewed_by-Hound-8E64B0.svg"/></a> <a href="https://houndci.com"><img src="https://img.shields.io/badge/Reviewed_by-Hound-8E64B0.svg"/></a>
<a href="https://github.com/avelino/awesome-go" rel="nofollow"><img src="https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg" alt="Awesome"></a> <a href="https://github.com/avelino/awesome-go" rel="nofollow"><img src="https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg" alt="Awesome"></a>
<a href="https://github.com/wailsapp/wails/workflows/release/badge.svg?branch=master" rel="nofollow"><img src="https://github.com/wailsapp/wails/workflows/release/badge.svg?branch=master" alt="Release Pipelines"></a> <a href="https://github.com/wailsapp/wails/workflows/release/badge.svg?branch=master" rel="nofollow"><img src="https://github.com/wailsapp/wails/workflows/release/badge.svg?branch=master" alt="Release Pipelines"></a>
<a href="https://github.com/wailsapp/wails/workflows/latest-pre/badge.svg?branch=masterr" rel="nofollow"><img src="https://github.com/wailsapp/wails/workflows/latest-pre/badge.svg?branch=master" alt="Pre-Release Pipelines"></a>
</p> </p>
The traditional method of providing web interfaces to Go programs is via a built-in web server. Wails offers a different approach: it provides the ability to wrap both Go code and a web frontend into a single binary. Tools are provided to make this easy for you by handling project creation, compilation and bundling. All you have to do is get creative! The traditional method of providing web interfaces to Go programs is via a built-in web server. Wails offers a different approach: it provides the ability to wrap both Go code and a web frontend into a single binary. Tools are provided to make this easy for you by handling project creation, compilation and bundling. All you have to do is get creative!

View File

@@ -557,7 +557,7 @@ func ldFlags(po *ProjectOptions, buildMode string) string {
} }
// Add windows flags // Add windows flags
if po.Platform == "windows" && buildMode == BuildModeProd { if po.Platform == "windows" {
ldflags += "-H windowsgui " ldflags += "-H windowsgui "
} }

View File

@@ -5,7 +5,7 @@ const routes: Routes = [];
@NgModule({ @NgModule({
imports: [ imports: [
RouterModule.forRoot(routes) RouterModule.forRoot(routes,{useHash:true})
], ],
exports: [RouterModule] exports: [RouterModule]
}) })

View File

@@ -7,18 +7,25 @@
"start": "sirv public" "start": "sirv public"
}, },
"devDependencies": { "devDependencies": {
"@babel/core": "^7.11.6",
"@babel/plugin-syntax-dynamic-import": "^7.8.3",
"@babel/plugin-transform-runtime": "^7.11.5",
"@babel/preset-env": "^7.11.5",
"@rollup/plugin-commonjs": "^14.0.0", "@rollup/plugin-commonjs": "^14.0.0",
"@rollup/plugin-image": "^2.0.5", "@rollup/plugin-image": "^2.0.5",
"@rollup/plugin-node-resolve": "^8.0.0", "@rollup/plugin-node-resolve": "^8.0.0",
"core-js": "^3.6.5",
"rollup": "^2.3.4", "rollup": "^2.3.4",
"rollup-plugin-babel": "^4.4.0",
"rollup-plugin-livereload": "^2.0.0", "rollup-plugin-livereload": "^2.0.0",
"rollup-plugin-polyfill": "^3.0.0",
"rollup-plugin-svelte": "^6.0.0", "rollup-plugin-svelte": "^6.0.0",
"rollup-plugin-terser": "^7.0.0", "rollup-plugin-terser": "^7.0.0",
"svelte": "^3.0.0" "svelte": "^3.0.0"
}, },
"dependencies": { "dependencies": {
"sirv-cli": "^1.0.0", "sirv-cli": "^1.0.0",
"@wailsapp/runtime": "^1.0.10", "@wailsapp/runtime": "^1.0.10",
"svelte-simple-modal": "^0.6.0" "svelte-simple-modal": "^0.6.0"
} }
} }

View File

@@ -4,6 +4,8 @@ import commonjs from '@rollup/plugin-commonjs';
import livereload from 'rollup-plugin-livereload'; import livereload from 'rollup-plugin-livereload';
import { terser } from 'rollup-plugin-terser'; import { terser } from 'rollup-plugin-terser';
import image from '@rollup/plugin-image'; import image from '@rollup/plugin-image';
import babel from 'rollup-plugin-babel';
import polyfill from 'rollup-plugin-polyfill';
const production = !process.env.ROLLUP_WATCH; const production = !process.env.ROLLUP_WATCH;
@@ -67,6 +69,37 @@ export default {
// browser on changes when not in production // browser on changes when not in production
!production && livereload('public'), !production && livereload('public'),
// Credit: https://blog.az.sg/posts/svelte-and-ie11/
babel({
extensions: [ '.js', '.jsx', '.es6', '.es', '.mjs', '.svelte', '.html' ],
runtimeHelpers: true,
exclude: [ 'node_modules/@babel/**', 'node_modules/core-js/**' ],
presets: [
[
'@babel/preset-env',
{
targets: '> 0.25%, not dead, IE 11',
modules: false,
spec: true,
useBuiltIns: 'usage',
forceAllTransforms: true,
corejs: 3,
},
]
],
plugins: [
'@babel/plugin-syntax-dynamic-import',
[
'@babel/plugin-transform-runtime',
{
useESModules: true
}
]
]
}),
polyfill(['@webcomponents/webcomponentsjs']),
// If we're building for production (npm run build // If we're building for production (npm run build
// instead of npm run dev), minify // instead of npm run dev), minify
production && terser() production && terser()

View File

@@ -2,29 +2,33 @@
html, html,
body { body {
background-color: white; background-color: white;
color: black;
width: 100%; width: 100%;
height: 100%; height: 100%;
margin: 0; margin: 0;
} }
input {
background-color: rgb(254,254,254);
color: black;
}
.container { .container {
display: block; display: block;
width:100%; width:100%;
text-align: center; text-align: center;
margin-top: 3rem; margin-top: 1rem;
font-size: 2rem; font-size: 2rem;
} }
button { button {
font-size: 1rem; font-size: 1rem;
} background-color: white;
color: black;
#newCounter {
color: white;
} }
.result { .result {
margin-top: 3rem; margin-top: 1rem;
text-align: center; text-align: center;
font-size: 2rem; font-size: 2rem;
} }

View File

@@ -36,7 +36,7 @@ function start() {
mystore.set(newValue); mystore.set(newValue);
}; };
mystore.subscribe( (state) => { mystore.subscribe( function(state) {
document.getElementById('counter').innerText = state; document.getElementById('counter').innerText = state;
}); });

View File

@@ -1,4 +1,4 @@
package cmd package cmd
// Version - Wails version // Version - Wails version
const Version = "v1.7.2-pre8" const Version = "v1.8.0"

View File

@@ -1431,6 +1431,13 @@ struct webview_priv
style = WS_OVERLAPPED | WS_CAPTION | WS_MINIMIZEBOX | WS_SYSMENU; style = WS_OVERLAPPED | WS_CAPTION | WS_MINIMIZEBOX | WS_SYSMENU;
} }
// Scale
// Credit: https://github.com/webview/webview/issues/54#issuecomment-379528243
HDC hDC = GetDC(NULL);
w->width = GetDeviceCaps(hDC, 88)*w->width/96.0;
w->height = GetDeviceCaps(hDC, 90)*w->height/96.0;
ReleaseDC(NULL, hDC);
rect.left = 0; rect.left = 0;
rect.top = 0; rect.top = 0;
rect.right = w->width; rect.right = w->width;

View File

@@ -45,7 +45,7 @@ type Store struct {
data reflect.Value data reflect.Value
dataType reflect.Type dataType reflect.Type
eventPrefix string eventPrefix string
callbacks []func(interface{}) callbacks []reflect.Value
runtime *Runtime runtime *Runtime
notifySynchronously bool notifySynchronously bool
@@ -143,10 +143,13 @@ func (s *Store) notify() {
// Execute callbacks // Execute callbacks
for _, callback := range s.callbacks { for _, callback := range s.callbacks {
// Build args
args := []reflect.Value{s.data}
if s.notifySynchronously { if s.notifySynchronously {
callback(s.data) callback.Call(args)
} else { } else {
go callback(s.data) go callback.Call(args)
} }
} }
@@ -184,11 +187,50 @@ func (s *Store) Set(data interface{}) error {
return nil return nil
} }
// callbackCheck ensures the given function to Subscribe() is
// of the correct signature. Absolutely cannot wait for
// generics to land rather than writing this nonsense.
func (s *Store) callbackCheck(callback interface{}) error {
// Get type
callbackType := reflect.TypeOf(callback)
// Check callback is a function
if callbackType.Kind() != reflect.Func {
return fmt.Errorf("invalid value given to store.Subscribe(). Expected 'func(%s)'", s.dataType.String())
}
// Check input param
if callbackType.NumIn() != 1 {
return fmt.Errorf("invalid number of parameters given in callback function. Expected 1")
}
// Check input data type
if callbackType.In(0) != s.dataType {
return fmt.Errorf("invalid type for input parameter given in callback function. Expected %s, got %s", s.dataType.String(), callbackType.In(0))
}
// Check output param
if callbackType.NumOut() != 0 {
return fmt.Errorf("invalid number of return parameters given in callback function. Expected 0")
}
return nil
}
// Subscribe will subscribe to updates to the store by // Subscribe will subscribe to updates to the store by
// providing a callback. Any updates to the store are sent // providing a callback. Any updates to the store are sent
// to the callback // to the callback
func (s *Store) Subscribe(callback func(interface{})) { func (s *Store) Subscribe(callback interface{}) {
s.callbacks = append(s.callbacks, callback)
err := s.callbackCheck(callback)
if err != nil {
log.Fatal(err)
}
callbackFunc := reflect.ValueOf(callback)
s.callbacks = append(s.callbacks, callbackFunc)
} }
// updaterCheck ensures the given function to Update() is // updaterCheck ensures the given function to Update() is
@@ -244,5 +286,8 @@ func (s *Store) Update(updater interface{}) {
results := reflect.ValueOf(updater).Call(args) results := reflect.ValueOf(updater).Call(args)
// We will only have 1 result. Set the store to it // We will only have 1 result. Set the store to it
s.Set(results[0].Interface()) err = s.Set(results[0].Interface())
if err != nil && s.errorHandler != nil {
s.errorHandler(err)
}
} }