noticesys 0.2.1 → 0.3.0

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
  SHA256:
3
- metadata.gz: d288e2ea5fd9a6be99076b447767fd120adcc2a0be9b7ebd1bdd92ced1296d0b
4
- data.tar.gz: de32569b9420ebae7f040b9ff636b96806deee430497e0e40aec5c32fdf428af
3
+ metadata.gz: 4079e24a9946239aea1bfbd9f32d590d3c61d4fe1d0708533bfaf389fa188fe4
4
+ data.tar.gz: b0cfe6648e0d8df499a850f51a7bcddd10e1c338bbbf61472a253f56d848b9f2
5
5
  SHA512:
6
- metadata.gz: 3e05af4fe17385335f3181c0c53034e39f0f8b676a7f0b4ff49ca517015edc490a3dd551b8226a9a9323a1c640b30088cbc20df04ad4b6e618e43ca1190b5a27
7
- data.tar.gz: 4f6eb36fb6a83b68fde2aff90edbb91ce8622e357fa2a1c6ac10bece8a3e4dd299a26199ba0abd3aaf7245a9af391d3372737b7e2e49d77c93efd8756e47d036
6
+ metadata.gz: 8a4a83f020a327d8eab7c5bf8213d624e0b3fa01569dacee4f728bcb20a74461cc94c98c842d4f7e39ad040d5db17a7fccaf8b410ee86e886f69df627c3d02e0
7
+ data.tar.gz: 2b7a7b81dc1d029f84a357e2f004ab00c380aa6b88f3b8c58b6961043f818b295ac6331517b4a35e7b11a5b29b605500f38083b8992769e8eb6889b7adb61129
checksums.yaml.gz.sig CHANGED
Binary file
data.tar.gz.sig CHANGED
Binary file
data/data/microblog.txt CHANGED
@@ -47,6 +47,34 @@
47
47
  <meta property="og:url" content="#{h[:url]}"/>
48
48
  <meta name="noticesys:card" content="notice"/>
49
49
 
50
+ %notice
51
+
52
+ <div class='notice'>
53
+ <div id='avatar' class='profile'>
54
+ <a href="/#{rx.topic}"><img src='#{dx.image}'/></a>
55
+ <div id='ucard'>
56
+ <div>
57
+ <img src='#{dx.image}'/>
58
+ </div>
59
+ <a href="/#{rx.topic}"><span class='title'>#{dx.title}</span></a>
60
+ <span class='username'>@#{username}</span>
61
+ <p>#{dx.bio}</p>
62
+
63
+ </div>
64
+ </div>
65
+ <div class='ncol2'>
66
+ <div class='user'><a href="#{rx.topic}"><span>#{dx.title}</span></a> @#{rx.topic} &middot; <a href="#{rx.link}" title="#{d}">#{relative_time
67
+ }</a><:svg/ellipsis>
68
+ </div>
69
+
70
+ #{description}
71
+ #{card2}
72
+ <div id='actions'>
73
+ <:svg/reply>
74
+ </div>
75
+ </div>
76
+ </div>
77
+
50
78
  %status
51
79
 
52
80
  <html>
@@ -68,6 +96,68 @@
68
96
  </body>
69
97
  </html>
70
98
 
99
+ %user
100
+
101
+ <html>
102
+ <head>
103
+ <title>#{dx.title} (@#{username}) | Microblog</title>
104
+ <meta charset='UTF-8'/>
105
+ <meta name='viewport' content='width=device-width, initial-scale=1'>
106
+ <link rel='stylesheet' type='text/css' href='#{@css_url}'/>
107
+
108
+ </head>
109
+ <body>
110
+ <div id='wrap' class='main'>
111
+ <header>
112
+ <div id='banner'>
113
+
114
+ </div>
115
+ <div id='search'>
116
+ <form action='/search'>
117
+ <input type='text' name='q' id='q' placeholder='Search microblogs'/>
118
+ </form>
119
+ </div>
120
+ </header>
121
+ <div style='clear: both'/>
122
+ <div class='row'>
123
+ <div class='column'>
124
+
125
+ </div>
126
+ <div class='column'>
127
+ #{s}
128
+
129
+ </div>
130
+ <div class='column'>
131
+ <h2>Currently</h2>
132
+
133
+ </div>
134
+ </div>
135
+ <div id='footer'>
136
+ <h2>Links</h2>
137
+ <ul>
138
+ <li><a href='about:blank'>blank</a></li>
139
+ </ul>
140
+ </div>
141
+ </div>
142
+ </body>
143
+ </html>
144
+
145
+ %ptop
146
+
147
+ <div id='ptop'>
148
+ <img src='#{dx.image}'/>
149
+ <span id='title'>#{dx.title}</span>
150
+ <span id='user'>@#{username}</span>
151
+ <p>#{dx.bio}</p>
152
+ </div>
153
+
154
+ <hr/>
155
+
156
+ %rsslink
157
+
158
+ <hr/>
159
+ <a href="//#{@static_urlbase}/microblog/u/#{username}/rss.xml">rss</a>
160
+
71
161
  %svg
