Skip to content

Commit 4787dea

Browse files
authored
Merge pull request #1 from KanoComputing/master
Upstream sync
2 parents e8f0025 + 7c87bbf commit 4787dea

File tree

7 files changed

+51
-64
lines changed

7 files changed

+51
-64
lines changed

locale/editor/en-US.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,9 @@
4242
"MIN": "min",
4343
"MAX": "max",
4444
"SIGN": "sign",
45+
"PART_NAME_ALREADY_EXISTS": "A part with that name already exist",
46+
"PART_NAME_EMPTY": "A part name can't be empty",
47+
"PART_NAME_INVALID_FIRST_CHAR": "A part name must begin with a letter",
4548
"BLOCK_RANDOM_NUMBER_BETWEEN": "random number from %1 to %2",
4649
"ADD_PARTS_HEADING": "Add Parts",
4750
"DRAW_SET_BACKGROUND_COLOR": "Set background color",

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"url": "https://github.com/KanoComputing/kano-code.git"
66
},
77
"name": "@kano/code",
8-
"version": "3.0.1-alpha.19",
8+
"version": "3.0.1-alpha.22",
99
"main": "index.js",
1010
"scripts": {
1111
"typedoc": "typedoc",
@@ -64,7 +64,7 @@
6464
"@kano/i18n": "^1.0.4",
6565
"@kano/icons": "^3.1.3",
6666
"@kano/icons-rendering": "^3.0.16",
67-
"@kano/kwc-blockly": "^3.1.9",
67+
"@kano/kwc-blockly": "^3.1.10",
6868
"@kano/kwc-color-picker": "^3.0.0-beta.6",
6969
"@kano/kwc-icons": "^3.0.0-beta.3",
7070
"@kano/kwc-picker": "^3.1.2",

src/app/elements/kc-workspace-frame/kc-parts-controls.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,10 @@ export class KCPartsControls extends LitElement {
212212
update: (model : IStackEntry) => {
213213
item.inlineDisplay.onDispose();
214214
const index = this.parts.indexOf(item);
215-
this.parts.splice(index, 1, model);
215+
const newItem = model;
216+
newItem.entry = entry;
217+
218+
this.parts.splice(index, 1, newItem);
216219
this.parts = [...this.parts];
217220
},
218221
dispose: () => {
@@ -235,7 +238,13 @@ export class KCPartsControls extends LitElement {
235238
_validatePartName(oldName : string, newName : string) {
236239
const existing = this.parts.find(p => newName !== oldName && p.name === newName);
237240
if (existing) {
238-
return 'A part with that name already exist';
241+
return _('PART_NAME_ALREADY_EXISTS', 'A part with that name already exist');
242+
}
243+
if (!newName.length) {
244+
return _('PART_NAME_EMPTY', 'A part name can\'t be empty');
245+
}
246+
if (!/^[a-z]/i.test(newName)) {
247+
return _('PART_NAME_INVALID_FIRST_CHAR', 'A part name must begin with a letter');
239248
}
240249
return true;
241250
}

src/app/lib/editor/editor.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ export class Editor extends EditorOrPlayer {
198198
});
199199
this.sourceEditor.onDidLayout(() => this._onDidLayoutChange.fire());
200200
this.sourceEditor.registerQueryHandlers(this.queryEngine);
201-
201+
202202
this.dialogs.onDidLayout(() => this._onDidLayoutChange.fire());
203203

204204
this.queryEngine.registerTagHandler('alias', aliasTagHandlerFactory(this.queryEngine, this.selectorAliases));
@@ -300,7 +300,7 @@ export class Editor extends EditorOrPlayer {
300300
element.appendChild(this.domNode);
301301
}
302302
// Force a synchronous component update. No performance implications as it is about to render anyway
303-
// Makes inject a synchronous method. Way easier to handle injection
303+
// Makes inject a synchronous method. Way easier to handle injection
304304
(this.domNode as any).update();
305305
this.appendSourceEditor();
306306
this.appendWorkspaceView();
@@ -416,13 +416,13 @@ export class Editor extends EditorOrPlayer {
416416
/**
417417
* Downloads a .kcode file with the exported app
418418
*/
419-
exportToDisk() {
419+
exportToDisk(fileName = 'my-app.kcode') {
420420
const savedApp = this.export();
421421
const a = document.createElement('a');
422422
const file = new Blob([JSON.stringify(savedApp)], { type: 'application/kcode' });
423423
const url = URL.createObjectURL(file);
424424
document.body.appendChild(a);
425-
a.download = 'my-app.kcode';
425+
a.download = fileName;
426426
a.href = url;
427427
a.click();
428428
document.body.removeChild(a);

src/app/lib/editor/toolbox.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,8 @@ export class Toolbox extends Plugin {
7878
this.update();
7979
}
8080
updateEntry(oldEntry : IAPIDefinition, entry : IAPIDefinition) {
81-
const index = this.entries.indexOf(oldEntry);
82-
this.entries.splice(index, 1, entry);
81+
const index = this._entries.indexOf(oldEntry);
82+
this._entries.splice(index, 1, entry);
8383
this.update();
8484
}
8585
setWhitelist(whitelist : IToolboxWhitelist|null) {

src/app/lib/editor/workspace/toolbar.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ export class WorkspaceToolbar extends Plugin {
3535
if (!this.editor || !this.editor.workspaceView) {
3636
return;
3737
}
38-
38+
3939
const editorShadowRoot = this.editor.root;
4040
if (editorShadowRoot) {
4141
this.toolbar = editorShadowRoot.querySelector('kc-workspace-toolbar');
@@ -53,7 +53,7 @@ export class WorkspaceToolbar extends Plugin {
5353
});
5454
entry.onDidActivate(() => this.reset());
5555
this.defaultEntries.set('reset', entry);
56-
56+
5757
entry = this.addSettingsEntry({
5858
title: 'Export',
5959
ironIcon: 'kc-ui:export',
@@ -155,11 +155,11 @@ export class WorkspaceToolbar extends Plugin {
155155
this.resetDialog.open();
156156
this._telemetry.trackEvent({ name: 'reset_clicked' });
157157
}
158-
export() {
158+
export(fileName?: string) {
159159
if (!this.editor) {
160160
return;
161161
}
162-
this.editor.exportToDisk();
162+
this.editor.exportToDisk(fileName);
163163
this._telemetry.trackEvent({ name: 'export_clicked' });
164164
}
165165
import() {

yarn.lock

Lines changed: 25 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -747,10 +747,10 @@
747747
dependencies:
748748
"@kano/icons-rendering" "^3.0.16"
749749

750-
"@kano/kwc-blockly@^3.1.9":
751-
version "3.1.9"
752-
resolved "https://registry.yarnpkg.com/@kano/kwc-blockly/-/kwc-blockly-3.1.9.tgz#9935176d707b566a1491d56f5320151c7a86389c"
753-
integrity sha512-mXWKrs8WWrUbEVMpMV5xQoHiueqXw2XIrhHDUObzOlgMPRwtxARtTZ7dRIlLNAV9wIRvcKz/hM34/J6HaN+s7g==
750+
"@kano/kwc-blockly@^3.1.10":
751+
version "3.1.10"
752+
resolved "https://registry.yarnpkg.com/@kano/kwc-blockly/-/kwc-blockly-3.1.10.tgz#2995bb536da31263006552ab42bc981715ee20ca"
753+
integrity sha512-k2faI9oUaIlF0VMomWSTykF3I15RKd80VUMaNZil76VG1vKymRD9tWpFvI2cvVuMM8Ebkf+X12znRqWJ60U0Gw==
754754
dependencies:
755755
"@kano/kwc-color-picker" "^3.0.0-beta.7"
756756
"@kano/kwc-number-inputs" "^0.0.10"
@@ -1425,21 +1425,7 @@ async-limiter@~1.0.0:
14251425
resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8"
14261426
integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==
14271427

1428-
async@^2.5.0:
1429-
version "2.6.1"
1430-
resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610"
1431-
integrity sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==
1432-
dependencies:
1433-
lodash "^4.17.10"
1434-
1435-
async@^2.6.1:
1436-
version "2.6.2"
1437-
resolved "https://registry.yarnpkg.com/async/-/async-2.6.2.tgz#18330ea7e6e313887f5d2f2a904bac6fe4dd5381"
1438-
integrity sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==
1439-
dependencies:
1440-
lodash "^4.17.11"
1441-
1442-
async@^2.6.2:
1428+
async@^2.6.1, async@^2.6.2:
14431429
version "2.6.3"
14441430
resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff"
14451431
integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==
@@ -1806,11 +1792,6 @@ commander@^2.9.0:
18061792
resolved "https://registry.yarnpkg.com/commander/-/commander-2.16.0.tgz#f16390593996ceb4f3eeb020b31d78528f7f8a50"
18071793
integrity sha512-sVXqklSaotK9at437sFlFpyOcJonxe0yST/AG9DkQKUdIE6IqGIMv4SfAQSKaJbSdVEJYItASCrBiVQHq1HQew==
18081794

1809-
commander@~2.17.1:
1810-
version "2.17.1"
1811-
resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf"
1812-
integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==
1813-
18141795
compare-versions@^3.2.1:
18151796
version "3.4.0"
18161797
resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.4.0.tgz#e0747df5c9cb7f054d6d3dc3e1dbc444f9e92b26"
@@ -2592,23 +2573,12 @@ growl@1.10.5:
25922573
resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e"
25932574
integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==
25942575

2595-
handlebars@^4.0.6:
2596-
version "4.0.12"
2597-
resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.12.tgz#2c15c8a96d46da5e266700518ba8cb8d919d5bc5"
2598-
integrity sha512-RhmTekP+FZL+XNhwS1Wf+bTTZpdLougwt5pcgA1tuz6Jcx0fpH/7z0qd71RKnZHBCxIRBHfBOnio4gViPemNzA==
2599-
dependencies:
2600-
async "^2.5.0"
2601-
optimist "^0.6.1"
2602-
source-map "^0.6.1"
2603-
optionalDependencies:
2604-
uglify-js "^3.1.4"
2605-
2606-
handlebars@^4.1.0:
2607-
version "4.1.0"
2608-
resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.1.0.tgz#0d6a6f34ff1f63cecec8423aa4169827bf787c3a"
2609-
integrity sha512-l2jRuU1NAWK6AW5qqcTATWQJvNPEwkM7NEKSiv/gqOsoSQbVoWyqVEY5GS+XPQ88zLNmqASRpzfdm8d79hJS+w==
2576+
handlebars@^4.0.6, handlebars@^4.1.0:
2577+
version "4.7.2"
2578+
resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.2.tgz#01127b3840156a0927058779482031afe0e730d7"
2579+
integrity sha512-4PwqDL2laXtTWZghzzCtunQUTLbo31pcCJrd/B/9JP8XbhVzpS5ZXuKqlOzsd1rtcaLo4KqAn8nl8mkknS4MHw==
26102580
dependencies:
2611-
async "^2.5.0"
2581+
neo-async "^2.6.0"
26122582
optimist "^0.6.1"
26132583
source-map "^0.6.1"
26142584
optionalDependencies:
@@ -3062,9 +3032,9 @@ js-levenshtein@^1.1.3:
30623032
integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
30633033

30643034
js-yaml@^3.12.0:
3065-
version "3.12.1"
3066-
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.1.tgz#295c8632a18a23e054cf5c9d3cecafe678167600"
3067-
integrity sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA==
3035+
version "3.13.1"
3036+
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847"
3037+
integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==
30683038
dependencies:
30693039
argparse "^1.0.7"
30703040
esprima "^4.0.0"
@@ -3434,9 +3404,9 @@ minizlib@^1.1.1:
34343404
minipass "^2.2.1"
34353405

34363406
mixin-deep@^1.2.0:
3437-
version "1.3.1"
3438-
resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe"
3439-
integrity sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==
3407+
version "1.3.2"
3408+
resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566"
3409+
integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==
34403410
dependencies:
34413411
for-in "^1.0.2"
34423412
is-extendable "^1.0.1"
@@ -3525,6 +3495,11 @@ negotiator@0.6.2:
35253495
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb"
35263496
integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==
35273497

3498+
neo-async@^2.6.0:
3499+
version "2.6.1"
3500+
resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c"
3501+
integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==
3502+
35283503
nise@^1.4.10:
35293504
version "1.4.10"
35303505
resolved "https://registry.yarnpkg.com/nise/-/nise-1.4.10.tgz#ae46a09a26436fae91a38a60919356ae6db143b6"
@@ -4726,11 +4701,11 @@ typical@^4.0.0:
47264701
integrity sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==
47274702

47284703
uglify-js@^3.1.4:
4729-
version "3.4.9"
4730-
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.9.tgz#af02f180c1207d76432e473ed24a28f4a782bae3"
4731-
integrity sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==
4704+
version "3.7.5"
4705+
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.7.5.tgz#278c7c24927ac5a32d3336fc68fd4ae1177a486a"
4706+
integrity sha512-GFZ3EXRptKGvb/C1Sq6nO1iI7AGcjyqmIyOw0DrD0675e+NNbGO72xmMM2iEBdFbxaTLo70NbjM/Wy54uZIlsg==
47324707
dependencies:
4733-
commander "~2.17.1"
4708+
commander "~2.20.3"
47344709
source-map "~0.6.1"
47354710

47364711
uglify-js@^3.5.1:

0 commit comments

Comments
 (0)