runeblog 0.3.26 → 0.3.28

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 646006af4da125dc3a6d968d76078b017e3b88d109a566e9e6b58cf90b24f91e
4
- data.tar.gz: 2c6de1ce325f0183ad07c72fd13f73464079c2939a0980d35aedaa339117b866
3
+ metadata.gz: c0f9a3b31f1adc96704b1781f04e2eb4227ca341ebc3f118a0ead49c3be65859
4
+ data.tar.gz: 573d4f8ba2778d476b9b327e1c994863745f1d643f6b633cc771d3d4b2872af6
5
5
  SHA512:
6
- metadata.gz: 3bf8be383a0b54359dfc55da15f33008348039de26d6ce79806c49db682c4015e6239a6cc0614dd50cc630de4e2df8d403e75c6b6640cd750fdf6f91d6d96ebd
7
- data.tar.gz: 551c4be7d6f9d3b89c4e9a681083fbb63598a8e885b2bf1fc86816cc469ae39319a08e68590a1740d30e234698f54e8ea4e8e54d03b477fccddbca4b45acbe26
6
+ metadata.gz: acaaf9714332878e5f60b26576c86286672f221717b8c66901749cf9e9e4a257baee45ec5a2fe42d1eea3c64746cd959d10bbba1b08828cb15075ca9af85ae40
7
+ data.tar.gz: 43b9c4d21d1c5d82f6c7e1b1ce291f304e1dd52f12b46b36200f4aebe2db127603b15ab1dcaca43cc8ea607a515263019abf20c4b88d8e0da620a41187639a9a
data/README.lt3 CHANGED
@@ -10,14 +10,16 @@
10
10
  <li>It's based on Livetext (highly extensible Ruby-based markup)</li>
11
11
  <li>It has the concept of multiple "views" for a blog</li>
12
12
  <li>The multiple views are in effect multiple blogs managed with the same backend.</li>
13
+ <li>Each view may have its own "look and feel" (and even be hosted on differing domains)</li>
13
14
  </ul>
14
15
 
15
16
 
16
17
 
17
18
  .h2 What is Livetext?
18
19
 
19
- Livetext is a markup format that is a throwback to the old, old days of text
20
- formatters such as ``nroff. It's very flexible, and it is extensible _[in Ruby].
20
+ Livetext is a markup format (media generator?) that is a throwback to the old,
21
+ old days of text formatters such as ``nroff. It's very flexible, and it is
22
+ extensible _[in Ruby].
21
23
 
22
24
  It is far from mature or full-featured, but it is usable. Runeblog uses Livetext,
23
25
  along with some custom definitions, to try to ease the formatting of a blog entry.
@@ -45,8 +47,8 @@ Any post can be in more than one view
45
47
  .h2 The <tt>blog</tt> environment
46
48
 
47
49
  There is a command-line tool called `blog which is a REPL (read-eval-print loop).
48
- Note that this tool is a curses-based environment (mainly so it can display menus
49
- and such to the user).
50
+ Note that this tool is a curses-based environment (mainly so that it can display
51
+ menus and such to the user).
50
52
 
51
53
  The help message looks like this:
52
54
 
@@ -57,7 +59,7 @@ The help message looks like this:
57
59
  <b>q, quit</b> Exit the program <b>cv VIEW</b> Change current view
58
60
  <b>v, version</b> Print version information <b>new view</b> Create a new view
59
61
  <b>clear</b> Clear screen <b>list views</b> List all views available
60
- <b>lsv</b> Same as: list views
62
+ <b>lsv</b> Same as: list views
61
63
  <br>
62
64
  <b>Posts:</b> <b>Advanced:</b>
63
65
  ------------------------------------------- -------------------------------------------
@@ -82,6 +84,7 @@ You'll then enter the editor (vim for now) to add configuration info to the `glo
82
84
 
83
85
  <!-- <pre><b>FIXME add menu screenshot here</b></pre> -->
