first commit

This commit is contained in:
2023-07-07 20:05:25 +08:00
commit 0322866b82
40 changed files with 6040 additions and 0 deletions

15
frontend/.eslintrc.cjs Normal file
View File

@@ -0,0 +1,15 @@
/* eslint-env node */
require('@rushstack/eslint-patch/modern-module-resolution')
module.exports = {
root: true,
'extends': [
'plugin:vue/vue3-essential',
'eslint:recommended',
'@vue/eslint-config-typescript',
'@vue/eslint-config-prettier/skip-formatting'
],
parserOptions: {
ecmaVersion: 'latest'
}
}

28
frontend/.gitignore vendored Normal file
View File

@@ -0,0 +1,28 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
.DS_Store
dist
dist-ssr
coverage
*.local
/cypress/videos/
/cypress/screenshots/
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

View File

@@ -0,0 +1,8 @@
{
"$schema": "https://json.schemastore.org/prettierrc",
"semi": false,
"tabWidth": 2,
"singleQuote": true,
"printWidth": 100,
"trailingComma": "none"
}

4
frontend/READ-THIS.md Normal file
View File

@@ -0,0 +1,4 @@
This template uses a work around as the default template does not compile due to this issue:
https://github.com/vuejs/core/issues/1228
In `tsconfig.json`, `isolatedModules` is set to `false` rather than `true` to work around the issue.

23
frontend/README.md Normal file
View File