72
162
  %article
73
163
 
@@ -77,8 +167,16 @@
77
167
 
78
168
  <svg viewBox="0 0 24 24" class="backarrow"><g><path d="M20 11H7.414l4.293-4.293c.39-.39.39-1.023 0-1.414s-1.023-.39-1.414 0l-6 6c-.39.39-.39 1.023 0 1.414l6 6c.195.195.45.293.707.293s.512-.098.707-.293c.39-.39.39-1.023 0-1.414L7.414 13H20c.553 0 1-.447 1-1s-.447-1-1-1z"></path></g></svg>
79
169
 
170
+ %ellipsis
171
+
172
+ <svg viewBox="0 0 24 24" class="ellipsis"><g><circle cx="5" cy="12" r="2"></circle><circle cx="12" cy="12" r="2"></circle><circle cx="19" cy="12" r="2"></circle></g></svg>
173
+
80
174
 
81
175
  %link
82
176
 
83
177
  <svg viewBox="0 0 24 24"><g><path d="M11.96 14.945c-.067 0-.136-.01-.203-.027-1.13-.318-2.097-.986-2.795-1.932-.832-1.125-1.176-2.508-.968-3.893s.942-2.605 2.068-3.438l3.53-2.608c2.322-1.716 5.61-1.224 7.33 1.1.83 1.127 1.175 2.51.967 3.895s-.943 2.605-2.07 3.438l-1.48 1.094c-.333.246-.804.175-1.05-.158-.246-.334-.176-.804.158-1.05l1.48-1.095c.803-.592 1.327-1.463 1.476-2.45.148-.988-.098-1.975-.69-2.778-1.225-1.656-3.572-2.01-5.23-.784l-3.53 2.608c-.802.593-1.326 1.464-1.475 2.45-.15.99.097 1.975.69 2.778.498.675 1.187 1.15 1.992 1.377.4.114.633.528.52.928-.092.33-.394.547-.722.547z"></path><path d="M7.27 22.054c-1.61 0-3.197-.735-4.225-2.125-.832-1.127-1.176-2.51-.968-3.894s.943-2.605 2.07-3.438l1.478-1.094c.334-.245.805-.175 1.05.158s.177.804-.157 1.05l-1.48 1.095c-.803.593-1.326 1.464-1.475 2.45-.148.99.097 1.975.69 2.778 1.225 1.657 3.57 2.01 5.23.785l3.528-2.608c1.658-1.225 2.01-3.57.785-5.23-.498-.674-1.187-1.15-1.992-1.376-.4-.113-.633-.527-.52-.927.112-.4.528-.63.926-.522 1.13.318 2.096.986 2.794 1.932 1.717 2.324 1.224 5.612-1.1 7.33l-3.53 2.608c-.933.693-2.023 1.026-3.105 1.026z"></path></g></svg>
178
+
179
+ %reply
180
+
181
+ <svg viewBox="0 0 24 24" <g><path d="M14.046 2.242l-4.148-.01h-.002c-4.374 0-7.8 3.427-7.8 7.802 0 4.098 3.186 7.206 7.465 7.37v3.828c0 .108.044.286.12.403.142.225.384.347.632.347.138 0 .277-.038.402-.118.264-.168 6.473-4.14 8.088-5.506 1.902-1.61 3.04-3.97 3.043-6.312v-.017c-.006-4.367-3.43-7.787-7.8-7.788zm3.787 12.972c-1.134.96-4.862 3.405-6.772 4.643V16.67c0-.414-.335-.75-.75-.75h-.396c-3.66 0-6.318-2.476-6.318-5.886 0-3.534 2.768-6.302 6.3-6.302l4.147.01h.002c3.532 0 6.3 2.766 6.302 6.296-.003 1.91-.942 3.844-2.514 5.176z"></path></g></svg>
84
182
 
