runeblog 0.2.57 → 0.2.58
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.lt3 +164 -69
- data/README.md +176 -65
- data/empty_view/themes/standard/blog/index.lt3 +1 -1
- data/empty_view/themes/standard/navbar/navbar.lt3 +3 -0
- data/empty_view/themes/standard/navbar/vnavbar.lt3 +19 -0
- data/empty_view/themes/standard/widgets/links/links.rb +1 -1
- data/empty_view/themes/standard/widgets/news/news.rb +70 -0
- data/empty_view/themes/standard/widgets/pages/pages.rb +56 -2
- data/empty_view/themes/standard/widgets/pinned/pinned.rb +2 -1
- data/lib/liveblog.rb +16 -10
- data/lib/post.rb +6 -6
- data/lib/runeblog_version.rb +1 -1
- data/test/austin.rb +3 -2
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '0873c41ad8c6eeae9fd84afe21144479c1c6bc1592ce74a18a84876b9d759aa4'
|
4
|
+
data.tar.gz: a3bb718ca13531568b0cce72f574c4642a976577b1449f37a592c845966c0084
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6a059e27fa46e4367dfb9827f7587472152b6c62120abd10ab3ff61432e4363c122889150d027a32e673029e5ace5414c646e99d8700f2e9c17efa7e7be93e3f
|
7
|
+
data.tar.gz: 5d370df15a116caf0d6b3a3f2322af80e629d02ecfbd7b8274196b14f02bcf9edf15e8c48420f8b14235ee58946f7a3f86524496e08127b034df03531120c0ed
|
data/README.lt3
CHANGED
@@ -1,23 +1,18 @@
|
|
1
1
|
.mixin markdown
|
2
|
-
<div
|
3
|
-
|
4
|
-
|
5
|
-
<img src="raido.png" width="196" height="275" align="left"></img>
|
2
|
+
<div style="float: left; align: left; vertical-align: bottom">
|
3
|
+
<img src="raido4.png" width="210" height="295" align="left"></img>
|
6
4
|
</div>
|
5
|
+
<h1>runeblog</h1><b>Runeblog</b> is a blogging tool written in Ruby. It has these basic characteristics:
|
6
|
+
<ul>
|
7
|
+
<li>It is usable entirely in text mode from the terminal</li>
|
8
|
+
<li>It publishes web pages as static HTML</li>
|
9
|
+
<li>So far, yes, like Jekyll</li>
|
10
|
+
<li>It's based on Livetext (highly extensible Ruby-based markup)</li>
|
11
|
+
<li>It has the concept of multiple "views" for a blog</li>
|
12
|
+
<li>The multiple views are in effect multiple blogs managed with the same backend.</li>
|
13
|
+
</ul>
|
7
14
|
|
8
|
-
.h1 runeblog
|
9
|
-
|
10
|
-
Runeblog is a blogging tool written in Ruby. It has these basic characteristics:
|
11
|
-
|
12
|
-
.list
|
13
|
-
It is usable entirely from the command line
|
14
|
-
It publishes web pages as static HTML
|
15
|
-
So far, yes, like Jekyll
|
16
|
-
It's based on Livetext (highly extensible Ruby-based markup)
|
17
|
-
It has the concept of multiple "views" for a blog
|
18
|
-
.end
|
19
15
|
|
20
|
-
The multiple views are in effect multiple blogs managed with the same backend.
|
21
16
|
|
22
17
|
.h2 What is Livetext?
|
23
18
|
|
@@ -38,15 +33,16 @@ would go into another. There might be a view that only old friends or close frie
|
|
38
33
|
can see. There might be a view purely for reviews of music, books, and movies.
|
39
34
|
|
40
35
|
But the important points are these:
|
36
|
+
|
41
37
|
.list
|
42
|
-
|
38
|
+
<i>All</i> the views will be managed the same way in the same place, and they will all share common data.
|
43
39
|
Any post can easily be included in a single view, in more than one, or in all of them.
|
44
40
|
Each view can have its own look and feel, and it can be linked/published separately from the others.
|
45
41
|
Each view can be hosted in a different location and/or a different server and domain
|
46
42
|
Any post can be in more than one view
|
47
43
|
.end
|
48
44
|
|
49
|
-
.h2 The
|
45
|
+
.h2 The <tt>blog</tt> environment
|
50
46
|
|
51
47
|
There is a command-line tool called `blog which is a REPL (read-eval-print loop).
|
52
48
|
Note that this tool is a curses-based environment (mainly so it can display menus
|
@@ -55,93 +51,192 @@ and such to the user).
|
|
55
51
|
The help message looks like this:
|
56
52
|
|
57
53
|
.mono
|
58
|
-
|
54
|
+
<b>Basics:</b> <b>Views:</b>
|
55
|
+
------------------------------------------- -------------------------------------------
|
56
|
+
<b>h, help</b> This message <b>change view VIEW</b> Change current view
|
57
|
+
<b>q, quit</b> Exit the program <b>cv VIEW</b> Change current view
|
58
|
+
<b>v, version</b> Print version information <b>new view</b> Create a new view
|
59
|
+
<b>clear</b> Clear screen <b>list views</b> List all views available
|
60
|
+
<b>lsv</b> Same as: list views
|
61
|
+
<br>
|
62
|
+
<b>Posts:</b> <b>Advanced:</b>
|
63
|
+
------------------------------------------- -------------------------------------------
|
64
|
+
<b>p, post</b> Create a new post <b>config</b> Edit various system files
|
65
|
+
<b>new post</b> Same as p, post <b>customize</b> (BUGGY) Change set of tags, extra views
|
66
|
+
<b>lsp, list posts</b> List posts in current view <b>preview</b> Look at current (local) view in browser
|
67
|
+
<b>lsd, list drafts</b> List all drafts (all views) <b>browse</b> Look at current (published) view in browser
|
68
|
+
<b>delete ID [ID...]</b> Remove multiple posts <b>rebuild</b> Regenerate all posts and relink
|
69
|
+
<b>undelete ID</b> Undelete a post <b>publish</b> Publish (current view)
|
70
|
+
<b>edit ID</b> Edit a post <b>ssh</b> Login to remote server
|
71
|
+
<b>import ASSETS</b> Import assets (images, etc.) <b>manage WIDGET</b> Manage content/layout of a widget
|
72
|
+
.end
|
73
|
+
|
74
|
+
.h2 Getting started
|
59
75
|
|
60
|
-
|
61
|
-
|
76
|
+
But when you first run the REPL, it checks for an existing blog repository under
|
77
|
+
the `[.blogs] directory. If it doesn't find one, it asks whether you want to create
|
78
|
+
a new blog repo. Enter `y for yes.
|
79
|
+
. If you enter `y for yes, it creates a sort of "skeleton" with a single view called `[test_view].
|
62
80
|
|
63
|
-
|
64
|
-
new view Create a new view
|
65
|
-
list views List all views available
|
66
|
-
lsv Same as: list views
|
81
|
+
You'll then enter the editor (vim for now) to add configuration info to the `global.lt3 file.
|
67
82
|
|
68
|
-
|
69
|
-
|
70
|
-
lsp, list posts List posts in current view
|
71
|
-
lsd, list drafts List all posts regardless of view
|
83
|
+
<pre><b>FIXME add menu screenshot here</b></pre>
|
84
|
+
<pre><b>FIXME add vim screenshot here</b></pre>
|
72
85
|
|
73
|
-
|
74
|
-
|
86
|
+
The next thing you should do is to create at least one view of your own. Use the
|
87
|
+
`[new view] command for this. Note that the current view is displayed as part of the prompt.
|
75
88
|
|
76
|
-
|
77
|
-
|
89
|
+
<pre>
|
90
|
+
<b>[no view]</b> new view mystuff<br>
|
91
|
+
<b>[mystuff]</b>
|
92
|
+
</pre>
|
78
93
|
|
79
|
-
|
80
|
-
|
81
|
-
deploy Deploy (current view)
|
82
|
-
.end
|
94
|
+
To create a new post, use the `[new post] command (also abbreviated `post or simply `[p]). You will be
|
95
|
+
prompted for a title:
|
83
96
|
|
84
|
-
|
97
|
+
<pre>
|
98
|
+
<b>[around_austin]</b> new post<br>
|
99
|
+
<b>Title:</b> This is my first post
|
100
|
+
</pre>
|
85
101
|
|
86
|
-
|
87
|
-
the `[.blog] directory. If it doesn't find one, it asks whether you want to create
|
88
|
-
a new blog repo. If you enter `y for yes, it creates a sort of "skeleton" with a
|
89
|
-
single view called `[test_view].
|
102
|
+
Then you'll be sent into the editor (currently vim but can be others):
|
90
103
|
|
91
|
-
|
92
|
-
`[new view] command for this.
|
104
|
+
<pre><b>FIXME add example here</b></pre>
|
93
105
|
|
94
|
-
|
106
|
+
<pre>
|
107
|
+
<b>FIXME wizard?</b>
|
108
|
+
(publishing one-time setup - server, ssh keys, etc.)
|
109
|
+
preview...
|
110
|
+
publish...
|
111
|
+
browse...
|
112
|
+
(and so on)
|
113
|
+
</pre>
|
95
114
|
|
96
|
-
|
115
|
+
<b>To be continued</b>
|
97
116
|
|
98
|
-
|
117
|
+
.h2 Customizing the default templates and configuration
|
99
118
|
|
100
|
-
|
119
|
+
You can use the `config command to choose a file to edit.
|
101
120
|
|
102
|
-
|
121
|
+
<pre><b>FIXME add screenshot here</b></pre>
|
103
122
|
|
104
|
-
|
123
|
+
The meaning and interaction of these files will be explained later. *FIXME
|
105
124
|
|
106
|
-
|
125
|
+
When you make changes, `rebuild will detect these and regenerate whatever files
|
126
|
+
are needed.
|
107
127
|
|
108
|
-
|
128
|
+
.h2 The directory structure for a view
|
109
129
|
|
110
|
-
|
130
|
+
<pre><b>FIXME add details here</b></pre>
|
111
131
|
|
112
|
-
*TBD
|
113
132
|
|
114
133
|
.h2 Basics of Livetext
|
115
134
|
|
116
|
-
|
135
|
+
<b>TBD</b>
|
136
|
+
|
137
|
+
<b>Bold, italics, etc.</b>
|
138
|
+
single, double, bracketed
|
139
|
+
|
140
|
+
<b>Common dot commands)
|
141
|
+
<pre>
|
142
|
+
.debug
|
143
|
+
.say
|
144
|
+
.nopara
|
145
|
+
.quit
|
146
|
+
indented dot-commands
|
147
|
+
</pre>
|
148
|
+
|
149
|
+
<b>Using external files</b>
|
150
|
+
<pre>
|
151
|
+
.mixin
|
152
|
+
.include
|
153
|
+
.copy
|
154
|
+
.seek
|
155
|
+
</pre>
|
156
|
+
|
157
|
+
<b>Predefined functions and variables</b>
|
158
|
+
<pre>
|
159
|
+
\$File
|
160
|
+
\$\$date
|
161
|
+
etc.
|
162
|
+
</pre>
|
163
|
+
|
164
|
+
.h2 Runeblog-specific features (Liveblog</b>
|
165
|
+
|
166
|
+
<b>TBD</b>
|
167
|
+
|
168
|
+
<b>Dot commands - the basics</b>
|
169
|
+
<pre>
|
170
|
+
.mixin liveblog
|
171
|
+
.post
|
172
|
+
.title
|
173
|
+
.views
|
174
|
+
.tags
|
175
|
+
.teaser
|
176
|
+
</pre>
|
177
|
+
|
178
|
+
<b>Dot commands - more advanced</b>
|
179
|
+
<pre>
|
180
|
+
.image
|
181
|
+
.inset
|
182
|
+
.dropcap
|
183
|
+
.pin
|
184
|
+
</pre>
|
185
|
+
|
186
|
+
<b>Variables and functions</b>
|
187
|
+
<pre>
|
188
|
+
\$view, etc.
|
189
|
+
\$\$date, \$\$link, etc.
|
190
|
+
</pre>
|
117
191
|
|
118
|
-
(bold, italics, etc.)
|
119
192
|
|
120
|
-
|
193
|
+
.h2 Defining your own features
|
121
194
|
|
122
|
-
|
195
|
+
<b>Dot commands, variables, functions</b>
|
196
|
+
<pre>
|
197
|
+
.def/.end
|
198
|
+
.set
|
199
|
+
.variables
|
200
|
+
.heredoc
|
201
|
+
.func
|
202
|
+
</pre>
|
123
203
|
|
124
|
-
|
204
|
+
<b>Defining these in Ruby</b>
|
125
205
|
|
126
|
-
*TBD
|
127
206
|
|
128
|
-
|
207
|
+
.h2 More topics
|
129
208
|
|
130
|
-
|
209
|
+
<b>Meta tags, etc.</b>
|
210
|
+
<b>CSS</b>
|
131
211
|
|
132
|
-
|
212
|
+
<b>Widgets</b>
|
213
|
+
<pre>
|
214
|
+
pages
|
215
|
+
links
|
216
|
+
pinned
|
217
|
+
faq
|
218
|
+
sitemap
|
219
|
+
news
|
220
|
+
etc.
|
221
|
+
</pre>
|
133
222
|
|
134
|
-
|
223
|
+
<b>Banner and navbar</b>
|
135
224
|
|
136
|
-
|
225
|
+
<b>Creating your own widgets</b>
|
137
226
|
|
138
|
-
|
227
|
+
<b>Special tags coming "soon"</b>
|
228
|
+
<pre>
|
229
|
+
github, gitlab, gist
|
230
|
+
wikipedia
|
231
|
+
youtube, vimeo
|
232
|
+
twitter, instagram
|
233
|
+
etc.
|
234
|
+
</pre>
|
139
235
|
|
140
|
-
.h2
|
141
236
|
|
142
|
-
|
237
|
+
<b>TBD</b>
|
143
238
|
|
144
239
|
.h2 More later...
|
145
240
|
|
146
|
-
|
241
|
+
<b>TBD</b>
|
147
242
|
|
data/README.md
CHANGED
@@ -1,22 +1,19 @@
|
|
1
|
-
<div
|
2
|
-
<
|
3
|
-
|
4
|
-
<p>
|
5
|
-
|
6
|
-
<img src="raido.png" width="196" height="275" align="left"></img>
|
1
|
+
<div style="float: left; align: left; vertical-align: bottom">
|
2
|
+
<img src="raido4.png" width="210" height="295" align="left"></img>
|
7
3
|
</div>
|
4
|
+
<h1>runeblog</h1><b>Runeblog</b> is a blogging tool written in Ruby. It has these basic characteristics:
|
5
|
+
<ul>
|
6
|
+
<li>It is usable entirely in text mode from the terminal</li>
|
7
|
+
<li>It publishes web pages as static HTML</li>
|
8
|
+
<li>So far, yes, like Jekyll</li>
|
9
|
+
<li>It's based on Livetext (highly extensible Ruby-based markup)</li>
|
10
|
+
<li>It has the concept of multiple "views" for a blog</li>
|
11
|
+
<li>The multiple views are in effect multiple blogs managed with the same backend.</li>
|
12
|
+
</ul>
|
8
13
|
<p>
|
9
14
|
|
10
|
-
# runeblog
|
11
|
-
Runeblog is a blogging tool written in Ruby. It has these basic characteristics:
|
12
15
|
<p>
|
13
16
|
|
14
|
-
* It is usable entirely from the command line
|
15
|
-
* It publishes web pages as static HTML
|
16
|
-
* So far, yes, like Jekyll
|
17
|
-
* It's based on Livetext (highly extensible Ruby-based markup)
|
18
|
-
* It has the concept of multiple "views" for a blog
|
19
|
-
The multiple views are in effect multiple blogs managed with the same backend.
|
20
17
|
<p>
|
21
18
|
|
22
19
|
## What is Livetext?
|
@@ -40,12 +37,14 @@ can see. There might be a view purely for reviews of music, books, and movies.
|
|
40
37
|
<p>
|
41
38
|
|
42
39
|
But the important points are these:
|
43
|
-
|
40
|
+
<p>
|
41
|
+
|
42
|
+
* <i>All</i> the views will be managed the same way in the same place, and they will all share common data.
|
44
43
|
* Any post can easily be included in a single view, in more than one, or in all of them.
|
45
44
|
* Each view can have its own look and feel, and it can be linked/published separately from the others.
|
46
45
|
* Each view can be hosted in a different location and/or a different server and domain
|
47
46
|
* Any post can be in more than one view
|
48
|
-
## The
|
47
|
+
## The <tt>blog</tt> environment
|
49
48
|
There is a command-line tool called <font size=+1><tt>blog</tt></font> which is a REPL (read-eval-print loop).
|
50
49
|
Note that this tool is a curses-based environment (mainly so it can display menus
|
51
50
|
and such to the user).
|
@@ -55,108 +54,220 @@ The help message looks like this:
|
|
55
54
|
<p>
|
56
55
|
|
57
56
|
<pre>
|
58
|
-
|
57
|
+
<b>Basics:</b> <b>Views:</b>
|
58
|
+
------------------------------------------- -------------------------------------------
|
59
|
+
<b>h, help</b> This message <b>change view VIEW</b> Change current view
|
60
|
+
<b>q, quit</b> Exit the program <b>cv VIEW</b> Change current view
|
61
|
+
<b>v, version</b> Print version information <b>new view</b> Create a new view
|
62
|
+
<b>clear</b> Clear screen <b>list views</b> List all views available
|
63
|
+
<b>lsv</b> Same as: list views
|
64
|
+
<br>
|
65
|
+
<b>Posts:</b> <b>Advanced:</b>
|
66
|
+
------------------------------------------- -------------------------------------------
|
67
|
+
<b>p, post</b> Create a new post <b>config</b> Edit various system files
|
68
|
+
<b>new post</b> Same as p, post <b>customize</b> (BUGGY) Change set of tags, extra views
|
69
|
+
<b>lsp, list posts</b> List posts in current view <b>preview</b> Look at current (local) view in browser
|
70
|
+
<b>lsd, list drafts</b> List all drafts (all views) <b>browse</b> Look at current (published) view in browser
|
71
|
+
<b>delete ID [ID...]</b> Remove multiple posts <b>rebuild</b> Regenerate all posts and relink
|
72
|
+
<b>undelete ID</b> Undelete a post <b>publish</b> Publish (current view)
|
73
|
+
<b>edit ID</b> Edit a post <b>ssh</b> Login to remote server
|
74
|
+
<b>import ASSETS</b> Import assets (images, etc.) <b>manage WIDGET</b> Manage content/layout of a widget
|
75
|
+
</pre>
|
76
|
+
## Getting started
|
77
|
+
But when you first run the REPL, it checks for an existing blog repository under
|
78
|
+
the <font size=+1><tt>.blogs</tt></font> directory. If it doesn't find one, it asks whether you want to create
|
79
|
+
a new blog repo. Enter <font size=+1><tt>y</tt></font> for yes.
|
80
|
+
<p>
|
59
81
|
|
60
|
-
|
61
|
-
|
82
|
+
You'll then enter the editor (vim for now) to add configuration info to the <font size=+1><tt>global.lt3</tt></font> file.
|
83
|
+
<p>
|
62
84
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
lsv Same as: list views
|
85
|
+
<pre><b>FIXME add menu screenshot here</b></pre>
|
86
|
+
<pre><b>FIXME add vim screenshot here</b></pre>
|
87
|
+
<p>
|
67
88
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
lsd, list drafts List all posts regardless of view
|
89
|
+
The next thing you should do is to create at least one view of your own. Use the
|
90
|
+
`[new view] command for this. Note that the current view is displayed as part of the prompt.
|
91
|
+
<p>
|
72
92
|
|
73
|
-
|
74
|
-
|
93
|
+
<pre>
|
94
|
+
<b>[no view]</b> new view mystuff<br>
|
95
|
+
<b>[mystuff]</b>
|
96
|
+
</pre>
|
97
|
+
<p>
|
75
98
|
|
76
|
-
|
77
|
-
|
99
|
+
To create a new post, use the <font size=+1><tt>new post</tt></font> command (also abbreviated <font size=+1><tt>post</tt></font> or simply <font size=+1><tt>p</tt></font>). You will be
|
100
|
+
prompted for a title:
|
101
|
+
<p>
|
78
102
|
|
79
|
-
|
80
|
-
|
81
|
-
|
103
|
+
<pre>
|
104
|
+
<b>[around_austin]</b> new post<br>
|
105
|
+
<b>Title:</b> This is my first post
|
82
106
|
</pre>
|
83
|
-
## Getting started
|
84
|
-
But when you first run the REPL, it checks for an existing blog repository under
|
85
|
-
the <font size=+1><tt>.blog</tt></font> directory. If it doesn't find one, it asks whether you want to create
|
86
|
-
a new blog repo. If you enter <font size=+1><tt>y</tt></font> for yes, it creates a sort of "skeleton" with a
|
87
|
-
single view called <font size=+1><tt>test_view</tt></font>.
|
88
107
|
<p>
|
89
108
|
|
90
|
-
|
91
|
-
<font size=+1><tt>new view</tt></font> command for this.
|
109
|
+
Then you'll be sent into the editor (currently vim but can be others):
|
92
110
|
<p>
|
93
111
|
|
94
|
-
|
112
|
+
<pre><b>FIXME add example here</b></pre>
|
95
113
|
<p>
|
96
114
|
|
97
|
-
|
115
|
+
<pre>
|
116
|
+
<b>FIXME wizard?</b>
|
117
|
+
(publishing one-time setup - server, ssh keys, etc.)
|
118
|
+
preview...
|
119
|
+
publish...
|
120
|
+
browse...
|
121
|
+
(and so on)
|
122
|
+
</pre>
|
98
123
|
<p>
|
99
124
|
|
100
|
-
|
125
|
+
<b>To be continued</b>
|
101
126
|
<p>
|
102
127
|
|
103
|
-
|
128
|
+
## Customizing the default templates and configuration
|
129
|
+
You can use the <font size=+1><tt>config</tt></font> command to choose a file to edit.
|
104
130
|
<p>
|
105
131
|
|
106
|
-
|
132
|
+
<pre><b>FIXME add screenshot here</b></pre>
|
107
133
|
<p>
|
108
134
|
|
109
|
-
|
135
|
+
The meaning and interaction of these files will be explained later. <b>FIXME</b>
|
110
136
|
<p>
|
111
137
|
|
112
|
-
|
138
|
+
When you make changes, <font size=+1><tt>rebuild</tt></font> will detect these and regenerate whatever files
|
139
|
+
are needed.
|
113
140
|
<p>
|
114
141
|
|
115
|
-
|
142
|
+
## The directory structure for a view
|
143
|
+
<pre><b>FIXME add details here</b></pre>
|
116
144
|
<p>
|
117
145
|
|
118
|
-
## Changing the default templates
|
119
|
-
*TBD
|
120
146
|
<p>
|
121
147
|
|
122
148
|
## Basics of Livetext
|
123
|
-
|
149
|
+
<b>TBD</b>
|
150
|
+
<p>
|
151
|
+
|
152
|
+
<b>Bold, italics, etc.</b>
|
153
|
+
single, double, bracketed
|
154
|
+
<p>
|
155
|
+
|
156
|
+
<b>Common dot commands)
|
157
|
+
<pre>
|
158
|
+
.debug
|
159
|
+
.say
|
160
|
+
.nopara
|
161
|
+
.quit
|
162
|
+
indented dot-commands
|
163
|
+
</pre>
|
164
|
+
<p>
|
165
|
+
|
166
|
+
<b>Using external files</b>
|
167
|
+
<pre>
|
168
|
+
.mixin
|
169
|
+
.include
|
170
|
+
.copy
|
171
|
+
.seek
|
172
|
+
</pre>
|
124
173
|
<p>
|
125
174
|
|
126
|
-
|
175
|
+
<b>Predefined functions and variables</b>
|
176
|
+
<pre>
|
177
|
+
$File
|
178
|
+
$\[date is undefined]
|
179
|
+
etc.
|
180
|
+
</pre>
|
127
181
|
<p>
|
128
182
|
|
129
|
-
|
183
|
+
## Runeblog-specific features (Liveblog</b>
|
184
|
+
<b>TBD</b>
|
130
185
|
<p>
|
131
186
|
|
132
|
-
|
187
|
+
<b>Dot commands - the basics</b>
|
188
|
+
<pre>
|
189
|
+
.mixin liveblog
|
190
|
+
.post
|
191
|
+
.title
|
192
|
+
.views
|
193
|
+
.tags
|
194
|
+
.teaser
|
195
|
+
</pre>
|
133
196
|
<p>
|
134
197
|
|
135
|
-
|
136
|
-
|
198
|
+
<b>Dot commands - more advanced</b>
|
199
|
+
<pre>
|
200
|
+
.image
|
201
|
+
.inset
|
202
|
+
.dropcap
|
203
|
+
.pin
|
204
|
+
</pre>
|
137
205
|
<p>
|
138
206
|
|
139
|
-
|
207
|
+
<b>Variables and functions</b>
|
208
|
+
<pre>
|
209
|
+
$view, etc.
|
210
|
+
$\[date is undefined], $\[link is undefined], etc.
|
211
|
+
</pre>
|
140
212
|
<p>
|
141
213
|
|
142
|
-
(variables and functions)
|
143
214
|
<p>
|
144
215
|
|
145
216
|
## Defining your own features
|
146
|
-
|
217
|
+
<b>Dot commands, variables, functions</b>
|
218
|
+
<pre>
|
219
|
+
.def/.end
|
220
|
+
.set
|
221
|
+
.variables
|
222
|
+
.heredoc
|
223
|
+
.func
|
224
|
+
</pre>
|
147
225
|
<p>
|
148
226
|
|
149
|
-
|
227
|
+
<b>Defining these in Ruby</b>
|
228
|
+
<p>
|
229
|
+
|
230
|
+
<p>
|
231
|
+
|
232
|
+
## More topics
|
233
|
+
<b>Meta tags, etc.</b>
|
234
|
+
<b>CSS</b>
|
235
|
+
<p>
|
236
|
+
|
237
|
+
<b>Widgets</b>
|
238
|
+
<pre>
|
239
|
+
pages
|
240
|
+
links
|
241
|
+
pinned
|
242
|
+
faq
|
243
|
+
sitemap
|
244
|
+
news
|
245
|
+
etc.
|
246
|
+
</pre>
|
247
|
+
<p>
|
248
|
+
|
249
|
+
<b>Banner and navbar</b>
|
250
|
+
<p>
|
251
|
+
|
252
|
+
<b>Creating your own widgets</b>
|
253
|
+
<p>
|
254
|
+
|
255
|
+
<b>Special tags coming "soon"</b>
|
256
|
+
<pre>
|
257
|
+
github, gitlab, gist
|
258
|
+
wikipedia
|
259
|
+
youtube, vimeo
|
260
|
+
twitter, instagram
|
261
|
+
etc.
|
262
|
+
</pre>
|
150
263
|
<p>
|
151
264
|
|
152
|
-
*TBD
|
153
265
|
<p>
|
154
266
|
|
155
|
-
|
156
|
-
*TBD
|
267
|
+
<b>TBD</b>
|
157
268
|
<p>
|
158
269
|
|
159
270
|
## More later...
|
160
|
-
|
271
|
+
<b>TBD</b>
|
161
272
|
<p>
|
162
273
|
|
@@ -0,0 +1,19 @@
|
|
1
|
+
. --------------------------------------------------
|
2
|
+
. This defines the content of the navigation bar.
|
3
|
+
. The first one is a special case.
|
4
|
+
. The others are understood to refer to .lt3 files
|
5
|
+
. such as navbar/about.lt3 (which is processed into
|
6
|
+
. HTML).
|
7
|
+
. The title may be more than one word. Quotes are
|
8
|
+
. not needed.
|
9
|
+
. --------------------------------------------------
|
10
|
+
|
11
|
+
.nopara
|
12
|
+
.mixin liveblog
|
13
|
+
|
14
|
+
.vnavbar
|
15
|
+
about About
|
16
|
+
contact Contact
|
17
|
+
faq FAQ
|
18
|
+
.end
|
19
|
+
|
@@ -38,7 +38,7 @@ class ::RuneBlog::Widget
|
|
38
38
|
tag = "links"
|
39
39
|
url = :widgets/tag/tag+"-main.html"
|
40
40
|
card_title = "External links" # FIXME
|
41
|
-
cardfile = "
|
41
|
+
cardfile = "#{Type}-card"
|
42
42
|
File.open("#{cardfile}.html", "w") do |f|
|
43
43
|
f.puts <<-EOS
|
44
44
|
<div class="card mb-3">
|
@@ -2,11 +2,81 @@
|
|
2
2
|
|
3
3
|
class ::RuneBlog::Widget
|
4
4
|
class News
|
5
|
+
Type, Title = "news", "News"
|
6
|
+
|
5
7
|
def initialize(repo)
|
6
8
|
@blog = repo
|
9
|
+
@datafile = "list.data"
|
7
10
|
end
|
8
11
|
|
9
12
|
def build
|
13
|
+
lines = File.readlines(@datafile)
|
14
|
+
@data = lines.map {|line| line.chomp.split(/, */) }
|
15
|
+
write_main
|
16
|
+
write_card
|
17
|
+
end
|
18
|
+
|
19
|
+
def _html_body(file, css = nil)
|
20
|
+
file.puts "<html>"
|
21
|
+
if css
|
22
|
+
file.puts " <head>"
|
23
|
+
file.puts " <style>\n#{css}\n </style>"
|
24
|
+
file.puts " </head>"
|
25
|
+
end
|
26
|
+
file.puts " <body>"
|
27
|
+
yield
|
28
|
+
file.puts " </body>\n</html>"
|
29
|
+
end
|
30
|
+
|
31
|
+
def write_main
|
32
|
+
mainfile = "#{Type}-main"
|
33
|
+
css = "* { font-family: verdana }"
|
34
|
+
File.open("#{mainfile}.html", "w") do |f|
|
35
|
+
_html_body(f, css) do
|
36
|
+
f.puts "<h1>#{Title}</h1><br><hr>"
|
37
|
+
@data.each do |file, frameable, title|
|
38
|
+
title = title.gsub(/\\/, "") # kludge
|
39
|
+
case frameable
|
40
|
+
when "yes"; url_ref = "href = '#{file}'"
|
41
|
+
when "no"; url_ref = %[href='#{file}' target='blank']
|
42
|
+
end
|
43
|
+
css = "color: #8888FF; text-decoration: none; font-size: 21px"
|
44
|
+
f.puts %[<a style="#{css}" #{url_ref}>#{title}</a> <br>]
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def write_card
|
51
|
+
cardfile = "#{Type}-card"
|
52
|
+
url = "widgets/#{Type}/#{Type}-main.html"
|
53
|
+
File.open("#{cardfile}.html", "w") do |f|
|
54
|
+
f.puts <<-EOS
|
55
|
+
<div class="card mb-3">
|
56
|
+
<div class="card-body">
|
57
|
+
<h5 class="card-title">
|
58
|
+
<button type="button" class="btn btn-primary" data-toggle="collapse" data-target="##{Type}">+</button>
|
59
|
+
<a href="javascript: void(0)"
|
60
|
+
onclick="javascript:open_main('#{url}')"
|
61
|
+
style="text-decoration: none; color: black"> #{Title}</a>
|
62
|
+
</h5>
|
63
|
+
<div class="collapse" id="#{Type}">
|
64
|
+
EOS
|
65
|
+
@data.each do |file, frameable, title|
|
66
|
+
case frameable
|
67
|
+
when "yes"; url_ref = _main(file) # remote, frameable
|
68
|
+
when "no"; url_ref = _blank(file) # remote, not frameable
|
69
|
+
end
|
70
|
+
anchor = %[<a #{url_ref}>#{title}</a>]
|
71
|
+
wrapper = %[<li class="list-group-item">#{anchor}</li>]
|
72
|
+
f.puts wrapper
|
73
|
+
end
|
74
|
+
f.puts <<-EOS
|
75
|
+
</div>
|
76
|
+
</div>
|
77
|
+
</div>
|
78
|
+
EOS
|
79
|
+
end
|
10
80
|
end
|
11
81
|
|
12
82
|
def edit_menu
|
@@ -4,8 +4,11 @@
|
|
4
4
|
|
5
5
|
class ::RuneBlog::Widget
|
6
6
|
class Pages
|
7
|
+
Type = "pages"
|
8
|
+
|
7
9
|
def initialize(repo)
|
8
10
|
@blog = repo
|
11
|
+
@datafile = "list.data"
|
9
12
|
end
|
10
13
|
|
11
14
|
def build
|
@@ -15,8 +18,59 @@ class ::RuneBlog::Widget
|
|
15
18
|
dest = child.sub(/.lt3$/, ".html")
|
16
19
|
xlate src: child, dst: dest # , debug: true
|
17
20
|
end
|
18
|
-
|
19
|
-
|
21
|
+
@lines = File.readlines(@datafile)
|
22
|
+
write_main
|
23
|
+
write_card
|
24
|
+
end
|
25
|
+
|
26
|
+
def write_main
|
27
|
+
@data = @lines.map! {|x| x.chomp.split(/, */, 3) }
|
28
|
+
css = "* { font-family: verdana }"
|
29
|
+
card_title = "Pages" # FIXME
|
30
|
+
File.open("#{Type}-main.html", "w") do |f|
|
31
|
+
_html_body(f, css) do
|
32
|
+
f.puts "<h1>#{card_title}</h1><br><hr>"
|
33
|
+
url_ref = nil
|
34
|
+
@data.each do |url, frameable, title|
|
35
|
+
url_ref = (frameable == "yes") ? "href = '#{url}'" : _blank(url)
|
36
|
+
css = "color: #8888FF; text-decoration: none; font-size: 21px" # ; font-family: verdana"
|
37
|
+
f.puts %[<a style="#{css}" #{url_ref}>#{title}</a> <br>]
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def write_card
|
44
|
+
tag = Type
|
45
|
+
url = :widgets/tag/tag+"-main.html"
|
46
|
+
card_title = "Pages" # FIXME
|
47
|
+
cardfile = "#{Type}-card"
|
48
|
+
File.open("#{cardfile}.html", "w") do |f|
|
49
|
+
f.puts <<-EOS
|
50
|
+
<div class="card mb-3">
|
51
|
+
<div class="card-body">
|
52
|
+
<h5 class="card-title">
|
53
|
+
<button type="button" class="btn btn-primary" data-toggle="collapse" data-target="##{tag}">+</button>
|
54
|
+
<a href="javascript: void(0)"
|
55
|
+
onclick="javascript:open_main('#{url}')"
|
56
|
+
style="text-decoration: none; color: black"> #{card_title}</a>
|
57
|
+
</h5>
|
58
|
+
<div class="collapse" id="#{tag}">
|
59
|
+
EOS
|
60
|
+
@data.each do |url2, frameable, title|
|
61
|
+
main_ref = %[href="javascript: void(0)" onclick="javascript:open_main('#{url2}')"]
|
62
|
+
tab_ref = %[href="#{url2}"]
|
63
|
+
url_ref = (frameable == "yes") ? main_ref : tab_ref
|
64
|
+
anchor = %[<a #{url_ref}>#{title}</a>]
|
65
|
+
wrapper = %[<li class="list-group-item">#{anchor}</li>]
|
66
|
+
f.puts wrapper
|
67
|
+
end
|
68
|
+
f.puts <<-EOS
|
69
|
+
</div>
|
70
|
+
</div>
|
71
|
+
</div>
|
72
|
+
EOS
|
73
|
+
end
|
20
74
|
end
|
21
75
|
|
22
76
|
def edit_menu
|
@@ -5,6 +5,7 @@ class ::RuneBlog::Widget
|
|
5
5
|
def initialize(repo)
|
6
6
|
@blog = repo
|
7
7
|
@self = "pinned"
|
8
|
+
@datafile = "list.data"
|
8
9
|
end
|
9
10
|
|
10
11
|
def _html_body(file, css = nil) # FIXME
|
@@ -23,7 +24,7 @@ end
|
|
23
24
|
@tmp = File.new("/tmp/debug-out", "w")
|
24
25
|
posts = nil
|
25
26
|
Dir.chdir(@blog.root/:posts) { posts = Dir["*"] }
|
26
|
-
lines = File.readlines(
|
27
|
+
lines = File.exist?(@datafile) ? File.readlines(@datafile) : []
|
27
28
|
hash = {}
|
28
29
|
@links = []
|
29
30
|
lines.each do |x|
|
data/lib/liveblog.rb
CHANGED
@@ -109,9 +109,13 @@ def banner # still experimental
|
|
109
109
|
file = "banner/#{enum.next}"
|
110
110
|
_out "<td colspan=#{span}>" + File.read(file) + "</td>"
|
111
111
|
when "navbar"
|
112
|
+
dir = @blog.root/:views/@blog.view/"themes/standard/navbar/"
|
113
|
+
xlate cwd: dir, src: "navbar.lt3", dst: "navbar.html" # , debug: true
|
112
114
|
file = "navbar/navbar.html"
|
113
115
|
_out "<td colspan=#{span}><div style='text-align: center'>" + File.read(file) + "</div></td>"
|
114
116
|
when "vnavbar"
|
117
|
+
dir = @blog.root/:views/@blog.view/"themes/standard/navbar/"
|
118
|
+
xlate cwd: dir, src: "vnavbar.lt3", dst: "vnavbar.html" # , debug: true
|
115
119
|
file = "navbar/vnavbar.html"
|
116
120
|
_out "<td colspan=#{span}>" + File.read(file) + "</td>"
|
117
121
|
when "//"
|
@@ -465,7 +469,7 @@ def sidebar
|
|
465
469
|
|
466
470
|
code = _load_local(tag)
|
467
471
|
if code
|
468
|
-
if ["pages", "links", "pinned"].include? tag
|
472
|
+
if ["news", "pages", "links", "pinned"].include? tag
|
469
473
|
Dir.chdir(wtag) do
|
470
474
|
widget = code.new(@blog)
|
471
475
|
widget.build
|
@@ -664,32 +668,34 @@ def _custom_navbar(orient = :horiz)
|
|
664
668
|
extra = ""
|
665
669
|
extra = "navbar-expand-lg" if orient == :horiz
|
666
670
|
|
667
|
-
|
671
|
+
start = <<-HTML
|
672
|
+
<!-- FIXME weird bug here!!! -->
|
668
673
|
<nav class="navbar #{extra} navbar-light bg-light">
|
669
674
|
<ul class="navbar-nav mr-auto">
|
670
675
|
HTML
|
671
|
-
|
676
|
+
finish = <<-HTML
|
672
677
|
</ul>
|
673
678
|
</nav>
|
674
679
|
HTML
|
675
680
|
|
676
|
-
|
677
|
-
|
678
|
-
output.
|
679
|
-
|
681
|
+
navdir = @blog.root/:views/@blog.view/:themes/:standard/:navbar
|
682
|
+
html_file = navdir/"navbar.html"
|
683
|
+
output = File.new(navdir/"navbar.html", "w")
|
684
|
+
output.puts start
|
685
|
+
lines = _body.to_a
|
680
686
|
lines = [" index Home"] + lines unless _args.include?("nohome")
|
681
687
|
lines.each do |line|
|
682
688
|
basename, cdata = line.chomp.strip.split(" ", 2)
|
683
|
-
full = :
|
689
|
+
full = :navdir/basename+".html"
|
684
690
|
href_main = _main(full)
|
685
691
|
if basename == "index" # special case
|
686
692
|
output.puts %[<li class="nav-item active"> <a class="nav-link" href="index.html">#{cdata}<span class="sr-only">(current)</span></a> </li>]
|
687
693
|
else
|
688
|
-
xlate cwd:
|
694
|
+
xlate cwd: navdir, src: basename, dst: vdir/"remote/navbar"/basename+".html" # , debug: true
|
689
695
|
output.puts %[<li class="nav-item"> <a class="nav-link" #{href_main}>#{cdata}</a> </li>]
|
690
696
|
end
|
691
697
|
end
|
692
|
-
output.puts
|
698
|
+
output.puts finish
|
693
699
|
end
|
694
700
|
|
695
701
|
def _old_navbar
|
data/lib/post.rb
CHANGED
@@ -9,12 +9,12 @@ class RuneBlog::Post
|
|
9
9
|
|
10
10
|
include RuneBlog::Helpers
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
12
|
+
# def self.files(num, root)
|
13
|
+
# log!(enter: __method__, args: [num, root], level: 3)
|
14
|
+
# files = ::Find.find(root).to_a
|
15
|
+
# result = files.grep(/#{prefix(num)}-/)
|
16
|
+
# result
|
17
|
+
# end
|
18
18
|
|
19
19
|
def self.load(post)
|
20
20
|
log!(enter: __method__, args: [post], level: 3)
|
data/lib/runeblog_version.rb
CHANGED
data/test/austin.rb
CHANGED
@@ -78,7 +78,7 @@ x.generate_view("around_austin")
|
|
78
78
|
debug("-- change_view: #{bold('around_austin')}")
|
79
79
|
x.change_view("around_austin") # 1 2 7 8 9
|
80
80
|
|
81
|
-
make_post(x, "What's at Stubbs...", <<-EXCERPT, <<-BODY
|
81
|
+
make_post(x, "What's at Stubbs...", <<-EXCERPT, <<-BODY)
|
82
82
|
Stubbs has been around for longer than civilization.
|
83
83
|
EXCERPT
|
84
84
|
That's a good thing. But their music isn't always the greatest.
|
@@ -87,6 +87,7 @@ BODY
|
|
87
87
|
make_post(x, "The new amphitheatre is overrated", <<-EXCERPT, <<-BODY)
|
88
88
|
It used to be that all major concerts played the Erwin Center.
|
89
89
|
EXCERPT
|
90
|
+
.pin around_austin
|
90
91
|
Now, depending on what you consider "major," blah blah blah...
|
91
92
|
BODY
|
92
93
|
|
@@ -137,7 +138,7 @@ EXCERPT
|
|
137
138
|
This is about Sabine St, blah blah lorem ipsum dolor...
|
138
139
|
BODY
|
139
140
|
|
140
|
-
make_post(x, "Remember Modest Mouse?", <<-EXCERPT, <<-BODY
|
141
|
+
make_post(x, "Remember Modest Mouse?", <<-EXCERPT, <<-BODY)
|
141
142
|
They date to the 90s or before.
|
142
143
|
EXCERPT
|
143
144
|
But I first heard of them
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: runeblog
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.58
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hal Fulton
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-11-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: livetext
|
@@ -91,6 +91,7 @@ files:
|
|
91
91
|
- empty_view/themes/standard/navbar/contact.lt3
|
92
92
|
- empty_view/themes/standard/navbar/faq.lt3
|
93
93
|
- empty_view/themes/standard/navbar/navbar.lt3
|
94
|
+
- empty_view/themes/standard/navbar/vnavbar.lt3
|
94
95
|
- empty_view/themes/standard/post/generate.lt3
|
95
96
|
- empty_view/themes/standard/post/head.lt3
|
96
97
|
- empty_view/themes/standard/post/index.lt3
|