noticesys 0.2.1 → 0.3.0

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