@@ -0,0 +1,23 @@
# Vue 3 + TypeScript + Vite
This template should help get you started developing with Vue 3 and TypeScript in Vite. The template uses Vue
3 `<script setup>` SFCs, check out
the [script setup docs](https://v3.vuejs.org/api/sfc-script-setup.html#sfc-script-setup) to learn more.
## Recommended IDE Setup
- [VS Code](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar)
## Type Support For `.vue` Imports in TS
Since TypeScript cannot handle type information for `.vue` imports, they are shimmed to be a generic Vue component type
by default. In most cases this is fine if you don't really care about component prop types outside of templates.
However, if you wish to get actual prop types in `.vue` imports (for example to get props validation when using
manual `h(...)` calls), you can enable Volar's Take Over mode by following these steps:
1. Run `Extensions: Show Built-in Extensions` from VS Code's command palette, look
for `TypeScript and JavaScript Language Features`, then right click and select `Disable (Workspace)`. By default,
Take Over mode will enable itself if the default TypeScript extension is disabled.
2. Reload the VS Code window by running `Developer: Reload Window` from the command palette.
You can learn more about Take Over mode [here](https://github.com/johnsoncodehk/volar/discussions/471).

13
frontend/index.html Normal file
View File

@@ -0,0 +1,13 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="icon" href="/favicon.ico">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Filer - 对象存储管理</title>
</head>
<body style="widows: 1">
<div id="app"></div>
<script type="module" src="/src/main.ts"></script>
</body>
</html>

4327
frontend/package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

43
frontend/package.json Normal file
View File

@@ -0,0 +1,43 @@
{
"name": "webui",
"version": "0.0.0",
"private": true,
"scripts": {
"dev": "vite",
"build": "run-p type-check build-only",
"preview": "vite preview",
"build-only": "vite build",
"type-check": "vue-tsc --noEmit -p tsconfig.app.json --composite false",
"lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore",
"format": "prettier --write src/"
},
"dependencies": {
"@heroicons/vue": "^2.0.18",
"@kyvg/vue3-notification": "^2.9.1",
"@soerenmartius/vue3-clipboard": "^0.1.2",
"axios": "^1.4.0",
"pinia": "^2.1.3",
"vue": "^3.3.4",
"vue-router": "^4.2.2"
},
"devDependencies": {
"@rushstack/eslint-patch": "^1.2.0",
"@tsconfig/node18": "^2.0.1",
"@types/node": "^18.16.17",
"@vitejs/plugin-vue": "^4.2.3",
"@vue/eslint-config-prettier": "^7.1.0",
"@vue/eslint-config-typescript": "^11.0.3",
"@vue/tsconfig": "^0.4.0",
"autoprefixer": "^10.4.14",
"daisyui": "^3.1.7",
"eslint": "^8.39.0",
"eslint-plugin-vue": "^9.11.0",
"npm-run-all": "^4.1.5",
"postcss": "^8.4.24",
"prettier": "^2.8.8",
"tailwindcss": "^3.3.2",
"typescript": "~5.0.4",
"vite": "^4.3.9",
"vue-tsc": "^1.6.5"
}
}

View File

@@ -0,0 +1 @@
79aba33bc212d7625314f8b23df768f3

View File

@@ -0,0 +1,3 @@
module.exports = {
plugins: [require('tailwindcss'), require('autoprefixer')]
}

7
frontend/src/App.vue Normal file
View File

@@ -0,0 +1,7 @@
<script setup lang="ts">
import FilerLayout from '@/layout/FilerLayout.vue'
</script>
<template>
<FilerLayout></FilerLayout>
</template>

View File

@@ -0,0 +1,3 @@
@tailwind base;
@tailwind components;
@tailwind utilities;

View File

@@ -0,0 +1,50 @@
<template>
<div class="navbar bg-base-100">
<div class="navbar-start">
<div class="dropdown">
<label tabindex="0" class="btn btn-ghost btn-circle">
<svg
xmlns="http://www.w3.org/2000/svg"
class="h-5 w-5"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M4 6h16M4 12h16M4 18h7"
/>
</svg>
</label>
<ul
tabindex="0"
class="menu menu-sm dropdown-content mt-3 z-[1] p-2 shadow bg-base-100 rounded-box w-52"
>
<li>
<RouterLink :to="{ name: 'setting' }">设置</RouterLink>
</li>
<li>
<RouterLink :to="{ name: 'upyun' }">又拍云存储</RouterLink>
</li>
</ul>
</div>
</div>
<div class="navbar-center">
<a class="btn btn-ghost normal-case text-xl">Filer</a>
</div>
<div class="navbar-end">
<BackspaceIcon class="btn btn-ghost btn-circle h-8 w-8 mr-2" @click="quit" />
</div>
</div>
</template>
<script setup lang="ts">
import { BackspaceIcon } from '@heroicons/vue/24/solid'
import { Quit } from '@/../wailsjs/go/controller/Storage'
const quit = () => {
Quit()
}
</script>

View File

@@ -0,0 +1,12 @@
<template>
<div class="flex flex-col min-h-screen bg-base-200">
<Navbar></Navbar>
<div class="flex justify-center">
<RouterView></RouterView>
</div>
</div>
</template>
<script setup lang="ts">
import Navbar from '@/components/Navbar.vue'
</script>

18
frontend/src/main.ts Normal file
View File

@@ -0,0 +1,18 @@
import './assets/app.css'
import { createApp } from 'vue'
import { createPinia } from 'pinia'
import { VueClipboard } from '@soerenmartius/vue3-clipboard'
import Notifications from '@kyvg/vue3-notification'
import App from './App.vue'
import router from './router'
const app = createApp(App)
app.use(createPinia())
app.use(router)
app.use(VueClipboard)
app.use(Notifications)
app.mount('#app')

View File

@@ -0,0 +1,20 @@
import { createRouter, createWebHistory } from 'vue-router'
import SettingView from '../views/SettingView.vue'
const router = createRouter({
history: createWebHistory(import.meta.env.BASE_URL),
routes: [
{
path: '/',
name: 'setting',
component: SettingView
},
{
path: '/upyun',
name: 'upyun',
component: () => import('../views/UpyunView.vue')
}
]
})
export default router

26
frontend/src/style.css Normal file
View File

@@ -0,0 +1,26 @@
html {
background-color: rgba(27, 38, 54, 1);
text-align: center;
color: white;
}
body {
margin: 0;
color: white;
font-family: "Nunito", -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto",
"Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue",
sans-serif;
}
@font-face {
font-family: "Nunito";
font-style: normal;
font-weight: 400;
src: local(""),
url("assets/fonts/nunito-v16-latin-regular.woff2") format("woff2");
}
#app {
height: 100vh;
text-align: center;
}

View File

@@ -0,0 +1,75 @@
<template>
<notifications />
<div class="card w-96 top-5 bg-base-100 shadow-xl">
<div class="card-body">
<h2 class="card-title">又拍云对象存储!</h2>
<div class="form-control w-full max-w-xs">
<label class="label">
<span class="label-text">服务名</span>
</label>
<input
type="text"
class="input input-bordered input-primary w-full max-w-xs"
v-model="allConfig.config.upyun.bucket"
/>
</div>
<div class="form-control w-full max-w-xs">
<label class="label">
<span class="label-text">操作员名称</span>
</label>
<input
type="text"
class="input input-bordered input-primary w-full max-w-xs"
v-model="allConfig.config.upyun.operator"
/>
</div>
<div class="form-control w-full max-w-xs">
<label class="label">
<span class="label-text">密码</span>
</label>
<input
type="password"
class="input input-bordered input-primary w-full max-w-xs"
v-model="allConfig.config.upyun.password"
/>
</div>
<div class="form-control w-full max-w-xs">
<label class="label">
<span class="label-text">域名</span>
</label>
<input
type="text"
class="input input-bordered input-primary w-full max-w-xs"
v-model="allConfig.config.upyun.domain"
/>
</div>
<div class="card-actions justify-end">
<button class="btn btn-primary" @click="upyun_update">更新配置</button>
</div>
</div>
</div>
</template>
<script setup lang="ts">
import { onMounted, reactive } from 'vue'
import { notify } from '@kyvg/vue3-notification'
import { GetConfig, SetUpyunConfig } from '@/../wailsjs/go/controller/Storage'
import { controller } from '@/../wailsjs/go/models'
let current_config: controller.ServerConfig = new controller.ServerConfig()
current_config.upyun = new controller.UpyunConfig()
let allConfig = reactive({ config: current_config })
const upyun_update = async () => {
console.log('current config: ', allConfig.config.upyun)
await SetUpyunConfig(allConfig.config.upyun)
notify({
title: '更新成功',
duration: 5000
})
}
onMounted(async () => {
allConfig.config = await GetConfig()
})
</script>

View File

@@ -0,0 +1,182 @@
<template>
<notifications />
<div class="card w-full bg-base-100 shadow-xl mt-8 mx-8">
<div class="card-body">
<div class="card-title">
<div class="join">
<input class="input input-bordered join-item" v-model="current_prefix" />
<button class="btn join-item btn-active rounded-r-full" @click="go_to">Go</button>
</div>
<button class="btn ml-2 btn-outline btn-accent" @click="go_back">返回上级</button>
<button class="btn ml-2 btn-outline btn-success" @click="mkdir">创建目录</button>
<button
class="btn ml-2 join-item btn-active btn-secondary rounded-r-full"
@click="on_file_upload"
>
上传文件
</button>
</div>
<div class="divider"></div>
<div class="overflow-x-auto">
<table class="table">
<tbody>
<tr v-for="(file, index) in current_files.list" :key="index">
<td>
<div class="flex items-center space-x-3">
<div class="avatar">
<div class="mask mask-squircle w-8 h-8" v-if="file.is_dir">
<FolderPlusIcon class="h-8 w-8 text-blue-500" />
</div>
<div class="mask mask-squircle w-8 h-8" v-else>
<DocumentTextIcon class="h-8 w-8 text-orange-800" />
</div>
</div>
<div v-if="file.is_dir">
<a class="font-bold text-blue-300" @click="click_enter_to(file.filename!)">{{
file.filename
}}</a>
</div>
<div v-else>
<div class="font-bold">{{ file.filename }}</div>
</div>
</div>
</td>
<td>
{{ file.created_at }}
</td>
<th>
<button
class="btn btn-ghost btn-outline btn-xs"
v-if="!file.is_dir"
@click="toClipboard(copy_link(file.filename!))"
>
link
</button>
<button
class="btn btn-error btn-outline btn-xs ml-1"
@click="to_delete(file.filename!, file.is_dir!)"
>
delete
</button>
</th>
</tr>
</tbody>
</table>
</div>
<div class="card-actions justify-end">
<div>
当前
<div class="badge badge-accent">{{ current_files.list.length }}</div>
个文件
</div>
</div>
</div>
</div>
</template>
<script setup lang="ts">
import { FolderPlusIcon, DocumentTextIcon } from '@heroicons/vue/24/solid'
import { toClipboard } from '@soerenmartius/vue3-clipboard'
import { notify } from '@kyvg/vue3-notification'
import { ref, reactive, onMounted } from 'vue'
import {
GetConfig,
UperList,
UperUpload,
UperDelete,
UperCreateDirectory
} from '@/../wailsjs/go/controller/Storage'
import { controller } from '@/../wailsjs/go/models'
let current_config: controller.ServerConfig = new controller.ServerConfig()
current_config.upyun = new controller.UpyunConfig()
let allConfig = reactive({ config: current_config })
const current_prefix = ref('/')
let file_list_object: Array<controller.FileInfo> = []
let current_files = reactive({ list: file_list_object })
const on_file_upload = async () => {
await UperUpload(current_prefix.value)
notify({
title: '文件上传成功',
duration: 5000
})
await list(current_prefix.value)
}
const list = async (prefix: string) => {
current_files.list = await UperList(prefix)
console.log('get list: ', current_files.list)
}
const mkdir = async () => {
if (current_prefix.value === '/') return
await UperCreateDirectory(current_prefix.value)
await list(current_prefix.value)
notify({
title: '创建目录成功',
duration: 5000
})
}
const go_to = async () => {
await list(current_prefix.value)
}
const to_delete = async (filename: string, is_dir: boolean) => {
let delete_filename = ''
if (current_prefix.value == '/') {
delete_filename = current_prefix.value + filename
} else {
delete_filename = current_prefix.value + '/' + filename
}
await UperDelete(delete_filename, is_dir)
await list(current_prefix.value)
notify({
title: '删除成功',
duration: 5000
})
}
const click_enter_to = async (dir: string) => {
if (current_prefix.value == '/') {
current_prefix.value += dir
} else {
current_prefix.value += '/' + dir
}
await list(current_prefix.value)
}
const go_back = async () => {
if (current_prefix.value === '/') return
const lastIndex = current_prefix.value.lastIndexOf('/')
current_prefix.value = current_prefix.value.substring(0, lastIndex)
if (current_prefix.value === '') current_prefix.value = '/'
await list(current_prefix.value)
}
const copy_link = (filename: string) => {
let real_filename = ''
if (current_prefix.value == '/') {
real_filename = current_prefix.value + filename
} else {
real_filename = current_prefix.value + '/' + filename
}
notify({
title: '已拷贝链接',
duration: 5000
})
return allConfig.config.upyun.domain + real_filename
}
onMounted(async () => {
allConfig.config = await GetConfig()
await list(current_prefix.value)
})
</script>

7
frontend/src/vite-env.d.ts vendored Normal file
View File

@@ -0,0 +1,7 @@
/// <reference types="vite/client" />
declare module '*.vue' {
import type {DefineComponent} from 'vue'
const component: DefineComponent<{}, {}, any>
export default component
}

View File

@@ -0,0 +1,4 @@
module.exports = {
content: ['./src/**/*.{vue,js,ts}'],
plugins: [require('daisyui')]
}

View File

@@ -0,0 +1,20 @@
{
"extends": "@vue/tsconfig/tsconfig.dom.json",
"include": [
"env.d.ts",
"src/**/*",
"src/**/*.vue"
],
"exclude": [
"src/**/__tests__/*"
],
"compilerOptions": {
"composite": true,
"baseUrl": ".",
"paths": {
"@/*": [
"./src/*"
]
}
}
}

11
frontend/tsconfig.json Normal file
View File

@@ -0,0 +1,11 @@
{
"files": [],
"references": [
{
"path": "./tsconfig.node.json"
},
{
"path": "./tsconfig.app.json"
}
]
}

View File

@@ -0,0 +1,17 @@
{
"extends": "@tsconfig/node18/tsconfig.json",
"include": [
"vite.config.*",
"vitest.config.*",
"cypress.config.*",
"nightwatch.conf.*",
"playwright.config.*"
],
"compilerOptions": {
"composite": true,
"module": "ESNext",
"types": [
"node"
]
}
}

14
frontend/vite.config.ts Normal file
View File

@@ -0,0 +1,14 @@
import {fileURLToPath, URL} from 'node:url'
import {defineConfig} from 'vite'
import vue from '@vitejs/plugin-vue'
// https://vitejs.dev/config/
export default defineConfig({
plugins: [vue()],
resolve: {
alias: {
'@': fileURLToPath(new URL('./src', import.meta.url))
}
}
})

View File

@@ -0,0 +1,17 @@
// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL
// This file is automatically generated. DO NOT EDIT
import {controller} from '../models';
export function GetConfig():Promise<controller.ServerConfig>;
export function Quit():Promise<void>;
export function SetUpyunConfig(arg1:controller.UpyunConfig):Promise<void>;
export function UperCreateDirectory(arg1:string):Promise<void>;
export function UperDelete(arg1:string,arg2:boolean):Promise<void>;
export function UperList(arg1:string):Promise<Array<controller.FileInfo>>;
export function UperUpload(arg1:string):Promise<void>;

View File

@@ -0,0 +1,31 @@
// @ts-check
// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL
// This file is automatically generated. DO NOT EDIT
export function GetConfig() {
return window['go']['controller']['Storage']['GetConfig']();
}
export function Quit() {
return window['go']['controller']['Storage']['Quit']();
}
export function SetUpyunConfig(arg1) {
return window['go']['controller']['Storage']['SetUpyunConfig'](arg1);
}
export function UperCreateDirectory(arg1) {
return window['go']['controller']['Storage']['UperCreateDirectory'](arg1);
}
export function UperDelete(arg1, arg2) {
return window['go']['controller']['Storage']['UperDelete'](arg1, arg2);
}
export function UperList(arg1) {
return window['go']['controller']['Storage']['UperList'](arg1);
}
export function UperUpload(arg1) {
return window['go']['controller']['Storage']['UperUpload'](arg1);
}

View File

@@ -0,0 +1,75 @@
export namespace controller {
export class FileInfo {
filename?: string;
prefix?: string;
created_at?: string;
size?: number;
is_dir?: boolean;
static createFrom(source: any = {}) {
return new FileInfo(source);
}
constructor(source: any = {}) {
if ('string' === typeof source) source = JSON.parse(source);
this.filename = source["filename"];
this.prefix = source["prefix"];
this.created_at = source["created_at"];
this.size = source["size"];
this.is_dir = source["is_dir"];
}
}
export class UpyunConfig {
bucket: string;
operator: string;
password: string;
domain: string;
static createFrom(source: any = {}) {
return new UpyunConfig(source);
}
constructor(source: any = {}) {
if ('string' === typeof source) source = JSON.parse(source);
this.bucket = source["bucket"];
this.operator = source["operator"];
this.password = source["password"];
this.domain = source["domain"];
}
}
export class ServerConfig {
environment: string;
upyun: UpyunConfig;
static createFrom(source: any = {}) {
return new ServerConfig(source);
}
constructor(source: any = {}) {
if ('string' === typeof source) source = JSON.parse(source);
this.environment = source["environment"];
this.upyun = this.convertValues(source["upyun"], UpyunConfig);
}
convertValues(a: any, classs: any, asMap: boolean = false): any {
if (!a) {
return a;
}
if (a.slice) {
return (a as any[]).map(elem => this.convertValues(elem, classs));
} else if ("object" === typeof a) {
if (asMap) {
for (const key of Object.keys(a)) {
a[key] = new classs(a[key]);
}
return a;
}
return new classs(a);
}
return a;
}
}
}

View File

@@ -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"
}

235
frontend/wailsjs/runtime/runtime.d.ts vendored Normal file
View File

@@ -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>;

View File

@@ -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);
}