liveblog 0.6.0 → 0.7.3

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
  SHA1:
3
- metadata.gz: 5b133828166d745da0a359b1460a83237fe6a7c1
4
- data.tar.gz: 3a430a375412bd5ff52bd1d66b599b843179433b
3
+ metadata.gz: 47ed6ce1c583163577780604dc5b4a84c33e7e86
4
+ data.tar.gz: 2ce3b6d3f6e4526f4b9f7861ba05a1383148cd48
5
5
  SHA512:
6
- metadata.gz: 9ba310329a870d91014432c2b438e15f73a01c71bd8ee3e0f914ed66853ac04d904d8b8f0812a3af5ff677202828ddc3566d39db94940dc8de459a68f2787888
7
- data.tar.gz: 1a721c5e0ac215a13a61e09c5726ccfc143de87ca9914661baebe9e599bebe72a56879c6027fc01bc270a92a05ae7efc67957cb52390a661f0de42d5809f305e
6
+ metadata.gz: 1a92ca1c18ab779e3b7ec9052631b811d5322ecbc3a1d08f8cebf725f0a5d9e82deabb36a068925822fe0a9e8f21e27132d0a05e998d60964cd01a555a5c1f1d
7
+ data.tar.gz: dd563e8754115d84fcb03c3c0033342b46b31125268390e9a96c55180e66fa48f31b09e21e7a0c69939dfafb3627efd8bd747d3d217a5eaefa5019a2db17f6e0
checksums.yaml.gz.sig CHANGED
Binary file
data.tar.gz.sig CHANGED
Binary file
data/lib/liveblog.css CHANGED
@@ -39,41 +39,73 @@ body { background-color: #c48f33;}
39
39
  max-width: 620px;
40
40
  }
41
41
 
42
- #summary ul {
43
- background-color: #D5A95D;
44
- list-style-type: square;
45
- margin: 1.4em; padding: 1.8em;
46
- }
42
+ #summary ul {
43
+ background-color: #D5A95D;
44
+ list-style-type: square;
45
+ margin: 1.4em; padding: 1.8em;
46
+ }
47
47
 
48
- #summary ul li {
49
- background-color: #D5A95D;
50
- font-family: arial, verdana;
51
- font-size: 1.4em;
52
- margin: 0.2em 2em; padding: 0.8em;
53
- }
48
+ #summary ul li {
49
+ background-color: #D5A95D;
50
+ font-family: arial, verdana;
51
+ font-size: 1.4em;
52
+ margin: 0.2em 2em; padding: 0.8em;
53
+ }
54
+
55
+ #summary ul li a {
56
+ background-color: transparent;
57
+ color: #8E32C3;
58
+ text-decoration: none;
59
+ padding: 0.4em;
60
+ }
61
+
62
+ #summary ul li a:link {
63
+ background-color: transparent;
64
+ }
65
+
66
+ #summary ul li a:visited {
67
+ background-color: rgba(100,100,100,0.1);
68
+ }
69
+
70
+ #summary ul li a:hover {
71
+ background-color: transparent;
72
+ color: #C332AF;
73
+ }
54
74
 
55
- #summary ul li a {
75
+ .arrow {
76
+ background-color: #444;
56
77
  background-color: transparent;
57
- color: #8E32C3;
58
- text-decoration: none;
59
- padding: 0.4em;
78
+ font-size: 3em;
60
79
  }
61
- #summary ul li a:link {
80
+ .arrow:first-child {
62
81
  background-color: transparent;
63
- }
64
82
 
65
- #summary ul li a:visited {
66
- background-color: rgba(100,100,100,0.1);
83
+ }
84
+ .arrow:last-child {
85
+ background-color: transparent;
86
+ float: right;
67
87
  }
68
88
 
69
- #summary ul li a:hover {
89
+ .arrow:link {
90
+ background-color: transparent;
91
+ color: rgba(100,200,100, 0.3);
92
+ }
93
+ .arrow:hover {
70
94
  background-color: transparent;
71
- color: #C332AF;
95
+ color: rgba(255,255,255, 0.8)
72
96
  }
73
97
 
98
+
99
+
74
100
  article {
75
101
  background-color: #AFC332;
76
102
  }