data/lib/noticesys.rb CHANGED
@@ -5,10 +5,10 @@
5
5
  require 'down' # file downloader
6
6
  require 'weblet' # HTML retrieval
7
7
  require 'dynarex' # flat file storage system
8
+ require 'unichron' # universal chron tool (i.e. time calculation)
8
9
  require 'ogextractor' # extract metadata
9
10
 
10
11
 
11
-
12
12
  module NoticeSys
13
13
 
14
14
  class Client
@@ -127,14 +127,74 @@ module NoticeSys
127
127
 
128
128
  end
129
129
 
130
+
131
+ class CardView
132
+
133
+ def initialize(weblet)
134
+
135
+ @w = weblet
136
+
137
+ end
138
+
139
+ def render(dx, rx, card)
140
+
141
+ card2 = case card.keys.first
142
+ when :images
143
+
144
+ card[:images].map.with_index do |img, i|
145
+
146
+ href = [dx.link.sub(/\/$/,''), rx.topic, 'status', rx.id,
147
+ 'photo', (i+1).to_s ].join('/')
148
+ url, align = img[:url], img[:align]
149
+ "<a href='%s'><div class='top-crop %s'><img class='img1' src='%s'/></div></a>" % [href, align, url]
150
+
151
+ end.join
152
+
153
+ when :summary_large_image
154
+
155
+ h2 = card[:summary_large_image]
156
+
157
+ rawdesc = h2[:desc]
158
+
159
+ desc = rawdesc.length > 147 ? rawdesc[0..147] + '...' : rawdesc
160
+ site = h2[:url][/https?:\/\/([^\/]+)/,1].sub(/^www\./,'')
161
+ title = h2[:title]
162
+ img = h2[:img]
163
+ url = h2[:url]
164
+
165
+ @w.render('card', binding)
166
+
167
+ when :summary
168
+
169
+ h2 = card[:summary]
170
+
171
+ rawdesc = h2[:desc]
172
+
173
+ desc = rawdesc.length > 95 ? rawdesc[0..95] + '...' : rawdesc
174
+ site = h2[:url][/https?:\/\/([^\/]+)/,1].sub(/^www\./,'')
175
+ title = h2[:title].length > 46 ? h2[:title][0..46] + '...' : h2[:title]
176
+ img = h2[:img]
177
+ url = h2[:url]
178
+
179
+ img_element = if img then
180
+ "<img src='#{img}'>"
181
+ else
182
+ @w.render('svg/article')
183
+ end
184
+
185
+ @w.render('card2', binding)
186
+
187
+ end
188
+ end
189
+ end
190
+
130
191
  class StatusView
131
192
 
132
- def initialize(basepath, xslfile, css_url, weblet_file=nil)
193
+ def initialize(basepath, xslfile, css_url, weblet_file)
133
194
 
134
195
  @basepath, @xslfile, @css_url = basepath, xslfile, css_url
135
- weblet_file ||= File.join(File.dirname(__FILE__), '..',
136
- 'data', 'microblog.txt')
137
196
  @w = Weblet.new(weblet_file, binding)
197
+ @card = CardView.new(@w)
138
198
 
139
199
  end
140
200
 
@@ -190,7 +250,7 @@ module NoticeSys
190
250
  #img = h[:img].sub(/small(?=\.\w+$)/,'large')
191
251
  img = h[:img]
192
252
  metadata = @w.render(:meta, binding)
193
- [render_card(dx, rx, card), metadata]
253
+ [@card.render(dx, rx, card), metadata]
194
254
 
195
255
  end
196
256
  else
@@ -215,58 +275,66 @@ module NoticeSys
215
275
 
216
276
  end
217
277
 
218
- private
278
+ end
279
+
280
+ class StatusListView
219
281
 
220
- def render_card(dx, rx, card)
282
+ def initialize(basepath, css_url, weblet_file, static_urlbase)
221
283
 
