runeblog 0.2.34 → 0.2.39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. checksums.yaml +4 -4
  2. data/empty_view/assets/sky2.jpg +0 -0
  3. data/empty_view/remote/assets/GIT_IS_DUMB +1 -0
  4. data/empty_view/remote/etc/GIT_IS_DUMB +1 -0
  5. data/empty_view/remote/navbar/GIT_IS_DUMB +1 -0
  6. data/empty_view/remote/permalink/GIT_IS_DUMB +1 -0
  7. data/empty_view/remote/widgets/links/list.data +3 -0
  8. data/empty_view/remote/widgets/news/list.data +4 -0
  9. data/empty_view/remote/widgets/pages/list.data +4 -0
  10. data/empty_view/themes/standard/README +59 -0
  11. data/empty_view/themes/standard/blog/generate.lt3 +37 -0
  12. data/empty_view/themes/standard/blog/head.lt3 +16 -0
  13. data/empty_view/themes/standard/blog/index.lt3 +17 -0
  14. data/empty_view/themes/standard/blog/post_entry.lt3 +22 -0
  15. data/empty_view/themes/standard/etc/blog.css.lt3 +43 -0
  16. data/empty_view/themes/standard/etc/externals.lt3 +24 -0
  17. data/empty_view/themes/standard/etc/favicon.ico +0 -0
  18. data/empty_view/themes/standard/etc/misc.js +8 -0
  19. data/empty_view/themes/standard/global.lt3 +35 -0
  20. data/empty_view/themes/standard/navbar/about.lt3 +18 -0
  21. data/empty_view/themes/standard/navbar/contact.lt3 +18 -0
  22. data/empty_view/themes/standard/navbar/navbar.lt3 +16 -0
  23. data/empty_view/themes/standard/post/generate.lt3 +30 -0
  24. data/empty_view/themes/standard/post/head.lt3 +7 -0
  25. data/empty_view/themes/standard/post/index.lt3 +24 -0
  26. data/empty_view/themes/standard/post/permalink.lt3 +32 -0
  27. data/empty_view/themes/standard/widgets/README +4 -0
  28. data/empty_view/themes/standard/widgets/ad/ad.lt3 +15 -0
  29. data/empty_view/themes/standard/widgets/calendar/calendar.lt3 +6 -0
  30. data/empty_view/themes/standard/widgets/links/links.lt3 +2 -0
  31. data/empty_view/themes/standard/widgets/links/list.data +3 -0
  32. data/empty_view/themes/standard/widgets/news/list.data +4 -0
  33. data/empty_view/themes/standard/widgets/news/news.lt3 +2 -0
  34. data/empty_view/themes/standard/widgets/pages/README +2 -0
  35. data/empty_view/themes/standard/widgets/pages/disclaim.lt3 +10 -0
  36. data/empty_view/themes/standard/widgets/pages/faq.lt3 +9 -0
  37. data/empty_view/themes/standard/widgets/pages/like-dislike.lt3 +11 -0
  38. data/empty_view/themes/standard/widgets/pages/list.data +4 -0
  39. data/empty_view/themes/standard/widgets/pages/local.rb +0 -0
  40. data/empty_view/themes/standard/widgets/pages/other-stuff.lt3 +10 -0
  41. data/empty_view/themes/standard/widgets/pages/pages.lt3 +2 -0
  42. data/empty_view/themes/standard/widgets/pages/pages.rb +21 -0
  43. data/empty_view/themes/standard/widgets/pages/pieces/card-head.lt3 +1 -0
  44. data/empty_view/themes/standard/widgets/pages/pieces/card-tail.lt3 +1 -0
  45. data/empty_view/themes/standard/widgets/pages/pieces/card.css +1 -0
  46. data/empty_view/themes/standard/widgets/pages/pieces/main-head.lt3 +8 -0
  47. data/empty_view/themes/standard/widgets/pages/pieces/main-tail.lt3 +2 -0
  48. data/empty_view/themes/standard/widgets/pages/pieces/main.css +1 -0
  49. data/empty_view/themes/standard/widgets/tag-cloud/tag-cloud.lt3 +12 -0
  50. data/lib/helpers-repl.rb +4 -2
  51. data/lib/liveblog.rb +61 -7
  52. data/lib/publish.rb +0 -10
  53. data/lib/repl.rb +34 -21
  54. data/lib/runeblog.rb +4 -7
  55. data/lib/runeblog_version.rb +1 -1
  56. data/lib/view.rb +1 -1
  57. data/lib/xlate.rb +5 -0
  58. data/runeblog.gemspec +2 -2
  59. data/test/general_test.rb +0 -1
  60. metadata +49 -2
  61. data/empty_view.tgz +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 31cb042c2e6bebe0faa230063ffafe7ee7c43a8a0cf0011d9600657a0caa3f04
