runeblog 0.2.33 → 0.2.38

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/bin/blog +1 -1
  3. data/empty_view/assets/sky2.jpg +0 -0
  4. data/empty_view/remote/assets/GIT_IS_DUMB +1 -0
  5. data/empty_view/remote/etc/GIT_IS_DUMB +1 -0
  6. data/empty_view/remote/navbar/GIT_IS_DUMB +1 -0
  7. data/empty_view/remote/permalink/GIT_IS_DUMB +1 -0
  8. data/empty_view/remote/widgets/links/list.data +3 -0
  9. data/empty_view/remote/widgets/news/list.data +4 -0
  10. data/empty_view/remote/widgets/pages/SUBFILES +1 -0
  11. data/empty_view/remote/widgets/pages/list.data +4 -0
  12. data/empty_view/themes/standard/README +59 -0
  13. data/empty_view/themes/standard/blog/generate.lt3 +37 -0
  14. data/empty_view/themes/standard/blog/head.lt3 +16 -0
  15. data/empty_view/themes/standard/blog/index.lt3 +17 -0
  16. data/empty_view/themes/standard/blog/post_entry.lt3 +22 -0
  17. data/empty_view/themes/standard/etc/blog.css.lt3 +43 -0
  18. data/empty_view/themes/standard/etc/externals.lt3 +24 -0
  19. data/empty_view/themes/standard/etc/favicon.ico +0 -0
  20. data/empty_view/themes/standard/etc/misc.js +8 -0
  21. data/empty_view/themes/standard/global.lt3 +35 -0
  22. data/empty_view/themes/standard/navbar/about.lt3 +18 -0
  23. data/empty_view/themes/standard/navbar/contact.lt3 +18 -0
  24. data/empty_view/themes/standard/navbar/navbar.lt3 +16 -0
  25. data/empty_view/themes/standard/post/generate.lt3 +30 -0
  26. data/empty_view/themes/standard/post/head.lt3 +7 -0
  27. data/empty_view/themes/standard/post/index.lt3 +24 -0
  28. data/empty_view/themes/standard/post/permalink.lt3 +32 -0
  29. data/empty_view/themes/standard/widgets/README +4 -0
  30. data/empty_view/themes/standard/widgets/ad/ad.lt3 +15 -0
  31. data/empty_view/themes/standard/widgets/calendar/calendar.lt3 +6 -0
  32. data/empty_view/themes/standard/widgets/links/links.lt3 +2 -0
  33. data/empty_view/themes/standard/widgets/links/list.data +3 -0
  34. data/empty_view/themes/standard/widgets/news/list.data +4 -0
  35. data/empty_view/themes/standard/widgets/news/news.lt3 +2 -0
  36. data/empty_view/themes/standard/widgets/pages/README +2 -0
  37. data/empty_view/themes/standard/widgets/pages/disclaim.lt3 +10 -0
  38. data/empty_view/themes/standard/widgets/pages/faq.lt3 +9 -0
  39. data/empty_view/themes/standard/widgets/pages/like-dislike.lt3 +11 -0
  40. data/empty_view/themes/standard/widgets/pages/list.data +4 -0
  41. data/empty_view/themes/standard/widgets/pages/local.rb +8 -0
  42. data/empty_view/themes/standard/widgets/pages/other-stuff.lt3 +10 -0
  43. data/empty_view/themes/standard/widgets/pages/pages.lt3 +2 -0
  44. data/empty_view/themes/standard/widgets/tag-cloud/tag-cloud.lt3 +12 -0
  45. data/lib/helpers-repl.rb +4 -6
  46. data/lib/liveblog.rb +24 -7
  47. data/lib/publish.rb +0 -10
  48. data/lib/repl.rb +48 -56
  49. data/lib/runeblog.rb +12 -13
  50. data/lib/runeblog_version.rb +1 -1
  51. data/lib/view.rb +1 -1
  52. data/runeblog.gemspec +2 -2
  53. data/test/general_test.rb +0 -1
  54. metadata +43 -2
  55. data/empty_view.tgz +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c75004d0736a0ca8b5f5b966ef4d0d3fc7933bea56aea2e88e3d4394b2d4b8e2