84
86
  <!-- <pre><b>FIXME add vim screenshot here</b></pre> -->
87
+
85
88
  <img src="readme/vim-global.png" width="494" height="696" align="center"></img>
86
89
 
87
90
  The next thing you should do is to create at least one view of your own. Use the `[new view]
data/README.md CHANGED
@@ -44,6 +44,7 @@ But the important points are these:
44
44
  * Each view can have its own look and feel, and it can be linked/published separately from the others.
45
45
  * Each view can be hosted in a different location and/or a different server and domain
46
46
  * Any post can be in more than one view
47
+
47
48
  ## The <tt>blog</tt> environment
48
49
  There is a command-line tool called <font size=+1><tt>blog</tt></font> which is a REPL (read-eval-print loop).
49
50
  Note that this tool is a curses-based environment (mainly so it can display menus
@@ -60,7 +61,7 @@ The help message looks like this:
60
61
  <b>q, quit</b> Exit the program <b>cv VIEW</b> Change current view
61
62
  <b>v, version</b> Print version information <b>new view</b> Create a new view
62
63
  <b>clear</b> Clear screen <b>list views</b> List all views available
63
- <b>lsv</b> Same as: list views
64
+ <b>lsv</b> Same as: list views
64
65
  <br>
65
66
  <b>Posts:</b> <b>Advanced:</b>
66
67
  ------------------------------------------- -------------------------------------------
@@ -73,6 +74,7 @@ The help message looks like this:
73
74
  <b>edit ID</b> Edit a post <b>ssh</b> Login to remote server
74
75
  <b>import ASSETS</b> Import assets (images, etc.) <b>manage WIDGET</b> Manage content/layout of a widget
75
76
  </pre>
77
+
76
78
  ## Getting started
77
79
  But when you first run the REPL, it checks for an existing blog repository under
78
80
  the <font size=+1><tt>.blogs</tt></font> directory. If it doesn't find one, it asks whether you want to create
data/bin/blog CHANGED
@@ -87,7 +87,7 @@ def get_started
87
87
  end
88
88
 
89
89
  def mainloop
90
- info = @blog.view || "no view"
90
+ info = @blog.view.name rescue "No view"
91
91
  print fx("[#{info}] ", Red, :bold)
92
92
  cmd = STDSCR.gets(history: @cmdhist, tab: @tabcom, capture: [" "])
93
93
  case cmd
@@ -107,6 +107,8 @@ def mainloop
107
107
  puts "Don't understand '#{cmd.inspect}'\n "
108
108
  end
109
109
  rescue => err
110
+ # puts "----- ML_RESCUE err = #{err.inspect} VIEW = #{@blog.view.inspect}"
111
+ puts "----- ML_RESCUE err = #{err.inspect} "
110
112
  log!(str: err.to_s)
111
113
  log!(str: err.backtrace.join("\n")) if err.respond_to?(:backtrace)
112
114
  puts "Current dir = #{Dir.pwd}"
@@ -148,7 +150,7 @@ end
148
150
 
149
151
  def handle_cmdline
150
152
  cmd = ARGV[0]
151
- @blog = RuneBlog.new
153
+ @blog = RuneBlog.read # was .new
152
154
  abort "No blog found" if @blog.nil?
153
155
 
154
156
  case cmd
@@ -197,7 +199,7 @@ def create_new_repo?
197
199
  new_repo = true
198
200
  end
199
201
 
200
- @blog = RuneBlog.new
202
+ @blog = RuneBlog.read # was .new
201
203
  get_started if new_repo
202
204
  rescue => err
203
205
  STDERR.puts "Error - #{err.to_s}"
data/bin/blog.rb ADDED
@@ -0,0 +1,237 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # $LOAD_PATH << "./lib"
4
+
5
+ require 'runeblog'
6
+ require 'rubytext'
7
+
8
+ require 'menus'
9
+
10
+ require 'repl'
11
+
12
+ include RuneBlog::REPL
13
+
14
+ def yesno(question, noskip=false)
15
+ puts fx("\n #{question}", :bold)
16
+ puts unless noskip
17
+ STDSCR.yesno
18
+ end
19
+
20
+ def pick_editor
21
+ choices = %w[vim emacs vi nano]
22
+ r, c = STDSCR.rc
23
+ num, name = STDSCR.menu(r: r, c: c+6, title: "Default editor", items: choices)
24
+ file = `which #{name}`.chomp
25
+ end
26
+
27
+ def get_universal
28
+ univ = "#{@blog.root}/data/universal.lt3"
29
+ if yesno("Faster initial setup? (no: edit universal.lt3)")
30
+ # author = ask!(" Author name: ")
31
+ # site = ask!(" Site/domain: ")
32
+ # Temporarily, for speed:
33
+ author, site = "Hal Fulton", "somedomain.com"
34
+ puts " Author name: #{author}"
35
+ puts " Site/domain: #{site}"
36
+ # Now stash it...
37
+ str = File.read(univ)
38
+ str = str.gsub(/AUTHOR/, author)
39
+ str = str.gsub(/SITE_DOMAIN/, site)
40
+ File.write(univ, str)
41
+ else
42
+ vim_params = '-c ":set hlsearch" -c ":hi Search ctermfg=2 ctermbg=6" +/"\(AUTHOR.*\|SITE.*\)"'
43
+ edit_file(univ, vim: vim_params)
44
+ end
45
+ end
46
+
47
+ def get_global
48
+ view_name = ask!(" Filename: ")
49
+ @blog.create_view(view_name) # call change_view??
50
+ if yesno("Faster view setup? (no: edit global.lt3)")
51
+ title = ask!(" View title: ")
52
+ subtitle = ask!(" Subtitle : ")
53
+ domain = ask!(" Domain : ")
54
+ modify_view_global(view_name)
55
+ modify_view_settings(name: view_name, title: title, subtitle: subtitle,
56
+ domain: domain)
57
+ else
58
+ vim_params = '-c ":set hlsearch" -c ":hi Search ctermfg=2 ctermbg=6" +/"\(VIEW_.*\|SITE.*\)"'
59
+ edit_file(@blog.view.dir/"themes/standard/global.lt3", vim: vim_params)
60
+ end
61
+ end
62
+
63
+ def get_started
64
+ if yesno("Do you want to qo a quick setup?")
65
+ puts " First choose your editor."
66
+ @blog.editor = pick_editor
67
+ File.write("#{@blog.root}/data/EDITOR", @blog.editor)
68
+ print " Default editor is "
69
+ puts fx(@blog.editor, :bold)
70
+
71
+ get_universal
72
+ # Now create a custom global.lt3
73
+ @blog._generate_global
74
+ puts fx("\n Quick setup complete!", :bold)
75
+ if yesno("Create your first view now?")
76
+ get_global
77
+ puts fx("\n View #{@blog.view} created!\n ", :bold)
78
+ end
79
+ end
80
+
81
+ print fx(" For help", :bold); puts " type h or help."
82
+ print fx(" Create a view", :bold); puts " with: new view"
83
+ print fx(" Create a post", :bold); puts " (within current view): new post"
84
+ end
85
+
86
+ def mainloop
87
+ info = @blog.view || "no view"
88
+ print fx("[#{info}] ", Red, :bold)
89
+ cmd = STDSCR.gets(history: @cmdhist, tab: @tabcom, capture: [" "]).chomp
90
+ case cmd
91
+ when " ", RubyText::Keys::Escape
92
+ Dir.chdir(@blog.view.dir)
93
+ show_top_menu
94
+ puts
95
+ return
96
+ when RubyText::Keys::CtlD # ^D
97
+ cmd_quit
98
+ when String
99
+ return if cmd.empty? # CR does nothing
100
+ invoking = RuneBlog::REPL.choose_method(cmd)
101
+ ret = send(*invoking)
102
+ else
103
+ puts "Don't understand '#{cmd.inspect}'\n "
104
+ end
105
+ rescue => err
106
+ log!(str: err.to_s)
107
+ log!(str: err.backtrace.join("\n")) if err.respond_to?(:backtrace)
108
+ puts "Current dir = #{Dir.pwd}"
109
+ puts err
110
+ puts err.backtrace.join("\n")
111
+ puts "Pausing..."; gets
112
+ end
113
+
114
+ def cmdline_preview
115
+ _need_view
116
+ local = @blog.view.local_index
117
+ result = system("open #{local}")
118
+ end
119
+
120
+ def cmdline_publish
121
+ abort "Not implemented yet"
122
+ _need_view
123
+ end
124
+
125
+ def cmdline_browse
126
+ abort "Not implemented yet"
127
+ _need_view
128
+ end
129
+
130
+ def _need_view
131
+ @view = ARGV[1]
132
+ abort "Need 'view' parameter" if @view.nil?
133
+ abort "No such view '#{view}'" unless @blog.view?(@view)
134
+ end
135
+
136
+ def cmdline_rebuild
137
+ _need_view
138
+ print "Generating view... "
139
+ @blog.generate_view(@view)
140
+ print "Generating index... "
141
+ num = @blog.generate_index(@view)
142
+ puts "#{num} posts\n "
143
+ end
144
+
145
+ def handle_cmdline
146
+ cmd = ARGV[0]
147
+ @blog = RuneBlog.new
148
+ abort "No blog found" if @blog.nil?
149
+
150
+ case cmd
151
+ when "rebuild"; cmdline_rebuild
152
+ when "publish"; cmdline_publish
153
+ when "preview"; cmdline_preview
154
+ when "browse"; cmdline_browse
155
+ else
156
+ puts "Command '#{cmd}' is unknown"
157
+ end
158
+ exit
159
+ end
160
+
161
+ def check_ruby_version
162
+ major, minor = RUBY_VERSION.split(".").values_at(0,1)
163
+ ver = major.to_i*10 + minor.to_i
164
+ unless ver >= 24
165
+ RubyText.stop
166
+ sleep 0.2
167
+ puts "Needs Ruby 2.4 or greater"
168
+ exit
169
+ end
170
+ end
171
+
172
+ def reopen_stderr
173
+ errfile = File.new("stderr.out", "w")
174
+ STDERR.reopen(errfile)
175
+ end
176
+
177
+ def set_fgbg
178
+ # read a .rubytext file here?? Call it something else?
179
+ home = ENV['HOME']
180
+ @fg, @bg = Blue, White ## FIXME!! try_read_config("#{home}/.rubytext", fg: Blue, bg: White)
181
+ @fg = @fg.downcase.to_sym
182
+ @bg = @bg.downcase.to_sym
183
+
184
+ RubyText.start(:_echo, :keypad, scroll: true, log: "binblog.txt", fg: @fg, bg: @bg)
185
+ end
186
+
187
+ def create_new_repo?
188
+ new_repo = false
189
+ if ! RuneBlog.exist?
190
+ exit unless yesno("No blog repo found. Create new one?")
191
+ RuneBlog.create_new_blog_repo
192
+ puts fx(" Blog repo successfully created.", :bold)
193
+ new_repo = true
194
+ end
195
+
196
+ @blog = RuneBlog.new
197
+ get_started if new_repo
198
+ rescue => err
199
+ STDERR.puts "Error - #{err.to_s}"
200
+ STDERR.puts err.backtrace if err.respond_to?(:backtrace)
201
+ end
202
+
203
+ def print_intro
204
+ print fx(" For help", :bold)
205
+ puts " type h or help.\n "
206
+
207
+ puts fx("\n RuneBlog", :bold), fx(" v #{RuneBlog::VERSION}\n", Red)
208
+ end
209
+
210
+ def cmd_history_etc
211
+ @cmdhist = []
212
+ @tabcom = RuneBlog::REPL::Patterns.keys.uniq - RuneBlog::REPL::Abbr.keys
213
+ @tabcom.map! {|x| x.sub(/ [\$\>].*/, "") + " " }
214
+ @tabcom.sort!
215
+ end
216
+
217
+ def exit_repl
218
+ # RubyText.stop
219
+ sleep 0.2
220
+ puts
221
+ end
222
+
223
+ ### Main
224
+
225
+ include RuneBlog::Helpers # for try_read_config
226
+
227
+ reopen_stderr
228
+ check_ruby_version
229
+
230
+ handle_cmdline unless ARGV.empty?
231
+ set_fgbg
232
+ print_intro
233
+ create_new_repo?
234
+
235
+ cmd_history_etc
236
+ loop { mainloop }
237
+ exit_repl
data/data/global.lt3 CHANGED
@@ -15,6 +15,6 @@ charset utf-8
15
15
  url http://SITE
