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
|
@@ -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
|
+
.post 0
|
|
10
|
+
|
|
11
|
+
.title This is my title
|
|
12
|
+
.pubdate 2019-07-09
|
|
13
|
+
.views stuff
|
|
14
|
+
.tags
|
|
15
|
+
|
|
16
|
+
.teaser
|
|
17
|
+
This is only a short excerpt from the top of the blog post.
|
|
18
|
+
.end
|
|
19
|
+
|
|
20
|
+
And now we continue the post.
|
|
21
|
+
Do we have anything to say?
|
|
22
|
+
|
|
23
|
+
Apparently not much.
|
|
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="recent-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,22 @@
|
|
|
1
|
+
. In real life, ads won't work this way...
|
|
2
|
+
|
|
3
|
+
.include vars.lt3
|
|
4
|
+
|
|
5
|
+
.set classname="btn btn-light float-right"
|
|
6
|
+
.set card.title="Advertisement"
|
|
7
|
+
.set card.text="Build your amazing website with blabla.com."
|
|
8
|
+
. set extra="bg-dark text-white"
|
|
9
|
+
|
|
10
|
+
<!-- "$ad.image" -->
|
|
11
|
+
|
|
12
|
+
<div class="card $extra mb-3">
|
|
13
|
+
<div class="card-body">
|
|
14
|
+
<!--
|
|
15
|
+
<h5 class="card-title">$card.title</h5>
|
|
16
|
+
<p class="card-text">$card.text</p>
|
|
17
|
+
<a href="javascript: void(0)" onclick="javascript:open_main('widgets/ad/ad.html')" class="$classname">Visit page</a>
|
|
18
|
+
-->
|
|
19
|
+
<img style="max-height: 100%; max-width: 100%" src="$ad.image"></img>
|
|
20
|
+
</div>
|
|
21
|
+
</div>
|
|
22
|
+
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# CSS for sidebar card
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# This is for specialized livetext add-ons (Ruby methods)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# CSS for sidebar card
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# This is for specialized livetext add-ons (Ruby methods)
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# Custom code for 'links' widget
|
|
2
|
+
|
|
3
|
+
require 'liveblog'
|
|
4
|
+
|
|
5
|
+
class ::RuneBlog::Widget
|
|
6
|
+
class Links
|
|
7
|
+
Type, Title = "links", "External links"
|
|
8
|
+
|
|
9
|
+
def initialize(repo)
|
|
10
|
+
@blog = repo
|
|
11
|
+
@datafile = input = "list.data"
|
|
12
|
+
@lines = _get_data(@datafile)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def build
|
|
16
|
+
write_main
|
|
17
|
+
write_card
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def _html_body(file, css = nil)
|
|
21
|
+
file.puts "<html>"
|
|
22
|
+
if css
|
|
23
|
+
file.puts " <head>"
|
|
24
|
+
file.puts " <style>\n#{css}\n </style>"
|
|
25
|
+
file.puts " </head>"
|
|
26
|
+
end
|
|
27
|
+
file.puts " <body>"
|
|
28
|
+
yield
|
|
29
|
+
file.puts " </body>\n</html>"
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def write_main
|
|
33
|
+
@data = @lines.map! {|x| x.chomp.split(/, */, 3) }
|
|
34
|
+
css = "body { font-family: verdana }"
|
|
35
|
+
card_title = Title
|
|
36
|
+
File.open("#{Type}-main.html", "w") do |f|
|
|
37
|
+
_html_body(f, css) do
|
|
38
|
+
f.puts "<h1>#{card_title}</h1><br><hr>"
|
|
39
|
+
url_ref = nil
|
|
40
|
+
@data.each do |url, frameable, title|
|
|
41
|
+
url_ref = "href = '#{url}'"
|
|
42
|
+
url_ref << " target=blank" if frameable == "yes"
|
|
43
|
+
css = "color: #8888FF; text-decoration: none; font-size: 21px"
|
|
44
|
+
f.puts %[<a style="#{css}" #{url_ref}>#{title}</a> <br>]
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def write_card
|
|
51
|
+
tag = "links"
|
|
52
|
+
url = :widgets/tag/tag+"-main.html"
|
|
53
|
+
card_title = "External links" # FIXME
|
|
54
|
+
cardfile = "#{Type}-card"
|
|
55
|
+
File.open("#{cardfile}.html", "w") do |f|
|
|
56
|
+
f.puts <<-EOS
|
|
57
|
+
<div class="card mb-3">
|
|
58
|
+
<div class="card-body">
|
|
59
|
+
<h5 class="card-title">
|
|
60
|
+
<button type="button" class="btn btn-primary" data-toggle="collapse" data-target="##{tag}">+</button>
|
|
61
|
+
<a href="javascript: void(0)"
|
|
62
|
+
onclick="javascript:open_main('#{url}')"
|
|
63
|
+
style="text-decoration: none; color: black"> #{card_title}</a>
|
|
64
|
+
</h5>
|
|
65
|
+
<div class="collapse" id="#{tag}">
|
|
66
|
+
EOS
|
|
67
|
+
@data.each do |url2, frameable, title|
|
|
68
|
+
f.puts "<!-- #{[url2, frameable, title].inspect} -->"
|
|
69
|
+
main_ref = %[href="javascript: void(0)" onclick="javascript:open_main('#{url2}')"]
|
|
70
|
+
tab_ref = %[href="#{url2}"]
|
|
71
|
+
url_ref = (frameable == "yes") ? main_ref : tab_ref
|
|
72
|
+
anchor = %[<a #{url_ref}>#{title}</a>]
|
|
73
|
+
wrapper = %[<li class="list-group-item">#{anchor}</li>]
|
|
74
|
+
f.puts wrapper
|
|
75
|
+
end
|
|
76
|
+
f.puts <<-EOS
|
|
77
|
+
</div>
|
|
78
|
+
</div>
|
|
79
|
+
</div>
|
|
80
|
+
EOS
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def edit_menu
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def refresh
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# CSS for sidebar card
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# This is for specialized livetext add-ons (Ruby methods)
|
|
@@ -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,88 @@
|
|
|
1
|
+
# Custom code for 'news' widget
|
|
2
|
+
|
|
3
|
+
class ::RuneBlog::Widget
|
|
4
|
+
class News
|
|
5
|
+
Type, Title = "news", "News"
|
|
6
|
+
|
|
7
|
+
def initialize(repo)
|
|
8
|
+
@blog = repo
|
|
9
|
+
@datafile = "list.data"
|
|
10
|
+
lines = _get_data(@datafile)
|
|
11
|
+
@data = lines.map {|line| line.chomp.split(/, */) }
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def build
|
|
15
|
+
write_main
|
|
16
|
+
write_card
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def _html_body(file, css = nil)
|
|
20
|
+
file.puts "<html>"
|
|
21
|
+
if css
|
|
22
|
+
file.puts " <head>"
|
|
23
|
+
file.puts " <style>\n#{css}\n </style>"
|
|
24
|
+
file.puts " </head>"
|
|
25
|
+
end
|
|
26
|
+
file.puts " <body>"
|
|
27
|
+
yield
|
|
28
|
+
file.puts " </body>\n</html>"
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def write_main
|
|
32
|
+
mainfile = "#{Type}-main"
|
|
33
|
+
css = "body { font-family: verdana }"
|
|
34
|
+
File.open("#{mainfile}.html", "w") do |f|
|
|
35
|
+
_html_body(f, css) do
|
|
36
|
+
f.puts "<h1>#{Title}</h1><br><hr>"
|
|
37
|
+
@data.each do |file, frameable, title|
|
|
38
|
+
title = title.gsub(/\\/, "") # kludge
|
|
39
|
+
case frameable
|
|
40
|
+
when "yes"; url_ref = "href = '#{file}'"
|
|
41
|
+
when "no"; url_ref = %[href='#{file}' target='blank']
|
|
42
|
+
end
|
|
43
|
+
css = "color: #8888FF; text-decoration: none; font-size: 21px"
|
|
44
|
+
f.puts %[<a style="#{css}" #{url_ref}>#{title}</a> <br>]
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def write_card
|
|
51
|
+
cardfile = "#{Type}-card"
|
|
52
|
+
url = "widgets/#{Type}/#{Type}-main.html"
|
|
53
|
+
File.open("#{cardfile}.html", "w") do |f|
|
|
54
|
+
f.puts <<-EOS
|
|
55
|
+
<div class="card mb-3">
|
|
56
|
+
<div class="card-body">
|
|
57
|
+
<h5 class="card-title">
|
|
58
|
+
<button type="button" class="btn btn-primary" data-toggle="collapse" data-target="##{Type}">+</button>
|
|
59
|
+
<a href="javascript: void(0)"
|
|
60
|
+
onclick="javascript:open_main('#{url}')"
|
|
61
|
+
style="text-decoration: none; color: black"> #{Title}</a>
|
|
62
|
+
</h5>
|
|
63
|
+
<div class="collapse" id="#{Type}">
|
|
64
|
+
EOS
|
|
65
|
+
@data.each do |file, frameable, title|
|
|
66
|
+
case frameable
|
|
67
|
+
when "yes"; url_ref = _main(file) # remote, frameable
|
|
68
|
+
when "no"; url_ref = _blank(file) # remote, not frameable
|
|
69
|
+
end
|
|
70
|
+
anchor = %[<a #{url_ref}>#{title}</a>]
|
|
71
|
+
wrapper = %[<li class="list-group-item">#{anchor}</li>]
|
|
72
|
+
f.puts wrapper
|
|
73
|
+
end
|
|
74
|
+
f.puts <<-EOS
|
|
75
|
+
</div>
|
|
76
|
+
</div>
|
|
77
|
+
</div>
|
|
78
|
+
EOS
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def edit_menu
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def refresh
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# This is for specialized livetext add-ons (Ruby methods)
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
.mixin liveblog
|
|
2
|
+
|
|
3
|
+
<html>
|
|
4
|
+
<head>
|
|
5
|
+
|
|
6
|
+
<style>
|
|
7
|
+
body { font-family: verdana }
|
|
8
|
+
</style>
|
|
9
|
+
|
|
10
|
+
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
|
|
11
|
+
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous"></link>
|
|
12
|
+
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap-theme.min.css"></link>
|
|
13
|
+
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
|
|
14
|
+
|
|
15
|
+
</head>
|
|
16
|
+
|
|
17
|
+
<body>
|
|
18
|
+
|
|
19
|
+
<h2>Frequently Asked Questions</h2>
|
|
20
|
+
|
|
21
|
+
.faq Are you a rabbit?
|
|
22
|
+
Yes, I am.
|
|
23
|
+
.end
|
|
24
|
+
|
|
25
|
+
.faq Are you a frog?
|
|
26
|
+
Don't be stupid. I just told you I was a rabbit.
|
|
27
|
+
.end
|
|
28
|
+
|
|
29
|
+
.faq Why do you answer a question with a question?
|
|
30
|
+
*Do I in fact answer a question with a question?
|
|
31
|
+
.end
|
|
32
|
+
|
|
33
|
+
.faq Are you serious?
|
|
34
|
+
No, I'm a rabbit.
|
|
35
|
+
.end
|
|
36
|
+
|
|
37
|
+
.backlink
|
|
38
|
+
|
|
39
|
+
</body>
|
|
40
|
+
</html>
|
|
File without changes
|