mirror of
https://github.com/wavetermdev/wails.git
synced 2026-08-05 13:53:43 -07:00
Initial commit of simplification
This commit is contained in:
+6
-4
File diff suppressed because one or more lines are too long
@@ -2,7 +2,6 @@ package wails
|
||||
|
||||
import (
|
||||
"github.com/wailsapp/wails/cmd"
|
||||
"github.com/wailsapp/wails/cmd/frameworks"
|
||||
)
|
||||
|
||||
// -------------------------------- Compile time Flags ------------------------------
|
||||
@@ -18,7 +17,6 @@ type App struct {
|
||||
cli *cmd.Cli // In debug mode, we have a cli
|
||||
renderer Renderer // The renderer is what we will render the app to
|
||||
logLevel string // The log level of the app
|
||||
headless bool // Indicates if the app should be started in headless mode
|
||||
ipc *ipcManager // Handles the IPC calls
|
||||
log *CustomLogger // Logger
|
||||
bindingManager *bindingManager // Handles binding of Go code to renderer
|
||||
@@ -84,7 +82,7 @@ func (a *App) start() error {
|
||||
a.log.Info("Starting")
|
||||
|
||||
// Check if we are to run in headless mode
|
||||
if a.headless {
|
||||
if DebugMode == "true" {
|
||||
a.renderer = &Headless{}
|
||||
}
|
||||
|
||||
@@ -109,11 +107,6 @@ func (a *App) start() error {
|
||||
return err
|
||||
}
|
||||
|
||||
// Inject framework, if specified
|
||||
if frameworks.FrameworkToUse != nil {
|
||||
a.renderer.InjectFramework(frameworks.FrameworkToUse.JS, frameworks.FrameworkToUse.CSS)
|
||||
}
|
||||
|
||||
// Inject CSS
|
||||
a.renderer.AddCSSList(a.cssCache)
|
||||
|
||||
|
||||
+1
-1
@@ -15,7 +15,7 @@ func (app *App) setupCli() *cmd.Cli {
|
||||
// Setup cli to handle loglevel and headless flags
|
||||
result.
|
||||
StringFlag("loglevel", "Sets the log level [debug|info|error|panic|fatal]. Default debug", &app.logLevel).
|
||||
BoolFlag("headless", "Runs the app in headless mode", &app.headless).
|
||||
// BoolFlag("headless", "Runs the app in headless mode", &app.headless).
|
||||
Action(app.start)
|
||||
|
||||
// Banner
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1,15 +0,0 @@
|
||||
/*
|
||||
Wails Bridge (c) 2019-present Lea Anthony
|
||||
|
||||
This prod version is to get around having to rewrite your code
|
||||
for production. When doing a release build, this file will be used
|
||||
instead of the full version.
|
||||
*/
|
||||
|
||||
export default {
|
||||
// The main function
|
||||
// Passes the main Wails object to the callback if given.
|
||||
Start: function (callback) {
|
||||
return callback();
|
||||
}
|
||||
};
|
||||
Vendored
-2
File diff suppressed because one or more lines are too long
+5
-4
@@ -12,7 +12,8 @@
|
||||
```
|
||||
|
||||
The given callback (startApp in the example) will be called
|
||||
when the bridge has successfully initialised.
|
||||
when the bridge has successfully initialised. It passes the
|
||||
window.wails object back, in case it is not accessible directly.
|
||||
*/
|
||||
|
||||
// Bridge object
|
||||
@@ -169,7 +170,7 @@ function startBridge() {
|
||||
window.wailsbridge.log("Wails Ready");
|
||||
if (window.wailsbridge.callback) {
|
||||
window.wailsbridge.log("Notifying application");
|
||||
window.wailsbridge.callback();
|
||||
window.wailsbridge.callback(window.wails);
|
||||
}
|
||||
});
|
||||
window.wailsbridge.log("Loaded Wails Runtime");
|
||||
@@ -181,13 +182,13 @@ function startBridge() {
|
||||
// Binding
|
||||
case "b":
|
||||
var binding = message.data.slice(1);
|
||||
//window.wailsbridge.log("Binding: " + binding)
|
||||
//log("Binding: " + binding)
|
||||
window.wails._.newBinding(binding);
|
||||
break;
|
||||
// Call back
|
||||
case "c":
|
||||
var callbackData = message.data.slice(1);
|
||||
// window.wailsbridge.log("Callback = " + callbackData);
|
||||
log("Callback = " + callbackData);
|
||||
window.wails._.callback(callbackData);
|
||||
break;
|
||||
}
|
||||
+4
-2
@@ -9,7 +9,9 @@
|
||||
export default {
|
||||
// The main function
|
||||
// Passes the main Wails object to the callback if given.
|
||||
Start: function (callback) {
|
||||
return callback();
|
||||
Start: function(callback) {
|
||||
if (callback) {
|
||||
callback();
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -1,229 +0,0 @@
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<title>Wails Headless</title>
|
||||
<style>
|
||||
.wails-reconnect-overlay {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: rgba(0, 0, 0, 0.6);
|
||||
font-family: sans-serif;
|
||||
display: none;
|
||||
z-index: 999999;
|
||||
}
|
||||
|
||||
.wails-reconnect-overlay-content {
|
||||
padding: 20px 30px;
|
||||
text-align: center;
|
||||
width: 20em;
|
||||
position: relative;
|
||||
height: 14em;
|
||||
border-radius: 1em;
|
||||
margin: 5% auto 0;
|
||||
background-color: white;
|
||||
box-shadow: 1px 1px 20px 3px;
|
||||
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC8AAAAuCAMAAACPpbA7AAAAqFBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQAAAAAAAAEBAQAAAAAAAAAAAAEBAQEBAQDAwMBAQEAAAABAQEAAAAAAAAAAAABAQEAAAAAAAACAgICAgIBAQEAAAAAAAAAAAAAAAAAAAAAAAABAQEAAAACAgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBQWKCj6oAAAAN3RSTlMALiIqDhkGBAswJjP0GxP6NR4W9/ztjRDMhWU50G9g5eHXvbZ9XEI9xZTcqZl2aldKo55QwoCvZUgzhAAAAs9JREFUSMeNleeWqjAUhU0BCaH3Itiw9zKT93+zG02QK1hm/5HF+jzZJ6fQe6cyXE+jg9X7o9wxuylIIf4Tv2V3+bOrEXnf8dwQ/KQIGDN2/S+4OmVCVXL/ScBnfibxURqIByP/hONE8r8T+bDMlQ98KSl7Y8hzjpS8v1qtDh8u5f8KQpGpfnPPhqG8JeogN37Hq9eaN2xRhIwAaGnvws8F1ShxqK5ob2twYi1FAMD4rXsYtnC/JEiRbl4cUrCWhnMCLRFemXezXbb59QK4WASOsm6n2W1+4CBT2JmtzQ6fsrbGubR/NFbd2g5Y179+5w/GEHaKsHjYCet7CgrXU3txarNC7YxOVJtIj4/ERzMdZfzc31hp+8cD6eGILgarZY9uZ12hAs03vfBD9C171gS5Omz7OcvxALQIn4u8RRBBBcsi9WW2woO9ipLgfzpYlggg3ZRdROUC8KT7QLqq3W9KB5BbdFVg4929kdwp6+qaZnMCCNBdj+NyN1W885Ry/AL3D4AQbsVV4noCiM/C83kyYq80XlDAYQtralOiDzoRAHlotWl8q2tjvYlOgcg1A8jEApZa+C06TBdAz2Qv0wu11I/zZOyJQ6EwGez2P2b8PIQr1hwwnAZsAxwA4UAYOyXUxM/xp6tHAn4GUmPGM9R28oVxgC0e/zQJJI6DyhyZ1r7uzRQhpcW7x7vTaWSzKSG6aep77kroTEl3U81uSVaUTtgEINfC8epx+Q4F9SpplHG84Ek6m4RAq9/TLkOBrxyeuddZhHvGIp1XXfFy3Z3vtwNblKGiDn+J+92vwwABHghj7HnzlS1H5kB49AZvdGCFgiBPq69qfXPr3y++yilF0ON4R8eR7spAsLpZ95NqAW5tab1c4vkZm6aleajchMwYTdILQQTwE2OV411ZM9WztDjPql12caBi6gDpUKmDd4U1XNdQxZ4LIXQ5/Tr4P7I9tYcFrDK3AAAAAElFTkSuQmCC");
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
}
|
||||
|
||||
.wails-reconnect-overlay-title {
|
||||
font-size: 2em;
|
||||
}
|
||||
|
||||
.wails-reconnect-overlay-message {
|
||||
font-size: 1.3em;
|
||||
}
|
||||
|
||||
/* https://codepen.io/EastingAndNorthing/pen/aNWrZz - Cheers Mark! */
|
||||
|
||||
.wails-reconnect-overlay-loadingspinner {
|
||||
pointer-events: none;
|
||||
width: 2.5em;
|
||||
height: 2.5em;
|
||||
border: 0.4em solid transparent;
|
||||
border-color: #eee;
|
||||
border-top-color: #3E67EC;
|
||||
border-radius: 50%;
|
||||
animation: loadingspin 1s linear infinite;
|
||||
margin: auto;
|
||||
padding: 2.5em;
|
||||
}
|
||||
|
||||
@keyframes loadingspin {
|
||||
100% {
|
||||
transform: rotate(360deg)
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="wails-reconnect-overlay">
|
||||
<div class="wails-reconnect-overlay-content">
|
||||
<div class="wails-reconnect-overlay-title">Disconnected</div><br>
|
||||
<div class="wails-reconnect-overlay-loadingspinner"></div><br>
|
||||
<div class="wails-reconnect-overlay-message">Waiting for backend</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="app"></div>
|
||||
|
||||
<script id="wails-headless-runtime">
|
||||
(function () {
|
||||
|
||||
var websocket = null;
|
||||
var connectTimer = null;
|
||||
var reconnectOverlay = document.querySelector(".wails-reconnect-overlay");
|
||||
var connectionState = "disconnected";
|
||||
|
||||
function showReconnectOverlay() {
|
||||
reconnectOverlay.style.display = 'block';
|
||||
}
|
||||
|
||||
function hideReconnectOverlay() {
|
||||
reconnectOverlay.style.display = 'none';
|
||||
}
|
||||
|
||||
window.external = {
|
||||
invoke: function (msg) {
|
||||
websocket.send(msg);
|
||||
}
|
||||
};
|
||||
|
||||
// Adds a script to the Dom.
|
||||
// Removes it if second parameter is true.
|
||||
function addScript(script, remove) {
|
||||
var s = document.createElement("script");
|
||||
s.textContent = script;
|
||||
document.head.appendChild(s);
|
||||
|
||||
// Remove internal messages from the DOM
|
||||
if (remove) {
|
||||
s.parentNode.removeChild(s);
|
||||
}
|
||||
}
|
||||
|
||||
// Adapted from webview - thanks zserge!
|
||||
function injectCSS(css) {
|
||||
var elem = document.createElement("style");
|
||||
elem.setAttribute("type", "text/css");
|
||||
if (elem.styleSheet) {
|
||||
elem.styleSheet.cssText = css;
|
||||
} else {
|
||||
elem.appendChild(document.createTextNode(css));
|
||||
}
|
||||
var head = document.head || document.getElementsByTagName("head")[0];
|
||||
head.appendChild(elem);
|
||||
}
|
||||
|
||||
function handleConnect() {
|
||||
log("Connected to backend");
|
||||
hideReconnectOverlay();
|
||||
clearInterval(connectTimer);
|
||||
websocket.onclose = handleDisconnect;
|
||||
websocket.onmessage = handleMessage;
|
||||
connectionState = "connected";
|
||||
// websocket.onerror = function () { }
|
||||
}
|
||||
|
||||
function handleDisconnect() {
|
||||
log("Disconnected from backend");
|
||||
websocket = null;
|
||||
connectionState = "disconnected";
|
||||
showReconnectOverlay();
|
||||
connect();
|
||||
}
|
||||
|
||||
function connect() {
|
||||
connectTimer = setInterval(function () {
|
||||
if (websocket == null) {
|
||||
websocket = new WebSocket("ws://localhost:34115/ws")
|
||||
websocket.onopen = handleConnect;
|
||||
websocket.onerror = function (e) {
|
||||
e.stopImmediatePropagation();
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
websocket = null;
|
||||
return false
|
||||
}
|
||||
}
|
||||
}, 300);
|
||||
}
|
||||
function log(message) {
|
||||
console.log(
|
||||
"%c wails headless %c " + message + " ",
|
||||
"background: #aa0000; color: #fff; border-radius: 3px 0px 0px 3px; padding: 1px; font-size: 0.7rem",
|
||||
"background: #009900; color: #fff; border-radius: 0px 3px 3px 0px; padding: 1px; font-size: 0.7rem"
|
||||
);
|
||||
}
|
||||
|
||||
function handleMessage(message) {
|
||||
// As a bridge we ignore js and css injections
|
||||
debugger;
|
||||
|
||||
switch (message.data[0]) {
|
||||
// Wails library - inject!
|
||||
case "w":
|
||||
addScript(message.data.slice(1));
|
||||
|
||||
// Now wails runtime is loaded, wails for the ready event
|
||||
// and callback to the main app
|
||||
window.wails.events.on("wails:loaded", function () {
|
||||
log("Wails Ready");
|
||||
});
|
||||
log("Loaded Wails Runtime");
|
||||
break;
|
||||
|
||||
// Notification
|
||||
case "n":
|
||||
log("Notification: " + message.data.slice(1))
|
||||
addScript(message.data.slice(1), true);
|
||||
break;
|
||||
|
||||
// Binding
|
||||
case "b":
|
||||
var binding = message.data.slice(1)
|
||||
//log("Binding: " + binding)
|
||||
window.wails._.newBinding(binding);
|
||||
break;
|
||||
|
||||
// Call back
|
||||
case "c":
|
||||
var callbackData = message.data.slice(1);
|
||||
log("Callback = " + callbackData);
|
||||
window.wails._.callback(callbackData);
|
||||
break;
|
||||
|
||||
// CSS
|
||||
case "s":
|
||||
addScript(message.data.slice(1), true);
|
||||
break;
|
||||
|
||||
// JS
|
||||
case "j":
|
||||
addScript(message.data.slice(1));
|
||||
break;
|
||||
|
||||
// HTML
|
||||
case "h":
|
||||
addScript(message.data.slice(1), true);
|
||||
break;
|
||||
|
||||
default:
|
||||
log("Ignored message: " + message.data.slice(0, 100))
|
||||
}
|
||||
}
|
||||
|
||||
connect();
|
||||
|
||||
}());
|
||||
|
||||
</script>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -1,69 +0,0 @@
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"io/ioutil"
|
||||
"path"
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
)
|
||||
|
||||
// FrameworkMetadata contains information about a given framework
|
||||
type FrameworkMetadata struct {
|
||||
Name string `json:"name"`
|
||||
BuildTag string `json:"buildtag"`
|
||||
Description string `json:"description"`
|
||||
}
|
||||
|
||||
// Utility function for creating new FrameworkMetadata structs
|
||||
func loadFrameworkMetadata(pathToMetadataJSON string) (*FrameworkMetadata, error) {
|
||||
result := &FrameworkMetadata{}
|
||||
configData, err := ioutil.ReadFile(pathToMetadataJSON)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
// Load and unmarshall!
|
||||
err = json.Unmarshal(configData, result)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
// GetFrameworks returns information about all the available frameworks
|
||||
func GetFrameworks() ([]*FrameworkMetadata, error) {
|
||||
|
||||
var err error
|
||||
|
||||
// Calculate framework base dir
|
||||
_, filename, _, _ := runtime.Caller(1)
|
||||
frameworksBaseDir := filepath.Join(path.Dir(filename), "frameworks")
|
||||
|
||||
// Get the subdirectories
|
||||
fs := NewFSHelper()
|
||||
frameworkDirs, err := fs.GetSubdirs(frameworksBaseDir)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Prepare result
|
||||
result := []*FrameworkMetadata{}
|
||||
|
||||
// Iterate framework directories, looking for metadata.json files
|
||||
for _, frameworkDir := range frameworkDirs {
|
||||
var frameworkMetadata FrameworkMetadata
|
||||
metadataFile := filepath.Join(frameworkDir, "metadata.json")
|
||||
jsonData, err := ioutil.ReadFile(metadataFile)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
err = json.Unmarshal(jsonData, &frameworkMetadata)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result = append(result, &frameworkMetadata)
|
||||
}
|
||||
|
||||
// Read in framework metadata
|
||||
return result, nil
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -1,16 +0,0 @@
|
||||
// +build frameworkbootstrap4
|
||||
|
||||
package frameworks
|
||||
|
||||
import (
|
||||
"github.com/gobuffalo/packr"
|
||||
)
|
||||
|
||||
func init() {
|
||||
assets := packr.NewBox("./bootstrap4default/assets")
|
||||
FrameworkToUse = &Framework{
|
||||
Name: "Bootstrap 4",
|
||||
JS: BoxString(&assets, "bootstrap.bundle.min.js"),
|
||||
CSS: BoxString(&assets, "bootstrap.min.css"),
|
||||
}
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -1,22 +0,0 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2011-2018 Twitter, Inc.
|
||||
Copyright (c) 2011-2018 The Bootstrap Authors
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,17 +0,0 @@
|
||||
// +build frameworkbootstrap4
|
||||
|
||||
package bootstrap4
|
||||
|
||||
import (
|
||||
"github.com/gobuffalo/packr"
|
||||
"github.com/wailsapp/wails/frameworks"
|
||||
)
|
||||
|
||||
func init() {
|
||||
assets := packr.NewBox("./assets")
|
||||
frameworks.FrameworkToUse = &frameworks.Framework{
|
||||
Name: "Bootstrap 4",
|
||||
JS: BoxString(&assets, "bootstrap.bundle.min.js"),
|
||||
CSS: BoxString(&assets, "bootstrap.min.css"),
|
||||
}
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
{
|
||||
"Name": "Bootstrap 4",
|
||||
"Description": "Standard Bootstrap 4 with default theme",
|
||||
"BuildTag": "frameworkbootstrap4"
|
||||
}
|
||||
@@ -1,16 +0,0 @@
|
||||
// +build frameworkbootstrap4lux
|
||||
|
||||
package frameworks
|
||||
|
||||
import (
|
||||
"github.com/gobuffalo/packr"
|
||||
)
|
||||
|
||||
func init() {
|
||||
assets := packr.NewBox("./bootstrap4lux/assets")
|
||||
FrameworkToUse = &Framework{
|
||||
Name: "Bootstrap 4 (Lux)",
|
||||
JS: BoxString(&assets, "bootstrap.bundle.min.js"),
|
||||
CSS: BoxString(&assets, "bootstrap.min.css"),
|
||||
}
|
||||
}
|
||||
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