Skip to content

Commit a0bdf78

Browse files
committed
WIP: Untitledなファイルに対応 (#5)
1 parent aab9a64 commit a0bdf78

File tree

6 files changed

+116
-21
lines changed

6 files changed

+116
-21
lines changed

package.json

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@
4040
"activationEvents": [
4141
"onView:qiitaItems",
4242
"onLanguage:markdown",
43-
"onCommand:qiita.compose",
43+
"onCommand:qiita.composeFromTextEditor",
44+
"onCommand:qiita.composeFromExplorer",
4445
"onCommand:qiita.openItem",
4546
"onCommand:qiita.deleteItem",
4647
"onCommand:qiita.editTags",
@@ -50,7 +51,12 @@
5051
"contributes": {
5152
"commands": [
5253
{
53-
"command": "qiita.compose",
54+
"command": "qiita.composeFromTextEditor",
55+
"title": "%commands.compose.title%",
56+
"category": "Qiita"
57+
},
58+
{
59+
"command": "qiita.composeFromExplorer",
5460
"title": "%commands.compose.title%",
5561
"category": "Qiita"
5662
},
@@ -104,7 +110,8 @@
104110
],
105111
"menus": {
106112
"commandPalette": [
107-
{ "command": "qiita.compose", "when": "false" },
113+
{ "command": "qiita.composeFromTextEditor" },
114+
{ "command": "qiita.composeFromExplorer", "when": "false" },
108115
{ "command": "qiita.openItem", "when": "false" },
109116
{ "command": "qiita.deleteItem", "when": "false" },
110117
{ "command": "qiita.editTags", "when": "false" },
@@ -113,28 +120,28 @@
113120
],
114121
"editor/title": [
115122
{
116-
"command": "qiita.compose",
123+
"command": "qiita.composeFromTextEditor",
117124
"when": "resourceLangId == markdown",
118125
"group": "3_open"
119126
}
120127
],
121128
"editor/context": [
122129
{
123-
"command": "qiita.compose",
130+
"command": "qiita.composeFromTextEditor",
124131
"when": "resourceLangId == markdown",
125132
"group": "z_commands"
126133
}
127134
],
128135
"editor/title/context": [
129136
{
130-
"command": "qiita.compose",
137+
"command": "qiita.composeFromExplorer",
131138
"when": "resourceLangId == markdown",
132139
"group": "1_modification"
133140
}
134141
],
135142
"explorer/context": [
136143
{
137-
"command": "qiita.compose",
144+
"command": "qiita.composeFromExplorer",
138145
"when": "resourceLangId == markdown",
139146
"group": "7_modification"
140147
}
Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,24 +8,15 @@ import { titleInputBoxCreator } from '../quickpicks/titleInputBoxCreator';
88
import { privateLabel, visibilityQuickPickCreator } from '../quickpicks/visibilityQuickPickCreator';
99
import { createMultiStepInput } from '../utils/createMultiStepInput';
1010
import { handleErrorMessage } from '../utils/errorHandler';
11+
import { getFilenameFromPath } from '../utils/getFilenameFromPath';
1112

1213
const localize = nls.loadMessageBundle();
1314

14-
/**
15-
* パスからファイル名を取得
16-
* @param path 相対/絶対パス
17-
* @return ファイル名
18-
*/
19-
export const getFilenameFromPath = (path: string) => {
20-
const splitPath = path.split('/');
21-
return splitPath[splitPath.length - 1].split('.')[0];
22-
};
23-
2415
/**
2516
* 投稿を公開するためのQuickPickとInputBoxを表示
2617
* @param arg コマンドから渡される引数
2718
*/
28-
export function compose (arg: object & { path: string }): void {
19+
export function composeFromExplorer (arg: object & { path: string }): void {
2920
const fileName = getFilenameFromPath(arg.path);
3021

3122
const titleInputBox = titleInputBoxCreator(fileName);
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
import { CreateItemOptions } from 'qiita-js-2';
2+
import { commands, Uri, window } from 'vscode';
3+
import * as nls from 'vscode-nls';
4+
import { client } from '../client';
5+
import { configuration } from '../configuration';
6+
import { tagQuickPickCreator } from '../quickpicks/tagQuickPickCreator';
7+
import { titleInputBoxCreator } from '../quickpicks/titleInputBoxCreator';
8+
import { privateLabel, visibilityQuickPickCreator } from '../quickpicks/visibilityQuickPickCreator';
9+
import { createMultiStepInput } from '../utils/createMultiStepInput';
10+
import { handleErrorMessage } from '../utils/errorHandler';
11+
import { getFilenameFromPath } from '../utils/getFilenameFromPath';
12+
13+
const localize = nls.loadMessageBundle();
14+
15+
/**
16+
* アクティブなテキストエディタから投稿を公開するコマンドパレット向け関数
17+
*/
18+
export async function composeFromTextEditor () {
19+
if (!window.activeTextEditor) {
20+
return;
21+
}
22+
23+
const titleInputBox = titleInputBoxCreator(getFilenameFromPath(window.activeTextEditor.document.fileName));
24+
const tagsQuickPick = tagQuickPickCreator();
25+
const visibilityQuickPick = visibilityQuickPickCreator();
26+
27+
// Qiita.createItemのオプション
28+
const options: CreateItemOptions = {
29+
title: '',
30+
body: window.activeTextEditor.document.getText(),
31+
tags: [],
32+
private: false,
33+
tweet: configuration.tweetOnCreateItem,
34+
gist: configuration.gistOnCreateItem,
35+
};
36+
37+
// titleInputBoxからタイトルを代入
38+
titleInputBox.onDidAccept(() => {
39+
options.title = titleInputBox.value;
40+
});
41+
42+
// tagQuickPickからタグを代入
43+
tagsQuickPick.onDidAccept(() => {
44+
options.tags = tagsQuickPick.selectedItems.map((item) => ({
45+
name: item.label,
46+
versions: [],
47+
}));
48+
});
49+
50+
// visibilityQuickPick終了時に公開状態を代入してQiita.createItemを呼び出し
51+
visibilityQuickPick.onDidAccept(async () => {
52+
options.private = visibilityQuickPick.selectedItems[0].label === privateLabel;
53+
54+
try {
55+
visibilityQuickPick.hide();
56+
const item = await client.createItem(options);
57+
58+
const openInBrowser = localize(
59+
'commands.compose.openInBrowser',
60+
'ブラウザで確認',
61+
);
62+
63+
const result = await window.showInformationMessage(
64+
localize(
65+
'commands.compose.success',
66+
'投稿を公開しました',
67+
),
68+
openInBrowser,
69+
);
70+
71+
if (result === openInBrowser) {
72+
commands.executeCommand('vscode.open', Uri.parse(item.url));
73+
}
74+
75+
return;
76+
} catch (error) {
77+
return handleErrorMessage(error);
78+
}
79+
});
80+
81+
createMultiStepInput([
82+
titleInputBox,
83+
tagsQuickPick,
84+
visibilityQuickPick,
85+
])();
86+
}

src/extension.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { commands, ExtensionContext, window } from 'vscode';
22
import * as nls from 'vscode-nls';
3-
import { compose } from './commands/compose';
3+
import { composeFromExplorer } from './commands/composeFromExplorer';
4+
import { composeFromTextEditor } from './commands/composeFromTextEditor';
45
import { deleteItem } from './commands/deleteItem';
56
import { editTags } from './commands/editTags';
67
import { makePublic } from './commands/makePublic';
@@ -18,7 +19,8 @@ export function activate (context: ExtensionContext) {
1819
commands.registerCommand('qiita.openItem', openItem(context.storagePath)),
1920
commands.registerCommand('qiita.editTags', editTags),
2021
commands.registerCommand('qiita.makePublic', makePublic),
21-
commands.registerCommand('qiita.compose', compose),
22+
commands.registerCommand('qiita.composeFromExplorer', composeFromExplorer),
23+
commands.registerCommand('qiita.composeFromTextEditor', composeFromTextEditor),
2224
commands.registerCommand('qiita.openItemExternal', openItemExternal),
2325
commands.registerCommand('qiita.deleteItem', deleteItem),
2426
);
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { expect } from 'chai';
2-
import { getFilenameFromPath } from '../../commands/compose';
2+
import { getFilenameFromPath } from '../../utils/getFilenameFromPath';
33

44
describe('compose', () => {
55
it('パスから拡張子を除いたファイル名を取得', () => {

src/utils/getFilenameFromPath.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
/**
2+
* パスからファイル名を取得
3+
* @param path 相対/絶対パス
4+
* @return ファイル名
5+
*/
6+
export const getFilenameFromPath = (path: string) => {
7+
const splitPath = path.split('/');
8+
return splitPath[splitPath.length - 1].split('.')[0];
9+
};

0 commit comments

Comments
 (0)