4
- data.tar.gz: 35dbe2cb026e4f00113557725d2e7ab9dea3b368815963dd01ebf2ef4bd09e03
3
+ metadata.gz: 703ba416efcf4467ac20d3a9e37084c49004b48fae50adeb25beb1ec013a4d0a
4
+ data.tar.gz: ac0c5e8a64578169f7faa3c729baaecb6a83ea28d9639d8ea74b49b42ada943a
5
5
  SHA512:
6
- metadata.gz: 2691134fb525279a2a89a5b45c2e802106ec6c43418ff3985d5c99c3b9d068a4128c37be251de9e46e34670b4a7096418663cb14f40731158b0f863f8e320b83
7
- data.tar.gz: e08bc25caf4db3ba85785fe59bd3d715dd8f7fcc002268e5784fa20e9cf695c7353a73b8f1ec988be0ef5368db4c4a3db3ae4bbb732cf7c762dcb310963da6c3
6
+ metadata.gz: 8080cbdaedbb3795cf8f3c1e3fef03ed44633423d41471bc7a8632f57b65ca9a01a82843a4324a75abd1e9b241db5f9b3d47c21f09ef23788cc86a240083bd8e
7
+ data.tar.gz: d4abe4cc7ea9af24a93416a567e6286fa4a3b8cfe6356c4e633337bff1413f9fab83e3ca60d1cea6790aa50cfca2e12593dbf7fdb392011ff86c30545c10cb41
data/bin/blog CHANGED
@@ -24,7 +24,7 @@ TEXT
24
24
  end
25
25
 
26
26
  def mainloop
27
- print fx("blog> ", Red, :bold)
27
+ print fx("#{@blog.view}> ", Red, :bold)
28
28
  cmd = STDSCR.gets(history: @cmdhist, tab: @tabcom)
29
29
  cmd_quit(nil) if cmd.nil? # ^D
30
30
  cmd.chomp!
@@ -0,0 +1,3 @@
1
+ https://www.mensa.org, no, Mensa International
2
+ http://space.com, yes, Space.com: NASA, Space Exploration and Astronomy News
3
+ https://arstechnica.com, no, Ars Technica
@@ -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,4 @@
1
+ faq.html,Frequently Asked Questions
2
+ like-dislike.html,Likes and Dislikes
3
+ disclaim.html,Disclaimer
4
+ lifestory.html,My Life Story
@@ -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
@@ -0,0 +1,8 @@
1
+ <!-- Miscellaneous local JS pieces are defined here -->
2
+
3
+ <script>
4
+ function open_main(url) {
5
+ var site = url+'?toolbar=0&amp;navpanes=0&amp;scrollbar=0';
6
+ document.getElementById('main').src = site;
7
+ }
8
+ </script>
@@ -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,7 @@
1
+ . --------------------------------------------------
2
+ . This file is currently unused and may go away.
3
+ . It is intended to manage the <HEAD> for a post (as
4
+ . opposed to the entire blog).
5
+ . --------------------------------------------------
6
+
7
+ . To be done...
@@ -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,4 @@
1
+ bydates Browse blog entries for past dates
2
+ links List of links (typically offsite)
3
+ pages List of pages (my own local stuff)
4
+ search Search posts by tag, title, body, etc.
@@ -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,6 @@
1
+
2
+ .card_iframe Calendar
3
+ https://calendar.google.com/calendar/embed?src=en-gb.indian%23holiday%40group.v.calendar.google.com&ctz=Asia%2FKolkata
4
+ height="350"
5
+ .end
6
+
@@ -0,0 +1,2 @@
1
+ .mixin liveblog
2
+ .make_main_links links Links (to Elsewhere)
@@ -0,0 +1,3 @@
1
+ https://www.mensa.org, no, Mensa International
2
+ http://space.com, yes, Space.com: NASA, Space Exploration and Astronomy News
3
+ https://arstechnica.com, no, Ars Technica
@@ -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,2 @@
1
+ .mixin liveblog
2
+ .make_main_links news Recent News
@@ -0,0 +1,2 @@
1
+ This is a work in progress...
2
+
@@ -0,0 +1,10 @@
1
+ .mixin liveblog
2
+
3
+ <h2>Disclaimer</h2>
4
+
5
+ This is just a
6
+ dummy file
7
+
8
+ disclaimer, blah blah
9
+
10
+ .backlink
@@ -0,0 +1,9 @@
1
+ .mixin liveblog
2
+
3
+ <h2>Frequently Asked Questions</h2>
4
+
5
+ This is
6
+ just a
7
+ FAAAAAQ....
8
+
9
+ .backlink
@@ -0,0 +1,11 @@
1
+ .mixin liveblog
2
+
3
+ <h2>My Likes and Dislikes</h2>
4
+
5
+ This is
6
+ stuff that I
7
+ like
8
+ and
9
+ dislike...
10
+
11
+ .backlink
@@ -0,0 +1,4 @@
1
+ faq.html,Frequently Asked Questions
2
+ like-dislike.html,Likes and Dislikes
3
+ disclaim.html,Disclaimer
4
+ other-stuff.html,Other Stuff
@@ -0,0 +1,8 @@
1
+ # Custom code for 'pages' widget
2
+
3
+ children = Dir["*.lt3"] - ["pages.lt3"]
4
+ children.each do |child|
5
+ dest = child.sub(/.lt3$/, ".html")
6
+ xlate src: child, dst: dest # , debug: true
7
+ end
8
+
@@ -0,0 +1,10 @@
1
+ .mixin liveblog
2
+
3
+ <h2>Other Stuff</h2>
4
+
5
+ This is
6
+ just
7
+ some
8
+ other stuff...
9
+
10
+ .backlink
@@ -0,0 +1,2 @@
1
+ .mixin liveblog
2
+ .make_main_links pages Pages
@@ -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
+
@@ -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
- "rm $postid" => :cmd_remove_post,
45
- "undel $postid" => :cmd_undelete_post,
43
+ "pages" => :cmd_pages,
46
44
 