4
- data.tar.gz: cc1c14af581ec7b3817b4e73556778bd4a483fc676be5f7a051df250bfb17be4
3
+ metadata.gz: caacbdabded61281f3fd6cab3f627a5b014e896381f2b73e070f0aa64630b4d7
4
+ data.tar.gz: e1d37b1f874ef57568d710ab90a93977491327b40d140987f9a120ad87fb4642
5
5
  SHA512:
6
- metadata.gz: c6be26fb941033a3d737a17825ef64b5f3fbb188d227b4f5f6f22eff1e5a98cfc35857218f75ed5b0e6377cfd99c6df79f20853b3c602195c58a54e4aca681fe
7
- data.tar.gz: 981e83cbaeeb52325c3c60f134b5e8d637907729e2ad8b8119fe2460599c9cf9668c762b8d24110c44c98fc78074c49c89d3bec3e8d3770f370f685810cc8f89
6
+ metadata.gz: ed10a449202c4ca21d228d11eea08aa6c65693c3dd9e81498a368b0a362f341726a141fc878e31c7cf07573c1858d6aa70cdbb08fcb29043d62cd734153dffe3
7
+ data.tar.gz: a95f146d7bb55ae8a115f495423c0287453e8cdb0335c3615c5cfae4d77c842cb417bc1f763d972f2b241d6ac7f463e3b823be1789bb5b026f49745680b261d2
@@ -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,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,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,21 @@
1
+ # Custom code for 'pages' widget
2
+
3
+ # How to update repl code?
4
+
5
+ class ::RuneBlog::Widget
6
+ class Pages
7
+ def self.build
8
+ children = Dir["*.lt3"] - ["pages.lt3"]
9
+ children.each do |child|
10
+ dest = child.sub(/.lt3$/, ".html")
11
+ xlate src: child, dst: dest, debug: true
12
+ end
13
+ end
14
+
15
+ def self.edit_menu
16
+ end
17
+
18
+ def self.refresh
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,8 @@
1
+ .set card.title=Pages
2
+
3
+ <html>
4
+ <head>
5
+ <style src="main.css"></style>
6
+ </head>
7
+ <body>
8
+ <h1>$card.title</h1>
@@ -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
+
@@ -40,7 +40,9 @@ module RuneBlog::REPL
40
40
  "list assets" => :cmd_list_assets,
41
41
  "lsa" => :cmd_list_assets,
42
42
 
43
- "delete >postid" => :cmd_remove_post,
43
+ "pages" => :cmd_pages,
44
+
45
+ "delete >postid" => :cmd_remove_post,
44
46
  "undel $postid" => :cmd_undelete_post,
45
47
 
46
48
  "edit $postid" => :cmd_edit_post,
@@ -103,7 +105,7 @@ module RuneBlog::REPL
103
105
  end
104
106
  meth = found || :cmd_INVALID
105
107
  params = cmd if meth == :cmd_INVALID
106
- puts "choose: #{[meth, params].inspect}"
108
+ # puts "choose: #{[meth, params].inspect}"
107
109
  [meth, params]
108
110
  end
109
111
 
@@ -319,6 +319,21 @@ def recent_posts # side-effect
319
319
  HTML