16
16
  locale en_US
17
17
 
18
- font.family verdana
18
+ font.family verdana
19
19
  .end
20
20
 
@@ -2,15 +2,12 @@ app_name = "raido1"
2
2
  app_client = "rAyZILgqGB7uHQ"
3
3
  secret = "0CqLXyFu6ABb1MrErWRsB7Bo-i8"
4
4
 
5
- https://www.reddit.com/api/v1/authorize?client_id=rAyZILgqGB7uHQ&response_type=code&state=abc237def&redirect_uri=http%3A%2F%2Frubyhacker.com&duration=permanent&scope=identity%20edit%20flair%20history%20modconfig%20modflair%20modlog%20modposts%20modwiki%20mysubreddits%20privatemessages%20read%20report%20save%20submit%20subscribe%20vote%20wikiedit%20wikiread
6
-
7
-
5
+ # https://www.reddit.com/api/v1/authorize?client_id=rAyZILgqGB7uHQ&response_type=code&state=abc237def&redirect_uri=http%3A%2F%2Frubyhacker.com&duration=permanent&scope=identity%20edit%20flair%20history%20modconfig%20modflair%20modlog%20modposts%20modwiki%20mysubreddits%20privatemessages%20read%20report%20save%20submit%20subscribe%20vote%20wikiedit%20wikiread
8
6
 
