@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.
Files changed (193) hide show
  1. package/dist/.DS_Store +0 -0
  2. package/dist/website.simple/webfonts/fa-brands-400.woff2 +0 -0
  3. package/dist/website.simple/webfonts/fa-solid-900.eot +0 -0
  4. package/dist/website.simple/webfonts/fa-solid-900.svg +4649 -0
  5. package/dist/website.simple/webfonts/fa-solid-900.ttf +0 -0
  6. package/dist/website.simple/webfonts/fa-solid-900.woff +0 -0
  7. package/dist/website.simple/webfonts/fa-solid-900.woff2 +0 -0
  8. package/dist/website.simple/website.css +32 -0
  9. package/dist/website.simple/website.min.js +6 -0
  10. package/dist/website.software/webfonts/fa-brands-400.woff2 +0 -0
  11. package/dist/website.software/webfonts/fa-solid-900.eot +0 -0
  12. package/dist/website.software/webfonts/fa-solid-900.svg +4649 -0
  13. package/dist/website.software/webfonts/fa-solid-900.ttf +0 -0
  14. package/dist/website.software/webfonts/fa-solid-900.woff +0 -0
  15. package/dist/website.software/webfonts/fa-solid-900.woff2 +0 -0
  16. package/dist/website.software/website.css +32 -0
  17. package/dist/website.software/website.min.js +6 -0
  18. package/dist/website.worlds/webfonts/fa-brands-400.woff2 +0 -0
  19. package/dist/website.worlds/webfonts/fa-solid-900.eot +0 -0
  20. package/dist/website.worlds/webfonts/fa-solid-900.svg +4649 -0
  21. package/dist/website.worlds/webfonts/fa-solid-900.ttf +0 -0
  22. package/dist/website.worlds/webfonts/fa-solid-900.woff +0 -0
  23. package/dist/website.worlds/webfonts/fa-solid-900.woff2 +0 -0
  24. package/dist/website.worlds/website.css +32 -0
  25. package/dist/website.worlds/website.min.js +6 -0
  26. package/package.json +49 -0
  27. package/readme.md +105 -0
  28. package/src/publisher-lib.js +179 -0
  29. package/src/publisher-list.js +91 -0
  30. package/src/publisher.js +38 -0
  31. package/src/util/cdn/nobj.cdn.js +88 -0
  32. package/src/util/htmlroute.js +39 -0
  33. package/src/util/markdown/lib.showdown.icon.js +62 -0
  34. package/src/util/markdown/lib.showdown.yt.js +54 -0
  35. package/src/util/markdown/markdown.js +144 -0
  36. package/src/util/navibar/util.navibar.js +63 -0
  37. package/src/util/sha.js +20 -0
  38. package/src/util/tokenizer.js +234 -0
  39. package/src/util/widgets/NoticeWidget.js +30 -0
  40. package/src/util/widgets/app.widgets.js +70 -0
  41. package/src/util/widgets/util.definewidget.js +14 -0
  42. package/src/widgets/Cookies.js +55 -0
  43. package/src/widgets/Frameset-simple.js +114 -0
  44. package/src/widgets/Frameset.js +124 -0
  45. package/src/widgets/Page.js +356 -0
  46. package/src/widgets/RightSide.js +93 -0
  47. package/src/widgets/Snippets.js +75 -0
  48. package/src/widgets/Tail.js +11 -0
  49. package/src/widgets/Widgets.js +10 -0
  50. package/src/widgets.client/Client.js +22 -0
  51. package/src/widgets.features/FeatureList.js +364 -0
  52. package/src/widgets.features/Youtube.js +23 -0
  53. package/src/widgets.features/bootcol.js +29 -0
  54. package/src/widgets.features/css/feature.css +112 -0
  55. package/src/widgets.features/css/tail.css +4 -0
  56. package/src/widgets.howto/Faq.js +201 -0
  57. package/src/widgets.howto/HowTo.js +419 -0
  58. package/src/widgets.howto/Tiles.js +51 -0
  59. package/src/widgets.howto/script-contractable.js +31 -0
  60. package/src/widgets.markdown/Document.js +84 -0
  61. package/src/widgets.market/MarketItem.js +278 -0
  62. package/src/widgets.market/MarketItem.orig.js +268 -0
  63. package/src/widgets.market/MarketItem.strips.js +276 -0
  64. package/src/widgets.market/StoryLicenseWIdget.js +45 -0
  65. package/src/widgets.market/app.utils.js +238 -0
  66. package/src.website/css/app/animations.css +27 -0
  67. package/src.website/css/app/ismobile.css +7 -0
  68. package/src.website/css/app/style.css +51 -0
  69. package/src.website/css/app/style.fullheight.css +9 -0
  70. package/src.website/css/app/style.mdblocks.css +59 -0
  71. package/src.website/css/app/style.putosafari.css +3 -0
  72. package/src.website/css/bootstrap/bootstrap-tiny-core.css +47 -0
  73. package/src.website/css/bootstrap/bootstrap-tiny-media-columns.css +1276 -0
  74. package/src.website/css/bootstrap/bootstrap-tiny-media-custom.css +59 -0
  75. package/src.website/css/bootstrap/bootstrap-tiny-media-display.css +279 -0
  76. package/src.website/css/bootstrap/bootstrap-tiny-media-flex.css +881 -0
  77. package/src.website/css/bootstrap/bootstrap-tiny-media-fonts.css +39 -0
  78. package/src.website/css/bootstrap/bootstrap-tiny-media-paddings.css +1348 -0
  79. package/src.website/css/css-core/core.ext.css +65 -0
  80. package/src.website/css/css-core/frontpage.css +28 -0
  81. package/src.website/css/css-core/root.css +34 -0
  82. package/src.website/css/css-core/root.fullheight.css +12 -0
  83. package/src.website/css/css-core/ui.dialog.round.css +14 -0
  84. package/src.website/css/css-core/ui.navibar.css +28 -0
  85. package/src.website/css/css-core/ui.notifications.css +12 -0
  86. package/src.website/css/css-featurelist/feature.css +196 -0
  87. package/src.website/css/css-featurelist/tail.css +4 -0
  88. package/src.website/css/css-screens/doc.css +22 -0
  89. package/src.website/css/css-screens/screens-meta.css +3 -0
  90. package/src.website/css/css-unsplash/unsplash.css +32 -0
  91. package/src.website/css/css-videos/youtube.css +28 -0
  92. package/src.website/css/css-wiki/wiki.css +206 -0
  93. package/src.website/css/css-wiki/wiki.sidepane.css +16 -0
  94. package/src.website/css/fontawesome/fa-brands.css +18 -0
  95. package/src.website/css/fontawesome/fa-solid.css +16 -0
  96. package/src.website/css/fontawesome/fa.css +4359 -0
  97. package/src.website/css/skin/mierda.css +15 -0
  98. package/src.website/css/skin/skin.dark.css +85 -0
  99. package/src.website/css/skin/skin.light.css +27 -0
  100. package/src.website/css/skin/vars.font.css +8 -0
  101. package/src.website/css/skin/vars.sizes.css +4 -0
  102. package/src.website/package-lock.json +2160 -0
  103. package/src.website/package.json +28 -0
  104. package/src.website/public/webfonts/fa-brands-400.woff2 +0 -0
  105. package/src.website/public/webfonts/fa-solid-900.eot +0 -0
  106. package/src.website/public/webfonts/fa-solid-900.svg +4649 -0
  107. package/src.website/public/webfonts/fa-solid-900.ttf +0 -0
  108. package/src.website/public/webfonts/fa-solid-900.woff +0 -0
  109. package/src.website/public/webfonts/fa-solid-900.woff2 +0 -0
  110. package/src.website/rollup.simple.mjs +36 -0
  111. package/src.website/rollup.software.mjs +36 -0
  112. package/src.website/rollup.terser.mjs +24 -0
  113. package/src.website/rollup.worlds.mjs +36 -0
  114. package/src.website/src/app/app.style.mjs +36 -0
  115. package/src.website/src/app/index.mjs +118 -0
  116. package/src.website/src/config.js +8 -0
  117. package/src.website/src/core/cdnmodel.mjs +7 -0
  118. package/src.website/src/core/clientruntime.mjs +41 -0
  119. package/src.website/src/core.cookies/analytics.mjs +96 -0
  120. package/src.website/src/core.cookies/cookiemanager.mjs +128 -0
  121. package/src.website/src/core.cookies/css/cookies.css +80 -0
  122. package/src.website/src/core.cookies/css/nocookies.css +48 -0
  123. package/src.website/src/core.extra/css/contractable.css +12 -0
  124. package/src.website/src/core.extra/css/faq.css +42 -0
  125. package/src.website/src/core.extra/css/howto.css +81 -0
  126. package/src.website/src/core.extra/extra.document.mjs +83 -0
  127. package/src.website/src/core.extra/extra.faq.mjs +30 -0
  128. package/src.website/src/core.extra/extra.mjs +62 -0
  129. package/src.website/src/main.simple.mjs +4 -0
  130. package/src.website/src/main.software.mjs +10 -0
  131. package/src.website/src/main.worlds.mjs +9 -0
  132. package/src.website/src/support/ismobile.mjs +4 -0
  133. package/src.website/src/support/nonce.mjs +4 -0
  134. package/src.website/src/support/persistsettings.mjs +41 -0
  135. package/src.website/src/support/qrcode.mjs +1269 -0
  136. package/src.website/src/support/timeutils.mjs +237 -0
  137. package/src.website/src/widgets/index.mjs +22 -0
  138. package/src.website/src.widgets/widgets.market/index.mjs +11 -0
  139. package/src.website/src.widgets/widgets.market/widgets/market/DiscoverWidget.mjs +401 -0
  140. package/src.website/src.widgets/widgets.market/widgets/market/EmptyNew.mjs +28 -0
  141. package/src.website/src.widgets/widgets.market/widgets/market/MarketDetail.mjs +78 -0
  142. package/src.website/src.widgets/widgets.market/widgets/market/MarketItem.mjs +349 -0
  143. package/src.website/src.widgets/widgets.market/widgets/market/MarketWidget.mjs +437 -0
  144. package/src.website/src.widgets/widgets.market/widgets/market/StoryLicenseWidget.mjs +34 -0
  145. package/src.website/src.widgets/widgets.market/widgets/market/css/market.css +394 -0
  146. package/src.website/src.widgets/widgets.market/widgets/market/css/notice.css +6 -0
  147. package/src.website/src.widgets/widgets.market/widgets/navibar/NaviBarWidget.mjs +58 -0
  148. package/src.website/src.widgets/widgets.market/widgets/navibar/css/titlebar.css +68 -0
  149. package/src.website/src.widgets/widgets.market/widgets/navibar/css/ui.navibar.css +28 -0
  150. package/src.website/src.widgets/widgets.software/index.mjs +9 -0
  151. package/src.website/src.widgets/widgets.software/widgets/BootStrapColumnWidget.mjs +17 -0
  152. package/src.website/src.widgets/widgets.software/widgets/DownloadWidget.mjs +210 -0
  153. package/src.website/src.widgets/widgets.software/widgets/LicenseWidget.js +103 -0
  154. package/src.website/src.widgets/widgets.software/widgets/css/download/download.css +110 -0
  155. package/src.website/src.widgets/widgets.software/widgets/css/license/beta.css +28 -0
  156. package/src.website/src.widgets/widgets.software/widgets/css/license/button.css +30 -0
  157. package/src.website/src.widgets/widgets.software/widgets/css/license/front.css +46 -0
  158. package/src.website/src.widgets/widgets.software/widgets/css/license/licenses.css +13 -0
  159. package/src.website/src.widgets/widgets.software/widgets/css/license/overstate.css +15 -0
  160. package/src.website/src.widgets/widgets.software/widgets/css/license/story.css +8 -0
  161. package/src.website/src.widgets/widgets.software/widgets/css/license/toolbar.css +9 -0
  162. package/src.website/src.widgets/widgets.software/widgets/support/version.mjs +88 -0
  163. package/src.website/src.widgets/widgets.worlds/index.mjs +11 -0
  164. package/src.website/src.widgets/widgets.worlds/widgets/LocalBrowser.mjs +386 -0
  165. package/src.website/src.widgets/widgets.worlds/widgets/LocalLauncher.code.mjs +247 -0
  166. package/src.website/src.widgets/widgets.worlds/widgets/LocalLauncher.mjs +239 -0
  167. package/src.website/src.widgets/widgets.worlds/widgets/css/input.css +32 -0
  168. package/src.website/src.widgets/widgets.worlds/widgets/css/localprojects.css +188 -0
  169. package/templates/documentation/assets/docs.css +7 -0
  170. package/templates/documentation/assets/images/right.webp +0 -0
  171. package/templates/documentation/images.json +12 -0
  172. package/templates/documentation/metadata.json +120 -0
  173. package/templates/documentation/pages/cookies.md +25 -0
  174. package/templates/documentation/pages/index.md +13 -0
  175. package/templates/documentation/pages/privacy.md +50 -0
  176. package/templates/documentation/pages/tos.md +49 -0
  177. package/templates/landing/assets/res/carousel/image-1.webp +0 -0
  178. package/templates/landing/assets/res/carousel/image-2.webp +0 -0
  179. package/templates/landing/assets/res/carousel/image-3.webp +0 -0
  180. package/templates/landing/assets/res/custom.css +122 -0
  181. package/templates/landing/assets/res/logos/favicon.ico +0 -0
  182. package/templates/landing/assets/res/logos/favicon.png +0 -0
  183. package/templates/landing/assets/res/logos/logo.medallion.png +0 -0
  184. package/templates/landing/assets/res/logos/logo.white.png +0 -0
  185. package/templates/landing/assets/res/proj/banda-tech-client.webp +0 -0
  186. package/templates/landing/assets/res/proj/banda-tech-server.webp +0 -0
  187. package/templates/landing/assets/res/proj/proj-common-ground.webp +0 -0
  188. package/templates/landing/assets/res/proj/proj-fieldnote.webp +0 -0
  189. package/templates/landing/assets/res/proj/proj-tribes.webp +0 -0
  190. package/templates/landing/images.json +932 -0
  191. package/templates/landing/metadata.json +115 -0
  192. package/templates/landing/pages/index.json +268 -0
  193. 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,13 @@
1
+ .licbody {
2
+ font-family: monospace;
3
+ font-size: .5rem;
4
+ word-break: break-all;
5
+ user-select: text;
6
+ height: 1.6rem;
7
+ margin-bottom: 0.5rem;
8
+ overflow: hidden;
9
+ }
10
+
11
+ .licicon {
12
+ color: var(--accent);
13
+ }
@@ -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,8 @@
1
+ .story {
2
+ font-size: 1.75rem;
3
+ height: 100%;
4
+ background: black;
5
+ color: white;
6
+ width: 100%;
7
+ min-height: 600px;
8
+ }
@@ -0,0 +1,9 @@
1
+ nav.tab-menu.flexrow {
2
+ flex-shrink: 0;
3
+ padding-left: 0 !important;
4
+ font-variant: all-small-caps;
5
+ }
6
+
7
+ .tab-menu-item a {
8
+ text-decoration: none;
9
+ }
@@ -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;