mirror of
https://github.com/wavetermdev/wails.git
synced 2026-04-22 15:26:15 -07:00
Compare commits
18 Commits
v0.18.15-pre
...
v1.0.0
| Author | SHA1 | Date | |
|---|---|---|---|
| a6fa5feb0c | |||
| 67a52b2a57 | |||
| 99d22fdcb7 | |||
| 7051ffd425 | |||
| bac823566c | |||
| 401ebee719 | |||
| b5b92c4afa | |||
| 2c2aee2d30 | |||
| 806b1aa8e0 | |||
| 416bd7bfc4 | |||
| aca72d3f7a | |||
| ad20e2622b | |||
| daeda501f4 | |||
| fb1e8647bc | |||
| 723236f348 | |||
| 394a823d82 | |||
| d572418ec3 | |||
| 8c7480d277 |
+19
-18
@@ -2,21 +2,22 @@
|
||||
|
||||
Wails is what it is because of the time and effort given by these great people. A huge thank you to each and every one!
|
||||
|
||||
* [Dustin Krysak](https://wiki.ubuntu.com/bashfulrobot)
|
||||
* [Qais Patankar](https://github.com/qaisjp)
|
||||
* [Anthony Lee](https://github.com/alee792)
|
||||
* [Adrian Lanzafame](https://github.com/lanzafame)
|
||||
* [Mattn](https://github.com/mattn)
|
||||
* [0xflotus](https://github.com/0xflotus)
|
||||
* [Michael D Henderson](https://github.com/mdhender)
|
||||
* [fred2104](https://github.com/fishfishfish2104)
|
||||
* [intelwalk](https://github.com/intelwalk)
|
||||
* [Mark Stenglein](https://github.com/ocelotsloth)
|
||||
* [admin_3.exe](https://github.com/bh90210)
|
||||
* [iceleo-com](https://github.com/iceleo-com)
|
||||
* [fallendusk](https://github.com/fallendusk)
|
||||
* [Florian Didran](https://github.com/fdidron)
|
||||
* [Nikolai Zimmermann](https://github.com/Chronophylos)
|
||||
* [Toyam Cox](https://github.com/Vaelatern)
|
||||
* [Robin Eklind](https://github.com/mewmew)
|
||||
* [Kris Raney](https://github.com/kraney)
|
||||
* [Dustin Krysak](https://wiki.ubuntu.com/bashfulrobot)
|
||||
* [Qais Patankar](https://github.com/qaisjp)
|
||||
* [Anthony Lee](https://github.com/alee792)
|
||||
* [Adrian Lanzafame](https://github.com/lanzafame)
|
||||
* [Mattn](https://github.com/mattn)
|
||||
* [0xflotus](https://github.com/0xflotus)
|
||||
* [Michael D Henderson](https://github.com/mdhender)
|
||||
* [fred2104](https://github.com/fishfishfish2104)
|
||||
* [intelwalk](https://github.com/intelwalk)
|
||||
* [Mark Stenglein](https://github.com/ocelotsloth)
|
||||
* [admin_3.exe](https://github.com/bh90210)
|
||||
* [iceleo-com](https://github.com/iceleo-com)
|
||||
* [fallendusk](https://github.com/fallendusk)
|
||||
* [Florian Didran](https://github.com/fdidron)
|
||||
* [Nikolai Zimmermann](https://github.com/Chronophylos)
|
||||
* [Toyam Cox](https://github.com/Vaelatern)
|
||||
* [Robin Eklind](https://github.com/mewmew)
|
||||
* [Kris Raney](https://github.com/kraney)
|
||||
* [Jack Mordaunt](https://github.com/JackMordaunt)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<p align="center" style="text-align: center">
|
||||
<img src="https://github.com/wailsapp/docs/raw/master/.vuepress/public/media/logo_cropped.png" width="40%"><br/>
|
||||
<img src="logo_cropped.png" width="40%"><br/>
|
||||
</p>
|
||||
<p align="center">
|
||||
A framework for building desktop applications using Go & Web Technologies.<br/><br/>
|
||||
@@ -16,6 +16,8 @@
|
||||
|
||||
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 official docs can be found at [https://wails.app](https://wails.app).
|
||||
|
||||
## Features
|
||||
|
||||
- Use standard Go libraries/frameworks for the backend
|
||||
@@ -28,9 +30,6 @@ The traditional method of providing web interfaces to Go programs is via a built
|
||||
- Powerful cli tool
|
||||
- Multiplatform
|
||||
|
||||
## Project Status
|
||||
|
||||
Wails is currently in Beta. Please make sure you read the [Project Status](https://wails.app/project_status.html) if you are interested in using this project.
|
||||
|
||||
## Installation
|
||||
|
||||
@@ -126,8 +125,7 @@ And without [these people](CONTRIBUTORS.md), it wouldn't be what it is today. A
|
||||
|
||||
Special Mentions:
|
||||
|
||||
* [Bill Kennedy](https://twitter.com/goinggodotnet) - Go guru, encourager and all-round nice guy, whose infectious energy and inspiration powered me on when I had none left.
|
||||
* [Mark Bates](https://github.com/markbates) - Creator of [Packr](https://github.com/gobuffalo/packr), inspiration for packing strategies which fed into some of the tooling.
|
||||
* [Byron](https://github.com/bh90210) - At times, Byron has single handedly kept this project alive. Without his incredible input, we never would have got to v1.
|
||||
|
||||
This project was mainly coded to the following albums:
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ package wails
|
||||
|
||||
import (
|
||||
"os"
|
||||
"runtime"
|
||||
"syscall"
|
||||
|
||||
"github.com/syossan27/tebata"
|
||||
@@ -43,7 +44,7 @@ func CreateApp(optionalConfig ...*AppConfig) *App {
|
||||
}
|
||||
|
||||
result := &App{
|
||||
logLevel: "info",
|
||||
logLevel: "debug",
|
||||
renderer: renderer.NewWebView(),
|
||||
ipc: ipc.NewManager(),
|
||||
bindingManager: binding.NewManager(),
|
||||
@@ -65,6 +66,9 @@ func CreateApp(optionalConfig ...*AppConfig) *App {
|
||||
result.config.DisableInspector = true
|
||||
}
|
||||
|
||||
// Platform specific init
|
||||
platformInit()
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
@@ -102,6 +106,11 @@ func (a *App) start() error {
|
||||
return err
|
||||
}
|
||||
|
||||
// Enable console for Windows debug builds
|
||||
if runtime.GOOS == "windows" && BuildMode == cmd.BuildModeDebug {
|
||||
a.renderer.EnableConsole()
|
||||
}
|
||||
|
||||
// Start signal handler
|
||||
t := tebata.New(os.Interrupt, os.Kill, syscall.SIGTERM, syscall.SIGINT, syscall.SIGKILL)
|
||||
t.Reserve(func() {
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
// +build +linux +darwin !windows
|
||||
|
||||
package wails
|
||||
|
||||
func platformInit() {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
// +build windows !linux !darwin
|
||||
|
||||
package wails
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"syscall"
|
||||
)
|
||||
|
||||
func platformInit() {
|
||||
err := SetProcessDPIAware()
|
||||
if err != nil {
|
||||
log.Fatalf(err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
// SetProcessDPIAware via user32.dll
|
||||
// https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setprocessdpiaware
|
||||
// Also, thanks Jack Mordaunt! https://github.com/wailsapp/wails/issues/293
|
||||
func SetProcessDPIAware() error {
|
||||
status, r, err := syscall.NewLazyDLL("user32.dll").NewProc("SetProcessDPIAware").Call()
|
||||
if status == 0 {
|
||||
return fmt.Errorf("exit status %d: %v %v", status, r, err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@@ -9,4 +9,4 @@
|
||||
last 2 versions
|
||||
Firefox ESR
|
||||
not dead
|
||||
not IE 9-11 # For IE 9-11 support, remove 'not'.
|
||||
IE 9-11 # For IE 9-11 support, remove 'not'.
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
"@angular/platform-browser-dynamic": "~8.0.1",
|
||||
"@angular/router": "~8.0.1",
|
||||
"@wailsapp/runtime": "^1.0.0",
|
||||
"core-js": "^3.4.4",
|
||||
"ngx-build-plus": "^8.0.3",
|
||||
"rxjs": "~6.4.0",
|
||||
"tslib": "^1.9.0",
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import 'core-js/stable';
|
||||
import { enableProdMode } from '@angular/core';
|
||||
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
"module": "esnext",
|
||||
"moduleResolution": "node",
|
||||
"importHelpers": true,
|
||||
"target": "es2015",
|
||||
"target": "es5",
|
||||
"typeRoots": [
|
||||
"node_modules/@types"
|
||||
],
|
||||
@@ -20,4 +20,4 @@
|
||||
"dom"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -11,7 +11,7 @@ func basic() string {
|
||||
|
||||
func main() {
|
||||
|
||||
js := mewn.String("./frontend/dist/my-app/main-es2015.js")
|
||||
js := mewn.String("./frontend/dist/my-app/main.js")
|
||||
css := mewn.String("./frontend/dist/my-app/styles.css")
|
||||
|
||||
app := wails.CreateApp(&wails.AppConfig{
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package cmd
|
||||
|
||||
// Version - Wails version
|
||||
const Version = "v0.18.15-pre"
|
||||
const Version = "v1.0.0"
|
||||
|
||||
@@ -31,3 +31,5 @@ require (
|
||||
gopkg.in/AlecAivazis/survey.v1 v1.8.4
|
||||
gopkg.in/yaml.v3 v3.0.0-20190709130402-674ba3eaed22
|
||||
)
|
||||
|
||||
go 1.13
|
||||
|
||||
@@ -3,10 +3,12 @@ package interfaces
|
||||
import (
|
||||
"github.com/wailsapp/wails/lib/messages"
|
||||
)
|
||||
|
||||
// Renderer is an interface describing a Wails target to render the app to
|
||||
type Renderer interface {
|
||||
Initialise(AppConfig, IPCManager, EventManager) error
|
||||
Run() error
|
||||
EnableConsole()
|
||||
|
||||
// Binding
|
||||
NewBinding(bindingName string) error
|
||||
|
||||
@@ -74,6 +74,10 @@ func (h *Bridge) evalJS(js string, mtype messageType) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// EnableConsole not needed for bridge!
|
||||
func (h *Bridge) EnableConsole() {
|
||||
}
|
||||
|
||||
func (h *Bridge) injectCSS(css string) {
|
||||
// Minify css to overcome issues in the browser with carriage returns
|
||||
minified, err := htmlmin.Minify([]byte(css), &htmlmin.Options{
|
||||
|
||||
File diff suppressed because one or more lines are too long
+19
-6
@@ -19,12 +19,13 @@ import (
|
||||
// WebView defines the main webview application window
|
||||
// Default values in []
|
||||
type WebView struct {
|
||||
window wv.WebView // The webview object
|
||||
ipc interfaces.IPCManager
|
||||
log *logger.CustomLogger
|
||||
config interfaces.AppConfig
|
||||
eventManager interfaces.EventManager
|
||||
bindingCache []string
|
||||
window wv.WebView // The webview object
|
||||
ipc interfaces.IPCManager
|
||||
log *logger.CustomLogger
|
||||
config interfaces.AppConfig
|
||||
eventManager interfaces.EventManager
|
||||
bindingCache []string
|
||||
enableConsole bool
|
||||
}
|
||||
|
||||
// NewWebView returns a new WebView struct
|
||||
@@ -103,6 +104,11 @@ func (w *WebView) evalJS(js string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// EnableConsole enables the console!
|
||||
func (w *WebView) EnableConsole() {
|
||||
w.enableConsole = true
|
||||
}
|
||||
|
||||
// Escape the Javascripts!
|
||||
func escapeJS(js string) (string, error) {
|
||||
result := strings.Replace(js, "\\", "\\\\", -1)
|
||||
@@ -172,6 +178,13 @@ func (w *WebView) Run() error {
|
||||
|
||||
w.log.Info("Running...")
|
||||
|
||||
// Inject firebug in debug mode on Windows
|
||||
if w.enableConsole {
|
||||
w.log.Debug("Enabling Wails console")
|
||||
console := mewn.String("../../runtime/assets/console.js")
|
||||
w.evalJS(console)
|
||||
}
|
||||
|
||||
// Runtime assets
|
||||
wailsRuntime := mewn.String("../../runtime/assets/wails.js")
|
||||
w.evalJS(wailsRuntime)
|
||||
|
||||
@@ -13,7 +13,7 @@ package webview
|
||||
#cgo linux openbsd freebsd CFLAGS: -DWEBVIEW_GTK=1 -Wno-deprecated-declarations
|
||||
#cgo linux openbsd freebsd pkg-config: gtk+-3.0 webkit2gtk-4.0
|
||||
|
||||
#cgo windows CFLAGS: -DWEBVIEW_WINAPI=1 -std=c99 -DUNICODE=1
|
||||
#cgo windows CFLAGS: -DWEBVIEW_WINAPI=1 -std=c99
|
||||
#cgo windows LDFLAGS: -lole32 -lcomctl32 -loleaut32 -luuid -lgdi32
|
||||
|
||||
#cgo darwin CFLAGS: -DWEBVIEW_COCOA=1 -x objective-c
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 122 KiB |
@@ -0,0 +1,175 @@
|
||||
(function () {
|
||||
|
||||
window.wailsconsole = {};
|
||||
|
||||
var debugconsole = document.createElement("div");
|
||||
var header = document.createElement("div");
|
||||
var consoleOut = document.createElement("div");
|
||||
|
||||
|
||||
document.addEventListener('keyup', logKey);
|
||||
|
||||
debugconsole.id = "wailsdebug";
|
||||
debugconsole.style.fontSize = "18px";
|
||||
debugconsole.style.width = "100%";
|
||||
debugconsole.style.height = "35%";
|
||||
debugconsole.style.maxHeight = "35%";
|
||||
debugconsole.style.position = "fixed";
|
||||
debugconsole.style.left = "0px";
|
||||
debugconsole.style.backgroundColor = "rgba(255,255,255,0.8)";
|
||||
debugconsole.style.borderTop = '1px solid black';
|
||||
debugconsole.style.color = "black";
|
||||
debugconsole.style.display = "none";
|
||||
|
||||
header.style.width = "100%";
|
||||
header.style.height = "30px";
|
||||
header.style.display = "block";
|
||||
// header.style.paddingTop = "3px";
|
||||
header.style.verticalAlign = "middle";
|
||||
header.style.paddingLeft = "10px";
|
||||
header.style.background = "rgba(255,255,255,0.8)";
|
||||
header.innerHTML = " <span style='vertical-align: middle'> Wails Console > <input id='conin' style='border: solid 1px black; width: 50%'></input><span style='padding-left: 5px; cursor:pointer;' onclick='window.wailsconsole.clearConsole()'>Clear</span></span>";
|
||||
|
||||
consoleOut.style.position = "absolute";
|
||||
consoleOut.style.width = "100%";
|
||||
consoleOut.style.height = "auto";
|
||||
consoleOut.style.top = "30px";
|
||||
// consoleOut.style.paddingLeft = "10px";
|
||||
consoleOut.style.bottom = "0px";
|
||||
consoleOut.style.backgroundColor = "rgba(200,200,200,1)";
|
||||
consoleOut.style.overflowY = "scroll";
|
||||
consoleOut.style.msOverflowStyle = "-ms-autohiding-scrollbar";
|
||||
|
||||
debugconsole.appendChild(header);
|
||||
debugconsole.appendChild(consoleOut);
|
||||
document.body.appendChild(debugconsole);
|
||||
console.log(debugconsole.style.display)
|
||||
|
||||
function logKey(e) {
|
||||
var conin = document.getElementById('conin');
|
||||
if (e.which == 27 && e.shiftKey) {
|
||||
toggleConsole(conin);
|
||||
}
|
||||
if (e.which == 13 && consoleVisible()) {
|
||||
var command = conin.value.trim();
|
||||
if (command.length > 0) {
|
||||
console.log("> " + command)
|
||||
try {
|
||||
evaluateInput(command);
|
||||
} catch (e) {
|
||||
console.error(e.message);
|
||||
}
|
||||
conin.value = "";
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
function consoleVisible() {
|
||||
return debugconsole.style.display == "block";
|
||||
}
|
||||
|
||||
function toggleConsole(conin) {
|
||||
var display = "none"
|
||||
if (debugconsole.style.display == "none") display = "block";
|
||||
debugconsole.style.display = display;
|
||||
if (display == "block") {
|
||||
conin.focus();
|
||||
}
|
||||
}
|
||||
|
||||
function evaluateExpression(expression) {
|
||||
|
||||
var pathSegments = [].concat(expression.split('.'));
|
||||
if (pathSegments[0] == 'window') {
|
||||
pathSegments.shift()
|
||||
}
|
||||
var currentObject = window;
|
||||
for (var i = 0; i < pathSegments.length; i++) {
|
||||
var pathSegment = pathSegments[i];
|
||||
if (currentObject[pathSegment] == undefined) {
|
||||
return false;
|
||||
}
|
||||
currentObject = currentObject[pathSegment];
|
||||
}
|
||||
console.log(JSON.stringify(currentObject));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
function evaluateInput(command) {
|
||||
try {
|
||||
if (evaluateExpression(command)) {
|
||||
return
|
||||
} else {
|
||||
eval(command);
|
||||
}
|
||||
} catch (e) {
|
||||
console.error(e.message)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Set us up as a listener
|
||||
function hookIntoIPC() {
|
||||
if (window.wails && window.wails._ && window.wails._.AddIPCListener) {
|
||||
window.wails._.AddIPCListener(processIPCMessage);
|
||||
} else {
|
||||
setTimeout(hookIntoIPC, 100);
|
||||
}
|
||||
}
|
||||
hookIntoIPC();
|
||||
|
||||
function processIPCMessage(message) {
|
||||
console.log(message);
|
||||
var parsedMessage;
|
||||
try {
|
||||
parsedMessage = JSON.parse(message);
|
||||
} catch (e) {
|
||||
console.error("Error in parsing IPC message: " + e.message);
|
||||
return false;
|
||||
}
|
||||
var logmessage = "[IPC] "
|
||||
switch (parsedMessage.type) {
|
||||
case 'call':
|
||||
logmessage += " Call: " + parsedMessage.payload.bindingName;
|
||||
var params = "";
|
||||
var parsedParams = JSON.parse(parsedMessage.payload.data);
|
||||
if (parsedParams.length > 0) {
|
||||
params = parsedParams;
|
||||
}
|
||||
logmessage += "(" + params + ")";
|
||||
break;
|
||||
case 'log':
|
||||
logmessage += "Log (" + parsedMessage.payload.level + "): " + parsedMessage.payload.message;
|
||||
break;
|
||||
default:
|
||||
logmessage = message;
|
||||
}
|
||||
console.log(logmessage);
|
||||
}
|
||||
|
||||
window.wailsconsole.clearConsole = function () {
|
||||
consoleOut.innerHTML = "";
|
||||
}
|
||||
|
||||
console.log = function (message) {
|
||||
consoleOut.innerHTML = consoleOut.innerHTML + "<span style='padding-left: 5px'>" + message + '</span><br/>';
|
||||
consoleOut.scrollTop = consoleOut.scrollHeight;
|
||||
|
||||
};
|
||||
console.error = function (message) {
|
||||
consoleOut.innerHTML = consoleOut.innerHTML + "<span style='color:red; padding-left: 5px'> Error: " + message + '</span><br/>';
|
||||
consoleOut.scrollTop = consoleOut.scrollHeight;
|
||||
};
|
||||
// var h = document.getElementsByTagName("html")[0];
|
||||
// console.log("html margin: " + h.style.marginLeft);
|
||||
// console.log("html padding: " + h.style.paddingLeft);
|
||||
|
||||
// setInterval(function() { console.log("test");}, 1000);
|
||||
// setInterval(function() { console.error("oops");}, 3000);
|
||||
// var script = document.createElement('script');
|
||||
// script.src = "https://cdnjs.cloudflare.com/ajax/libs/firebug-lite/1.4.0/firebug-lite.js#startOpened=true";
|
||||
// document.body.appendChild(script);
|
||||
|
||||
})();
|
||||
File diff suppressed because one or more lines are too long
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user