Fix nasty auto-save bug

This commit is contained in:
2023-11-14 12:51:26 +01:00
parent c46f553f21
commit 3b6f02b525
7 changed files with 130 additions and 165 deletions

View File

@ -36,22 +36,6 @@ if (!self.define) {
}
})
.then(() => {
return registry[uri] || (
new Promise(resolve => {
if ("document" in self) {
const script = document.createElement("script");
script.src = uri;
script.onload = resolve;
document.head.appendChild(script);
} else {
nextDefineUri = uri;
importScripts(uri);
resolve();
}
})
.then(() => {
let promise = registry[uri];
if (!promise) {
@ -70,15 +54,11 @@ if (!self.define) {
}
let exports = {};
const require = depUri => singleRequire(depUri, uri);
const require = depUri => singleRequire(depUri, uri);
const specialDeps = {
module: { uri },
exports,
require
};
registry[uri] = Promise.all(depsNames.map(
depName => specialDeps[depName] || require(depName)
)).then(deps => {
registry[uri] = Promise.all(depsNames.map(
depName => specialDeps[depName] || require(depName)
)).then(deps => {
@ -87,7 +67,6 @@ if (!self.define) {
});
};
}
define(['./workbox-b7fccfec'], (function (workbox) { 'use strict';
define(['./workbox-b7fccfec'], (function (workbox) { 'use strict';
self.skipWaiting();
@ -103,7 +82,7 @@ define(['./workbox-b7fccfec'], (function (workbox) { 'use strict';
"revision": "3ca0b8505b4bec776b69afdba2768812"
}, {
"url": "index.html",
"revision": "0.93gcaii03k8"
"revision": "0.0ufj7f4tmog"
}], {});
workbox.cleanupOutdatedCaches();
workbox.registerRoute(new workbox.NavigationRoute(workbox.createHandlerBoundToURL("index.html"), {
@ -121,21 +100,5 @@ define(['./workbox-b7fccfec'], (function (workbox) { 'use strict';
})]
}), 'GET');
}));
workbox.registerRoute(new workbox.NavigationRoute(workbox.createHandlerBoundToURL("index.html"), {
allowlist: [/^\/$/]
}));
workbox.registerRoute(({
url
}) => [/^https:\/\/raw\.githubusercontent\.com\/.*/i, /^https:\/\/shabda\.ndre\.gr\/.*/i].some(regex => regex.test(url)), new workbox.CacheFirst({
"cacheName": "external-samples",
plugins: [new workbox.ExpirationPlugin({
maxEntries: 5000,
maxAgeSeconds: 2592000
}), new workbox.CacheableResponsePlugin({
statuses: [0, 200]
})]
}), 'GET');
}));
//# sourceMappingURL=sw.js.map

File diff suppressed because one or more lines are too long

View File

@ -1322,6 +1322,12 @@ export class UserAPI {
return results.some((value) => value === true);
};
public dur = (n: number | number[]): boolean => {
let nums: number[] = Array.isArray(n) ? n : [n];
// @ts-ignore
return this.beat(nums.dur(...nums));
};
// =============================================================
// Modulo based time filters
// =============================================================

View File

@ -16,6 +16,11 @@ const handleResize = (canvas: HTMLCanvasElement) => {
}
};
export const saveState = (app: Editor): null => {
app.settings.saveApplicationToLocalStorage(app.universes, app.settings);
return null;
};
export const saveBeforeExit = (app: Editor): null => {
// Iterate over all local files and set the candidate to the committed
app.currentFile().candidate = app.view.state.doc.toString();
@ -29,7 +34,6 @@ export const installWindowBehaviors = (
window: Window,
preventMultipleTabs: boolean = false
) => {
window.addEventListener("resize", () =>
handleResize(app.interface.scope as HTMLCanvasElement)
);
@ -37,12 +41,12 @@ export const installWindowBehaviors = (
handleResize(app.interface.feedback as HTMLCanvasElement)
);
window.addEventListener("beforeunload", (event) => {
event.preventDefault()
saveBeforeExit(app)
event.preventDefault();
saveBeforeExit(app);
});
window.addEventListener("visibilitychange", (event) => {
event.preventDefault();
saveBeforeExit(app)
saveBeforeExit(app);
});
if (preventMultipleTabs) {
@ -65,11 +69,21 @@ export const installWindowBehaviors = (
);
}
window.addEventListener('error', e => {
console.log("Je suis bien installé !")
console.log(e.message
, '\n', e.filename, ':', e.lineno, (e.colno ? ':' + e.colno : '')
, e.error && e.error.stack ? '\n' : '', e.error ? e.error.stack : undefined
window.addEventListener(
"error",
(e) => {
console.log("Je suis bien installé !");
console.log(
e.message,
"\n",
e.filename,
":",
e.lineno,
e.colno ? ":" + e.colno : "",
e.error && e.error.stack ? "\n" : "",
e.error ? e.error.stack : undefined
);
},
false
);
}, false);
};

View File

@ -8,8 +8,8 @@ declare global {
sub(amount: number): number[];
mult(amount: number): number[];
div(amount: number): number[];
mouseX(): T[],
mouseY(): T[],
mouseX(): T[];
mouseY(): T[];
palindrome(): T[];
random(index: number): T;
rand(index: number): T;
@ -37,7 +37,6 @@ declare global {
}
export const makeArrayExtensions = (api: UserAPI) => {
Array.prototype.mouseX = function <T>(this: T[]): T {
/**
* @returns Value from list based on mouse X position
@ -171,46 +170,29 @@ export const makeArrayExtensions = (api: UserAPI) => {
};
Array.prototype.b = Array.prototype.beat;
// Array.prototype.dur = function(...durations) {
// const timepos = api.app.clock.pulses_since_origin;
// const ppqn = api.ppqn();
// let adjustedDurations = [];
// for (let i = 0; i < this.length; i++) {
// adjustedDurations.push(durations[i % durations.length]);
// }
// let cumulativeDuration = 0;
// let totalDuration = adjustedDurations.reduce((acc, duration) => acc + duration * ppqn, 0);
// let modulatedTimePos = timepos % totalDuration;
// for (let i = 0; i < this.length; i++) {
// const valueDuration = adjustedDurations[i] as any * ppqn;
// if (modulatedTimePos < cumulativeDuration + valueDuration) {
// return this[i];
// }
// cumulativeDuration += valueDuration;
// }
// // This point should not be reached if durations are correctly specified
// throw new Error('Durations array does not match the pattern length.');
// };
Array.prototype.dur = function (...durations) {
const timepos = api.app.clock.pulses_since_origin;
const ppqn = api.ppqn();
const adjustedDurations = this.map((_, index) => durations[index % durations.length]);
const adjustedDurations = this.map(
(_, index) => durations[index % durations.length]
);
// @ts-ignore
const totalDurationInPulses = adjustedDurations.reduce((acc, duration) => acc + duration * ppqn, 0);
const totalDurationInPulses = adjustedDurations.reduce(
(acc, duration) => acc + duration * ppqn,
0
);
const loopPosition = timepos % totalDurationInPulses;
let cumulativeDuration = 0;
for (let i = 0; i < this.length; i++) {
const valueDurationInPulses = adjustedDurations[i] as any * ppqn;
const valueDurationInPulses = (adjustedDurations[i] as any) * ppqn;
cumulativeDuration += valueDurationInPulses;
if (loopPosition < cumulativeDuration) {
return this[i];
}
}
throw new Error('Durations array does not match the pattern length.');
throw new Error("Durations array does not match the pattern length.");
};
Array.prototype.shuffle = function () {
/**
* Shuffles the array in place.

View File

@ -16,8 +16,8 @@ import { documentation_factory } from "./Documentation";
import { EditorView } from "codemirror";
import { Clock } from "./Clock";
import { loadSamples, UserAPI } from "./API";
import * as oeis from 'jisg'
import * as zpatterns from 'zifferjs/src/patterns.ts'
import * as oeis from "jisg";
import * as zpatterns from "zifferjs/src/patterns.ts";
import { makeArrayExtensions } from "./extensions/ArrayExtensions";
import "./style.css";
import { Universes, File, template_universes } from "./FileManagement";
@ -26,7 +26,7 @@ import { tryEvaluate } from "./Evaluator";
import showdown from "showdown";
import { makeStringExtensions } from "./extensions/StringExtensions";
import { installInterfaceLogic } from "./InterfaceLogic";
import { installWindowBehaviors, saveBeforeExit } from "./WindowBehavior";
import { installWindowBehaviors, saveState } from "./WindowBehavior";
import { drawEmptyBlinkers } from "./AudioVisualisation";
import { makeNumberExtensions } from "./extensions/NumberExtensions";
// @ts-ignore
@ -514,7 +514,7 @@ export class Editor {
}
private setPeriodicSave(interval: number): void {
setInterval(() => saveBeforeExit(this), interval)
setInterval(() => saveState(this), interval);
}
}