runeblog 0.3.02
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 +7 -0
- data/README.lt3 +279 -0
- data/README.md +312 -0
- data/bin/blog +200 -0
- data/bin/mkwidget +164 -0
- data/data/EDITOR +1 -0
- data/data/ROOT +1 -0
- data/data/VIEW +1 -0
- data/data/features.txt +18 -0
- data/data/global.lt3 +20 -0
- data/data/universal.lt3 +18 -0
- data/empty_view/assets/austin-pano.jpg +0 -0
- data/empty_view/assets/sky2.jpg +0 -0
- data/empty_view/config/exper/2svg.lt3 +38 -0
- data/empty_view/config/exper/gen_svg.rb +60 -0
- data/empty_view/config/exper/meta.html +10 -0
- data/empty_view/config/exper/s2.html +25 -0
- data/empty_view/config/exper/varmint.rb +50 -0
- data/empty_view/config/facebook/credentials.txt +7 -0
- data/empty_view/config/facebook/facebook.rb +42 -0
- data/empty_view/config/facebook/fb.html +10 -0
- data/empty_view/config/facebook/fb.js.lt3 +15 -0
- data/empty_view/config/reddit/credentials.txt +6 -0
- data/empty_view/config/reddit/notes.txt +4 -0
- data/empty_view/config/reddit/reddit_post_url.py +34 -0
- data/empty_view/config/reddit/redpost.rb +43 -0
- data/empty_view/config/reddit/the-graffiti-wall.html +91 -0
- data/empty_view/config/twitter/credentials.txt +3 -0
- data/empty_view/config/twitter/tw.html +12 -0
- data/empty_view/config/twitter/tw.js +5 -0
- data/empty_view/config/twitter/twitter.rb +35 -0
- data/empty_view/posts/GIT_IS_DUMB +1 -0
- data/empty_view/remote/assets/GIT_IS_DUMB +1 -0
- data/empty_view/remote/banner/navbar/GIT_IS_DUMB +0 -0
- data/empty_view/remote/etc/GIT_IS_DUMB +1 -0
- data/empty_view/remote/permalink/GIT_IS_DUMB +1 -0
- data/empty_view/remote/widgets/ad/GIT_IS_DUMB +2 -0
- data/empty_view/remote/widgets/links/GIT_IS_DUMB +2 -0
- data/empty_view/remote/widgets/news/GIT_IS_DUMB +2 -0
- data/empty_view/remote/widgets/pages/GIT_IS_DUMB +2 -0
- data/empty_view/remote/widgets/pinned/GIT_IS_DUMB +2 -0
- data/empty_view/settings/features.txt +18 -0
- data/empty_view/settings/publish.txt +5 -0
- data/empty_view/settings/recent.txt +6 -0
- data/empty_view/settings/view.txt +4 -0
- data/empty_view/themes/standard/README +59 -0
- data/empty_view/themes/standard/banner/banner.lt3 +5 -0
- data/empty_view/themes/standard/banner/navbar/about.lt3 +18 -0
- data/empty_view/themes/standard/banner/navbar/contact.lt3 +18 -0
- data/empty_view/themes/standard/banner/navbar/faq.lt3 +1 -0
- data/empty_view/themes/standard/banner/navbar/list.data +3 -0
- data/empty_view/themes/standard/banner/top.lt3 +20 -0
- data/empty_view/themes/standard/blog/generate.lt3 +21 -0
- data/empty_view/themes/standard/blog/head.lt3 +16 -0
- data/empty_view/themes/standard/blog/index.lt3 +17 -0
- data/empty_view/themes/standard/blog/post_entry.lt3 +21 -0
- data/empty_view/themes/standard/etc/blog.css.lt3 +62 -0
- data/empty_view/themes/standard/etc/externals.lt3 +24 -0
- data/empty_view/themes/standard/etc/favicon.ico +0 -0
- data/empty_view/themes/standard/etc/misc.js +20 -0
- data/empty_view/themes/standard/post/generate.lt3 +38 -0
- data/empty_view/themes/standard/post/head.lt3 +7 -0
- data/empty_view/themes/standard/post/index.lt3 +24 -0
- data/empty_view/themes/standard/post/permalink.lt3 +32 -0
- data/empty_view/themes/standard/widgets/README +4 -0
- data/empty_view/themes/standard/widgets/ad/ad.lt3 +22 -0
- data/empty_view/themes/standard/widgets/ad/ad1.png +0 -0
- data/empty_view/themes/standard/widgets/ad/ad2.png +0 -0
- data/empty_view/themes/standard/widgets/ad/ad3.png +0 -0
- data/empty_view/themes/standard/widgets/ad/ad4.png +0 -0
- data/empty_view/themes/standard/widgets/bydates/README +2 -0
- data/empty_view/themes/standard/widgets/bydates/bydates.rb +18 -0
- data/empty_view/themes/standard/widgets/bydates/card.css +1 -0
- data/empty_view/themes/standard/widgets/bydates/custom.rb +1 -0
- data/empty_view/themes/standard/widgets/bydates/main.css +2 -0
- data/empty_view/themes/standard/widgets/links/README +2 -0
- data/empty_view/themes/standard/widgets/links/card.css +1 -0
- data/empty_view/themes/standard/widgets/links/custom.rb +1 -0
- data/empty_view/themes/standard/widgets/links/links.rb +90 -0
- data/empty_view/themes/standard/widgets/links/list.data +3 -0
- data/empty_view/themes/standard/widgets/links/main.css +2 -0
- data/empty_view/themes/standard/widgets/news/README +2 -0
- data/empty_view/themes/standard/widgets/news/card.css +1 -0
- data/empty_view/themes/standard/widgets/news/custom.rb +1 -0
- data/empty_view/themes/standard/widgets/news/list.data +4 -0
- data/empty_view/themes/standard/widgets/news/main.css +2 -0
- data/empty_view/themes/standard/widgets/news/news.rb +88 -0
- data/empty_view/themes/standard/widgets/pages/README +2 -0
- data/empty_view/themes/standard/widgets/pages/card.css +1 -0
- data/empty_view/themes/standard/widgets/pages/custom.rb +1 -0
- data/empty_view/themes/standard/widgets/pages/disclaim.lt3 +10 -0
- data/empty_view/themes/standard/widgets/pages/faq.lt3 +40 -0
- data/empty_view/themes/standard/widgets/pages/like-dislike.lt3 +11 -0
- data/empty_view/themes/standard/widgets/pages/list.data +4 -0
- data/empty_view/themes/standard/widgets/pages/local.rb +0 -0
- data/empty_view/themes/standard/widgets/pages/main.css +2 -0
- data/empty_view/themes/standard/widgets/pages/other-stuff.lt3 +10 -0
- data/empty_view/themes/standard/widgets/pages/pages.rb +95 -0
- data/empty_view/themes/standard/widgets/pinned/README +2 -0
- data/empty_view/themes/standard/widgets/pinned/card.css +1 -0
- data/empty_view/themes/standard/widgets/pinned/custom.rb +1 -0
- data/empty_view/themes/standard/widgets/pinned/main.css +2 -0
- data/empty_view/themes/standard/widgets/pinned/pinned.rb +99 -0
- data/empty_view/themes/standard/widgets/search/README +2 -0
- data/empty_view/themes/standard/widgets/search/card.css +1 -0
- data/empty_view/themes/standard/widgets/search/custom.rb +1 -0
- data/empty_view/themes/standard/widgets/search/main.css +2 -0
- data/empty_view/themes/standard/widgets/search/search.rb +18 -0
- data/empty_view/themes/standard/widgets/sitemap/README +2 -0
- data/empty_view/themes/standard/widgets/sitemap/card.css +1 -0
- data/empty_view/themes/standard/widgets/sitemap/custom.rb +1 -0
- data/empty_view/themes/standard/widgets/sitemap/main.css +2 -0
- data/empty_view/themes/standard/widgets/sitemap/sitemap.rb +18 -0
- data/empty_view/themes/standard/widgets/tag-cloud/OLD-example.lt3 +12 -0
- data/empty_view/themes/standard/widgets/tag-cloud/README +2 -0
- data/empty_view/themes/standard/widgets/tag-cloud/card.css +1 -0
- data/empty_view/themes/standard/widgets/tag-cloud/custom.rb +1 -0
- data/empty_view/themes/standard/widgets/tag-cloud/main.css +2 -0
- data/empty_view/themes/standard/widgets/tag-cloud/tag-cloud.lt3 +3 -0
- data/empty_view/themes/standard/widgets/tag-cloud/tag-cloud.rb +18 -0
- data/lib/Javascript.stuff +69 -0
- data/lib/helpers-blog.rb +155 -0
- data/lib/helpers-repl.rb +201 -0
- data/lib/liveblog.rb +825 -0
- data/lib/logging.rb +44 -0
- data/lib/lowlevel.rb +73 -0
- data/lib/pathmagic.rb +14 -0
- data/lib/post.rb +211 -0
- data/lib/processing.rb +60 -0
- data/lib/publish.rb +73 -0
- data/lib/repl.rb +597 -0
- data/lib/runeblog.rb +773 -0
- data/lib/runeblog_version.rb +50 -0
- data/lib/view.rb +69 -0
- data/runeblog.gemspec +42 -0
- data/test/austin.rb +158 -0
- data/test/fakeimage.jpg +0 -0
- data/test/general_test.rb +304 -0
- data/test/make_blog.rb +196 -0
- data/test/test +3 -0
- metadata +242 -0
data/bin/blog
ADDED
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
# $LOAD_PATH << "./lib"
|
|
4
|
+
|
|
5
|
+
require 'runeblog'
|
|
6
|
+
require 'rubytext'
|
|
7
|
+
|
|
8
|
+
require 'repl'
|
|
9
|
+
|
|
10
|
+
include RuneBlog::REPL
|
|
11
|
+
|
|
12
|
+
def yesno(question, noskip=false)
|
|
13
|
+
puts fx("\n #{question}", :bold)
|
|
14
|
+
puts unless noskip
|
|
15
|
+
STDSCR.yesno
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def pick_editor
|
|
19
|
+
choices = %w[vim emacs vi nano]
|
|
20
|
+
r, c = STDSCR.rc
|
|
21
|
+
num, name = STDSCR.menu(r: r, c: c+6, title: "Default editor", items: choices)
|
|
22
|
+
file = `which #{name}`.chomp
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def get_universal
|
|
26
|
+
univ = "#{@blog.root}/data/universal.lt3"
|
|
27
|
+
if yesno("Faster initial setup? (no: edit universal.lt3)")
|
|
28
|
+
author = ask!(" Author name: ")
|
|
29
|
+
site = ask!(" Site/domain: ")
|
|
30
|
+
# Now stash it...
|
|
31
|
+
str = File.read(univ)
|
|
32
|
+
str = str.gsub(/AUTHOR/, author)
|
|
33
|
+
str = str.gsub(/SITE_DOMAIN/, site)
|
|
34
|
+
File.write(univ, str)
|
|
35
|
+
# STDERR.puts "------ universal ------\n#{`cat #{univ}`}\n------------------------"
|
|
36
|
+
else
|
|
37
|
+
vim_params = '-c ":set hlsearch" -c ":hi Search ctermfg=2 ctermbg=6" +/"\(AUTHOR.*\|SITE.*\)"'
|
|
38
|
+
edit_file(univ, vim: vim_params)
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def get_global
|
|
43
|
+
if yesno("Faster view setup? (no: edit global.lt3)")
|
|
44
|
+
view_name = ask!("\n Filename: ")
|
|
45
|
+
@blog.create_view(view_name) # call change_view??
|
|
46
|
+
title = ask!(" View title: ")
|
|
47
|
+
subtitle = ask!(" Subtitle : ")
|
|
48
|
+
domain = ask!(" Domain : ")
|
|
49
|
+
|
|
50
|
+
vfile = "#{@blog.root}/views/#{view_name}/settings/view.txt"
|
|
51
|
+
hash = {/VIEW_NAME/ => view_name,
|
|
52
|
+
/VIEW_TITLE/ => title,
|
|
53
|
+
/VIEW_SUBTITLE/ => subtitle,
|
|
54
|
+
/VIEW_DOMAIN/ => domain}
|
|
55
|
+
@blog.complete_file(vfile, nil, hash)
|
|
56
|
+
else
|
|
57
|
+
view_name = ask!("\n Filename: ")
|
|
58
|
+
@blog.create_view(view_name) # call change_view??
|
|
59
|
+
vim_params = '-c ":set hlsearch" -c ":hi Search ctermfg=2 ctermbg=6" +/"\(VIEW_.*\|SITE.*\)"'
|
|
60
|
+
edit_file(@blog.view.dir/"themes/standard/global.lt3", vim: vim_params)
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def get_started
|
|
65
|
+
if yesno("Do you want to qo a quick setup?")
|
|
66
|
+
puts " First choose your editor."
|
|
67
|
+
@blog.editor = pick_editor
|
|
68
|
+
File.write("#{@blog.root}/data/EDITOR", @blog.editor)
|
|
69
|
+
|
|
70
|
+
get_universal
|
|
71
|
+
# Now create a custom global.lt3
|
|
72
|
+
@blog._generate_global
|
|
73
|
+
puts fx("\n Quick setup complete!", :bold)
|
|
74
|
+
if yesno("Create your first view now?")
|
|
75
|
+
get_global
|
|
76
|
+
puts "\n View #{@blog.view} created!\n "
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
puts
|
|
81
|
+
print fx(" For help", :bold)
|
|
82
|
+
puts " type h or help."
|
|
83
|
+
print fx(" Create a view", :bold)
|
|
84
|
+
puts " with: new view"
|
|
85
|
+
print fx(" Create a post", :bold)
|
|
86
|
+
puts " (within current view): new post"
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def mainloop
|
|
90
|
+
info = @blog.view || "no view"
|
|
91
|
+
print fx("[#{info}] ", Red, :bold)
|
|
92
|
+
cmd = STDSCR.gets(history: @cmdhist, tab: @tabcom)
|
|
93
|
+
cmd_quit(nil) if cmd.nil? # ^D
|
|
94
|
+
cmd.chomp!
|
|
95
|
+
return if cmd.empty? # CR does nothing
|
|
96
|
+
meth, params = RuneBlog::REPL.choose_method(cmd)
|
|
97
|
+
ret, str = send(meth, params)
|
|
98
|
+
rescue => err
|
|
99
|
+
puts err
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def cmdline_preview
|
|
103
|
+
_need_view
|
|
104
|
+
local = @blog.view.local_index
|
|
105
|
+
result = system("open #{local}")
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def cmdline_publish
|
|
109
|
+
abort "Nor implemented yet"
|
|
110
|
+
_need_view
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def cmdline_browse
|
|
114
|
+
abort "Nor implemented yet"
|
|
115
|
+
_need_view
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def _need_view
|
|
119
|
+
@view = ARGV[1]
|
|
120
|
+
abort "Need 'view' parameter" if @view.nil?
|
|
121
|
+
abort "No such view '#{view}'" unless @blog.view?(@view)
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def cmdline_rebuild
|
|
125
|
+
_need_view
|
|
126
|
+
print "Generating view... "
|
|
127
|
+
@blog.generate_view(@view)
|
|
128
|
+
print "Generating index... "
|
|
129
|
+
num = @blog.generate_index(@view)
|
|
130
|
+
puts "#{num} posts\n "
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
def handle_cmdline
|
|
134
|
+
cmd = ARGV[0]
|
|
135
|
+
@blog = RuneBlog.new
|
|
136
|
+
abort "No blog found" if @blog.nil?
|
|
137
|
+
|
|
138
|
+
case cmd
|
|
139
|
+
when "rebuild"; cmdline_rebuild
|
|
140
|
+
when "publish"; cmdline_publish
|
|
141
|
+
when "preview"; cmdline_preview
|
|
142
|
+
when "browse"; cmdline_browse
|
|
143
|
+
else
|
|
144
|
+
puts "Command '#{cmd}' is unknown"
|
|
145
|
+
end
|
|
146
|
+
exit
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
### Main
|
|
150
|
+
|
|
151
|
+
major, minor = RUBY_VERSION.split(".").values_at(0,1)
|
|
152
|
+
ver = major.to_i*10 + minor.to_i
|
|
153
|
+
unless ver >= 24
|
|
154
|
+
RubyText.stop
|
|
155
|
+
abort "Need Ruby 2.4 or greater"
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
include RuneBlog::Helpers # for try_read_config
|
|
159
|
+
|
|
160
|
+
handle_cmdline unless ARGV.empty?
|
|
161
|
+
|
|
162
|
+
errfile = File.new("stderr.out", "w")
|
|
163
|
+
STDERR.reopen(errfile)
|
|
164
|
+
|
|
165
|
+
# read a .rubytext file here?? Call it something else?
|
|
166
|
+
home = ENV['HOME']
|
|
167
|
+
@fg, @bg = Blue, White ## FIXME!! try_read_config("#{home}/.rubytext", fg: Blue, bg: White)
|
|
168
|
+
@fg = @fg.downcase.to_sym
|
|
169
|
+
@bg = @bg.downcase.to_sym
|
|
170
|
+
|
|
171
|
+
RubyText.start(:_echo, :keypad, scroll: true, log: "binblog.txt", fg: @fg, bg: @bg)
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
new_repo = false
|
|
175
|
+
if ! RuneBlog.exist?
|
|
176
|
+
exit unless yesno("No blog repo found. Create new one?")
|
|
177
|
+
RuneBlog.create_new_blog_repo
|
|
178
|
+
puts fx(" Blog repo successfully created.", :bold)
|
|
179
|
+
new_repo = true
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
@blog = RuneBlog.new
|
|
183
|
+
get_started if new_repo
|
|
184
|
+
|
|
185
|
+
print fx(" For help", :bold)
|
|
186
|
+
puts " type h or help.\n "
|
|
187
|
+
|
|
188
|
+
puts fx("\n RuneBlog", :bold), fx(" v #{RuneBlog::VERSION}\n", Red)
|
|
189
|
+
|
|
190
|
+
@cmdhist = []
|
|
191
|
+
@tabcom = RuneBlog::REPL::Patterns.keys.uniq - RuneBlog::REPL::Abbr.keys
|
|
192
|
+
@tabcom.map! {|x| x.sub(/ [\$\>].*/, "") + " " }
|
|
193
|
+
@tabcom.sort!
|
|
194
|
+
|
|
195
|
+
loop { mainloop }
|
|
196
|
+
|
|
197
|
+
system("tput clear")
|
|
198
|
+
sleep 0.2
|
|
199
|
+
puts
|
|
200
|
+
|
data/bin/mkwidget
ADDED
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
def write_css
|
|
5
|
+
# Need .lt3 file?
|
|
6
|
+
File.open("std_widget/card.css", "w") do |f|
|
|
7
|
+
f.puts <<~LIVE
|
|
8
|
+
# CSS for sidebar card
|
|
9
|
+
LIVE
|
|
10
|
+
end
|
|
11
|
+
File.open("std_widget/main.css", "w") do |f|
|
|
12
|
+
f.puts <<~LIVE
|
|
13
|
+
# CSS for main area page
|
|
14
|
+
LIVE
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def _make_class_name(app)
|
|
19
|
+
if app =~ /[-_]/
|
|
20
|
+
words = app.split(/[-_]/)
|
|
21
|
+
name = words.map(&:capitalize).join
|
|
22
|
+
else
|
|
23
|
+
name = app.capitalize
|
|
24
|
+
end
|
|
25
|
+
return name
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def write_widget_ruby
|
|
29
|
+
File.open("std_widget/#@app.rb", "w") do |f|
|
|
30
|
+
f.puts <<~LIVE
|
|
31
|
+
# Custom code for '#@app' widget
|
|
32
|
+
|
|
33
|
+
class ::RuneBlog::Widget
|
|
34
|
+
class #{_make_class_name(@app)}
|
|
35
|
+
Type, Title = "#@app", "#@title"
|
|
36
|
+
|
|
37
|
+
def initialize(repo)
|
|
38
|
+
@blog = repo
|
|
39
|
+
@datafile = "list.data"
|
|
40
|
+
@lines = File.exist?(@datafile) ? File.readlines(@datafile) : []
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def _html_body(file, css = nil) # FIXME move to common file
|
|
44
|
+
file.puts "<html>"
|
|
45
|
+
if css
|
|
46
|
+
file.puts " <head>"
|
|
47
|
+
file.puts " <style>\n#{css}\n </style>"
|
|
48
|
+
file.puts " </head>"
|
|
49
|
+
end
|
|
50
|
+
file.puts " <body>"
|
|
51
|
+
yield
|
|
52
|
+
file.puts " </body>\n</html>"
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def build
|
|
56
|
+
# ...insert logic here
|
|
57
|
+
write_main
|
|
58
|
+
write_card
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def write_main
|
|
62
|
+
tag = Type
|
|
63
|
+
card_title = Title
|
|
64
|
+
css = "* { font-family: verdana }"
|
|
65
|
+
mainfile = "#{tag}-main"
|
|
66
|
+
File.open("#{mainfile}.html", "w") do |f|
|
|
67
|
+
_html_body(f, css) do
|
|
68
|
+
f.puts "<h1>#{card_title}</h1><br><hr>"
|
|
69
|
+
# ...insert logic here
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def write_card
|
|
75
|
+
tag = Type
|
|
76
|
+
url = :widgets/tag/tag+"-main.html"
|
|
77
|
+
card_title = Title
|
|
78
|
+
cardfile = "#{tag}-card"
|
|
79
|
+
File.open("#{cardfile}.html", "w") do |f|
|
|
80
|
+
f.puts <<-EOS
|
|
81
|
+
<div class="card mb-3">
|
|
82
|
+
<div class="card-body">
|
|
83
|
+
<h5 class="card-title">
|
|
84
|
+
<button type="button" class="btn btn-primary" data-toggle="collapse" data-target="##{tag}">+</button>
|
|
85
|
+
<a href="javascript: void(0)"
|
|
86
|
+
onclick="javascript:open_main('#{url}')"
|
|
87
|
+
style="text-decoration: none; color: black"> #{card_title}</a>
|
|
88
|
+
</h5>
|
|
89
|
+
<div class="collapse" id="#{tag}">
|
|
90
|
+
EOS
|
|
91
|
+
# ...insert logic here
|
|
92
|
+
f.puts <<-EOS
|
|
93
|
+
</div>
|
|
94
|
+
</div>
|
|
95
|
+
</div>
|
|
96
|
+
EOS
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def edit_menu
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def refresh
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
LIVE
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def write_custom_ruby
|
|
112
|
+
File.open("std_widget/custom.rb", "w") do |f|
|
|
113
|
+
f.puts <<~LIVE
|
|
114
|
+
# This is for specialized livetext add-ons (Ruby methods)
|
|
115
|
+
LIVE
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def write_README
|
|
120
|
+
File.open("std_widget/README", "w") do |f|
|
|
121
|
+
f.puts <<~LIVE
|
|
122
|
+
This is for a "standard" Runeblog widget
|
|
123
|
+
Code and docs are a work in progress
|
|
124
|
+
LIVE
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
def safe_copy(src)
|
|
129
|
+
dst = src.sub(/std_widget/, "empty_view/themes/standard/widgets/#@app")
|
|
130
|
+
if File.exist?(dst)
|
|
131
|
+
puts "Skip: #{src}"
|
|
132
|
+
return
|
|
133
|
+
else
|
|
134
|
+
puts "Copying: #{src}"
|
|
135
|
+
system("cp #{src} #{dst}")
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
def copy_over
|
|
140
|
+
here, there = "std_widget", "empty_view/themes/standard/widgets/#@app"
|
|
141
|
+
slist = Dir["#{here}/*"].reject {|x| File.directory?(x) }
|
|
142
|
+
slist.each {|src| safe_copy(src) }
|
|
143
|
+
|
|
144
|
+
here, there = "std_widget/pieces", "empty_view/themes/standard/widgets/#@app/pieces"
|
|
145
|
+
system("mkdir #{there}") unless Dir.exist?(there)
|
|
146
|
+
slist = Dir["#{here}/*"]
|
|
147
|
+
slist.each {|src| safe_copy(src) }
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
### "Main"
|
|
152
|
+
|
|
153
|
+
abort 'Need app, "title..."' if ARGV.empty?
|
|
154
|
+
@app, @title = *ARGV
|
|
155
|
+
|
|
156
|
+
system("rm -rf std_widget")
|
|
157
|
+
system("mkdir -p std_widget/pieces")
|
|
158
|
+
|
|
159
|
+
write_css
|
|
160
|
+
write_widget_ruby
|
|
161
|
+
write_custom_ruby
|
|
162
|
+
write_README
|
|
163
|
+
|
|
164
|
+
copy_over
|
data/data/EDITOR
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
/usr/local/bin/vim
|
data/data/ROOT
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
/FULL/PATH/.blogs
|
data/data/VIEW
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[no view]
|
data/data/features.txt
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# 0 = disabled (installed but disabled)
|
|
2
|
+
# 1 = enabled (implies installed)
|
|
3
|
+
# x = excluded (not installed; does it even exist?)
|
|
4
|
+
|
|
5
|
+
reddit 1 # autopost, embed thread after blog post
|
|
6
|
+
facebook 0 # reader-like, reader post, autopost?
|
|
7
|
+
twitter 0 # reader-tweet, reader-follow, autotweet?
|
|
8
|
+
|
|
9
|
+
links 1 # widget: external links
|
|
10
|
+
news 1 # widget: news (external)
|
|
11
|
+
pages 1 # widget: internal pages
|
|
12
|
+
pinned 1 # widget: pinned posts
|
|
13
|
+
|
|
14
|
+
ad x # widget: embed advertising
|
|
15
|
+
bydates x # widget: browse posts by date
|
|
16
|
+
search x # widget: search posts
|
|
17
|
+
sitemap x # widget: site map
|
|
18
|
+
tag_cloud x # widget: tag cloud (clickable)
|
data/data/global.lt3
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
. --------------------------------------------------
|
|
2
|
+
. Global settings are stored here in the form
|
|
3
|
+
. <variable> <value>
|
|
4
|
+
. --------------------------------------------------
|
|
5
|
+
|
|
6
|
+
.variables view ../../settings/view.txt
|
|
7
|
+
|
|
8
|
+
.variables recent ../../settings/recent.txt
|
|
9
|
+
|
|
10
|
+
.variables publish ../../settings/publish.txt
|
|
11
|
+
|
|
12
|
+
.variables
|
|
13
|
+
host http://SITE
|
|
14
|
+
charset utf-8
|
|
15
|
+
url http://SITE
|
|
16
|
+
locale en_US
|
|
17
|
+
|
|
18
|
+
font.family verdana
|
|
19
|
+
.end
|
|
20
|
+
|
data/data/universal.lt3
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
. "Universal" settings -- new defaults for global.lt3
|
|
2
|
+
. work in progress - defaults for each global.lt3
|
|
3
|
+
|
|
4
|
+
. --------------------------------------------------
|
|
5
|
+
. Global settings are stored here in the form
|
|
6
|
+
. <variable> <value>
|
|
7
|
+
. --------------------------------------------------
|
|
8
|
+
.nopara
|
|
9
|
+
|
|
10
|
+
.variables
|
|
11
|
+
univ.author AUTHOR
|
|
12
|
+
univ.site SITE_DOMAIN
|
|
13
|
+
|
|
14
|
+
font.family verdana
|
|
15
|
+
|
|
16
|
+
charset utf-8
|
|
17
|
+
locale en_US
|
|
18
|
+
.end
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
.nopara
|
|
2
|
+
.variables
|
|
3
|
+
blog Around Austin
|
|
4
|
+
blog.desc The view from downtown
|
|
5
|
+
|
|
6
|
+
viewbox.wide 550
|
|
7
|
+
viewbox.high 90
|
|
8
|
+
|
|
9
|
+
rect.wide 550
|
|
10
|
+
rect.high 90
|
|
11
|
+
rect.fill blue
|
|
12
|
+
|
|
13
|
+
title.font bold 58px sans-serif
|
|
14
|
+
title.fill white
|
|
15
|
+
title.xoff 280
|
|
16
|
+
title.yoff 55
|
|
17
|
+
|
|
18
|
+
subtitle.font italic 24px sans-serif
|
|
19
|
+
subtitle.fill lightblue
|
|
20
|
+
subtitle.xoff 280
|
|
21
|
+
subtitle.yoff 80
|
|
22
|
+
.end
|
|
23
|
+
|
|
24
|
+
<svg width=$viewbox.wide height=$viewbox.high
|
|
25
|
+
viewBox="0 0 $viewbox.wide $viewbox.high"
|
|
26
|
+
xmlns="http://www.w3.org/2000/svg">
|
|
27
|
+
<style>
|
|
28
|
+
.subtitle { font: $subtitle.font; fill: $subtitle.fill }
|
|
29
|
+
.title { font: $title.font; fill: $title.fill }
|
|
30
|
+
</style>
|
|
31
|
+
|
|
32
|
+
<rect x="0" y="0" rx="10" ry="10" width="$rect.wide" height="$rect.high" fill="$rect.fill"/>
|
|
33
|
+
|
|
34
|
+
<text text-anchor="middle" x=$title.xoff y=$title.yoff class=title>$blog</text>
|
|
35
|
+
<text text-anchor="middle" x=$subtitle.xoff y=$subtitle.yoff class=subtitle>$blog.desc</text>
|
|
36
|
+
</svg>
|
|
37
|
+
<br>
|
|
38
|
+
Here we are
|