103
+
104
+ article strong{
105
+ background-color: transparent;
106
+ font-size: 1.27em;
107
+ padding: 0.1em 0.1em;
108
+ }
77
109
  details ol li {
78
110
  background-color: #AFC332;
79
111
  background-color: transparent;
@@ -87,38 +119,39 @@ section {
87
119
  max-width: 500px
88
120
  }
89
121
 
90
- section h1 {
91
- background-color: #D5A95D;
92
- /*color: #C34532;*/
93
- margin: 0.4em 0em 1.2em 0em;
94
- padding: 1em 1.5em;
95
- }
122
+ section h1 {
123
+ background-color: #D5A95D;
124
+ /*color: #C34532;*/
125
+ margin: 0.4em 0em 1.2em 0em;
126
+ padding: 1em 1.5em;
127
+ }
96
128
 
97
- section p {
129
+ section p {
130
+ background-color: #ee3;
131
+ background-color: transparent;
132
+ margin: 0.4em 0.4em; padding: 0.6em 1.5em;
133
+ }
98
134
 
99
- background-color: #ee3;
100
- background-color: transparent;
101
- margin: 0.4em 0.4em; padding: 0.6em 1.5em;
102
- }
103
- section a {
104
- background-color: transparent;
105
- color: #8E32C3;
106
- text-decoration: none;
107
- }
108
- section a:link {
109
- background-color: transparent;
110
- color: #911;
111
- }
135
+ section a {
136
+ background-color: transparent;
137
+ color: #8E32C3;
138
+ text-decoration: none;
139
+ }
112
140
 
113
- section a:hover {
114
- background-color: transparent;
115
- color: #C33267;
116
- }
141
+ section a:link {
142
+ background-color: transparent;
143
+ color: #911;
144
+ }
117
145
 
118
- section a:active {
119
- background-color: #ddd;
120
- color: #C33267;
121
- }
146
+ section a:hover {
147
+ background-color: transparent;
148
+ color: #C33267;
149
+ }
150
+
151
+ section a:active {
152
+ background-color: #ddd;
153
+ color: #C33267;
154
+ }
122
155
 
123
156
 
124
157
 
@@ -137,30 +170,32 @@ aside ul {
137
170
  padding: 0.6em 0.9em;
138
171
  }
139
172
 
140
- aside ul li {
141
- background-color: #e33;
142
- background-color: transparent;
143
- font-family: helvetica, arial;
144
- font-size: 2.6em;
145
- font-weight: 900;
173
+ aside ul li {
174
+ background-color: transparent;
175
+ background-color: #e33;
146
176
 
147
- margin: 0.4em;
148
- padding: 0.9em;
149
- }
177
+ font-family: helvetica, arial;
178
+ font-size: 2.6em;
179
+ font-weight: 900;
150
180
 
151
- aside ul li a{
152
- background-color: transparent;
153
- color: #eee;
154
- text-decoration: none;
155
- }
181
+ margin: 0.4em;
182
+ padding: 0.9em;
183
+ text-align: center;
184
+ }
156
185
 
157
- aside ul li a:hover {
158
- background-color: rgba(100, 100, 100, 0.5);
159
- color: #eee;
160
- text-decoration: none;
161
- }
186
+ aside ul li a{
187
+ background-color: transparent;
188
+ color: #eee;
189
+ text-decoration: none;
190
+ }
191
+
192
+ aside ul li a:hover {
193
+ background-color: rgba(100, 100, 100, 0.5);
194
+ color: #eee;
195
+ text-decoration: none;
196
+ }
162
197
 
163
- article>footer{
198
+ article>footer, aside ul li{
164
199
  background-color: rgba(255,255,255,0.2);
165
200
  }
166
201
 
@@ -201,4 +236,4 @@ article>footer{
201
236
  float: left;
202
237
  padding: 0em 0.5em 0 0;
203
238
  margin: 0em;
204
- }
239
+ }
data/lib/liveblog.rb CHANGED
@@ -6,19 +6,33 @@ require 'time'
6
6
  require 'dynarex'
7
7
  require 'fileutils'
8
8
  require 'martile'
9
+ require 'simple-config'
9
10
 
10
11
  class LiveBlog
11
12
 
12
- def initialize(liveblogfilepath='.', urlbase: '/liveblog', edit_url: '/', \
13
- css_url: '/liveblog/liveblog.css')
13
+ def initialize(config: nil)
14
+
15
+
16
+ config ||= 'liveblog.conf'
17
+ h = SimpleConfig.new(config).to_h
18
+ dir, @urlbase, @edit_url, @css_url = %i(dir urlbase edit_url css_url).map{|x| h[x]}
14
19
 
15
- Dir.chdir liveblogfilepath
16
20
 
17
- @urlbase, @edit_url, @css_url = urlbase, edit_url, css_url
18
- @t = Time.now
21
+ Dir.chdir dir
22
+
23
+ @d = Date.today
19
24
  dxfile = File.join(path(), 'index.xml')
20
25
 
21
- File.exists?(dxfile) ? @dx = Dynarex.new(dxfile) : new_file()
26
+ if File.exists? dxfile then
27
+
28
+ @dx = Dynarex.new(dxfile)
29
+ @d = Date.parse @dx.title
30
+
31
+ else
32
+
33
+ new_file()
34
+
35
+ end
22
36
 
23
37
  end
24
38
 
@@ -39,22 +53,32 @@ class LiveBlog
39
53
  # we reserve 30 characters for the link
40
54
  len = (140 - 30 - hashtag.length)
41
55
  entry = raw_entry.length > len ? "%s... %s" % [raw_entry.slice(0, len), hashtag] : raw_entry
42
- [true, "%s %s/%s/%s" % [entry, @urlbase, path(), hashtag]]
43
- end
56
+ [true, "%s %s%s" % [entry, static_urlpath(), hashtag]]
57
+ end
58
+
59
+ # Use with yesterday's liveblog; Ideally suited for running from a cron job
60
+ #
61
+ def link_today()
62
+
63
+ newfilepath = File.join(path(@d-1), 'formatted.xml')
64
+ FileUtils.cp File.join(path(@d-1), 'index.xml'), newfilepath
65
+
66
+ doc = Rexle.new File.read(newfilepath)
67
+ doc.root.element('summary/next_day').text = static_urlpath()
68
+ File.write newfilepath, doc.xml(pretty: true)
69
+
70
+ end
44
71
 
45
72
  def new_file(s=nil)
46
73
 
47
74
  s ||= <<EOF
48
- <?dynarex schema="sections[title, edit_url, date, css_url]/section(x)" order='descending'?>
49
- title: LiveBlog #{ordinalize(@t.day) + @t.strftime(" %B %Y")}
50
- edit_url: #{@edit_url}
51
- date: #{Date.today}
52
- css_url: #{@css_url}
75
+ <?dynarex schema="sections[title]/section(x)" order='descending'?>
76
+ title: LiveBlog #{ordinalize(@d.day) + @d.strftime(" %B %Y")}
53
77
  --#
54
78
 
55
79
  EOF
56
80
 
57
- FileUtils.mkdir_p path()
81
+ FileUtils.mkdir_p File.join(path())
58
82
 
59
83
  @dx = Dynarex.new
60
84
  @dx.import s
@@ -86,12 +110,19 @@ EOF
86
110
  end
87
111
 
88
112
 
89
- def path
90
-
91
- File.join [@t.year.to_s, Date::MONTHNAMES[@t.month].downcase[0..2], \
92
- @t.day.to_s]
113
+ def path(d=@d)
114
+ [d.year.to_s, Date::MONTHNAMES[d.month].downcase[0..2], d.day.to_s]
115
+ end
116
+
117
+ def urlpath(d=@d)
118
+ path(d).join('/') + '/'
119
+ end
120
+
121
+ def static_urlpath(d=@d)
122
+ @urlbase.sub(/[^\/]$/,'\0/') + urlpath(d)
93
123
  end
94
124
 
125
+
95
126
  def save()
96
127
 
97
128
  @dx.save File.join(path(), 'index.xml')
@@ -102,15 +133,17 @@ EOF
102
133
  def save_html()
103
134
 
104
135
  newfilepath = File.join(path(), 'formatted.xml')
105
- FileUtils.cp File.join(path(), 'index.xml'), newfilepath
106
-
136
+ FileUtils.cp File.join(path(), 'index.xml'), newfilepath
107
137
  doc = Rexle.new File.read(newfilepath)
108
138
 
109
139
  summary = doc.root.element('summary')
110
- summary.element('edit_url').text += "%s/%s/index.txt" % [@url_edit, path()]
111
- date = summary.element('date')
112
- date.text = Date.parse(date.text).strftime("%d-%b-%Y").upcase
113
- summary.add Rexle::Element.new('published').add_text Time.now.strftime("%d-%m-%Y %H:%M")
140
+
141
+ add summary, 'edit_url', "%s/%sindex.txt" % [@edit_url, urlpath()]
142
+ add summary, 'date', @d.strftime("%d-%b-%Y").upcase
143
+ add summary, 'css_url', @css_url
144
+ add summary, 'published', Time.now.strftime("%d-%m-%Y %H:%M")
145
+ add summary, 'prev_day', static_urlpath(@d-1)
146
+ add summary, 'next_day', @d == Date.today ? '' : static_urlpath(@d+1)
114
147
 
115
148
  tags = Rexle::Element.new('tags')
116
149
 
@@ -120,7 +153,6 @@ EOF
120
153
 
121
154
  summary.add tags
122
155
 
123
-
124
156
  doc.root.xpath('records/section/x') do |x|
125
157
 
126
158
  s = "=%s\n%s\n=" % [x.text.lines.first[/#\w+$/], x.text.unescape]
@@ -163,5 +195,9 @@ EOF
163
195
  n.to_s + ( (10...20).include?(n) ? 'th' :
164
196
  %w{ th st nd rd th th th th th th }[n % 10] )
165
197
  end
198
+
199
+ def add(summary, name, s)
200
+ summary.add Rexle::Element.new(name).add_text s
201
+ end
166
202
 
167
203
  end
data/lib/liveblog.xsl CHANGED
@@ -36,6 +36,7 @@
36
36
  <aside>
37
37
  <ul>
38
38
  <li><xsl:value-of select='summary/date'/></li>
39
+ <li><a href='{summary/prev_day}' class='arrow'>&#8592;</a><a href='{summary/next_day}' class='arrow'>&#8594;</a></li>
39
40
  <li>
40
41
  <a href="{summary/edit_url}" rel="nofollow">edit</a>
41
42
  </li>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: liveblog
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Robertson
@@ -31,7 +31,7 @@ cert_chain:
31
31
  WoOSxvsTN7qoA8F0W4mkDpf+HhHxBOLTPykcHMIlx2gILLnNraaZ1rJlZAqWABGj
32
32
  v8lGgeeqqjd5QA==
33
33
  -----END CERTIFICATE-----
34
- date: 2015-03-16 00:00:00.000000000 Z
34
+ date: 2015-03-17 00:00:00.000000000 Z
35
35
  dependencies:
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: dynarex
@@ -42,7 +42,7 @@ dependencies:
42
42
  version: '1.5'
43
43
  - - ">="
44
44
  - !ruby/object:Gem::Version
45
- version: 1.5.7
45
+ version: 1.5.8
46
46
  type: :runtime
47
47
  prerelease: false
48
48
  version_requirements: !ruby/object:Gem::Requirement
@@ -52,7 +52,7 @@ dependencies:
52
52
  version: '1.5'
53
53
  - - ">="
54
54
  - !ruby/object:Gem::Version
55
- version: 1.5.7
55
+ version: 1.5.8
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: martile
58
58
  requirement: !ruby/object:Gem::Requirement
@@ -73,6 +73,26 @@ dependencies:
73
73
  - - ">="
74
74
  - !ruby/object:Gem::Version
75
75
  version: 0.5.2
76
+ - !ruby/object:Gem::Dependency
77
+ name: simple-config
78
+ requirement: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0.3'
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ version: 0.3.0
86
+ type: :runtime
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - "~>"
91
+ - !ruby/object:Gem::Version
92
+ version: '0.3'
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: 0.3.0
76
96
  description:
77
97
  email: james@r0bertson.co.uk
78
98
  executables: []
@@ -94,7 +114,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
94
114
  requirements:
95
115
  - - ">="
96
116
  - !ruby/object:Gem::Version
97
- version: '0'
117
+ version: 2.1.2
98
118
  required_rubygems_version: !ruby/object:Gem::Requirement
99
119
  requirements:
100
120
  - - ">="
@@ -102,7 +122,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
102
122
  version: '0'
103
123
  requirements: []
104
124
  rubyforge_project:
105
- rubygems_version: 2.2.2
125
+ rubygems_version: 2.4.6
106
126
  signing_key:
107
127
  specification_version: 4
108
128
  summary: Uses the Dynarex gem to create a daily live blog. Convenient for grouping
metadata.gz.sig CHANGED
Binary file