@nebularstreams/statify 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.DS_Store +0 -0
- package/dist/website.simple/webfonts/fa-brands-400.woff2 +0 -0
- package/dist/website.simple/webfonts/fa-solid-900.eot +0 -0
- package/dist/website.simple/webfonts/fa-solid-900.svg +4649 -0
- package/dist/website.simple/webfonts/fa-solid-900.ttf +0 -0
- package/dist/website.simple/webfonts/fa-solid-900.woff +0 -0
- package/dist/website.simple/webfonts/fa-solid-900.woff2 +0 -0
- package/dist/website.simple/website.css +32 -0
- package/dist/website.simple/website.min.js +6 -0
- package/dist/website.software/webfonts/fa-brands-400.woff2 +0 -0
- package/dist/website.software/webfonts/fa-solid-900.eot +0 -0
- package/dist/website.software/webfonts/fa-solid-900.svg +4649 -0
- package/dist/website.software/webfonts/fa-solid-900.ttf +0 -0
- package/dist/website.software/webfonts/fa-solid-900.woff +0 -0
- package/dist/website.software/webfonts/fa-solid-900.woff2 +0 -0
- package/dist/website.software/website.css +32 -0
- package/dist/website.software/website.min.js +6 -0
- package/dist/website.worlds/webfonts/fa-brands-400.woff2 +0 -0
- package/dist/website.worlds/webfonts/fa-solid-900.eot +0 -0
- package/dist/website.worlds/webfonts/fa-solid-900.svg +4649 -0
- package/dist/website.worlds/webfonts/fa-solid-900.ttf +0 -0
- package/dist/website.worlds/webfonts/fa-solid-900.woff +0 -0
- package/dist/website.worlds/webfonts/fa-solid-900.woff2 +0 -0
- package/dist/website.worlds/website.css +32 -0
- package/dist/website.worlds/website.min.js +6 -0
- package/package.json +49 -0
- package/readme.md +105 -0
- package/src/publisher-lib.js +179 -0
- package/src/publisher-list.js +91 -0
- package/src/publisher.js +38 -0
- package/src/util/cdn/nobj.cdn.js +88 -0
- package/src/util/htmlroute.js +39 -0
- package/src/util/markdown/lib.showdown.icon.js +62 -0
- package/src/util/markdown/lib.showdown.yt.js +54 -0
- package/src/util/markdown/markdown.js +144 -0
- package/src/util/navibar/util.navibar.js +63 -0
- package/src/util/sha.js +20 -0
- package/src/util/tokenizer.js +234 -0
- package/src/util/widgets/NoticeWidget.js +30 -0
- package/src/util/widgets/app.widgets.js +70 -0
- package/src/util/widgets/util.definewidget.js +14 -0
- package/src/widgets/Cookies.js +55 -0
- package/src/widgets/Frameset-simple.js +114 -0
- package/src/widgets/Frameset.js +124 -0
- package/src/widgets/Page.js +356 -0
- package/src/widgets/RightSide.js +93 -0
- package/src/widgets/Snippets.js +75 -0
- package/src/widgets/Tail.js +11 -0
- package/src/widgets/Widgets.js +10 -0
- package/src/widgets.client/Client.js +22 -0
- package/src/widgets.features/FeatureList.js +364 -0
- package/src/widgets.features/Youtube.js +23 -0
- package/src/widgets.features/bootcol.js +29 -0
- package/src/widgets.features/css/feature.css +112 -0
- package/src/widgets.features/css/tail.css +4 -0
- package/src/widgets.howto/Faq.js +201 -0
- package/src/widgets.howto/HowTo.js +419 -0
- package/src/widgets.howto/Tiles.js +51 -0
- package/src/widgets.howto/script-contractable.js +31 -0
- package/src/widgets.markdown/Document.js +84 -0
- package/src/widgets.market/MarketItem.js +278 -0
- package/src/widgets.market/MarketItem.orig.js +268 -0
- package/src/widgets.market/MarketItem.strips.js +276 -0
- package/src/widgets.market/StoryLicenseWIdget.js +45 -0
- package/src/widgets.market/app.utils.js +238 -0
- package/src.website/css/app/animations.css +27 -0
- package/src.website/css/app/ismobile.css +7 -0
- package/src.website/css/app/style.css +51 -0
- package/src.website/css/app/style.fullheight.css +9 -0
- package/src.website/css/app/style.mdblocks.css +59 -0
- package/src.website/css/app/style.putosafari.css +3 -0
- package/src.website/css/bootstrap/bootstrap-tiny-core.css +47 -0
- package/src.website/css/bootstrap/bootstrap-tiny-media-columns.css +1276 -0
- package/src.website/css/bootstrap/bootstrap-tiny-media-custom.css +59 -0
- package/src.website/css/bootstrap/bootstrap-tiny-media-display.css +279 -0
- package/src.website/css/bootstrap/bootstrap-tiny-media-flex.css +881 -0
- package/src.website/css/bootstrap/bootstrap-tiny-media-fonts.css +39 -0
- package/src.website/css/bootstrap/bootstrap-tiny-media-paddings.css +1348 -0
- package/src.website/css/css-core/core.ext.css +65 -0
- package/src.website/css/css-core/frontpage.css +28 -0
- package/src.website/css/css-core/root.css +34 -0
- package/src.website/css/css-core/root.fullheight.css +12 -0
- package/src.website/css/css-core/ui.dialog.round.css +14 -0
- package/src.website/css/css-core/ui.navibar.css +28 -0
- package/src.website/css/css-core/ui.notifications.css +12 -0
- package/src.website/css/css-featurelist/feature.css +196 -0
- package/src.website/css/css-featurelist/tail.css +4 -0
- package/src.website/css/css-screens/doc.css +22 -0
- package/src.website/css/css-screens/screens-meta.css +3 -0
- package/src.website/css/css-unsplash/unsplash.css +32 -0
- package/src.website/css/css-videos/youtube.css +28 -0
- package/src.website/css/css-wiki/wiki.css +206 -0
- package/src.website/css/css-wiki/wiki.sidepane.css +16 -0
- package/src.website/css/fontawesome/fa-brands.css +18 -0
- package/src.website/css/fontawesome/fa-solid.css +16 -0
- package/src.website/css/fontawesome/fa.css +4359 -0
- package/src.website/css/skin/mierda.css +15 -0
- package/src.website/css/skin/skin.dark.css +85 -0
- package/src.website/css/skin/skin.light.css +27 -0
- package/src.website/css/skin/vars.font.css +8 -0
- package/src.website/css/skin/vars.sizes.css +4 -0
- package/src.website/package-lock.json +2160 -0
- package/src.website/package.json +28 -0
- package/src.website/public/webfonts/fa-brands-400.woff2 +0 -0
- package/src.website/public/webfonts/fa-solid-900.eot +0 -0
- package/src.website/public/webfonts/fa-solid-900.svg +4649 -0
- package/src.website/public/webfonts/fa-solid-900.ttf +0 -0
- package/src.website/public/webfonts/fa-solid-900.woff +0 -0
- package/src.website/public/webfonts/fa-solid-900.woff2 +0 -0
- package/src.website/rollup.simple.mjs +36 -0
- package/src.website/rollup.software.mjs +36 -0
- package/src.website/rollup.terser.mjs +24 -0
- package/src.website/rollup.worlds.mjs +36 -0
- package/src.website/src/app/app.style.mjs +36 -0
- package/src.website/src/app/index.mjs +118 -0
- package/src.website/src/config.js +8 -0
- package/src.website/src/core/cdnmodel.mjs +7 -0
- package/src.website/src/core/clientruntime.mjs +41 -0
- package/src.website/src/core.cookies/analytics.mjs +96 -0
- package/src.website/src/core.cookies/cookiemanager.mjs +128 -0
- package/src.website/src/core.cookies/css/cookies.css +80 -0
- package/src.website/src/core.cookies/css/nocookies.css +48 -0
- package/src.website/src/core.extra/css/contractable.css +12 -0
- package/src.website/src/core.extra/css/faq.css +42 -0
- package/src.website/src/core.extra/css/howto.css +81 -0
- package/src.website/src/core.extra/extra.document.mjs +83 -0
- package/src.website/src/core.extra/extra.faq.mjs +30 -0
- package/src.website/src/core.extra/extra.mjs +62 -0
- package/src.website/src/main.simple.mjs +4 -0
- package/src.website/src/main.software.mjs +10 -0
- package/src.website/src/main.worlds.mjs +9 -0
- package/src.website/src/support/ismobile.mjs +4 -0
- package/src.website/src/support/nonce.mjs +4 -0
- package/src.website/src/support/persistsettings.mjs +41 -0
- package/src.website/src/support/qrcode.mjs +1269 -0
- package/src.website/src/support/timeutils.mjs +237 -0
- package/src.website/src/widgets/index.mjs +22 -0
- package/src.website/src.widgets/widgets.market/index.mjs +11 -0
- package/src.website/src.widgets/widgets.market/widgets/market/DiscoverWidget.mjs +401 -0
- package/src.website/src.widgets/widgets.market/widgets/market/EmptyNew.mjs +28 -0
- package/src.website/src.widgets/widgets.market/widgets/market/MarketDetail.mjs +78 -0
- package/src.website/src.widgets/widgets.market/widgets/market/MarketItem.mjs +349 -0
- package/src.website/src.widgets/widgets.market/widgets/market/MarketWidget.mjs +437 -0
- package/src.website/src.widgets/widgets.market/widgets/market/StoryLicenseWidget.mjs +34 -0
- package/src.website/src.widgets/widgets.market/widgets/market/css/market.css +394 -0
- package/src.website/src.widgets/widgets.market/widgets/market/css/notice.css +6 -0
- package/src.website/src.widgets/widgets.market/widgets/navibar/NaviBarWidget.mjs +58 -0
- package/src.website/src.widgets/widgets.market/widgets/navibar/css/titlebar.css +68 -0
- package/src.website/src.widgets/widgets.market/widgets/navibar/css/ui.navibar.css +28 -0
- package/src.website/src.widgets/widgets.software/index.mjs +9 -0
- package/src.website/src.widgets/widgets.software/widgets/BootStrapColumnWidget.mjs +17 -0
- package/src.website/src.widgets/widgets.software/widgets/DownloadWidget.mjs +210 -0
- package/src.website/src.widgets/widgets.software/widgets/LicenseWidget.js +103 -0
- package/src.website/src.widgets/widgets.software/widgets/css/download/download.css +110 -0
- package/src.website/src.widgets/widgets.software/widgets/css/license/beta.css +28 -0
- package/src.website/src.widgets/widgets.software/widgets/css/license/button.css +30 -0
- package/src.website/src.widgets/widgets.software/widgets/css/license/front.css +46 -0
- package/src.website/src.widgets/widgets.software/widgets/css/license/licenses.css +13 -0
- package/src.website/src.widgets/widgets.software/widgets/css/license/overstate.css +15 -0
- package/src.website/src.widgets/widgets.software/widgets/css/license/story.css +8 -0
- package/src.website/src.widgets/widgets.software/widgets/css/license/toolbar.css +9 -0
- package/src.website/src.widgets/widgets.software/widgets/support/version.mjs +88 -0
- package/src.website/src.widgets/widgets.worlds/index.mjs +11 -0
- package/src.website/src.widgets/widgets.worlds/widgets/LocalBrowser.mjs +386 -0
- package/src.website/src.widgets/widgets.worlds/widgets/LocalLauncher.code.mjs +247 -0
- package/src.website/src.widgets/widgets.worlds/widgets/LocalLauncher.mjs +239 -0
- package/src.website/src.widgets/widgets.worlds/widgets/css/input.css +32 -0
- package/src.website/src.widgets/widgets.worlds/widgets/css/localprojects.css +188 -0
- package/templates/documentation/assets/docs.css +7 -0
- package/templates/documentation/assets/images/right.webp +0 -0
- package/templates/documentation/images.json +12 -0
- package/templates/documentation/metadata.json +120 -0
- package/templates/documentation/pages/cookies.md +25 -0
- package/templates/documentation/pages/index.md +13 -0
- package/templates/documentation/pages/privacy.md +50 -0
- package/templates/documentation/pages/tos.md +49 -0
- package/templates/landing/assets/res/carousel/image-1.webp +0 -0
- package/templates/landing/assets/res/carousel/image-2.webp +0 -0
- package/templates/landing/assets/res/carousel/image-3.webp +0 -0
- package/templates/landing/assets/res/custom.css +122 -0
- package/templates/landing/assets/res/logos/favicon.ico +0 -0
- package/templates/landing/assets/res/logos/favicon.png +0 -0
- package/templates/landing/assets/res/logos/logo.medallion.png +0 -0
- package/templates/landing/assets/res/logos/logo.white.png +0 -0
- package/templates/landing/assets/res/proj/banda-tech-client.webp +0 -0
- package/templates/landing/assets/res/proj/banda-tech-server.webp +0 -0
- package/templates/landing/assets/res/proj/proj-common-ground.webp +0 -0
- package/templates/landing/assets/res/proj/proj-fieldnote.webp +0 -0
- package/templates/landing/assets/res/proj/proj-tribes.webp +0 -0
- package/templates/landing/images.json +932 -0
- package/templates/landing/metadata.json +115 -0
- package/templates/landing/pages/index.json +268 -0
- package/tool/cli.js +183 -0
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
/* global SITE */
|
|
2
|
+
|
|
3
|
+
import m from "mithril";
|
|
4
|
+
import {defineWidget, Button, Empty} from "@nebularstreams/libmui";
|
|
5
|
+
import {getVersion as get, getFilename as file, checkUpdate as check} from "./support/version.mjs";
|
|
6
|
+
import BootStrapColumnWidget from "./BootStrapColumnWidget.mjs";
|
|
7
|
+
|
|
8
|
+
import isMobile from "../../../src/support/ismobile.mjs"
|
|
9
|
+
import {stag} from "../../../src/core.cookies/analytics.mjs"
|
|
10
|
+
import {PRODUCT_ID} from "../../../src/config.js";
|
|
11
|
+
|
|
12
|
+
import "./css/download/download.css";
|
|
13
|
+
|
|
14
|
+
const
|
|
15
|
+
window_location = window.location,
|
|
16
|
+
|
|
17
|
+
MSG_GENERIC = "Download Not Available",
|
|
18
|
+
SPINNERSIZE = 3,
|
|
19
|
+
NAMES = {
|
|
20
|
+
"osx-x64": "Apple Mac (Intel)",
|
|
21
|
+
"osx-arm64": "Apple Mac (Apple Silicon)",
|
|
22
|
+
"win-x64": "Windows"
|
|
23
|
+
},
|
|
24
|
+
ICONS = {
|
|
25
|
+
"osx-x64": "apple",
|
|
26
|
+
"osx-arm64": "apple",
|
|
27
|
+
"win-x64": "windows"
|
|
28
|
+
},
|
|
29
|
+
|
|
30
|
+
AGENTS = [
|
|
31
|
+
"(Macintosh; Intel",
|
|
32
|
+
"(Windows NT"
|
|
33
|
+
],
|
|
34
|
+
isWindows = () => navigator.userAgent.indexOf(AGENTS[1]) !== -1,
|
|
35
|
+
isMac = () => navigator.userAgent.indexOf(AGENTS[0]) !== -1,
|
|
36
|
+
plafPrefix = isWindows() ? "win" : isMac() ? "osx" : undefined;
|
|
37
|
+
|
|
38
|
+
function registerDownload(plafArch, meta) {
|
|
39
|
+
stag("Download", {
|
|
40
|
+
event: "file_download",
|
|
41
|
+
props: {
|
|
42
|
+
item_id: PRODUCT_ID,
|
|
43
|
+
item_type: "application",
|
|
44
|
+
item_variant: plafArch,
|
|
45
|
+
item_version: `${meta.major}.${meta.minor}.${meta.revision}`
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const DownloadWidget = defineWidget(
|
|
51
|
+
({attrs, state}) => {
|
|
52
|
+
|
|
53
|
+
const
|
|
54
|
+
{static: staticParams} = attrs,
|
|
55
|
+
{host = SITE.url, msgBetaTitle, msgBeta, msgMobile} = staticParams,
|
|
56
|
+
{loading, versions, error} = state,
|
|
57
|
+
versionKeys = versions ? Object.keys(versions) : [],
|
|
58
|
+
has = versionKeys.length;
|
|
59
|
+
|
|
60
|
+
return [
|
|
61
|
+
...loading
|
|
62
|
+
? [m(Empty, {icon: "sync fa-spin", size: SPINNERSIZE})]
|
|
63
|
+
: error
|
|
64
|
+
? [
|
|
65
|
+
m(
|
|
66
|
+
Empty,
|
|
67
|
+
{size: SPINNERSIZE, icon: error.icon || "sad-tear", message: MSG_GENERIC + "\n" + (error.message || "Please check back later")}
|
|
68
|
+
)
|
|
69
|
+
]
|
|
70
|
+
: versions
|
|
71
|
+
? [
|
|
72
|
+
...has ? [
|
|
73
|
+
m(".unitheight.col-12.al-center.titlecard", [
|
|
74
|
+
m("a", {
|
|
75
|
+
href: "/doc/release-notes"
|
|
76
|
+
}, "Check out the Release Notes"),
|
|
77
|
+
m("span", " and the "),
|
|
78
|
+
m("a", {
|
|
79
|
+
href: "/doc/faq"
|
|
80
|
+
}, "FAQ")
|
|
81
|
+
])
|
|
82
|
+
] : [],
|
|
83
|
+
|
|
84
|
+
m(
|
|
85
|
+
".flexrow.h-100.w-100.wrap.scrolly.pad-1.fixboot.download",
|
|
86
|
+
isMobile
|
|
87
|
+
? [
|
|
88
|
+
m(
|
|
89
|
+
BootStrapColumnWidget,
|
|
90
|
+
{
|
|
91
|
+
class: "pad-1 col-12",
|
|
92
|
+
subclass: ""
|
|
93
|
+
},
|
|
94
|
+
[
|
|
95
|
+
m(Button, {
|
|
96
|
+
class: "grows pad-3",
|
|
97
|
+
icon: "mobile",
|
|
98
|
+
size: 3,
|
|
99
|
+
pack: "fas"
|
|
100
|
+
}, [
|
|
101
|
+
m("h2.marg-1", "Mobile Devices"),
|
|
102
|
+
m(".marg-1", msgMobile)
|
|
103
|
+
])
|
|
104
|
+
]
|
|
105
|
+
)
|
|
106
|
+
]
|
|
107
|
+
: has
|
|
108
|
+
? [
|
|
109
|
+
m(".betanotice.notice.font-75.flexcol.shadow-1", [
|
|
110
|
+
m("i.fa.fa-robot.fa-3x.fadein.marg-2.no-marg-top"),
|
|
111
|
+
m("h2.marg-2.no-marg-top.fademe.w-100.al-center", msgBetaTitle),
|
|
112
|
+
m("span.fademe", msgBeta)
|
|
113
|
+
]),
|
|
114
|
+
...versionKeys
|
|
115
|
+
.map((plafarch) => {
|
|
116
|
+
const
|
|
117
|
+
name = NAMES[plafarch],
|
|
118
|
+
meta = versions[plafarch],
|
|
119
|
+
version = `${meta.major}.${meta.minor}.${meta.revision}`,
|
|
120
|
+
[plaf, arch] = plafarch.split("-"),
|
|
121
|
+
filename = file(version, plaf, arch),
|
|
122
|
+
supported = state.force || !plafPrefix || plaf === plafPrefix;
|
|
123
|
+
|
|
124
|
+
return m(
|
|
125
|
+
BootStrapColumnWidget,
|
|
126
|
+
{
|
|
127
|
+
class: "pad-1 col-12 col-lg-6 grows " + (supported ? "supported" : "d-none unsupported"),
|
|
128
|
+
subclass: ""
|
|
129
|
+
},
|
|
130
|
+
[
|
|
131
|
+
m(Button, {
|
|
132
|
+
icon: ICONS[plafarch] + ".fabrd",
|
|
133
|
+
size: 3,
|
|
134
|
+
class: "grows pad-3 button marg-b-2 avail",
|
|
135
|
+
pack: "fab"
|
|
136
|
+
}, [
|
|
137
|
+
m(
|
|
138
|
+
"a",
|
|
139
|
+
{
|
|
140
|
+
href: `${host}/all/files/${filename}`,
|
|
141
|
+
download: filename,
|
|
142
|
+
rel: "nofollow",
|
|
143
|
+
onclick: () => registerDownload(plafarch, meta)
|
|
144
|
+
|
|
145
|
+
},
|
|
146
|
+
m("h2.marg-1", `Download for ${name}`)
|
|
147
|
+
),
|
|
148
|
+
m("strong.marg-1", `Version ${version}`),
|
|
149
|
+
...meta.comment ? [m(".marg-1", meta.comment)] : [],
|
|
150
|
+
...meta.sha ? [m(".marg-1.sha.selectable", meta.sha)] : []
|
|
151
|
+
])
|
|
152
|
+
]
|
|
153
|
+
);
|
|
154
|
+
})
|
|
155
|
+
]
|
|
156
|
+
: m(Empty, {size: SPINNERSIZE, icon: "sad-tear", message: MSG_GENERIC + "\nPlease check back later"})
|
|
157
|
+
)
|
|
158
|
+
]
|
|
159
|
+
: [
|
|
160
|
+
m(Empty, {size: SPINNERSIZE, icon: "sad-tear", message: MSG_GENERIC + "\nPlease check back later"})
|
|
161
|
+
]
|
|
162
|
+
];
|
|
163
|
+
|
|
164
|
+
},
|
|
165
|
+
({attrs, state}) => {
|
|
166
|
+
const
|
|
167
|
+
{static: staticParams} = attrs,
|
|
168
|
+
{urlVersion} = staticParams,
|
|
169
|
+
v = attrs.v || window_location.search.split("?v=")[1];
|
|
170
|
+
|
|
171
|
+
stag("Download");
|
|
172
|
+
state.loading = true;
|
|
173
|
+
if (v) {
|
|
174
|
+
// 0.2.4-win-x64
|
|
175
|
+
const [reqVersion, plaf, arch] = v.split("-");
|
|
176
|
+
check(urlVersion, reqVersion, plaf, arch)
|
|
177
|
+
.then(({version, older}) => {
|
|
178
|
+
delete state.loading;
|
|
179
|
+
if (older) {
|
|
180
|
+
state.error = {message: "You already have the latest version", icon: "smile-wink"};
|
|
181
|
+
} else if (version) {
|
|
182
|
+
state.versions = {[plaf + "-" + arch]: version};
|
|
183
|
+
state.force = true;
|
|
184
|
+
} else {
|
|
185
|
+
state.error = {message: "Temporary download error"};
|
|
186
|
+
}
|
|
187
|
+
m.redraw();
|
|
188
|
+
})
|
|
189
|
+
.catch((e) => {
|
|
190
|
+
state.error = e;
|
|
191
|
+
delete state.loading;
|
|
192
|
+
m.redraw();
|
|
193
|
+
});
|
|
194
|
+
} else {
|
|
195
|
+
get(urlVersion)
|
|
196
|
+
.then((data) => {
|
|
197
|
+
state.versions = data;
|
|
198
|
+
delete state.loading;
|
|
199
|
+
m.redraw();
|
|
200
|
+
})
|
|
201
|
+
.catch((e) => {
|
|
202
|
+
state.error = e;
|
|
203
|
+
delete state.loading;
|
|
204
|
+
m.redraw();
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
);
|
|
209
|
+
|
|
210
|
+
export default DownloadWidget;
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import m from "mithril";
|
|
2
|
+
import {defineWidget, ButtonNew, Notification, Empty, Icon} from "@nebularstreams/libmui";
|
|
3
|
+
import BootCol from "./BootStrapColumnWidget.mjs"
|
|
4
|
+
|
|
5
|
+
import {stag} from "../../../src/core.cookies/analytics.mjs";
|
|
6
|
+
import getNonce from "../../../src/support/nonce.mjs";
|
|
7
|
+
import {PRODUCT_NAME} from "../../../src/config.js";
|
|
8
|
+
|
|
9
|
+
import "./css/license/beta.css"
|
|
10
|
+
import "./css/license/button.css";
|
|
11
|
+
import "./css/license/front.css";
|
|
12
|
+
import "./css/license/licenses.css";
|
|
13
|
+
import "./css/license/overstate.css";
|
|
14
|
+
import "./css/license/story.css";
|
|
15
|
+
import "./css/license/toolbar.css";
|
|
16
|
+
|
|
17
|
+
function load(attrs, state) {
|
|
18
|
+
|
|
19
|
+
const {static: staticParams} = attrs;
|
|
20
|
+
|
|
21
|
+
stag("Licenses");
|
|
22
|
+
|
|
23
|
+
delete state.data;
|
|
24
|
+
delete state.error;
|
|
25
|
+
state.loading = true;
|
|
26
|
+
|
|
27
|
+
const nonce = getNonce();
|
|
28
|
+
|
|
29
|
+
m.redraw();
|
|
30
|
+
m.request({url: staticParams.urlLicenseTrial + "?_=" + nonce})
|
|
31
|
+
.then((data) => {
|
|
32
|
+
state.data = data;
|
|
33
|
+
delete state.loading;
|
|
34
|
+
m.redraw();
|
|
35
|
+
})
|
|
36
|
+
.catch((e) => {
|
|
37
|
+
state.error = e;
|
|
38
|
+
delete state.loading;
|
|
39
|
+
m.redraw();
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const LicenseWidget = defineWidget(
|
|
44
|
+
({state}) => (
|
|
45
|
+
state.data
|
|
46
|
+
? m(".flexcol.grows.pad-2.pad-v.scrolly", [
|
|
47
|
+
m(
|
|
48
|
+
BootCol,
|
|
49
|
+
{
|
|
50
|
+
class: "pad-1 lighter col-12 screen",
|
|
51
|
+
subclass: "feature text-al-center pad-6 shadow-2"
|
|
52
|
+
},
|
|
53
|
+
[
|
|
54
|
+
m("h3.marg-2", `Obtain a ${PRODUCT_NAME} license`),
|
|
55
|
+
m(".cardtxt", `We will publish monthly trial licenses so you can test ${PRODUCT_NAME} without stress.`)
|
|
56
|
+
]
|
|
57
|
+
),
|
|
58
|
+
state.data.length
|
|
59
|
+
? state.data.map((license) => m(
|
|
60
|
+
BootCol,
|
|
61
|
+
{
|
|
62
|
+
class: "pad-1 lighter col-12 screen" + (license.copied ? " copied" : ""),
|
|
63
|
+
subclass: "feature pad-2 shadow-2 align-items-center bg-accent-light",
|
|
64
|
+
rows: true
|
|
65
|
+
},
|
|
66
|
+
[
|
|
67
|
+
m(Icon, {icon: "ticket-alt", size: 3, iconClass: "licicon"}),
|
|
68
|
+
m("h3.grows.marg-4.marg-h", license.title),
|
|
69
|
+
m(ButtonNew, {
|
|
70
|
+
text: "copy to clipboard",
|
|
71
|
+
icon: "copy",
|
|
72
|
+
onClick: () => {
|
|
73
|
+
try {
|
|
74
|
+
navigator.clipboard.writeText(license.lic);
|
|
75
|
+
Notification.add("Copied to clipboard ! Now paste it in Obscene Studio.");
|
|
76
|
+
license.copied = true;
|
|
77
|
+
if (window.stag) window.stag("Copied Trial License", {event: "LicenseTrial"});
|
|
78
|
+
} catch (e) {
|
|
79
|
+
Notification.add("Cannot copy to clipboard, please copy the license manually");
|
|
80
|
+
license.noclipboard = true;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
})
|
|
84
|
+
]
|
|
85
|
+
))
|
|
86
|
+
: [
|
|
87
|
+
m(Empty, {message: "There are no licenses at the moment\nPlease check back later"})
|
|
88
|
+
]
|
|
89
|
+
])
|
|
90
|
+
: state.error
|
|
91
|
+
? m(
|
|
92
|
+
Empty,
|
|
93
|
+
{message: "Error loading licenses", icon: "none"},
|
|
94
|
+
m(ButtonNew, {icon: "sync", text: "retry", onClick: () => load(state)})
|
|
95
|
+
)
|
|
96
|
+
: state.loading
|
|
97
|
+
? m(Empty, {size: 2, icon: "sync.fa-spin"})
|
|
98
|
+
: []
|
|
99
|
+
),
|
|
100
|
+
({attrs, state}) => load(attrs, state)
|
|
101
|
+
);
|
|
102
|
+
|
|
103
|
+
export default LicenseWidget;
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
.download .button a {
|
|
2
|
+
text-decoration: underline;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
.download a > a {
|
|
6
|
+
color: black;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.download .button {
|
|
10
|
+
color: inherit;
|
|
11
|
+
background: var(--accent-light);
|
|
12
|
+
display: flex;
|
|
13
|
+
flex-direction: column;
|
|
14
|
+
text-align: center;
|
|
15
|
+
justify-content: center;
|
|
16
|
+
align-items: center;
|
|
17
|
+
border: solid 1px var(--border-color);
|
|
18
|
+
border-radius: 0.25rem;
|
|
19
|
+
margin: 0;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.download a.button {
|
|
23
|
+
cursor: pointer;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.download a:hover {
|
|
27
|
+
color: var(--accent);
|
|
28
|
+
text-decoration: none;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.titlecard {
|
|
32
|
+
background: var(--primary-color);
|
|
33
|
+
width: 100%;
|
|
34
|
+
z-index: 10000000;
|
|
35
|
+
border-top: solid 1px var(--border-color);
|
|
36
|
+
box-shadow: 0 0 0.15rem;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.titlecard a {
|
|
40
|
+
text-decoration: underline;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.sha:before {
|
|
44
|
+
content: "SHA1 ";
|
|
45
|
+
text-align: left;
|
|
46
|
+
font-weight: bold;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.sha {
|
|
50
|
+
font-family: monospace;
|
|
51
|
+
font-size: .75rem;
|
|
52
|
+
border: solid 1px var(--border-color);
|
|
53
|
+
padding: 0.25rem;
|
|
54
|
+
color: var(--text-lo);
|
|
55
|
+
user-select: all;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.betanotice.notice {
|
|
59
|
+
background: var(--window-background-hi);
|
|
60
|
+
padding: 1rem;
|
|
61
|
+
border-radius: 0.25rem;
|
|
62
|
+
margin: 0.25rem;
|
|
63
|
+
align-items: center;
|
|
64
|
+
place-content: center;
|
|
65
|
+
position: relative;
|
|
66
|
+
overflow: hidden;
|
|
67
|
+
transition: all 0.5s ease-in-out;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.betanotice:before {
|
|
71
|
+
content: "BETA";
|
|
72
|
+
color: white;
|
|
73
|
+
background: red;
|
|
74
|
+
position: absolute;
|
|
75
|
+
width: 160px;
|
|
76
|
+
text-align: center;
|
|
77
|
+
transform: rotate(-45deg);
|
|
78
|
+
transform-origin: top right;
|
|
79
|
+
left: -80px;
|
|
80
|
+
top: -30px;
|
|
81
|
+
font-weight: bold;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.betanotice > span {
|
|
85
|
+
margin-left: 1rem;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
.betanotice .fademe, .betanotice .fa-robot {
|
|
89
|
+
transition: all 0.5s ease-in-out;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.betanotice .fa-robot {
|
|
93
|
+
cursor: zoom-in;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
.betanotice:active {
|
|
97
|
+
background: var(--accent);
|
|
98
|
+
color: var(--text-over-accent);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
.betanotice:active .fademe {
|
|
102
|
+
opacity: 0;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
.betanotice:active .fa-robot {
|
|
106
|
+
transform: scale(3);
|
|
107
|
+
transform-origin: top;
|
|
108
|
+
display: block !important;
|
|
109
|
+
color: var(--text-over-accent);
|
|
110
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
.overbox:hover {
|
|
2
|
+
background: rgba(255, 0, 255, 0.2);
|
|
3
|
+
cursor: alias;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
.overbox:active {
|
|
7
|
+
color: white;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
.overbox {
|
|
11
|
+
position: absolute;
|
|
12
|
+
color: #999;
|
|
13
|
+
z-index: 2;
|
|
14
|
+
padding: 0 1rem;
|
|
15
|
+
border: solid;
|
|
16
|
+
border-radius: 0.15rem;
|
|
17
|
+
bottom: 2rem;
|
|
18
|
+
left: 50%;
|
|
19
|
+
transform: translateX(-50%);
|
|
20
|
+
width: auto;
|
|
21
|
+
white-space: nowrap;
|
|
22
|
+
font-size: 0.75rem;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.overbox a {
|
|
26
|
+
display: block;
|
|
27
|
+
color: white;
|
|
28
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
.screen a.button {
|
|
2
|
+
background: var(--accent);
|
|
3
|
+
padding: 0.5rem;
|
|
4
|
+
margin: 1rem 0.5rem;
|
|
5
|
+
color: var(--text-over-accent);
|
|
6
|
+
box-shadow: 0 0 0.15rem black;
|
|
7
|
+
cursor: pointer;
|
|
8
|
+
font-variant: all-small-caps;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.screen button:active {
|
|
12
|
+
box-shadow: 0 0 0 black;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.screen a.button:active {
|
|
16
|
+
box-shadow: 0 0 0 black;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.screen button {
|
|
20
|
+
background: var(--window-background-lo);
|
|
21
|
+
color: var(--text);
|
|
22
|
+
border: 0;
|
|
23
|
+
margin: 0.5rem 0;
|
|
24
|
+
cursor: pointer;
|
|
25
|
+
padding: 0.25rem;
|
|
26
|
+
box-shadow: 0 0 0.1rem black;
|
|
27
|
+
transition: all .25s ease-in-out;
|
|
28
|
+
font-variant: all-small-caps;
|
|
29
|
+
border-radius: 0.15rem;
|
|
30
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
.fixboot > .container {
|
|
2
|
+
padding: 0.25rem;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
.logincard {
|
|
6
|
+
background-position: center;
|
|
7
|
+
background-size: cover;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
.subhead {
|
|
11
|
+
font-variant: all-petite-caps;
|
|
12
|
+
margin-bottom: 1rem;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.tail {
|
|
16
|
+
background: black;
|
|
17
|
+
color: white;
|
|
18
|
+
font-size: 0.8rem;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.container {
|
|
22
|
+
max-width: initial;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
:before {
|
|
26
|
+
text-decoration: none !important;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
a.linker:before {
|
|
30
|
+
content: "\f005";
|
|
31
|
+
font-family: 'Font Awesome 5 Free';
|
|
32
|
+
font-size: 0.4rem;
|
|
33
|
+
vertical-align: middle;
|
|
34
|
+
padding-right: 0.5rem;
|
|
35
|
+
color: gray;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
a.linker {
|
|
39
|
+
padding-right: 0.5rem;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
button.white {
|
|
43
|
+
margin: 0;
|
|
44
|
+
background: white;
|
|
45
|
+
color: black;
|
|
46
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
|
|
2
|
+
.overstate {
|
|
3
|
+
text-shadow: 1px 0 0 black, 0 1px 0 black, -1px 0 0 black, 0 -1px 0 black;
|
|
4
|
+
font-weight: bold;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
.overpseudo:after, .overpseudo:before {
|
|
8
|
+
text-shadow: 1px 0 0 black, 0 1px 0 black, -1px 0 0 black, 0 -1px 0 black;
|
|
9
|
+
font-weight: bold;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.divimage.overlay {
|
|
13
|
+
backdrop-filter: hue-rotate(45deg);
|
|
14
|
+
border-radius: 100rem;
|
|
15
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import m from "mithril";
|
|
2
|
+
import getNonce from "../../../../src/support/nonce.mjs"
|
|
3
|
+
|
|
4
|
+
const
|
|
5
|
+
|
|
6
|
+
DOWNLOADSUFFIX = {
|
|
7
|
+
"osx-x64": "osx-x64.dmg",
|
|
8
|
+
"osx-arm64": "osx-arm64.dmg",
|
|
9
|
+
"win-x64": "win-x64-Setup.exe"
|
|
10
|
+
},
|
|
11
|
+
|
|
12
|
+
nonce = getNonce();
|
|
13
|
+
|
|
14
|
+
let VERSION;
|
|
15
|
+
|
|
16
|
+
async function getVersion(URL_VERSION) {
|
|
17
|
+
if (!VERSION) VERSION = await m.request({url: `${URL_VERSION}?${nonce}`});
|
|
18
|
+
return VERSION;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
*
|
|
23
|
+
* @param {string} URL_VERSION
|
|
24
|
+
* @param {string} plaf
|
|
25
|
+
* @param {string} arch
|
|
26
|
+
* @return {Promise<{major:number, minor:number, revision: number, sha:string}>}
|
|
27
|
+
*/
|
|
28
|
+
async function getLastVersion(URL_VERSION, plaf, arch) {
|
|
29
|
+
if (plaf && arch) {
|
|
30
|
+
const
|
|
31
|
+
idplaf = plaf + "-" + arch,
|
|
32
|
+
data = await getVersion(URL_VERSION),
|
|
33
|
+
versionMeta = data[idplaf];
|
|
34
|
+
return versionMeta;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* @param {string} URL_VERSION
|
|
40
|
+
* @param {string} version
|
|
41
|
+
* @param {string} plaf
|
|
42
|
+
* @param {string} arch
|
|
43
|
+
* @return {Promise<{newer:boolean, older:boolean, version:{major:number, minor:number, revision: number, sha:string}}>}
|
|
44
|
+
*/
|
|
45
|
+
|
|
46
|
+
async function checkUpdate(URL_VERSION, version, plaf, arch) {
|
|
47
|
+
|
|
48
|
+
if (version && plaf && arch) {
|
|
49
|
+
|
|
50
|
+
const
|
|
51
|
+
versionMeta = await getLastVersion(URL_VERSION, plaf, arch);
|
|
52
|
+
|
|
53
|
+
if (!versionMeta) {
|
|
54
|
+
throw {message: "Cannot find an application for your platform"};
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const
|
|
58
|
+
[major, minor, revision] = version.split(".")
|
|
59
|
+
.map((v) => Number.parseInt(v, 10));
|
|
60
|
+
|
|
61
|
+
return (versionMeta.major > major)
|
|
62
|
+
|| (versionMeta.minor > minor && versionMeta.major === major)
|
|
63
|
+
|| (versionMeta.revision > revision && versionMeta.minor === minor && versionMeta.major === major)
|
|
64
|
+
? {version: versionMeta, newer: true}
|
|
65
|
+
: {older: true};
|
|
66
|
+
}
|
|
67
|
+
throw {message: "Your Update Link sucks !"};
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
*
|
|
72
|
+
* @param {string} version
|
|
73
|
+
* @param {string} plaf
|
|
74
|
+
* @param {string} arch
|
|
75
|
+
* @return {string|null}
|
|
76
|
+
*/
|
|
77
|
+
function getFilename(version, plaf, arch) {
|
|
78
|
+
|
|
79
|
+
return (plaf && arch && DOWNLOADSUFFIX[plaf + "-" + arch])
|
|
80
|
+
? `obscene-studio-${version}-${DOWNLOADSUFFIX[plaf + "-" + arch]}`
|
|
81
|
+
: null;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export {
|
|
85
|
+
getVersion,
|
|
86
|
+
getFilename,
|
|
87
|
+
checkUpdate
|
|
88
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import LocalBrowser from "./widgets/LocalBrowser.mjs";
|
|
2
|
+
import LocalLauncher from "./widgets/LocalLauncher.mjs";
|
|
3
|
+
import LocalLauncherCode from "./widgets/LocalLauncher.code.mjs";
|
|
4
|
+
|
|
5
|
+
const WidgetLibrary = {
|
|
6
|
+
LocalBrowser,
|
|
7
|
+
LocalLauncher,
|
|
8
|
+
LocalLauncherCode
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
export default WidgetLibrary;
|