47
- "kill >postid" => :cmd_kill,
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
 
@@ -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
- if File.exist?(wtag/"SUBFILES")
335
- children = Dir[wtag/"*.lt3"] - [wtag/tag+".lt3"]
336
- children.each do |child|
337
- dest = child.sub(/.lt3$/, ".html")
338
- xlate src: child, dst: dest # , debug: true
339
- end
340
- end
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
@@ -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] }
@@ -36,28 +36,40 @@ module RuneBlog::REPL
36
36
  @out
37
37
  end
38
38
 
39
- def cmd_config(arg, testing = false)
39
+ def cmd_pages(arg, testing = false)
40
40
  check_empty(arg)
41
- dir = @blog.view.dir
42
- items = ["themes/standard/blogview.lt3", "themes/standard/post-index.lt3"]
43
- num, fname = STDSCR.menu(title: "Edit file:", items: items)
44
- edit_file("#{dir}/#{fname}")
45
- end
46
-
47
- # Currently not used
48
- def cmd_customize(arg, testing = false)
49
- # add extra views? add tags?
50
- puts "\n This is still buggy.\n "
51
- return
52
-
53
- avail_tags = all_tags
54
- tags = STDSCR.multimenu(items: avail_tags)
55
- @blog.post_tags = tags
56
- end
57
-
58
- def cmd_tags(arg, testing = false)
59
- Dir.chdir(@blog.root + "/views/" + @blog.view.name)
60
- edit_file("tagpool")
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
- files = @blog.find_draft_slugs
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 cmd_kill(arg, testing = false)
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 = cmd_remove_post(x.to_i, false)
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
- config Edit the publish file or the templates
361
- customize (BUGGY) Change set of tags, extra views
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
- import ASSETS Import assets (images, etc.)
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
- rm ID Remove a post
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
@@ -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
- cmd1 = "tar zxvf empty_view.tgz >/dev/null 2>&1"
236
- cmd2 = "cp -r empty_view views/#{view_name}"
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}/ }
@@ -2,7 +2,7 @@
2
2
  if ! (Object.constants.include?(:RuneBlog) && RuneBlog.constants.include?(:Path))
3
3
 
4
4
  class RuneBlog
5
- VERSION = "0.2.33"
5
+ VERSION = "0.2.38"
6
6
 
7
7
  path = Gem.find_files("runeblog").grep(/runeblog-/).first
8
8
  Path = File.dirname(path)
@@ -61,7 +61,7 @@ class RuneBlog::View
61
61
 
62
62
  def recent?(file)
63
63
  log!(enter: __method__, args: [file])
64
- File.mtime(file) > File.mtime("#{dir()}/last_published")
64
+ File.mtime(file) > File.mtime("#{self.dir()}/last_published")
65
65
  rescue
66
66
  true
67
67
  end
@@ -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 + ["empty_view.tgz"]
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
@@ -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.33
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.tgz
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
Binary file