Skip to content

Commit 8ac704d

Browse files
committed
support shift+enter ; tag 0.0.4
1 parent a9a49de commit 8ac704d

File tree

5 files changed

+210
-219
lines changed

5 files changed

+210
-219
lines changed

.github/workflows/npm-publish.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@ jobs:
88
publish-npm:
99
runs-on: ubuntu-latest
1010
steps:
11-
- uses: actions/checkout@v2
12-
- uses: actions/setup-node@v2
11+
- uses: actions/checkout@v4
12+
- uses: actions/setup-node@v3
1313
with:
14-
node-version: 14
14+
node-version: 20
1515
registry-url: https://registry.npmjs.org/
1616

1717
- run: yarn && yarn compile

.github/workflows/upload.yaml

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,28 +11,19 @@ jobs:
1111
upload-assets:
1212
runs-on: ubuntu-latest
1313
steps:
14-
- uses: actions/checkout@v2
14+
- uses: actions/checkout@v4
1515

16-
- name: Use Node.js
17-
uses: actions/setup-node@v2
18-
19-
- name: Get yarn cache
20-
id: yarn-cache
21-
run: echo "::set-output name=dir::$(yarn cache dir)"
22-
23-
- uses: actions/cache@v1
16+
- uses: actions/setup-node@v3
2417
with:
25-
path: ${{ steps.yarn-cache.outputs.dir }}
26-
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
27-
restore-keys: |
28-
${{ runner.os }}-yarn-
18+
node-version: 20
19+
cache: 'yarn'
2920

3021
- run: yarn && yarn vite build --base=./
3122
name: Build web assets
3223

3324
- name: Deploy to server
3425
id: deploy
35-
uses: Pendect/action-rsyncer@v1.1.0
26+
uses: Pendect/action-rsyncer@v2.0.0
3627
env:
3728
DEPLOY_KEY: ${{secrets.rsync_private_key}}
3829
with:

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@mvc-works/codearea",
3-
"version": "0.0.3",
3+
"version": "0.0.4",
44
"description": "Web app scaffold based on Webpack",
55
"main": "lib/codearea.js",
66
"scripts": {
@@ -13,8 +13,8 @@
1313
"workflow"
1414
],
1515
"devDependencies": {
16-
"typescript": "^4.4.3",
17-
"vite": "^2.5.8"
16+
"typescript": "^5.2.2",
17+
"vite": "^4.4.9"
1818
},
1919
"dependencies": {},
2020
"repository": {

src/codearea.ts

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,21 +26,33 @@ let triggerInput = function (element: HTMLTextAreaElement) {
2626
bubbles: true,
2727
cancelable: true,
2828
});
29-
return element.dispatchEvent(event);
29+
element.dispatchEvent(event);
3030
};
3131

3232
interface TextInfo {
33+
/** row */
3334
row: number;
35+
/** column */
3436
col: number;
37+
/** all lines */
3538
all: string[];
39+
/** selection start at row */
3640
ar: number;
41+
/** selection start at column */
3742
ac: number;
43+
/** is select start at line start */
3844
as: boolean;
45+
/** is select start at line end */
3946
ae: boolean;
47+
/** selection end at row */
4048
br: number;
49+
/** selection end at column */
4150
bc: number;
51+
/** is select end at line start */
4252
bs: boolean;
53+
/** is select end at line end */
4354
be: boolean;
55+
/** no selection, just same caret */
4456
same: boolean;
4557
}
4658

@@ -90,7 +102,8 @@ let write_text = function (
90102
}
91103
}
92104
// o '4: ', ar, ac, br, bc, obj.bc
93-
target.value = arr.join("\n");
105+
let newText = arr.join("\n");
106+
target.value = newText;
94107
target.selectionStart = set_position(arr, ar, ac);
95108
target.selectionEnd = set_position(arr, br, bc);
96109
triggerInput(target);
@@ -328,6 +341,22 @@ let key_enter = function (target: HTMLTextAreaElement, event: Event) {
328341
}
329342
};
330343

344+
// enter only, consider last line and
345+
let key_shift_enter = function (target: HTMLTextAreaElement, event: Event) {
346+
event.preventDefault();
347+
let caret = wrap_text(target);
348+
let { all, ar, ac } = caret;
349+
if (caret.same) {
350+
all = all.slice(0, +ar + 1 || 9e9).concat(all.slice(ar));
351+
let line = all[ar];
352+
let spaces = line.match(/^\s*/)[0];
353+
all[ar] = spaces;
354+
ac = spaces.length;
355+
ar = ar;
356+
return write_text(target, { all, ac, ar });
357+
}
358+
};
359+
331360
// press backspace at head, last line if empty, delete it
332361
let key_backspace = function (target: HTMLTextAreaElement, event: Event) {
333362
var ac, all, ar, caret, n, pair;
@@ -537,6 +566,10 @@ let call_shortcut = {
537566
9: function (target: HTMLTextAreaElement, event: Event) {
538567
return key_tab(target, event);
539568
},
569+
570+
"shift 13": function (target: HTMLTextAreaElement, event: Event) {
571+
return key_shift_enter(target, event);
572+
},
540573
13: function (target: HTMLTextAreaElement, event: Event) {
541574
return key_enter(target, event);
542575
},

0 commit comments

Comments
 (0)