Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
d424780
Sidebar shouldn't overlay monaco context menu
CareyJWilliams Oct 30, 2022
8e26e0f
Fix default user path on desktop
CareyJWilliams Mar 27, 2023
e09362e
Fix editor references in dictionary context cmds
CareyJWilliams Mar 27, 2023
2db8f5e
Change default word count setting to include cmd lines
CareyJWilliams Mar 30, 2023
4a4758d
Tab panels shouldn't overlay monaco context menu
CareyJWilliams Apr 1, 2023
796e390
Move to electron
CareyJWilliams May 2, 2022
5ee133e
Move to electron
CareyJWilliams May 2, 2022
618ce80
Use PKCE for Dropbox authentication
CareyJWilliams Apr 1, 2023
b2dda0d
Prevent CMD-W quit
CareyJWilliams Apr 11, 2023
b03b46b
Fix tab bar selection
CareyJWilliams Apr 11, 2023
b5d869d
Bump Monaco and adopt official Opener APIs
CareyJWilliams Jun 2, 2023
14829e0
Make an adjacent editor active on close
CareyJWilliams Jun 2, 2023
e5cccac
Clear dictionary word input on submit
CareyJWilliams Jun 2, 2023
81c9dce
Fix: ship and specify dictionaries for spellcheck
CareyJWilliams Jun 3, 2023
d0df243
Remove node_CSIDE.js
CareyJWilliams Jun 3, 2023
e35e6a2
Upgrade monaco-editor to fix dictionaries
CareyJWilliams Jun 6, 2023
9f9ce8a
Fix web version
CareyJWilliams Jun 6, 2023
9a21f4e
Don't reference node_CSIDE.js in build
CareyJWilliams Jun 6, 2023
67cf497
Fix and simplify dependencies
CareyJWilliams Jun 6, 2023
aa79b09
Update acknowledgements
CareyJWilliams Jun 6, 2023
9c29898
Fix duplicate extension in save onHover text
CareyJWilliams Jun 12, 2023
b2291be
Convince usage of https for git deps
CareyJWilliams Oct 8, 2023
937ab5f
Align deploy-nightly workflow
CareyJWilliams Oct 8, 2023
a62c1e5
Fix project run for web
CareyJWilliams Oct 8, 2023
2bd26df
Hide auth code to mitigate accidental sharing
CareyJWilliams Oct 8, 2023
51eef3a
Fix scene file display and opening on Web
CareyJWilliams Oct 8, 2023
7a7a89e
Notify about rather than log issues with no file
CareyJWilliams Oct 8, 2023
eadbab5
Don't generate issues for unopened files
CareyJWilliams Oct 8, 2023
393a6eb
Fix path construction for image scenes
CareyJWilliams Oct 8, 2023
1e9bb8a
Add support back for Web runtime issues
CareyJWilliams Oct 8, 2023
a96f852
Fix issue log regression
CareyJWilliams Oct 8, 2023
fdaa4a8
Fix display of panel expand controls
CareyJWilliams Oct 8, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 49 additions & 0 deletions .eslintrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
{
"root": true,
"env": {
"browser": true,
"es2021": true,
"node": true
},
"ignorePatterns": [
"**/*.js"
],
"extends": [
"eslint:recommended",
"plugin:@typescript-eslint/recommended"
],
"overrides": [
],
"parser": "@typescript-eslint/parser",
"parserOptions": {
"ecmaVersion": "latest",
"sourceType": "module"
},
"plugins": [
"@typescript-eslint"
],
"rules": {
"indent": [
"error",
4,
{"SwitchCase": 1}
],
"linebreak-style": 0,
"quotes": [
"error",
"single"
],
"semi": [
"error",
"always"
],
"no-unused-vars": "off",
"@typescript-eslint/no-unused-vars": [
"warn", // or "error"
{
"argsIgnorePattern": "^_",
"caughtErrorsIgnorePattern": "^_"
}
]
}
}
8 changes: 8 additions & 0 deletions .github/actions/build-electron/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
name: 'build-electron'
description: 'Build CSIDE Electron Distributions'
runs:
using: 'node16'
main: 'build-electron.js'
outputs:
assets:
description: 'Line separated paths to built distributables'
94 changes: 94 additions & 0 deletions .github/actions/build-electron/build-electron.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
exports.__esModule = true;
var core = require("@actions/core");
var builder = require("electron-builder");
var electron_builder_1 = require("electron-builder");
var platform = builder.Platform;
var release = function () { return __awaiter(void 0, void 0, void 0, function () {
var targets, paths, zipFiles;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
targets = new Map();
switch (process.platform) {
case 'linux':
targets = platform.LINUX.createTarget(['zip'], electron_builder_1.Arch['x64']);
break;
case 'darwin':
targets = platform.MAC.createTarget(['zip'], electron_builder_1.Arch['x64'], electron_builder_1.Arch['arm64']);
break;
case 'win32':
targets = platform.WINDOWS.createTarget(['zip'], electron_builder_1.Arch['ia32'], electron_builder_1.Arch['x64']);
break;
}
console.log('Building...');
return [4 /*yield*/, builder.build({
targets: targets,
publish: 'never'
})];
case 1:
paths = _a.sent();
zipFiles = paths.filter(function (path) { return /\.zip$/.exec(path); });
console.log("Built ".concat(zipFiles.length, " asset(s)."));
core.setOutput('assets', zipFiles.join('\n'));
return [2 /*return*/];
}
});
}); };
(function () { return __awaiter(void 0, void 0, void 0, function () {
var err_1;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
console.log('Building Electron Desktop Application');
_a.label = 1;
case 1:
_a.trys.push([1, 3, , 4]);
return [4 /*yield*/, release()];
case 2:
_a.sent();
return [3 /*break*/, 4];
case 3:
err_1 = _a.sent();
core.setFailed(err_1.message);
return [3 /*break*/, 4];
case 4: return [2 /*return*/];
}
});
}); })();
32 changes: 32 additions & 0 deletions .github/actions/release/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
name: 'release'
description: 'Releases CSIDE'
runs:
using: 'node16'
main: 'release.js'
inputs:
github_token:
description: 'A GitHub access token'
required: true
owner:
description: 'The owner (user or org) of the repository'
required: true
repo:
description: 'The repository'
required: true
tag:
description: 'The name of a tag to use'
required: false
time_period_hours:
description: 'The time period in which to check for new commits'
required: false
draft:
description: 'Determines if the release is a draft'
required: false
default: true
prerelease:
description: 'Determines if the release is a prerelease'
required: false
default: false
assets:
description: 'Asset files to upload'
required: false
150 changes: 150 additions & 0 deletions .github/actions/release/release.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,150 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
exports.__esModule = true;
var core = require("@actions/core");
var github = require("@actions/github");
var fs_1 = require("fs");
var path_1 = require("path");
var INVALID_CHARS = [' '];
var date = new Date(new Date().toLocaleString('en-US', { timeZone: 'Europe/London' }));
var GITHUB_TOKEN = core.getInput('github_token');
var repo = core.getInput('repo') || 'main';
var owner = core.getInput('owner') || 'ChoiceScriptIDE';
var timePeriod = core.getInput('time_period_hours') || '24';
var tag = core.getInput('tag') || "nightly_".concat(date.getFullYear(), ".").concat(date.getMonth() + 1, ".").concat(date.getDate());
var draft = core.getBooleanInput('draft') || true;
var prerelease = core.getBooleanInput('prerelease') || false;
var assets = core.getMultilineInput('assets') || [];
var api = github.getOctokit(GITHUB_TOKEN);
var release = function () { return __awaiter(void 0, void 0, void 0, function () {
var commits, rel, release_notes, _loop_1, _i, assets_1, a;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, api.rest.repos.listCommits({ owner: owner, repo: repo, since: "".concat(timePeriod, " hours ago") })];
case 1:
commits = (_a.sent()).data;
if (!commits.length) {
console.log('No new commits in time period. Abandoning release.');
process.exit();
}
return [4 /*yield*/, api.rest.repos.listReleases({ owner: owner, repo: repo })];
case 2:
rel = (_a.sent()).data.filter(function (rel) { return rel.tag_name === tag; })[0];
if (!!rel) return [3 /*break*/, 4];
console.log('Release not found. Creating new release.');
console.log("Generating release notes from ".concat(commits.length, " commits since ").concat(timePeriod, "hrs ago"));
release_notes = commits.map(function (c) { return "- ".concat(c.commit.message); });
return [4 /*yield*/, api.rest.repos.createRelease({ owner: owner, repo: repo, tag_name: tag, body: release_notes.join('\n'), draft: draft, prerelease: prerelease })];
case 3:
rel = (_a.sent()).data;
return [3 /*break*/, 5];
case 4:
console.log('Release found. Updating existing release.');
_a.label = 5;
case 5:
if (!assets.length) return [3 /*break*/, 10];
_loop_1 = function (a) {
var ext, name_1, _b, INVALID_CHARS_1, c, prevAsset;
return __generator(this, function (_c) {
switch (_c.label) {
case 0:
ext = (0, path_1.extname)(a);
name_1 = "".concat((0, path_1.basename)(a, ext), "-").concat(tag).concat(ext);
for (_b = 0, INVALID_CHARS_1 = INVALID_CHARS; _b < INVALID_CHARS_1.length; _b++) {
c = INVALID_CHARS_1[_b];
name_1 = name_1.replace(c, '.');
}
prevAsset = rel.assets.find(function (fa) { return fa.name === name_1; });
if (!prevAsset) return [3 /*break*/, 2];
console.log("Asset ".concat(name_1, " already exists. Deleting."));
return [4 /*yield*/, api.rest.repos.deleteReleaseAsset({ owner: owner, repo: repo, asset_id: prevAsset.id })];
case 1:
_c.sent();
_c.label = 2;
case 2:
console.log("Uploading asset: ".concat(name_1));
return [4 /*yield*/, api.rest.repos.uploadReleaseAsset({ release_id: rel.id, owner: owner, repo: repo, name: name_1, data: (0, fs_1.readFileSync)(a) })];
case 3:
_c.sent(); // eslint-disable-line @typescript-eslint/no-explicit-any
return [2 /*return*/];
}
});
};
_i = 0, assets_1 = assets;
_a.label = 6;
case 6:
if (!(_i < assets_1.length)) return [3 /*break*/, 9];
a = assets_1[_i];
return [5 /*yield**/, _loop_1(a)];
case 7:
_a.sent();
_a.label = 8;
case 8:
_i++;
return [3 /*break*/, 6];
case 9: return [3 /*break*/, 11];
case 10:
console.log('No assets found.');
_a.label = 11;
case 11: return [2 /*return*/];
}
});
}); };
(function () { return __awaiter(void 0, void 0, void 0, function () {
var err_1;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
console.log('Release Workflow');
console.log("Target: ".concat(owner, "/").concat(repo));
console.log("Release tag: ".concat(tag));
_a.label = 1;
case 1:
_a.trys.push([1, 3, , 4]);
return [4 /*yield*/, release()];
case 2:
_a.sent();
return [3 /*break*/, 4];
case 3:
err_1 = _a.sent();
core.setFailed(err_1.message);
return [3 /*break*/, 4];
case 4: return [2 /*return*/];
}
});
}); })();
Loading