runeblog 0.2.34 → 0.2.39

Sign up to get free protection for your applications and to get access to all the features.
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