320
320
  end
321
321
 
322
+ def _load_local(widget)
323
+ Dir.chdir("widgets/#{widget}") do
324
+ # STDERR.puts "loadCP1 widget = #{widget.inspect} pwd = #{Dir.pwd}"
325
+ found = (require("./#{widget}") if File.exist?("#{widget}.rb"))
326
+ # STDERR.puts "loadCP2 found = #{found}"
327
+ code = found ? ::RuneBlog::Widget.class_eval(widget.capitalize) : nil
328
+ # STDERR.puts "loadCP3 code = #{code.inspect}"
329
+ code
330
+ end
331
+ rescue => err
332
+ STDOUT.puts err
333
+ STDOUT.puts err.backtrace.join("\n")
334
+ exit
335
+ end
336
+
322
337
  def sidebar
323
338
  if _args.include? "off"
324
339
  _body { } # iterate, do nothing
@@ -331,17 +346,25 @@ def sidebar
331
346
  wtag = :widgets/tag
332
347
  raise "Can't find #{wtag}" unless Dir.exist?(wtag)
333
348
  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
349
+
350
+ code = _load_local(tag)
351
+ code && Dir.chdir(wtag) { code.build }
352
+
353
+ # if File.exist?(wtag/"SUBFILES")
354
+ # children = Dir[wtag/"*.lt3"] - [wtag/tag+".lt3"]
355
+ # children.each do |child|
356
+ # dest = child.sub(/.lt3$/, ".html")
357
+ # xlate src: child, dst: dest # , debug: true
358
+ # end
359
+ # end
341
360
  xlate cwd: wtag, src: tag, dst: tcard # , debug: true
342
361
  _include_file wtag/tcard
343
362
  end
344
363
  _out %[</div>]
364
+ rescue => err
365
+ puts "err = #{err}"
366
+ puts err.backtrace.join("\n")
367
+ exit
345
368
  end
346
369
 
347
370
  def stylesheet
@@ -606,9 +629,40 @@ def page_type(tag, title)
606
629
  end
607
630
  end
608
631
 
632
+ def _write_main_pages(mainfile, pairs, card_title, tag)
633
+ local = _local_tag?(tag)
634
+ pieces = @blog.view.dir/"themes/standard/widgets"/tag/:pieces
635
+ main_head = xlate! cwd: pieces, src: "main-head.lt3"
636
+ main_tail = xlate! cwd: pieces, src: "main-tail.lt3"
637
+ # ^ make into methods in pages.rb or whatever?
638
+
639
+ File.open("#{mainfile}.html", "w") do |f|
640
+ f.puts main_head
641
+ pairs.each do |file, title|
642
+ type, title = page_type(tag, title)
643
+ title = title.gsub(/\\/, "") # kludge
644
+ case type
645
+ when :local; url_ref = _widget_main(file, tag) # local always frameable
646
+ when :frame; url_ref = "href = '#{file}'" # local always frameable
647
+ when :noframe; url_ref = _blank(file) # local always frameable
648
+ end
649
+ css = "color: #8888FF; text-decoration: none; font-size: 24px; font-family: verdana"
650
+ f.puts %[<a style="#{css}" #{url_ref}>#{title}</a> <br>]
651
+ end
652
+ f.puts main_tail
653
+ end
654
+ end
655
+
609
656
  def _write_main(mainfile, pairs, card_title, tag)
610
657
  log!(str: "Creating #{mainfile}.html", pwd: true)
658
+
659
+ if tag == "pages" # temporary experiment
660
+ _write_main_pages(mainfile, pairs, card_title, tag)
661
+ return
662
+ end
663
+
611
664
  local = _local_tag?(tag)
665
+ setvar "card.title", card_title
612
666
  File.open("#{mainfile}.html", "w") do |f|
613
667
  _html_body(f) do
614
668
  f.puts "<h1>#{card_title}</h1>"
@@ -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)
@@ -143,6 +155,7 @@ module RuneBlog::REPL
143
155
  n = viewnames.find_index(@blog.view.name)
