runeblog 0.3.26 → 0.3.28

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