runeblog 0.2.33 → 0.2.38
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/blog +1 -1
- data/empty_view/assets/sky2.jpg +0 -0
- data/empty_view/remote/assets/GIT_IS_DUMB +1 -0
- data/empty_view/remote/etc/GIT_IS_DUMB +1 -0
- data/empty_view/remote/navbar/GIT_IS_DUMB +1 -0
- data/empty_view/remote/permalink/GIT_IS_DUMB +1 -0
- data/empty_view/remote/widgets/links/list.data +3 -0
- data/empty_view/remote/widgets/news/list.data +4 -0
- data/empty_view/remote/widgets/pages/SUBFILES +1 -0
- data/empty_view/remote/widgets/pages/list.data +4 -0
- data/empty_view/themes/standard/README +59 -0
- data/empty_view/themes/standard/blog/generate.lt3 +37 -0
- data/empty_view/themes/standard/blog/head.lt3 +16 -0
- data/empty_view/themes/standard/blog/index.lt3 +17 -0
- data/empty_view/themes/standard/blog/post_entry.lt3 +22 -0
- data/empty_view/themes/standard/etc/blog.css.lt3 +43 -0
- data/empty_view/themes/standard/etc/externals.lt3 +24 -0
- data/empty_view/themes/standard/etc/favicon.ico +0 -0
- data/empty_view/themes/standard/etc/misc.js +8 -0
- data/empty_view/themes/standard/global.lt3 +35 -0
- data/empty_view/themes/standard/navbar/about.lt3 +18 -0
- data/empty_view/themes/standard/navbar/contact.lt3 +18 -0
- data/empty_view/themes/standard/navbar/navbar.lt3 +16 -0
- data/empty_view/themes/standard/post/generate.lt3 +30 -0
- data/empty_view/themes/standard/post/head.lt3 +7 -0
- data/empty_view/themes/standard/post/index.lt3 +24 -0
- data/empty_view/themes/standard/post/permalink.lt3 +32 -0
- data/empty_view/themes/standard/widgets/README +4 -0
- data/empty_view/themes/standard/widgets/ad/ad.lt3 +15 -0
- data/empty_view/themes/standard/widgets/calendar/calendar.lt3 +6 -0
- data/empty_view/themes/standard/widgets/links/links.lt3 +2 -0
- data/empty_view/themes/standard/widgets/links/list.data +3 -0
- data/empty_view/themes/standard/widgets/news/list.data +4 -0
- data/empty_view/themes/standard/widgets/news/news.lt3 +2 -0
- data/empty_view/themes/standard/widgets/pages/README +2 -0
- data/empty_view/themes/standard/widgets/pages/disclaim.lt3 +10 -0
- data/empty_view/themes/standard/widgets/pages/faq.lt3 +9 -0
- data/empty_view/themes/standard/widgets/pages/like-dislike.lt3 +11 -0
- data/empty_view/themes/standard/widgets/pages/list.data +4 -0
- data/empty_view/themes/standard/widgets/pages/local.rb +8 -0
- data/empty_view/themes/standard/widgets/pages/other-stuff.lt3 +10 -0
- data/empty_view/themes/standard/widgets/pages/pages.lt3 +2 -0
- data/empty_view/themes/standard/widgets/tag-cloud/tag-cloud.lt3 +12 -0
- data/lib/helpers-repl.rb +4 -6
- data/lib/liveblog.rb +24 -7
- data/lib/publish.rb +0 -10
- data/lib/repl.rb +48 -56
- data/lib/runeblog.rb +12 -13
- data/lib/runeblog_version.rb +1 -1
- data/lib/view.rb +1 -1
- data/runeblog.gemspec +2 -2
- data/test/general_test.rb +0 -1
- metadata +43 -2
- data/empty_view.tgz +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 703ba416efcf4467ac20d3a9e37084c49004b48fae50adeb25beb1ec013a4d0a
|
4
|
+
data.tar.gz: ac0c5e8a64578169f7faa3c729baaecb6a83ea28d9639d8ea74b49b42ada943a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8080cbdaedbb3795cf8f3c1e3fef03ed44633423d41471bc7a8632f57b65ca9a01a82843a4324a75abd1e9b241db5f9b3d47c21f09ef23788cc86a240083bd8e
|
7
|
+
data.tar.gz: d4abe4cc7ea9af24a93416a567e6286fa4a3b8cfe6356c4e633337bff1413f9fab83e3ca60d1cea6790aa50cfca2e12593dbf7fdb392011ff86c30545c10cb41
|
data/bin/blog
CHANGED
Binary file
|
@@ -0,0 +1 @@
|
|
1
|
+
meh
|
@@ -0,0 +1 @@
|
|
1
|
+
meh
|
@@ -0,0 +1 @@
|
|
1
|
+
meh
|
@@ -0,0 +1 @@
|
|
1
|
+
meh
|
@@ -0,0 +1,4 @@
|
|
1
|
+
https://techcrunch.com/2019/09/16/fossa-scores-8-5-million-series-a-to-help-enterprise-manage-open-source-licenses/, yes, FOSSA scores \$8.5 million Series A to help enterprise manage open-source licenses
|
2
|
+
https://techcrunch.com/2019/09/17/spacexs-orbital-starship-prototype-construction-progress-detailed-in-new-photos/, yes, SpaceX’s orbital Starship prototype construction progress detailed in new photos
|
3
|
+
https://developers.googleblog.com/2019/05/Flutter-io19.html, yes, Flutter: a Portable UI Framework for Mobile, Web, Embedded, and Desktop
|
4
|
+
https://jaycarlson.net/microcontrollers/, no, The Amazing \$1 Microcontroller (2017)
|
@@ -0,0 +1 @@
|
|
1
|
+
Causes other *.lt3 files to be generated
|
@@ -0,0 +1,59 @@
|
|
1
|
+
New structure:
|
2
|
+
|
3
|
+
themes/standard The first "default theme" - more later
|
4
|
+
├── README This file
|
5
|
+
├── assets Assets (images/videos/etc) for entire view
|
6
|
+
├── banner Top banner for the view
|
7
|
+
├── blog All files/info for view
|
8
|
+
│ ├── generate.lt3 Generate index.html from wrapper (rarely edited)
|
9
|
+
│ ├── head.lt3 Header info for index.html
|
10
|
+
│ ├── index.lt3 "Guts" of view (user-edited, wrapped by generate.lt3)
|
11
|
+
│ └── post_entry.lt3
|
12
|
+
├── etc
|
13
|
+
│ ├── blog.css
|
14
|
+
│ ├── externals.lt3
|
15
|
+
│ ├── global.lt3
|
16
|
+
│ └── favicon.ico
|
17
|
+
├── navbar
|
18
|
+
│ ├── about.html
|
19
|
+
│ └── navbar.lt3
|
20
|
+
├── pages
|
21
|
+
├── post
|
22
|
+
│ ├── generate.lt3
|
23
|
+
│ ├── head.lt3
|
24
|
+
│ ├── index.lt3
|
25
|
+
│ └── permalink.lt3
|
26
|
+
└── sidebar
|
27
|
+
├── ad.lt3
|
28
|
+
├── calendar.lt3
|
29
|
+
├── news.lt3
|
30
|
+
└── tag-cloud.lt3
|
31
|
+
|
32
|
+
|
33
|
+
Old structure:
|
34
|
+
|
35
|
+
templates The first "default theme" - more later
|
36
|
+
├── README This file
|
37
|
+
├── about.html An "about" file (will move)
|
38
|
+
├── assets Assets for entire view (blog)
|
39
|
+
│ ├── application.css "Global" CSS
|
40
|
+
│ ├── favicon.ico Favicon
|
41
|
+
│ └── ... Other files later, images, etc.
|
42
|
+
├── blog ** The whole template for this view (blog)
|
43
|
+
│ ├── _postentry.lt3 Used repeatedly in list of blog posts
|
44
|
+
│ ├── generate.lt3 The "main wrapper" that actually generates everything
|
45
|
+
│ ├── index.lt3 The main "user editable" portion of the template
|
46
|
+
│ ├── navbar.lt3 The navigation bar
|
47
|
+
│ └── sidebar The sidebar (which may include different things)
|
48
|
+
│ ├── ad.lt3 Code to generate an advertisement
|
49
|
+
│ ├── calendar.lt3 Code for a calendar
|
50
|
+
│ ├── news.lt3 Recent news
|
51
|
+
│ └── tag-cloud.lt3 Tag cloud (generated automatically of course)
|
52
|
+
├── global.lt3 Some global settings (MOVED TO etc)
|
53
|
+
├── head.lt3 A standard <head> section
|
54
|
+
├── meta.lt3 Standard meta tags
|
55
|
+
└── post
|
56
|
+
├── head.lt3 Specific to post (adds to higher-level head)
|
57
|
+
├── generate.lt3 The "main wrapper" that actually generates the post
|
58
|
+
└── index.lt3 The main "user editable" portion of the post template
|
59
|
+
|
@@ -0,0 +1,37 @@
|
|
1
|
+
. --------------------------------------------------
|
2
|
+
. This file will usually not be edited by the user.
|
3
|
+
. It is used to generate the top-level index.html
|
4
|
+
. The user will more often edit blog/index.lt3 in
|
5
|
+
. the process of blog setup.
|
6
|
+
. --------------------------------------------------
|
7
|
+
|
8
|
+
.mixin liveblog
|
9
|
+
|
10
|
+
<html>
|
11
|
+
<!-- Generated from $File on $$date. Editing not recommended. -->
|
12
|
+
|
13
|
+
.seek global.lt3
|
14
|
+
.include blog/head.lt3
|
15
|
+
<body>
|
16
|
+
|
17
|
+
. FIXME
|
18
|
+
<table width=100%>
|
19
|
+
<tr>
|
20
|
+
<td width=30% bgcolor=black>
|
21
|
+
<div style="text-align: center; color: white">
|
22
|
+
<h1>Around Austin</h1><br>
|
23
|
+
The view from downtown...
|
24
|
+
</div>
|
25
|
+
</td>
|
26
|
+
<td><img src=assets/sky2.jpg width=100%></img>
|
27
|
+
</tr>
|
28
|
+
</table>
|
29
|
+
|
30
|
+
$.include navbar/navbar.lt3
|
31
|
+
<div class="content container-fluid mt-4">
|
32
|
+
<div class="row">
|
33
|
+
$.include blog/index.lt3
|
34
|
+
</div>
|
35
|
+
</div>
|
36
|
+
</body>
|
37
|
+
</html>
|
@@ -0,0 +1,16 @@
|
|
1
|
+
. --------------------------------------------------
|
2
|
+
. This file will usually not be edited by the user.
|
3
|
+
. It is used to generate the <HEAD> for the overall
|
4
|
+
. blog and for the individual post.
|
5
|
+
. SUBJECT TO CHANGE, like everything else but moreso
|
6
|
+
. --------------------------------------------------
|
7
|
+
|
8
|
+
<head>
|
9
|
+
.include etc/externals.lt3
|
10
|
+
.include etc/misc.js
|
11
|
+
|
12
|
+
. fix/remove later
|
13
|
+
.head
|
14
|
+
.end
|
15
|
+
|
16
|
+
</head>
|
@@ -0,0 +1,17 @@
|
|
1
|
+
. --------------------------------------------------
|
2
|
+
. This file describes the actual layout of the blog.
|
3
|
+
. It is referenced from blog/generate.lt3
|
4
|
+
. --------------------------------------------------
|
5
|
+
|
6
|
+
. figure out how to put navbar here
|
7
|
+
|
8
|
+
.recent_posts
|
9
|
+
|
10
|
+
.sidebar
|
11
|
+
ad
|
12
|
+
links
|
13
|
+
news
|
14
|
+
pages
|
15
|
+
tag-cloud
|
16
|
+
.end
|
17
|
+
|
@@ -0,0 +1,22 @@
|
|
1
|
+
. --------------------------------------------------
|
2
|
+
. This HTML fragment gives the format of a post's
|
3
|
+
. "index" entry (recent posts on blog front page).
|
4
|
+
. --------------------------------------------------
|
5
|
+
|
6
|
+
<div class="post">
|
7
|
+
<table width=100%>
|
8
|
+
<tr>
|
9
|
+
<td width=12% valign=top>
|
10
|
+
<span class="post-date mt-1 mb-1">
|
11
|
+
<b>#{date}</b>
|
12
|
+
</span>
|
13
|
+
</td>
|
14
|
+
<td> <!-- <span class="post-title-box"> -->
|
15
|
+
<span class="post-title-text"><a href="#{url}">#{title}</a></span>
|
16
|
+
<b>#{teaser_text}</b>
|
17
|
+
<br>
|
18
|
+
<a style="text-decoration: none" href="#{url}"><small>Keep reading...</small></a></p> <!-- </span> -->
|
19
|
+
</td>
|
20
|
+
</tr>
|
21
|
+
</table>
|
22
|
+
</div>
|
@@ -0,0 +1,43 @@
|
|
1
|
+
. --------------------------------------------------
|
2
|
+
. This file is processed to create blog.css
|
3
|
+
. Most of the global CSS goes here
|
4
|
+
. --------------------------------------------------
|
5
|
+
.nopara
|
6
|
+
|
7
|
+
.seek themes/standard/global.lt3
|
8
|
+
|
9
|
+
* { font-family: $font.family }
|
10
|
+
|
11
|
+
\.post-title a {
|
12
|
+
color: $post.title.color;
|
13
|
+
font-size: $post.title.size;
|
14
|
+
float: right;
|
15
|
+
display: inline-block;
|
16
|
+
text-align: top;
|
17
|
+
text-decoration: none;
|
18
|
+
}
|
19
|
+
|
20
|
+
\.post-title a:hover {
|
21
|
+
text-decoration: none;
|
22
|
+
}
|
23
|
+
|
24
|
+
\.post-title-text a {
|
25
|
+
color: $post.text.color;
|
26
|
+
font-size: $post.text.size;
|
27
|
+
# float: right;
|
28
|
+
display: block;
|
29
|
+
text-decoration: none;
|
30
|
+
}
|
31
|
+
|
32
|
+
\.post-title-text a:hover {
|
33
|
+
text-decoration: none;
|
34
|
+
}
|
35
|
+
|
36
|
+
\.post-date {
|
37
|
+
color: $post.date.color;
|
38
|
+
font-size: $post.date.size;
|
39
|
+
display: block;
|
40
|
+
float: left;
|
41
|
+
text-align: top;
|
42
|
+
}
|
43
|
+
|
@@ -0,0 +1,24 @@
|
|
1
|
+
. --------------------------------------------------
|
2
|
+
. External JS and CSS resources (Bootstrap, etc.)
|
3
|
+
. are defined here
|
4
|
+
. --------------------------------------------------
|
5
|
+
|
6
|
+
.stylesheet
|
7
|
+
https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css
|
8
|
+
sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T
|
9
|
+
.end
|
10
|
+
|
11
|
+
.script
|
12
|
+
https://code.jquery.com/jquery-3.3.1.slim.min.js
|
13
|
+
sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo
|
14
|
+
.end
|
15
|
+
|
16
|
+
.script
|
17
|
+
https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js
|
18
|
+
sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1
|
19
|
+
.end
|
20
|
+
|
21
|
+
.script
|
22
|
+
https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js
|
23
|
+
sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM
|
24
|
+
.end
|
Binary file
|
@@ -0,0 +1,35 @@
|
|
1
|
+
. --------------------------------------------------
|
2
|
+
. Global settings are stored here in the form
|
3
|
+
. <variable> <value>
|
4
|
+
. --------------------------------------------------
|
5
|
+
|
6
|
+
.variables
|
7
|
+
author Your name here
|
8
|
+
blog Blog title goes here
|
9
|
+
blog.desc Subtitle (if any) goes here
|
10
|
+
site rubyhacker.com
|
11
|
+
|
12
|
+
host localhost:4000//
|
13
|
+
charset utf-8
|
14
|
+
url localhost:4000//
|
15
|
+
locale en_US
|
16
|
+
|
17
|
+
font.family verdana
|
18
|
+
|
19
|
+
post.title.color #010101
|
20
|
+
post.title.size 28px
|
21
|
+
|
22
|
+
post.text.color #0101a1
|
23
|
+
post.text.size 22px
|
24
|
+
|
25
|
+
post.date.color #9a9a9a
|
26
|
+
post.date.size 15px
|
27
|
+
|
28
|
+
|
29
|
+
publish.user root
|
30
|
+
publish.server rubyhacker.com
|
31
|
+
publish.docroot /var/www/
|
32
|
+
publish.path around_austin
|
33
|
+
publish.proto http
|
34
|
+
.end
|
35
|
+
|
@@ -0,0 +1,18 @@
|
|
1
|
+
. --------------------------------------------------
|
2
|
+
. This is a sample file typical of page referenced
|
3
|
+
. directly from the navigation bar.
|
4
|
+
. It is like a special case of a page in the "pages"
|
5
|
+
. widget.
|
6
|
+
. --------------------------------------------------
|
7
|
+
|
8
|
+
.set this.title="About me"
|
9
|
+
. make this better later
|
10
|
+
<html><body>
|
11
|
+
<div class="content container-fluid mt-4">
|
12
|
+
<div class="row">
|
13
|
+
<h1>$this.title</h1>
|
14
|
+
. content starts here...
|
15
|
+
Blah blah blah...
|
16
|
+
</div>
|
17
|
+
</div>
|
18
|
+
</body></html>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
. --------------------------------------------------
|
2
|
+
. This is a sample file typical of page referenced
|
3
|
+
. directly from the navigation bar.
|
4
|
+
. It is like a special case of a page in the "pages"
|
5
|
+
. widget.
|
6
|
+
. --------------------------------------------------
|
7
|
+
|
8
|
+
.set this.title="Contact"
|
9
|
+
. make this better later
|
10
|
+
<html><body>
|
11
|
+
<div class="content container-fluid mt-4">
|
12
|
+
<div class="row">
|
13
|
+
<h1>$this.title</h1>
|
14
|
+
. content starts here...
|
15
|
+
How to contact me by email, smoke signals, ICBM, seance, ...
|
16
|
+
</div>
|
17
|
+
</div>
|
18
|
+
</body></html>
|
@@ -0,0 +1,16 @@
|
|
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
|
+
.navbar
|
12
|
+
index Home
|
13
|
+
about About
|
14
|
+
contact Contact
|
15
|
+
.end
|
16
|
+
|
@@ -0,0 +1,30 @@
|
|
1
|
+
. --------------------------------------------------
|
2
|
+
. This is used to generate a single post.
|
3
|
+
. The logic behind it is convoluted and may be
|
4
|
+
. subject to change.
|
5
|
+
. --------------------------------------------------
|
6
|
+
|
7
|
+
.mixin liveblog
|
8
|
+
|
9
|
+
<html>
|
10
|
+
<!-- Editing this file is not recommended. -->
|
11
|
+
<!-- It was generated from $File on $$date. -->
|
12
|
+
|
13
|
+
.seek global.lt3
|
14
|
+
.include vars.lt3
|
15
|
+
|
16
|
+
.head
|
17
|
+
og:title $title
|
18
|
+
description $teaser
|
19
|
+
.end
|
20
|
+
|
21
|
+
<section class="post">
|
22
|
+
<div class="entry-content">
|
23
|
+
$.copy guts.html
|
24
|
+
</div>
|
25
|
+
</section>
|
26
|
+
|
27
|
+
<br>
|
28
|
+
<a href="javascript:history.go(-1)">[Back]</a>
|
29
|
+
</body>
|
30
|
+
</html>
|
@@ -0,0 +1,24 @@
|
|
1
|
+
. --------------------------------------------------
|
2
|
+
. This file is overwritten and customized as the
|
3
|
+
. blog is maintained.
|
4
|
+
. Currently there is no user-friendly way to change
|
5
|
+
. the "skeleton" of a post. When there is, this will
|
6
|
+
. likely be the place.
|
7
|
+
. --------------------------------------------------
|
8
|
+
|
9
|
+
.mixin liveblog
|
10
|
+
. ^ get rid of this later
|
11
|
+
|
12
|
+
.post 0
|
13
|
+
|
14
|
+
.title The new amphitheatre is overrated
|
15
|
+
.pubdate 2019-07-09
|
16
|
+
.views around_austin
|
17
|
+
.tags
|
18
|
+
|
19
|
+
.teaser
|
20
|
+
It used to be that all major concerts played the Erwin Center.
|
21
|
+
|
22
|
+
.end
|
23
|
+
Now, depending on what you consider "major," blah blah blah...
|
24
|
+
|
@@ -0,0 +1,32 @@
|
|
1
|
+
. --------------------------------------------------
|
2
|
+
. A permalink differs very little from the original
|
3
|
+
. post except that it lacks "context" (navigation
|
4
|
+
. bar, banner, sidebar, etc.).
|
5
|
+
. It does have a link back to the current front page
|
6
|
+
. of the blog.
|
7
|
+
. --------------------------------------------------
|
8
|
+
|
9
|
+
.mixin liveblog
|
10
|
+
|
11
|
+
<html>
|
12
|
+
<!-- Editing this file is not recommended. -->
|
13
|
+
<!-- It was generated from $File on $$date. -->
|
14
|
+
|
15
|
+
.seek global.lt3
|
16
|
+
.include vars.lt3
|
17
|
+
|
18
|
+
.head
|
19
|
+
og:title $title
|
20
|
+
description $teaser
|
21
|
+
.end
|
22
|
+
|
23
|
+
<section class="post">
|
24
|
+
<div class="entry-content">
|
25
|
+
$.copy guts.html
|
26
|
+
</div>
|
27
|
+
</section>
|
28
|
+
|
29
|
+
<br>
|
30
|
+
<a href="../index.html" style="text-decoration: none">[Home: $blog]</a>
|
31
|
+
</body>
|
32
|
+
</html>
|
@@ -0,0 +1,15 @@
|
|
1
|
+
. In real life, ads won't work this way...
|
2
|
+
|
3
|
+
.set classname="btn btn-light float-right"
|
4
|
+
.set card.title="Advertisement"
|
5
|
+
.set card.text="Build your amazing website with blabla.com."
|
6
|
+
.set extra="bg-dark text-white"
|
7
|
+
|
8
|
+
<div class="card $extra mb-3">
|
9
|
+
<div class="card-body">
|
10
|
+
<h5 class="card-title">$card.title</h5>
|
11
|
+
<p class="card-text">$card.text</p>
|
12
|
+
<a href="javascript: void(0)" onclick="javascript:open_main('widgets/ad/ad.html')" class="$classname">Visit page</a>
|
13
|
+
</div>
|
14
|
+
</div>
|
15
|
+
|
@@ -0,0 +1,4 @@
|
|
1
|
+
https://techcrunch.com/2019/09/16/fossa-scores-8-5-million-series-a-to-help-enterprise-manage-open-source-licenses/, yes, FOSSA scores \$8.5 million Series A to help enterprise manage open-source licenses
|
2
|
+
https://techcrunch.com/2019/09/17/spacexs-orbital-starship-prototype-construction-progress-detailed-in-new-photos/, yes, SpaceX’s orbital Starship prototype construction progress detailed in new photos
|
3
|
+
https://developers.googleblog.com/2019/05/Flutter-io19.html, yes, Flutter: a Portable UI Framework for Mobile, Web, Embedded, and Desktop
|
4
|
+
https://jaycarlson.net/microcontrollers/, no, The Amazing \$1 Microcontroller (2017)
|
@@ -0,0 +1,12 @@
|
|
1
|
+
.mixin liveblog
|
2
|
+
|
3
|
+
.tag_cloud
|
4
|
+
https://google.com/,btn btn-dark m-1,Programming
|
5
|
+
https://google.com/,btn btn-danger m-1,Science Fiction
|
6
|
+
https://google.com/,btn btn-light m-1,Art
|
7
|
+
https://google.com/,btn btn-dark m-1,Robotics
|
8
|
+
https://google.com/,btn btn-warning m-1,Food and Travel
|
9
|
+
https://google.com/,btn btn-light m-1,DIY Hacks
|
10
|
+
https://google.com/,btn btn-info m-1,Surfing
|
11
|
+
.end
|
12
|
+
|
data/lib/helpers-repl.rb
CHANGED
@@ -18,7 +18,6 @@ module RuneBlog::REPL
|
|
18
18
|
|
19
19
|
"new view $name" => :cmd_new_view,
|
20
20
|
|
21
|
-
# "customize" => :cmd_customize,
|
22
21
|
"tags" => :cmd_tags,
|
23
22
|
"import" => :cmd_import,
|
24
23
|
|
@@ -41,10 +40,10 @@ module RuneBlog::REPL
|
|
41
40
|
"list assets" => :cmd_list_assets,
|
42
41
|
"lsa" => :cmd_list_assets,
|
43
42
|
|
44
|
-
"
|
45
|
-
"undel $postid" => :cmd_undelete_post,
|
43
|
+
"pages" => :cmd_pages,
|
46
44
|
|
47
|
-
"
|
45
|
+
"delete >postid" => :cmd_remove_post,
|
46
|
+
"undel $postid" => :cmd_undelete_post,
|
48
47
|
|
49
48
|
"edit $postid" => :cmd_edit_post,
|
50
49
|
"ed $postid" => :cmd_edit_post,
|
@@ -54,8 +53,6 @@ module RuneBlog::REPL
|
|
54
53
|
|
55
54
|
"browse" => :cmd_browse,
|
56
55
|
|
57
|
-
"relink" => :cmd_relink,
|
58
|
-
|
59
56
|
"rebuild" => :cmd_rebuild,
|
60
57
|
|
61
58
|
"publish" => :cmd_publish,
|
@@ -108,6 +105,7 @@ module RuneBlog::REPL
|
|
108
105
|
end
|
109
106
|
meth = found || :cmd_INVALID
|
110
107
|
params = cmd if meth == :cmd_INVALID
|
108
|
+
# puts "choose: #{[meth, params].inspect}"
|
111
109
|
[meth, params]
|
112
110
|
end
|
113
111
|
|
data/lib/liveblog.rb
CHANGED
@@ -319,6 +319,16 @@ def recent_posts # side-effect
|
|
319
319
|
HTML
|
320
320
|
end
|
321
321
|
|
322
|
+
def _run_local(widget)
|
323
|
+
Dir.chdir("widgets/#{widget}") do
|
324
|
+
require("./local") if File.exist?("local.rb")
|
325
|
+
end
|
326
|
+
rescue => err
|
327
|
+
STDOUT.puts err
|
328
|
+
STDOUT.puts err.backtrace.join("\n")
|
329
|
+
exit
|
330
|
+
end
|
331
|
+
|
322
332
|
def sidebar
|
323
333
|
if _args.include? "off"
|
324
334
|
_body { } # iterate, do nothing
|
@@ -331,17 +341,24 @@ def sidebar
|
|
331
341
|
wtag = :widgets/tag
|
332
342
|
raise "Can't find #{wtag}" unless Dir.exist?(wtag)
|
333
343
|
tcard = "#{tag}-card.html"
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
344
|
+
|
345
|
+
_run_local(tag)
|
346
|
+
|
347
|
+
# if File.exist?(wtag/"SUBFILES")
|
348
|
+
# children = Dir[wtag/"*.lt3"] - [wtag/tag+".lt3"]
|
349
|
+
# children.each do |child|
|
350
|
+
# dest = child.sub(/.lt3$/, ".html")
|
351
|
+
# xlate src: child, dst: dest # , debug: true
|
352
|
+
# end
|
353
|
+
# end
|
341
354
|
xlate cwd: wtag, src: tag, dst: tcard # , debug: true
|
342
355
|
_include_file wtag/tcard
|
343
356
|
end
|
344
357
|
_out %[</div>]
|
358
|
+
rescue => err
|
359
|
+
puts "err = #{err}"
|
360
|
+
puts err.backtrace.join("\n")
|
361
|
+
exit
|
345
362
|
end
|
346
363
|
|
347
364
|
def stylesheet
|
data/lib/publish.rb
CHANGED
@@ -10,16 +10,6 @@ class RuneBlog::Publishing
|
|
10
10
|
def initialize(view)
|
11
11
|
log!(enter: __method__, args: [view.to_s])
|
12
12
|
@blog = RuneBlog.blog
|
13
|
-
# # Clunky...
|
14
|
-
# if params.size == 1 && params[0].is_a?(OpenStruct)
|
15
|
-
# obj = params[0]
|
16
|
-
# array = obj.to_h.values_at(:user, :server, :docroot,
|
17
|
-
# :path, :proto)
|
18
|
-
# @user, @server, @docroot, @path, @proto = *array
|
19
|
-
# else
|
20
|
-
# @user, @server, @docroot, @path, @proto = *params
|
21
|
-
# end
|
22
|
-
# find a better way?
|
23
13
|
gfile = @blog.root/:views/view/"themes/standard/global.lt3"
|
24
14
|
data = File.readlines(gfile)
|
25
15
|
grab = ->(var) { data.grep(/^#{var} /).first.chomp.split(" ", 2)[1] }
|
data/lib/repl.rb
CHANGED
@@ -36,28 +36,40 @@ module RuneBlog::REPL
|
|
36
36
|
@out
|
37
37
|
end
|
38
38
|
|
39
|
-
def
|
39
|
+
def cmd_pages(arg, testing = false)
|
40
40
|
check_empty(arg)
|
41
|
-
dir = @blog.view.dir
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
41
|
+
dir = @blog.view.dir/"themes/standard/widgets/pages"
|
42
|
+
# Assume child files already generated (and list.data??)
|
43
|
+
data = dir/"list.data"
|
44
|
+
lines = File.readlines(data)
|
45
|
+
hash = {}
|
46
|
+
lines.each do |line|
|
47
|
+
url, name = line.chomp.split(",")
|
48
|
+
source = url.sub(/.html$/, ".lt3")
|
49
|
+
hash[name] = source
|
50
|
+
end
|
51
|
+
new_item = "[New page]"
|
52
|
+
num, fname = STDSCR.menu(title: "Edit page:", items: hash.keys + [new_item])
|
53
|
+
return if fname.nil?
|
54
|
+
if fname == new_item
|
55
|
+
print "Page title: "
|
56
|
+
title = RubyText.gets
|
57
|
+
title.chomp!
|
58
|
+
print "File name (.lt3): "
|
59
|
+
fname = RubyText.gets
|
60
|
+
fname << ".lt3" unless fname.end_with?(".lt3")
|
61
|
+
fhtml = fname.sub(/.lt3$/, ".html")
|
62
|
+
File.open(data, "a") {|f| f.puts "#{fhtml},#{title}" }
|
63
|
+
new_file = dir/fname
|
64
|
+
File.open(new_file, "w") do |f|
|
65
|
+
f.puts "<h1>#{title}</h1>\n\n\n "
|
66
|
+
f.puts ".backlink"
|
67
|
+
end
|
68
|
+
edit_file(new_file)
|
69
|
+
else
|
70
|
+
target = hash[fname]
|
71
|
+
edit_file(dir/target)
|
72
|
+
end
|
61
73
|
end
|
62
74
|
|
63
75
|
def cmd_import(arg, testing = false)
|
@@ -131,23 +143,7 @@ module RuneBlog::REPL
|
|
131
143
|
reset_output
|
132
144
|
check_empty(arg)
|
133
145
|
puts unless testing
|
134
|
-
|
135
|
-
if files.empty?
|
136
|
-
msg = "No files changed"
|
137
|
-
output! msg
|
138
|
-
puts "\n #{msg}\n " unless testing
|
139
|
-
return @out
|
140
|
-
end
|
141
|
-
files.each {|file| @blog.rebuild_post(file) }
|
142
|
-
@blog.dirty_views.each {|view| generate_index(view) } # All views for now?
|
143
|
-
File.write("#{@blog.root}/drafts/last_rebuild", Time.now)
|
144
|
-
@out
|
145
|
-
end
|
146
|
-
|
147
|
-
def cmd_relink(arg, testing = false)
|
148
|
-
reset_output
|
149
|
-
check_empty(arg)
|
150
|
-
@blog.relink
|
146
|
+
@blog.generate_view(@blog.view)
|
151
147
|
@out
|
152
148
|
end
|
153
149
|
|
@@ -159,6 +155,7 @@ module RuneBlog::REPL
|
|
159
155
|
n = viewnames.find_index(@blog.view.name)
|
160
156
|
name = @blog.view.name
|
161
157
|
k, name = STDSCR.menu(title: "Views", items: viewnames, curr: n) unless testing
|
158
|
+
return if name.nil?
|
162
159
|
@blog.view = name
|
163
160
|
output name + "\n"
|
164
161
|
puts "\n ", fx(name, :bold), "\n" unless testing
|
@@ -195,12 +192,19 @@ module RuneBlog::REPL
|
|
195
192
|
puts err.backtrace.join("\n")
|
196
193
|
end
|
197
194
|
|
198
|
-
def
|
195
|
+
def _remove_post(arg, testing=false)
|
196
|
+
id = get_integer(arg)
|
197
|
+
result = @blog.remove_post(id)
|
198
|
+
puts "Post #{id} not found" if result.nil?
|
199
|
+
end
|
200
|
+
|
201
|
+
def cmd_remove_post(arg, testing = false)
|
202
|
+
puts "arg = #{arg.inspect} is a #{arg.class}"
|
199
203
|
reset_output
|
200
204
|
args = arg.split
|
201
205
|
args.each do |x|
|
202
206
|
# FIXME
|
203
|
-
ret =
|
207
|
+
ret = _remove_post(x.to_i, false)
|
204
208
|
puts ret
|
205
209
|
output ret
|
206
210
|
end
|
@@ -209,16 +213,6 @@ module RuneBlog::REPL
|
|
209
213
|
|
210
214
|
#-- FIXME affects linking, building, publishing...
|
211
215
|
|
212
|
-
def cmd_remove_post(arg, testing = false)
|
213
|
-
reset_output
|
214
|
-
id = get_integer(arg)
|
215
|
-
result = @blog.remove_post(id)
|
216
|
-
output! "Post #{id} not found" if result.nil?
|
217
|
-
@out
|
218
|
-
end
|
219
|
-
|
220
|
-
#-- FIXME affects linking, building, publishing...
|
221
|
-
|
222
216
|
def cmd_edit_post(arg, testing = false)
|
223
217
|
reset_output
|
224
218
|
id = get_integer(arg)
|
@@ -357,26 +351,24 @@ module RuneBlog::REPL
|
|
357
351
|
list views List all views available
|
358
352
|
lsv Same as: list views
|
359
353
|
|
360
|
-
|
361
|
-
|
354
|
+
* config Edit the publish file or the templates
|
355
|
+
* customize (BUGGY) Change set of tags, extra views
|
362
356
|
|
363
357
|
p, post Create a new post
|
364
358
|
new post Same as post (create a post)
|
365
359
|
|
366
|
-
|
360
|
+
* import ASSETS Import assets (images, etc.)
|
367
361
|
|
368
362
|
lsp, list posts List posts in current view
|
369
363
|
|
370
364
|
lsd, list drafts List all posts regardless of view
|
371
365
|
|
372
|
-
|
373
|
-
kill ID ID ID... Remove multiple posts
|
366
|
+
delete ID [ID...] Remove multiple posts
|
374
367
|
undelete ID Undelete a post
|
375
368
|
edit ID Edit a post
|
376
369
|
|
377
370
|
preview Look at current (local) view in browser
|
378
371
|
browse Look at current (published) view in browser
|
379
|
-
relink Regenerate index for all views
|
380
372
|
rebuild Regenerate all posts and relink
|
381
373
|
publish Publish (current view)
|
382
374
|
ssh Login to remote server
|
data/lib/runeblog.rb
CHANGED
@@ -60,7 +60,6 @@ class RuneBlog
|
|
60
60
|
raise BlogRepoAlreadyExists if Dir.exist?(root)
|
61
61
|
create_dirs(root)
|
62
62
|
Dir.chdir(root) do
|
63
|
-
system!("cp #{RuneBlog::Path}/../empty_view.tgz .")
|
64
63
|
create_dirs(:drafts, :views, :posts)
|
65
64
|
new_sequence
|
66
65
|
end
|
@@ -218,7 +217,7 @@ class RuneBlog
|
|
218
217
|
|
219
218
|
def mark_last_published(str)
|
220
219
|
log!(enter: __method__, args: [str])
|
221
|
-
dump(str, "last_published")
|
220
|
+
dump(str, "#{self.view.dir}/last_published")
|
222
221
|
end
|
223
222
|
|
224
223
|
def add_view(view_name)
|
@@ -232,10 +231,8 @@ class RuneBlog
|
|
232
231
|
def make_empty_view_tree(view_name)
|
233
232
|
log!(enter: __method__, args: [view_name])
|
234
233
|
Dir.chdir(@root) do
|
235
|
-
|
236
|
-
|
237
|
-
system!(cmd1)
|
238
|
-
system!(cmd2)
|
234
|
+
cmd = "cp -r #{RuneBlog::Path}/../empty_view views/#{view_name}"
|
235
|
+
system!(cmd)
|
239
236
|
end
|
240
237
|
end
|
241
238
|
|
@@ -255,8 +252,8 @@ class RuneBlog
|
|
255
252
|
log!(enter: __method__, args: [view_name])
|
256
253
|
check_valid_new_view(view_name)
|
257
254
|
make_empty_view_tree(view_name)
|
258
|
-
mark_last_published("Initial creation")
|
259
255
|
add_view(view_name)
|
256
|
+
mark_last_published("Initial creation")
|
260
257
|
end
|
261
258
|
|
262
259
|
def delete_view(name, force = false)
|
@@ -296,6 +293,7 @@ class RuneBlog
|
|
296
293
|
log!(enter: __method__, args: [slug])
|
297
294
|
id = slug.to_i
|
298
295
|
text = nil
|
296
|
+
@theme = @view.dir/"themes/standard"
|
299
297
|
post_entry_name = @theme/"blog/post_entry.lt3"
|
300
298
|
xlate src: post_entry_name, dst: "/tmp/post_entry.html" # , debug: true
|
301
299
|
@_post_entry ||= File.read("/tmp/post_entry.html")
|
@@ -397,12 +395,17 @@ class RuneBlog
|
|
397
395
|
log!(enter: __method__, args: [view])
|
398
396
|
generate_index(view) # recent posts (recent.html)
|
399
397
|
vdir = @root/:views/view
|
398
|
+
@theme = @root/:views/view/:themes/:standard
|
400
399
|
xlate cwd: vdir/"themes/standard/etc",
|
401
400
|
src: "blog.css.lt3", copy: vdir/"remote/etc/blog.css" # , debug: true
|
402
401
|
xlate cwd: vdir/"themes/standard",
|
403
402
|
src: "blog/generate.lt3", dst: vdir/:remote/"index.html"
|
404
403
|
copy("#{vdir}/assets/*", "#{vdir}/remote/assets/")
|
405
|
-
|
404
|
+
rescue => err
|
405
|
+
puts err
|
406
|
+
puts err.backtrace.join("\n")
|
407
|
+
print "Pause... "
|
408
|
+
gets
|
406
409
|
end
|
407
410
|
|
408
411
|
def _get_views(draft)
|
@@ -494,11 +497,6 @@ class RuneBlog
|
|
494
497
|
end
|
495
498
|
end
|
496
499
|
|
497
|
-
def relink # FIXME no longer used?
|
498
|
-
log!(enter: __method__)
|
499
|
-
self.views.each {|view| generate_index(view) }
|
500
|
-
end
|
501
|
-
|
502
500
|
def index_entry(view, meta)
|
503
501
|
log!(enter: __method__, args: [view, meta])
|
504
502
|
debug "=== index_entry #{view.to_s.inspect} #{meta.num} #{meta.title.inspect}"
|
@@ -538,6 +536,7 @@ class RuneBlog
|
|
538
536
|
def remove_post(num)
|
539
537
|
log!(enter: __method__, args: [num])
|
540
538
|
raise ArgumentError unless num.is_a?(Integer)
|
539
|
+
# FIXME update original draft .views
|
541
540
|
tag = prefix(num)
|
542
541
|
files = Find.find(self.view.dir).to_a
|
543
542
|
list = files.select {|x| File.directory?(x) and x =~ /#{tag}/ }
|
data/lib/runeblog_version.rb
CHANGED
data/lib/view.rb
CHANGED
data/runeblog.gemspec
CHANGED
@@ -28,10 +28,10 @@ spec = Gem::Specification.new do |s|
|
|
28
28
|
Find.find("lib").to_a
|
29
29
|
test = Find.find("test").to_a
|
30
30
|
misc = %w[./README.lt3 ./README.md ./runeblog.gemspec]
|
31
|
+
empty_view = Find.find("empty_view").to_a
|
31
32
|
|
32
|
-
# system("tar zcvf empty_view.tgz empty_view")
|
33
33
|
|
34
|
-
s.files = main + misc + test +
|
34
|
+
s.files = main + misc + test + empty_view
|
35
35
|
s.homepage = 'https://github.com/Hal9000/runeblog'
|
36
36
|
s.license = "Ruby"
|
37
37
|
end
|
data/test/general_test.rb
CHANGED
@@ -27,7 +27,6 @@ class TestREPL < Minitest::Test
|
|
27
27
|
def setup
|
28
28
|
# To be strictly correct in testing (though slower),
|
29
29
|
# run make_blog here.
|
30
|
-
# system("tar zcvf last-test.tgz .blog/ && rm -rf .blog")
|
31
30
|
system("ruby test/make_blog.rb") if ARGV.first == "new"
|
32
31
|
@blog = RuneBlog.new
|
33
32
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
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.38
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hal Fulton
|
@@ -61,7 +61,48 @@ files:
|
|
61
61
|
- "./README.md"
|
62
62
|
- "./runeblog.gemspec"
|
63
63
|
- bin/blog
|
64
|
-
- empty_view.
|
64
|
+
- empty_view/assets/sky2.jpg
|
65
|
+
- empty_view/remote/assets/GIT_IS_DUMB
|
66
|
+
- empty_view/remote/etc/GIT_IS_DUMB
|
67
|
+
- empty_view/remote/navbar/GIT_IS_DUMB
|
68
|
+
- empty_view/remote/permalink/GIT_IS_DUMB
|
69
|
+
- empty_view/remote/widgets/links/list.data
|
70
|
+
- empty_view/remote/widgets/news/list.data
|
71
|
+
- empty_view/remote/widgets/pages/SUBFILES
|
72
|
+
- empty_view/remote/widgets/pages/list.data
|
73
|
+
- empty_view/themes/standard/README
|
74
|
+
- empty_view/themes/standard/blog/generate.lt3
|
75
|
+
- empty_view/themes/standard/blog/head.lt3
|
76
|
+
- empty_view/themes/standard/blog/index.lt3
|
77
|
+
- empty_view/themes/standard/blog/post_entry.lt3
|
78
|
+
- empty_view/themes/standard/etc/blog.css.lt3
|
79
|
+
- empty_view/themes/standard/etc/externals.lt3
|
80
|
+
- empty_view/themes/standard/etc/favicon.ico
|
81
|
+
- empty_view/themes/standard/etc/misc.js
|
82
|
+
- empty_view/themes/standard/global.lt3
|
83
|
+
- empty_view/themes/standard/navbar/about.lt3
|
84
|
+
- empty_view/themes/standard/navbar/contact.lt3
|
85
|
+
- empty_view/themes/standard/navbar/navbar.lt3
|
86
|
+
- empty_view/themes/standard/post/generate.lt3
|
87
|
+
- empty_view/themes/standard/post/head.lt3
|
88
|
+
- empty_view/themes/standard/post/index.lt3
|
89
|
+
- empty_view/themes/standard/post/permalink.lt3
|
90
|
+
- empty_view/themes/standard/widgets/README
|
91
|
+
- empty_view/themes/standard/widgets/ad/ad.lt3
|
92
|
+
- empty_view/themes/standard/widgets/calendar/calendar.lt3
|
93
|
+
- empty_view/themes/standard/widgets/links/links.lt3
|
94
|
+
- empty_view/themes/standard/widgets/links/list.data
|
95
|
+
- empty_view/themes/standard/widgets/news/list.data
|
96
|
+
- empty_view/themes/standard/widgets/news/news.lt3
|
97
|
+
- empty_view/themes/standard/widgets/pages/README
|
98
|
+
- empty_view/themes/standard/widgets/pages/disclaim.lt3
|
99
|
+
- empty_view/themes/standard/widgets/pages/faq.lt3
|
100
|
+
- empty_view/themes/standard/widgets/pages/like-dislike.lt3
|
101
|
+
- empty_view/themes/standard/widgets/pages/list.data
|
102
|
+
- empty_view/themes/standard/widgets/pages/local.rb
|
103
|
+
- empty_view/themes/standard/widgets/pages/other-stuff.lt3
|
104
|
+
- empty_view/themes/standard/widgets/pages/pages.lt3
|
105
|
+
- empty_view/themes/standard/widgets/tag-cloud/tag-cloud.lt3
|
65
106
|
- lib/Javascript.stuff
|
66
107
|
- lib/default.rb
|
67
108
|
- lib/global.rb
|
data/empty_view.tgz
DELETED
Binary file
|