9
7
  require 'net/http'
10
8
  require 'uri'
11
9
  require 'json'
12
10
 
13
-
14
11
  =begin
15
12
  get_token = URI.parse("https://www.reddit.com/api/v1/access_token")
16
13
  data = {
@@ -20,8 +17,6 @@ data = {
20
17
  }
21
18
  =end
22
19
 
23
-
24
-
25
20
  uri = URI.parse("http://reddit.com/api/submit")
26
21
 
27
22
  header = {'Content-Type': 'text/json'}
data/lib/helpers-blog.rb CHANGED
@@ -24,7 +24,6 @@ module RuneBlog::Helpers
24
24
  dir = root/:views/view/:settings
25
25
  end
26
26
  file = dir/"features.txt"
27
- # puts "-- in #{Dir.pwd} trying to read #{file}"
28
27
  pairs = read_pairs(file)
29
28
  enabled = {}
30
29
  pairs.each {|k,v| enabled[k] = (v == "1") }
@@ -108,12 +107,6 @@ module RuneBlog::Helpers
108
107
  stop_RubyText rescue nil
109
108
  end
110
109
 
111
- def retrieve_views # read from filesystem
112
- log!(enter: __method__, level: 3)
113
- dirs = subdirs("#@root/views/").sort
114
- dirs.map {|name| RuneBlog::View.new(name) }
115
- end
116
-
117
110
  def write_repo_config(root: "#{Dir.pwd}/.blogs", view: nil, editor: "/usr/local/bin/vim")
118
111
  view ||= File.read("#{root}/data/VIEW").chomp rescue "[no view]"
119
112
  File.write(root + "/data/ROOT", root + "\n")