222
- card2 = case card.keys.first
223
- when :images
284
+ @basepath, @css_url, @static_urlbase = basepath, css_url, static_urlbase
285
+ @w = Weblet.new(weblet_file, binding)
286
+ @card = CardView.new(@w)
224
287
 
225
- card[:images].map.with_index do |img, i|
288
+ end
289
+
290
+ def render(username)
291
+
292
+ s = ''
293
+
294
+ dx = Dynarex.new(File.join(@basepath, username, 'feed.xml'))
295
+
296
+ s += @w.render 'user/ptop', binding
297
+
298
+ notices = dx.all.map do |rx|
299
+
300
+ card2 = ''
301
+ rawcard = rx.to_h[:card]
226
302
 
227
- href = [dx.link.sub(/\/$/,''), rx.topic, 'status', rx.id,
228
- 'photo', (i+1).to_s ].join('/')
229
- url, align = img[:url], img[:align]
230
- "<a href='%s'><div class='top-crop %s'><img class='img1' src='%s'/></div></a>" % [href, align, url]
303
+ card2 = if rawcard and rawcard.length > 10 then
304
+
305
+ card = JSON.parse(rawcard, symbolize_names: true)
231
306
 
232
- end.join
307
+ if card.is_a? Hash then
308
+ @card.render(dx, rx, card)
309
+ end
310
+
311
+ else
312
+ ''
313
+ end
314
+
315
+ t2 = Time.at rx.id.to_s[0..9].to_i
316
+ relative_time = Unichron.new(t2).elapsed
233
317
 
234
- when :summary_large_image
235
-
236
- h2 = card[:summary_large_image]
237
-
238
- rawdesc = h2[:desc]
239
-
240
- desc = rawdesc.length > 147 ? rawdesc[0..147] + '...' : rawdesc
241
- site = h2[:url][/https?:\/\/([^\/]+)/,1].sub(/^www\./,'')
242
- title = h2[:title]
243
- img = h2[:img]
244
- url = h2[:url]
245
-
246
- @w.render('card', binding)
247
-
248
- when :summary
249
-
250
- h2 = card[:summary]
251
-
252
- rawdesc = h2[:desc]
253
-
254
- desc = rawdesc.length > 95 ? rawdesc[0..95] + '...' : rawdesc
255
- site = h2[:url][/https?:\/\/([^\/]+)/,1].sub(/^www\./,'')
256
- title = h2[:title].length > 46 ? h2[:title][0..46] + '...' : h2[:title]
257
- img = h2[:img]
258
- url = h2[:url]
318
+ d = t2.strftime("%I:%M%p %b %d %Y")
259
319
 
260
- img_element = if img then
261
- "<img src='#{img}'>"
320
+ description = if rx.description.length > 1 then
321
+ doc = Rexle.new "<node>%s</node>" % rx.description.gsub(/<\/?p>/,'')
322
+ doc.root.xpath('img|div').each(&:delete)
323
+ "<p>%s</p>" % doc.root.xml
262
324
  else
263
- @w.render('svg/article')
325
+ ''
264
326
  end
265
327
 
266
- @w.render('card2', binding)
267
-
328
+ @w.render :notice, binding
329
+
268
330
  end
269
- end
331
+
332
+ s += notices.join
333
+ s += @w.render 'user/rsslink', binding
334
+ @w.render :user, binding
335
+
336
+ end
337
+
270
338
  end
271
339
 
272
340
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: noticesys
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Robertson
@@ -97,6 +97,26 @@ dependencies:
97
97
  - - ">="
98
98
  - !ruby/object:Gem::Version
99
99
  version: 1.8.27
100
+ - !ruby/object:Gem::Dependency
101
+ name: unichron
102
+ requirement: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ - - "~>"
105
+ - !ruby/object:Gem::Version
106
+ version: '0.3'
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: 0.3.2
110
+ type: :runtime
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: '0.3'
117
+ - - ">="
118
+ - !ruby/object:Gem::Version
119
+ version: 0.3.2
100
120
  - !ruby/object:Gem::Dependency
101
121
  name: ogextractor
102
122
  requirement: !ruby/object:Gem::Requirement
metadata.gz.sig CHANGED
Binary file