@tenjuu99/blog 0.2.4 → 0.2.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/dev-server +57 -0
- package/bin/new +2 -1
- package/bin/server +0 -19
- package/lib/dir.js +3 -1
- package/package.json +4 -3
- package/src-sample/css/editor.css +127 -27
- package/src-sample/css/layout.css +0 -1
- package/src-sample/js/editor.js +8 -2
- package/src-sample/template/editor.html +6 -2
package/bin/dev-server
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { spawn } from 'child_process'
|
|
4
|
+
import { srcDir, pageDir, serverDir, helperDir } from '../lib/dir.js'
|
|
5
|
+
import { watchers, watch } from '../lib/watcher.js'
|
|
6
|
+
import generate from '../lib/generate.js'
|
|
7
|
+
import path from 'path'
|
|
8
|
+
import { fileURLToPath } from 'url';
|
|
9
|
+
|
|
10
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
11
|
+
const libDir = path.dirname(__filename) + '/../lib/'
|
|
12
|
+
|
|
13
|
+
watchers.push({
|
|
14
|
+
paths: srcDir,
|
|
15
|
+
watchOptions: {
|
|
16
|
+
ignored: [pageDir, serverDir, helperDir],
|
|
17
|
+
},
|
|
18
|
+
callback: generate
|
|
19
|
+
})
|
|
20
|
+
watchers.push({
|
|
21
|
+
paths: pageDir,
|
|
22
|
+
callback: generate,
|
|
23
|
+
watchOptions: {
|
|
24
|
+
ignoreInitial: true
|
|
25
|
+
},
|
|
26
|
+
event: ['change', 'unlink', 'add']
|
|
27
|
+
})
|
|
28
|
+
watchers.push({
|
|
29
|
+
paths: [serverDir, helperDir, libDir],
|
|
30
|
+
callback: () => {
|
|
31
|
+
childProcess.kill('SIGINT')
|
|
32
|
+
childProcess = proceed()
|
|
33
|
+
console.error('restarting')
|
|
34
|
+
}
|
|
35
|
+
})
|
|
36
|
+
watch()
|
|
37
|
+
|
|
38
|
+
let childProcess = null
|
|
39
|
+
|
|
40
|
+
const proceed = () => {
|
|
41
|
+
const child = spawn('node', ['bin/server'])
|
|
42
|
+
console.log(`start process. PID(parent): ${process.pid}, PID(child): ${child.pid}`)
|
|
43
|
+
|
|
44
|
+
child.stdout.on('data', (data) => {
|
|
45
|
+
console.log(data.toString().split('\n').filter(v => v).join('\n'))
|
|
46
|
+
})
|
|
47
|
+
child.stderr.on('data', (data) => {
|
|
48
|
+
console.log(data.toString().split('\n').filter(v => v).join('\n'))
|
|
49
|
+
})
|
|
50
|
+
child.on('exit', (code, signal) => {
|
|
51
|
+
console.error(`process exit: ${code}, SIGNAL: ${signal}`);
|
|
52
|
+
})
|
|
53
|
+
|
|
54
|
+
return child
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
childProcess = proceed()
|
package/bin/new
CHANGED
package/bin/server
CHANGED
|
@@ -1,26 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
import server from '../lib/server.js'
|
|
4
|
-
import { srcDir, pageDir } from '../lib/dir.js'
|
|
5
|
-
import { watchers, watch } from '../lib/watcher.js'
|
|
6
4
|
import generate from '../lib/generate.js'
|
|
7
5
|
|
|
8
|
-
watchers.push({
|
|
9
|
-
paths: srcDir,
|
|
10
|
-
watchOptions: {
|
|
11
|
-
ignored: pageDir
|
|
12
|
-
},
|
|
13
|
-
callback: generate
|
|
14
|
-
})
|
|
15
|
-
watchers.push({
|
|
16
|
-
paths: pageDir,
|
|
17
|
-
callback: generate,
|
|
18
|
-
watchOptions: {
|
|
19
|
-
ignoreInitial: true
|
|
20
|
-
},
|
|
21
|
-
event: ['change', 'unlink', 'add']
|
|
22
|
-
})
|
|
23
|
-
watch()
|
|
24
6
|
generate()
|
|
25
|
-
|
|
26
7
|
server().listen(process.env.PORT || 8000)
|
package/lib/dir.js
CHANGED
|
@@ -8,6 +8,7 @@ const templateDir = `${srcDir}/template`
|
|
|
8
8
|
const cssDir = `${srcDir}/css`
|
|
9
9
|
const cacheDir = `${rootDir}/.cache`
|
|
10
10
|
const serverDir = `${srcDir}/server`
|
|
11
|
+
const helperDir = `${srcDir}/helper`
|
|
11
12
|
|
|
12
13
|
export {
|
|
13
14
|
rootDir,
|
|
@@ -17,5 +18,6 @@ export {
|
|
|
17
18
|
templateDir,
|
|
18
19
|
cssDir,
|
|
19
20
|
cacheDir,
|
|
20
|
-
serverDir
|
|
21
|
+
serverDir,
|
|
22
|
+
helperDir
|
|
21
23
|
}
|
package/package.json
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tenjuu99/blog",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.6",
|
|
4
4
|
"description": "blog template",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|
|
7
|
-
"dev": "node bin/server",
|
|
7
|
+
"dev": "node bin/dev-server",
|
|
8
|
+
"server": "node bin/server",
|
|
8
9
|
"generate": "node bin/generate",
|
|
9
10
|
"test": "echo \"Error: no test specified\" && exit 1"
|
|
10
11
|
},
|
|
11
12
|
"bin": {
|
|
12
13
|
"generate": "bin/generate",
|
|
13
|
-
"server": "bin/server",
|
|
14
|
+
"server": "bin/dev-server",
|
|
14
15
|
"create-blog": "bin/new"
|
|
15
16
|
},
|
|
16
17
|
"author": "AmashigeSeiji",
|
|
@@ -1,13 +1,19 @@
|
|
|
1
1
|
body {
|
|
2
2
|
background: #fafafa;
|
|
3
|
-
--container-max-width:
|
|
4
|
-
--container-min-width:
|
|
5
|
-
--container-width:
|
|
3
|
+
--container-max-width: 100%;
|
|
4
|
+
--container-min-width: 100%;
|
|
5
|
+
--container-width: 100%;
|
|
6
6
|
height: 100vh;
|
|
7
7
|
}
|
|
8
8
|
main {
|
|
9
9
|
height: 100%;
|
|
10
10
|
margin: 0 auto;
|
|
11
|
+
display: flex;
|
|
12
|
+
flex-direction: row;
|
|
13
|
+
justify-content: flex-start;
|
|
14
|
+
}
|
|
15
|
+
main.container {
|
|
16
|
+
padding: 0;
|
|
11
17
|
}
|
|
12
18
|
.textareaAndPreview {
|
|
13
19
|
display: flex;
|
|
@@ -22,9 +28,19 @@ main {
|
|
|
22
28
|
.editor {
|
|
23
29
|
display: flex;
|
|
24
30
|
flex-direction: column;
|
|
25
|
-
padding: 15px
|
|
31
|
+
padding: 15px 20px;
|
|
26
32
|
justify-content:center;
|
|
27
33
|
height: 100%;
|
|
34
|
+
/* width: 100%; */
|
|
35
|
+
margin: 0 auto;
|
|
36
|
+
position: relative;
|
|
37
|
+
left: 0;
|
|
38
|
+
flex-basis: 100%;
|
|
39
|
+
transition: flex-basis 0.3s;
|
|
40
|
+
}
|
|
41
|
+
.sidebar-close .editor {
|
|
42
|
+
flex-basis: 90%;
|
|
43
|
+
transition: flex-basis 0.3s;
|
|
28
44
|
}
|
|
29
45
|
#editorTextArea {
|
|
30
46
|
resize: none;
|
|
@@ -61,43 +77,45 @@ form select {
|
|
|
61
77
|
.sidebar {
|
|
62
78
|
display: flex;
|
|
63
79
|
justify-content: space-between;
|
|
64
|
-
width:
|
|
80
|
+
width: 300px;
|
|
65
81
|
overflow: hidden;
|
|
66
|
-
|
|
82
|
+
left: 0;
|
|
67
83
|
background: rgba(104, 117, 154);
|
|
68
84
|
height: 100%;
|
|
69
85
|
padding: 0;
|
|
70
|
-
box-shadow: 3px 13px 13px rgba(50, 50, 50, 0.5);
|
|
71
|
-
left: 0;
|
|
72
|
-
transition: left 0.3s, width 0.3s;
|
|
73
86
|
overflow-y: hidden;
|
|
87
|
+
transition: left 0.3s, flex-basis 0.3s;
|
|
88
|
+
flex-basis: 300px;
|
|
89
|
+
position: relative;
|
|
90
|
+
}
|
|
91
|
+
.sidebar-close .sidebar {
|
|
92
|
+
left: -290px;
|
|
93
|
+
transition: left 0.3s, flex-basis 0.3s;
|
|
94
|
+
flex-basis: 0;
|
|
74
95
|
}
|
|
75
|
-
.sidebar
|
|
76
|
-
|
|
77
|
-
|
|
96
|
+
.sidebar ul {
|
|
97
|
+
padding: 0;
|
|
98
|
+
margin: 0 0 0 20px;
|
|
99
|
+
left: 0;
|
|
100
|
+
transition: left 0.3s;
|
|
101
|
+
min-width: 180px;
|
|
102
|
+
max-width: 180px;
|
|
103
|
+
}
|
|
104
|
+
.sidebar-close .sidebar ul {
|
|
105
|
+
position: absolute;
|
|
106
|
+
left: -290px;
|
|
107
|
+
transition: left 0.3s;
|
|
78
108
|
}
|
|
79
109
|
@media screen and (min-width: 1100px) {
|
|
80
|
-
.sidebar {
|
|
81
|
-
width: 40vw;
|
|
82
|
-
}
|
|
83
|
-
.sidebar.close {
|
|
84
|
-
left: -39vw;
|
|
85
|
-
}
|
|
86
110
|
}
|
|
87
111
|
@media screen and (min-width: 1400px) {
|
|
88
|
-
.sidebar {
|
|
89
|
-
width: 30vw;
|
|
90
|
-
}
|
|
91
|
-
.sidebar.close {
|
|
92
|
-
left: -29vw;
|
|
93
|
-
}
|
|
94
112
|
}
|
|
95
113
|
@media screen and (max-width: 600px) {
|
|
96
114
|
.sidebar {
|
|
97
|
-
|
|
115
|
+
flex-basis: 80%;
|
|
98
116
|
}
|
|
99
117
|
.sidebar.close {
|
|
100
|
-
|
|
118
|
+
flex-basis: 5%;
|
|
101
119
|
}
|
|
102
120
|
}
|
|
103
121
|
.sidebar li {
|
|
@@ -110,7 +128,11 @@ form select {
|
|
|
110
128
|
cursor: pointer;
|
|
111
129
|
width: 20px;
|
|
112
130
|
height: 100%;
|
|
113
|
-
|
|
131
|
+
background: rgba(104, 117, 154);
|
|
132
|
+
}
|
|
133
|
+
.sidebar-close .sidebar-toggle {
|
|
134
|
+
position: fixed;
|
|
135
|
+
left: 0;
|
|
114
136
|
}
|
|
115
137
|
.sidebar-toggle:hover:after {
|
|
116
138
|
position: absolute;
|
|
@@ -125,6 +147,24 @@ form select {
|
|
|
125
147
|
width: 100%;
|
|
126
148
|
display: block;
|
|
127
149
|
}
|
|
150
|
+
main.container {
|
|
151
|
+
padding: 0 5px;
|
|
152
|
+
}
|
|
153
|
+
.sidebar {
|
|
154
|
+
position: fixed;
|
|
155
|
+
width: 80vw;
|
|
156
|
+
z-index: 3;
|
|
157
|
+
right: 0;
|
|
158
|
+
left: unset;
|
|
159
|
+
transition: right .3s, width .3s;
|
|
160
|
+
}
|
|
161
|
+
.sidebar-close .sidebar {
|
|
162
|
+
width: 0;
|
|
163
|
+
position: fixed;
|
|
164
|
+
right: -300px;
|
|
165
|
+
left: unset;
|
|
166
|
+
transition: right .3s, width .3s;
|
|
167
|
+
}
|
|
128
168
|
.editor {
|
|
129
169
|
padding: 15px 0;
|
|
130
170
|
}
|
|
@@ -134,4 +174,64 @@ form select {
|
|
|
134
174
|
#editorTextArea {
|
|
135
175
|
flex-basis: 100%;
|
|
136
176
|
}
|
|
177
|
+
.sidebar-toggle {
|
|
178
|
+
display: none;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* hamburger
|
|
183
|
+
*/
|
|
184
|
+
.hamburger-menu {
|
|
185
|
+
display: none;
|
|
186
|
+
}
|
|
187
|
+
@media screen and (max-width: 600px) {
|
|
188
|
+
.hamburger-menu {
|
|
189
|
+
display: block;
|
|
190
|
+
}
|
|
191
|
+
.menu-btn {
|
|
192
|
+
position: fixed;
|
|
193
|
+
top: 10px;
|
|
194
|
+
right: 10px;
|
|
195
|
+
display: flex;
|
|
196
|
+
height: 40px;
|
|
197
|
+
width: 40px;
|
|
198
|
+
justify-content: center;
|
|
199
|
+
align-items: center;
|
|
200
|
+
z-index: 90;
|
|
201
|
+
/* background-color: #3584bb; */
|
|
202
|
+
}
|
|
203
|
+
.menu-btn span,
|
|
204
|
+
.menu-btn span:before,
|
|
205
|
+
.menu-btn span:after {
|
|
206
|
+
content: '';
|
|
207
|
+
display: block;
|
|
208
|
+
height: 3px;
|
|
209
|
+
width: 25px;
|
|
210
|
+
border-radius: 3px;
|
|
211
|
+
background-color: #ffffff;
|
|
212
|
+
position: absolute;
|
|
213
|
+
transition: transform 0.3s, background-color 0.3s;
|
|
214
|
+
}
|
|
215
|
+
.menu-btn span:before {
|
|
216
|
+
bottom: 8px;
|
|
217
|
+
}
|
|
218
|
+
.menu-btn span:after {
|
|
219
|
+
top: 8px;
|
|
220
|
+
}
|
|
221
|
+
#menu-btn-check:checked ~ .menu-btn span {
|
|
222
|
+
background-color: rgba(255, 255, 255, 0);/*メニューオープン時は真ん中の線を透明にする*/
|
|
223
|
+
}
|
|
224
|
+
#menu-btn-check:checked ~ .menu-btn span::before {
|
|
225
|
+
bottom: 0;
|
|
226
|
+
transform: rotate(45deg);
|
|
227
|
+
transition: transform 0.3s, background-color 0.3s;
|
|
228
|
+
}
|
|
229
|
+
#menu-btn-check:checked ~ .menu-btn span::after {
|
|
230
|
+
top: 0;
|
|
231
|
+
transform: rotate(-45deg);
|
|
232
|
+
transition: transform 0.3s, background-color 0.3s;
|
|
233
|
+
}
|
|
234
|
+
#menu-btn-check {
|
|
235
|
+
display: none;
|
|
236
|
+
}
|
|
137
237
|
}
|
package/src-sample/js/editor.js
CHANGED
|
@@ -67,7 +67,7 @@ const onloadFunction = async (e) => {
|
|
|
67
67
|
if (json.preview) {
|
|
68
68
|
const iframe = document.createElement('iframe')
|
|
69
69
|
iframe.setAttribute('srcdoc', json.preview)
|
|
70
|
-
iframe.setAttribute('sandbox', '')
|
|
70
|
+
iframe.setAttribute('sandbox', 'allow-same-origin allow-scripts')
|
|
71
71
|
const old = preview.querySelector('iframe')
|
|
72
72
|
if (!old) {
|
|
73
73
|
preview.appendChild(iframe)
|
|
@@ -87,10 +87,16 @@ const onloadFunction = async (e) => {
|
|
|
87
87
|
|
|
88
88
|
const sidebarToggle = (e) => {
|
|
89
89
|
const sidebar = document.querySelector('.sidebar')
|
|
90
|
+
const main = document.querySelector('main')
|
|
90
91
|
const toggle = sidebar.querySelector('.sidebar-toggle')
|
|
91
92
|
toggle.addEventListener('click', (e) => {
|
|
92
93
|
e.preventDefault()
|
|
93
|
-
|
|
94
|
+
main.classList.toggle('sidebar-close')
|
|
95
|
+
})
|
|
96
|
+
const hamburger = document.querySelector('.hamburger-menu input[type="checkbox"]')
|
|
97
|
+
console.log(hamburger)
|
|
98
|
+
hamburger.addEventListener('change', (e) => {
|
|
99
|
+
main.classList.toggle('sidebar-close')
|
|
94
100
|
})
|
|
95
101
|
}
|
|
96
102
|
document.addEventListener('DOMContentLoaded', (event) => {
|
|
@@ -14,8 +14,13 @@
|
|
|
14
14
|
<p class="container">
|
|
15
15
|
<a href="/">{{SITE_NAME}}/Editor</a>
|
|
16
16
|
</p>
|
|
17
|
+
<div class="hamburger-menu">
|
|
18
|
+
<input type="checkbox" id="menu-btn-check">
|
|
19
|
+
<label for="menu-btn-check" class="menu-btn"><span></span></label>
|
|
20
|
+
</div>
|
|
17
21
|
</header>
|
|
18
|
-
|
|
22
|
+
<main class="container sidebar-close">
|
|
23
|
+
<div class="sidebar">
|
|
19
24
|
<ul>
|
|
20
25
|
<script type="ssg">
|
|
21
26
|
return helper.readIndex().map(p => {
|
|
@@ -25,7 +30,6 @@
|
|
|
25
30
|
</ul>
|
|
26
31
|
<div class="sidebar-toggle"> </div>
|
|
27
32
|
</div>
|
|
28
|
-
<main class="container">
|
|
29
33
|
<form action="/editor" class="editor" method="post" id="editor">
|
|
30
34
|
<input id="inputFileName" name="inputFileName" type="text" value="" placeholder="sample.md">
|
|
31
35
|
<select id="selectDataFile" name="selectDataFile">
|