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