144
156
  name = @blog.view.name
145
157
  k, name = STDSCR.menu(title: "Views", items: viewnames, curr: n) unless testing
158
+ return if name.nil?
146
159
  @blog.view = name
147
160
  output name + "\n"
148
161
  puts "\n ", fx(name, :bold), "\n" unless testing
@@ -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)
@@ -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.34"
5
+ VERSION = "0.2.39"
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
@@ -35,3 +35,8 @@ LEXT = ".lt3"
35
35
  end
36
36
  end
37
37
 
38
+ def xlate!(cwd: Dir.pwd, src:, copy: nil, debug: false, force: false)
39
+ output = "/tmp/xlate-#{File.basename(src).sub(/.lt3$/, "")}"
40
+ xlate cwd: cwd, src: src, dst: output, debug: debug, force: force
41
+ File.read(output + ".html") # return all content as string
42
+ 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.34
4
+ version: 0.2.39
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hal Fulton
@@ -61,7 +61,54 @@ 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/list.data
72
+ - empty_view/themes/standard/README
73
+ - empty_view/themes/standard/blog/generate.lt3
74
+ - empty_view/themes/standard/blog/head.lt3
75
+ - empty_view/themes/standard/blog/index.lt3
76
+ - empty_view/themes/standard/blog/post_entry.lt3
77
+ - empty_view/themes/standard/etc/blog.css.lt3
78
+ - empty_view/themes/standard/etc/externals.lt3
79
+ - empty_view/themes/standard/etc/favicon.ico
80
+ - empty_view/themes/standard/etc/misc.js
81
+ - empty_view/themes/standard/global.lt3
82
+ - empty_view/themes/standard/navbar/about.lt3
83
+ - empty_view/themes/standard/navbar/contact.lt3
84
+ - empty_view/themes/standard/navbar/navbar.lt3
85
+ - empty_view/themes/standard/post/generate.lt3
86
+ - empty_view/themes/standard/post/head.lt3
87
+ - empty_view/themes/standard/post/index.lt3
88
+ - empty_view/themes/standard/post/permalink.lt3
89
+ - empty_view/themes/standard/widgets/README
90
+ - empty_view/themes/standard/widgets/ad/ad.lt3
91
+ - empty_view/themes/standard/widgets/calendar/calendar.lt3
92
+ - empty_view/themes/standard/widgets/links/links.lt3
93
+ - empty_view/themes/standard/widgets/links/list.data
94
+ - empty_view/themes/standard/widgets/news/list.data
95
+ - empty_view/themes/standard/widgets/news/news.lt3
96
+ - empty_view/themes/standard/widgets/pages/README
97
+ - empty_view/themes/standard/widgets/pages/disclaim.lt3
98
+ - empty_view/themes/standard/widgets/pages/faq.lt3
99
+ - empty_view/themes/standard/widgets/pages/like-dislike.lt3
100
+ - empty_view/themes/standard/widgets/pages/list.data
101
+ - empty_view/themes/standard/widgets/pages/local.rb
102
+ - empty_view/themes/standard/widgets/pages/other-stuff.lt3
103
+ - empty_view/themes/standard/widgets/pages/pages.lt3
104
+ - empty_view/themes/standard/widgets/pages/pages.rb
105
+ - empty_view/themes/standard/widgets/pages/pieces/card-head.lt3
106
+ - empty_view/themes/standard/widgets/pages/pieces/card-tail.lt3
107
+ - empty_view/themes/standard/widgets/pages/pieces/card.css
108
+ - empty_view/themes/standard/widgets/pages/pieces/main-head.lt3
109
+ - empty_view/themes/standard/widgets/pages/pieces/main-tail.lt3
110
+ - empty_view/themes/standard/widgets/pages/pieces/main.css
111
+ - empty_view/themes/standard/widgets/tag-cloud/tag-cloud.lt3
65
112
  - lib/Javascript.stuff
66
113
  - lib/default.rb
67
114
  - lib/global.rb
Binary file