Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
22 changes: 22 additions & 0 deletions .github/workflows/validate.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
name: Validate legacy HTA wiki

on:
push:
pull_request:

permissions:
contents: read

jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.13'
- uses: actions/setup-node@v4
with:
node-version: '24'
- name: Validate HTA JavaScript and documentation
run: python Tests/validate.py
130 changes: 108 additions & 22 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,35 +1,121 @@
# MarkdownLocalWiki
MarkDown險俶ウ輔′菴ソ縺医k縲√ョ繧」繧ケ繧ッ繝医ャ繝嶺ク翫〒蜍輔¥wiki
蛟倶ココ繝悶Ο繧ー縺ァ邂。逅�@縺ヲ縺�◆繧ゅ�繧竪itHub縺ォ螻暮幕

http://kazu-s-diary-2.cocolog-nifty.com/blog/2016/07/htajquerymark-1.html
Windows縺ョHTML Application��TA�峨→縺励※蜍穂ス懊@縲`arkdown繝輔ぃ繧、繝ォ繧偵Ο繝シ繧ォ繝ォPC荳翫〒髢イ隕ァ繝サ邱ィ髮�☆繧句倶ココ逕ィWiki縺ァ縺吶8eb繧オ繝シ繝舌�繧�ョ繝シ繧ソ繝吶�繧ケ縺ッ荳崎ヲ√〒縲仝iki繝壹�繧ク縺ッ繝ェ繝昴ず繝医Μ逶エ荳九�`.md`繝輔ぃ繧、繝ォ縺ィ縺励※菫晏ュ倥&繧後∪縺吶

繝サ繧オ繝シ繝蝉ク崎ヲ√仝indowsOS縺ァ縺ゅl縺ー蛻ゥ逕ィ蜿ッ閭ス
> [!CAUTION]
> 縺薙�繝ェ繝昴ず繝医Μ縺ッHTA�汁mshta.exe`繧剃スソ縺�Ξ繧ャ繧キ繝シ迚医〒縺吶�TA縺ッ騾壼クク縺ョWeb繝壹�繧ク繧医j蠑キ縺�ィゥ髯舌〒ActiveX繧�Ο繝シ繧ォ繝ォ繝輔ぃ繧、繝ォ繧呈桃菴懊〒縺阪∪縺吶らオ�ケ斐�繧サ繧ュ繝・繝ェ繝�ぅ險ュ螳壹〒螳溯。後r遖∵ュ「縺輔l縺ヲ縺�k蝣エ蜷医′縺ゅj縲∵眠隕丞茜逕ィ縺ォ縺ッPowerShell繝ュ繝シ繧ォ繝ォ繧オ繝シ繝舌�迚医�[`MarkDownPSLocalServerWiki`](https://github.com/papanda925/MarkDownPSLocalServerWiki)繧呈耳螂ィ縺励∪縺吶

繝サMarkdown險俶ウ輔′菴ソ縺医k縲
## 荳サ縺ェ讖溯�

縲縺�∪縺輔i縺九b縺励l縺ェ縺�′縲∽サ・蜑阪°繧芽�蜻ウ縺後≠縺」縺櫪arkdown險俶ウ輔�螟画鋤繝ォ繝シ繝ォ繧呈治逕ィ縺励◆縲
縺昴�縺溘a縺ォ莉・荳九��奇ス薙ヵ繧。繧、繝ォ�具ス�ス難ス薙r遘サ讀阪
- Markdown繝壹�繧ク縺ョ陦ィ遉コ縺ィ邱ィ髮
- 譁ー隕上�繝シ繧ク菴懈�縲∝錐蜑榊、画峩縲∝炎髯、
- 繝壹�繧ク荳隕ァ
- 繝輔ぃ繧、繝ォ蜷阪→譛ャ譁��譁�ュ怜�讀懃エ「
- 陦ィ遉コ螻・豁エ
- 譁�ュ励し繧、繧コ縺ョ諡。螟ァ繝サ邵ョ蟆
- HTTP�秋TTPS繝ェ繝ウ繧ッ繧貞、夜Κ繝悶Λ繧ヲ繧カ繝シ縺ァ髢九¥讖溯�
- Windows縺ョ繝輔ぃ繧、繝ォ繝代せ繧ФNC繝代せ繧帝未騾」莉倥¢繧峨l縺溘い繝励Μ縺ァ髢九¥讖溯�
- 繝壹�繧ク繧貞酔縺倥ヵ繧ゥ繝ォ繝繝シ縺ョ`.md`繝輔ぃ繧、繝ォ縺ィ縺励※菫晏ュ

縲繝サmarked.js�井ク驛ィ謾ケ騾�
縲繝サgithub-markdown.css
縲繝サjquery-1.12.0.js

繝サ繝�く繧ケ繝医ヵ繧。繧、繝ォ縺ョ菫晏ュ俶ゥ溯�
## 蜍穂ス懃腸蠅

縲marked.js繧剃ソョ豁」縺励√Μ繝ウ繧ッ縺ョ繝ォ繝シ繝ォ縲( aaaa )[ aaaa ]縲縲阪�荳ュ縺ァURL遲我サ・螟悶�縲√ユ繧ュ繧ケ繝医ヵ繧。繧、繝ォ(aaaa.md)菫晏ュ倥☆繧九h縺�↓謾ケ騾縺励※縺�k縲
- Windows
- `mshta.exe`�秋TA縺ョ螳溯。後′險ア蜿ッ縺輔l縺ヲ縺�k迺ー蠅
- 繝ェ繝昴ず繝医Μ縺ョ繝輔か繝ォ繝繝シ縺ク譖ク縺崎セシ繧√k縺薙→

繝�く繧ケ繝医ヵ繧。繧、繝ォ(aaaa.md)縺ッ縲√Μ繝ウ繧ッ縺ョ繝ォ繝シ繝ォ縲( aaaa )[ aaaa ]縲縲阪↓繧医j繝輔ぃ繧、繝ォ繝ェ繝ウ繧ッ縺輔l繧九h縺�↓縺励※縺�k縲
Edge縲,hrome縲:irefox縺ョ諡。蠑オ讖溯�縺ィ縺励※蜍輔¥繧ゅ�縺ァ縺ッ縺ゅj縺セ縺帙s縲Aindex.hta`縺ッWindows縺ョHTML Application Host縺ァ螳溯。後&繧後∪縺吶

繝サ繝�く繧ケ繝医ヵ繧。繧、繝ォ莉・螟悶�縲√ヶ繝ゥ繧ヲ繧カ遲峨�螟夜Κ繧「繝励Μ繧貞茜逕ィ縺吶k繧医≧縺ォ菫ョ豁」縲
## 襍キ蜍墓婿豕

繝サ縺�o繧�k繝輔ぃ繧、繝ォ繧オ繝シ繝撰シ�\繧ウ繝ウ繝斐Η繝シ繧ソ蜷搾シ峨〒繧ゅΜ繝ウ繧ッ縺輔l繧九h縺�↓讖溯�霑ス蜉縲
1. 繝ェ繝昴ず繝医Μ繧偵ム繧ヲ繝ウ繝ュ繝シ繝峨∪縺溘�繧ッ繝ュ繝シ繝ウ縺励∪縺吶
2. `index.hta`縲~core`繝輔か繝ォ繝繝シ縲~.md`繝輔ぃ繧、繝ォ繧貞酔縺俶ァ区�縺ョ縺セ縺セ鄂ョ縺阪∪縺吶
3. `index.hta`繧偵ム繝悶Ν繧ッ繝ェ繝�け縺励∪縺吶
4. 縲後ヨ繝��繝壹�繧ク縲阪′陦ィ遉コ縺輔l繧九%縺ィ繧堤「コ隱阪@縺セ縺吶

霑ス莨ク�
縺セ縺縺セ縺謾ケ濶ッ縺ョ菴吝慍縺ゅk繝��繝ォ縺ァ縲∽ス懆�b蜍牙シキ騾比クュ縺ァ縺吶′縲
縺薙�繝��繝ォ�域焔豕包シ峨↓闊亥袖繧呈戟縺」縺ヲ縺�◆縺縺阪√&繧峨↓謾ケ濶ッ縺ォ繝√Ε繝ャ繝ウ繧ク縺輔l縺滓婿縺後>繧峨▲縺励c繧翫√→縺ヲ繧ゅ≧繧後@縺�
縺薙■繧峨↓繝ェ繝ウ繧ッ繧貞シオ縺」縺ヲ縺翫″縺セ縺吶
螳溯。悟燕縺ォ`index.hta`縺ョ蜈・謇句�縺ィ蜀�ョケ繧堤「コ隱阪@縺ヲ縺上□縺輔>縲ゅΓ繝シ繝ォ繧�ク肴�縺ェWeb繧オ繧、繝医°繧牙叙蠕励@縺櫞TA繝輔ぃ繧、繝ォ縺ッ螳溯。後@縺ェ縺�〒縺上□縺輔>縲

https://github.com/ma34s/MarkdownLocalWiki
## 繝壹�繧ク繝��繧ソ

https://qiita.com/hachimitu22/items/5bba11ab89b556b810b4
| 蝣エ謇 | 蜀�ョケ |
| --- | --- |
| `繝医ャ繝励�繝シ繧ク.md` | 譛蛻昴↓陦ィ遉コ縺吶k繝壹�繧ク |
| `*.md` | 菴懈�縺励◆Wiki繝壹�繧ク |
| `index.hta` | 逕サ髱「縲`arkdown蜃ヲ逅�√ヵ繧。繧、繝ォ謫堺ス |
| `core\marked.js` | Markdown縺九iHTML縺ク縺ョ螟画鋤 |
| `core\github-markdown.css` | Markdown陦ィ遉コ逕ィCSS |
| `core\jquery-1.12.4.js` | 蜷梧「ア縺輔l縺ヲ縺�k譌ァ迚�Query |

繝舌ャ繧ッ繧「繝��縺吶k蝣エ蜷医�縲√Μ繝昴ず繝医Μ逶エ荳九�`.md`繝輔ぃ繧、繝ォ繧偵☆縺ケ縺ヲ繧ウ繝斐�縺励※縺上□縺輔>縲よ峩譁ー縲∝錐蜑榊、画峩縲∝炎髯、縺ョ蜑阪↓縺ッ蛻・繝輔か繝ォ繝繝シ縺ク繝舌ャ繧ッ繧「繝��縺吶k縺薙→繧呈耳螂ィ縺励∪縺吶

## 繝壹�繧ク蜷阪�謇ア縺

繝壹�繧ク蜷阪�Windows縺ョ繝輔ぃ繧、繝ォ蜷阪→縺励※菴ソ繧上l縺セ縺吶ら樟蝨ィ縺ョ繧ウ繝シ繝峨�谺。繧呈拠蜷ヲ縺励∪縺吶

- 遨コ縺ョ繝壹�繧ク蜷
- `.`縺セ縺溘�`..`
- `\ / : * ? " < > |`縺ェ縺ゥ縲仝indows縺ョ繝輔ぃ繧、繝ォ蜷阪↓菴ソ逕ィ縺ァ縺阪↑縺�枚蟄
- 蛻カ蠕。譁�ュ

縺吶∋縺ヲ縺ョ繝壹�繧ク繝代せ縺ッ`index.hta`縺後≠繧九ヵ繧ゥ繝ォ繝繝シ繧貞渕貅悶↓邨�∩遶九※縺セ縺吶ゅ%繧後↓繧医j縲∵眠隕丈ス懈�縲∽ソ晏ュ倥∝錐蜑榊、画峩縲∝炎髯、縺ァWiki繝輔か繝ォ繝繝シ螟悶r逶エ謗・謖�ョ壹〒縺阪↑縺�h縺�↓縺励※縺�∪縺吶

## 繧サ繧ュ繝・繝ェ繝�ぅ荳翫�豕ィ諢

- HTA縺ッ迴セ蝨ィ縺ョ繝悶Λ繧ヲ繧カ繝シ縺ョ繧オ繝ウ繝峨�繝�け繧ケ蜀�〒縺ッ蜍穂ス懊@縺セ縺帙s縲
- `Scripting.FileSystemObject`縺ァ繝輔ぃ繧、繝ォ繧剃ス懈�繝サ螟画峩繝サ蜑企勁縺励∪縺吶
- `Shell.Application`縺ァ繝ュ繝シ繧ォ繝ォ繝輔ぃ繧、繝ォ繧�ヵ繧ゥ繝ォ繝繝シ繧帝幕縺阪∪縺吶
- 菫。鬆シ縺ァ縺阪↑縺Мarkdown縺ォ縺ッ縲?TML繧�ク肴ュ」縺ェ繝ェ繝ウ繧ッ縺悟性縺セ繧後k蜿ッ閭ス諤ァ縺後≠繧翫∪縺吶
- 縺薙�Wiki繝輔か繝ォ繝繝シ縺ク縲∽ソ。鬆シ縺ァ縺阪↑縺Я.hta`縲゛avaScript縲`arkdown繧定ソス蜉縺励↑縺�〒縺上□縺輔>縲
- 邨�ケ斐〒`mshta.exe`縺檎ヲ∵ュ「縺輔l縺ヲ縺�k蝣エ蜷医∬ィュ螳壹r蝗樣∩縺帙★PowerShell繝ュ繝シ繧ォ繝ォ繧オ繝シ繝舌�迚医r菴ソ逕ィ縺励※縺上□縺輔>縲

`mshta.exe`縺ッ豁」隕上�Windows讖溯�縺ァ縺吶′縲∽ササ諢上�繧ケ繧ッ繝ェ繝励ヨ螳溯。後↓謔ェ逕ィ縺輔l繧倶セ九′縺ゅk縺溘a縲√そ繧ュ繝・繝ェ繝�ぅ陬ス蜩√d邨�ケ斐�繝ェ繧キ繝シ縺ァ蛻カ髯舌&繧後k縺薙→縺後≠繧翫∪縺吶ょ盾閠�シ喙MITRE ATT&CK - Mshta](https://attack.mitre.org/techniques/T1218/005/)

## PowerShell繝ュ繝シ繧ォ繝ォ繧オ繝シ繝舌�迚医∈縺ョ遘サ陦

1. [`MarkDownPSLocalServerWiki`](https://github.com/papanda925/MarkDownPSLocalServerWiki)繧貞挨繝輔か繝ォ繝繝シ縺ク貅門y縺励∪縺吶
2. HTA迚医r邨ゆコ�@縺セ縺吶
3. 縺薙�繝ェ繝昴ず繝医Μ逶エ荳九�`.md`繝輔ぃ繧、繝ォ繧偵∫ァサ陦悟�縺ョ`doc`繝輔か繝ォ繝繝シ縺ク繧ウ繝斐�縺励∪縺吶
4. `繝医ャ繝励�繝シ繧ク.md`縺形doc`繝輔か繝ォ繝繝シ縺ォ縺ゅk縺薙→繧堤「コ隱阪@縺セ縺吶
5. 遘サ陦悟�縺ョ`startWiki.bat`縺セ縺溘�`StartWiki.ps1`繧定オキ蜍輔@縺セ縺吶
6. 陦ィ遉コ縲∫キィ髮�∵、懃エ「縲√Μ繝ウ繧ッ繧堤「コ隱阪@縺ヲ縺九i譌ァ繝輔か繝ォ繝繝シ繧剃ソ晉ョ。縺励∪縺吶

譛蛻昴�遘サ蜍輔〒縺ッ縺ェ縺上さ繝斐�縺ォ縺励∝�繝��繧ソ繧呈ョ九@縺ヲ縺上□縺輔>縲

## 蛻カ髯蝉コ矩

- HTA�終nternet Explorer邉サ縺ョMSHTML螳溯。檎腸蠅�↓萓晏ュ
- 迴セ蝨ィ縺ョWeb讓呎コ悶d繝悶Λ繧ヲ繧カ繝シ讖溯�繧貞燕謠舌↓縺励◆繧ウ繝シ繝峨〒縺ッ縺ェ縺
- 隍�焚蛻ゥ逕ィ閠�√Ο繧ー繧、繝ウ縲∵ィゥ髯千ョ。逅�∝酔譎らキィ髮�↓髱槫ッセ蠢
- 閾ェ蜍輔ヰ繝�け繧「繝��縲∽ク紋サ」邂。逅�√#縺ソ邂ア縺ッ縺ェ縺
- 蜷梧「アJavaScript繝ゥ繧、繝悶Λ繝ェ縺ッ譌ァ迚医〒縺ゅj縲∫┌譚。莉カ縺ョ譛譁ー迚育スョ謠帙�莠呈鋤諤ァ繧貞」翫☆蜿ッ閭ス諤ァ縺ゅj
- Markdown蜀��菫。鬆シ縺ァ縺阪↑縺ЗTML繧貞ョ牙�縺ォ辟。螳ウ蛹悶☆繧区ゥ溯�縺ッ縺ェ縺

## 繝医Λ繝悶Ν繧キ繝・繝シ繝�ぅ繝ウ繧ー

### `index.hta`繧帝幕縺代↑縺

邨�ケ斐�繝ェ繧キ繝シ縲・DR縲√え繧、繝ォ繧ケ蟇セ遲悶た繝輔ヨ縲√ヵ繧。繧、繝ォ縺ョ髢「騾」莉倥¢縺ァHTA縺檎ヲ∵ュ「縺輔l縺ヲ縺�k蜿ッ閭ス諤ァ縺後≠繧翫∪縺吶りィュ螳壹�蝗樣∩縺ッ陦後o縺壹 ̄owerShell繝ュ繝シ繧ォ繝ォ繧オ繝シ繝舌�迚医∈縺ョ遘サ陦後r讀懆ィ弱@縺ヲ縺上□縺輔>縲

### 繝医ャ繝励�繝シ繧ク縺瑚ヲ九▽縺九i縺ェ縺

`index.hta`縺ィ蜷後§繝輔か繝ォ繝繝シ縺ォ`繝医ャ繝励�繝シ繧ク.md`縺後≠繧九°遒コ隱阪@縺ヲ縺上□縺輔>縲

### 菫晏ュ倥〒縺阪↑縺

Wiki繝輔か繝ォ繝繝シ縺ク縺ョ譖ク縺崎セシ縺ソ讓ゥ髯舌r遒コ隱阪@縺ヲ縺上□縺輔>縲りェュ縺ソ蜿悶j蟆ら畑縺ョ蝣エ謇縲〇IP繝輔ぃ繧、繝ォ蜀�∽ソ晁ュキ縺輔l縺溘ヵ繧ゥ繝ォ繝繝シ縺ァ縺ッ菫晏ュ倥〒縺阪∪縺帙s縲

### 譁�ュ怜喧縺代☆繧

`index.hta`縺ッShift_JIS繧貞燕謠舌→縺励※縺�∪縺吶ゅた繝シ繧ケ繧Мarkdown縺ョ譁�ュ励さ繝シ繝峨r螟画峩縺吶k蝣エ蜷医�縲∝ソ�★繧ウ繝斐�縺ァ隧ヲ縺励∵里蟄倥�繝シ繧ク縺ョ陦ィ遉コ縺ィ蜀堺ソ晏ュ倥r遒コ隱阪@縺ヲ縺上□縺輔>縲

## 逕ア譚・縺ィ髢「騾」繝励Ο繧ク繧ァ繧ッ繝

縺薙�繝ェ繝昴ず繝医Μ縺ッ縲∝倶ココ繝悶Ο繧ー縺ァ蜈ャ髢九@縺ヲ縺�◆HTA�祝Query�塾arked.js縺ォ繧医kMarkdown Wiki繧竪itHub縺ク遘サ縺励◆繧ゅ�縺ァ縺吶

- [蜈�↓縺ェ縺」縺溘ヶ繝ュ繧ー險倅コ犠(http://kazu-s-diary-2.cocolog-nifty.com/blog/2016/07/htajquerymark-1.html)
- [ma34s/MarkdownLocalWiki](https://github.com/ma34s/MarkdownLocalWiki)
- [Qiita縺ァ縺ョ髢「騾」邏ケ莉犠(https://qiita.com/hachimitu22/items/5bba11ab89b556b810b4)
- [蠕檎カ呻シ哺arkDownPSLocalServerWiki](https://github.com/papanda925/MarkDownPSLocalServerWiki)

## English summary

Legacy Windows HTA-based personal Markdown wiki. It can read and write local files with the current user's permissions. New users should prefer the localhost-only PowerShell server successor.
54 changes: 54 additions & 0 deletions Tests/validate.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
from __future__ import annotations

import re
import subprocess
import tempfile
from pathlib import Path


repository_root = Path(__file__).resolve().parent.parent
hta_path = repository_root / "index.hta"
readme_path = repository_root / "README.md"

hta = hta_path.read_text(encoding="cp932")
readme = readme_path.read_text(encoding="utf-8")

inline_scripts = re.findall(
r"<script(?:\s[^>]*)?>(.*?)</script>",
hta,
flags=re.IGNORECASE | re.DOTALL,
)
javascript = "\n".join(script for script in inline_scripts if script.strip())

with tempfile.NamedTemporaryFile("w", suffix=".js", encoding="utf-8", delete=False) as temp_file:
temp_file.write(javascript)
temp_path = Path(temp_file.name)

try:
subprocess.run(["node", "--check", str(temp_path)], check=True)
finally:
temp_path.unlink(missing_ok=True)

required_source_patterns = {
"page-name validation": r"function\s+validatePageName\s*\(",
"HTA-relative base folder": r"window\.location\.pathname",
"textarea value saving": r"var\s+content\s*=\s*id\('textarea'\)\.value",
"scoped current page": r"var\s+pagename\s*=\s*id\('headerH1'\)\.innerText",
"protected top page": r"pagename\s*===\s*'繝医ャ繝励�繝シ繧ク'",
}

for label, pattern in required_source_patterns.items():
if not re.search(pattern, hta):
raise AssertionError(f"Missing {label}: {pattern}")

for heading in (
"## 襍キ蜍墓婿豕",
"## 繧サ繧ュ繝・繝ェ繝�ぅ荳翫�豕ィ諢",
"## PowerShell繝ュ繝シ繧ォ繝ォ繧オ繝シ繝舌�迚医∈縺ョ遘サ陦",
"## 蛻カ髯蝉コ矩",
"## 繝医Λ繝悶Ν繧キ繝・繝シ繝�ぅ繝ウ繧ー",
):
if heading not in readme:
raise AssertionError(f"README is missing {heading}")

print("HTA JavaScript and repository conventions validated.")
56 changes: 45 additions & 11 deletions index.hta
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,24 @@ function smaller() { x /= 1.2; document.getElementById('content').style.fontSize

//このHTMLファイルが置かれているフォルダのパス名を取得する
function getBaseFolder(){
return fso.GetFolder(".");
var currentPath = decodeURI(window.location.pathname).replace(/\//g, "\\");
if (/^\\[A-Za-z]:\\/.test(currentPath)) {
currentPath = currentPath.substring(1);
}
return fso.GetFolder(fso.GetParentFolderName(currentPath));
}

//ページ名をファイル名として安全に使えるか確認する。
//Wikiフォルダー外を指す「..」や、Windowsで使用できない文字を拒否する。
function validatePageName(pagename) {
var normalizedPageName = String(pagename || "").replace(/^\s+|\s+$/g, "");
var invalidCharacters = /[\\\/:*?"<>|\x00-\x1F]/;

if (!normalizedPageName || normalizedPageName === "." || normalizedPageName === ".." || invalidCharacters.test(normalizedPageName)) {
throw new Error("ページ名に使用できない文字が含まれています。");
}

return normalizedPageName;
}


Expand Down Expand Up @@ -188,16 +205,14 @@ function edit(pagename){

//いま見ているページを編集する
function editCurrentPage(){
pagename = id('headerH1').innerText;
var pagename = id('headerH1').innerText;
edit(pagename);
}

//フォームのテキストエリアの中身を、指定したページのコンテンツとして保存する
function save(pagename){

//編集方法の修正 textareaへの格納はフォーム生成後のtextareaへテキスト入力
// var content = id('textarea').value;
var content = id('textarea').innerText;
var content = id('textarea').value;

var filepath = getFilePath(pagename);
var file = fso.createTextFile(filepath);
Expand Down Expand Up @@ -258,7 +273,7 @@ function openIndexPage(){

//ページ名を指定して、該当するマークダウン(.md)のパス名を取得する
function getFilePath(pagename){
var filename = pagename + ".md";
var filename = validatePageName(pagename) + ".md";
return oBaseFolder.Path + "\\" + filename;
}

Expand Down Expand Up @@ -386,25 +401,40 @@ function openAndSerch(pagename) {

//新規作成
function NewPage() {
var pagename = Text2.value;
// window.confirm(pagename);
if (pagename) {
try {
var pagename = validatePageName(Text2.value);
open(pagename);
}
catch (error) {
window.alert(error.message);
}
Text2.value = '';
}
//リネーム
function ReNamePage() {

var srcPagename = getPageName();
var dstPagename = Text2.value;
var dstPagename;

try {
dstPagename = validatePageName(Text2.value);
}
catch (error) {
window.alert(error.message);
return;
}

// 「OK」時の処理開始 + 確認ダイアログの表示
if (window.confirm(dstPagename + ' にリネームしますか?'))
{

var srcFilepath = getFilePath(srcPagename);
var dstFilepath = getFilePath(dstPagename);

if (fso.FileExists(dstFilepath)) {
window.alert(dstPagename + ' は既に存在します。');
return;
}

fso.MoveFile(srcFilepath, dstFilepath);
window.alert(srcPagename + ' を ' + dstPagename + ' にリネームしました。');
Expand All @@ -421,10 +451,14 @@ function DeletePage() {

var pagename = getPageName();

if (pagename === 'トップページ') {
window.alert('トップページは削除できません。');
return;
}

// 「OK」時の処理開始 + 確認ダイアログの表示
if (window.confirm(pagename + ' を削除しますか?')) {

var pagename = getPageName();
var filepath = getFilePath(pagename);

fso.DeleteFile(filepath);
Expand Down
Loading