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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/data/microblog.txt +98 -0
- data/lib/noticesys.rb +114 -46
- metadata +21 -1
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4079e24a9946239aea1bfbd9f32d590d3c61d4fe1d0708533bfaf389fa188fe4
|
4
|
+
data.tar.gz: b0cfe6648e0d8df499a850f51a7bcddd10e1c338bbbf61472a253f56d848b9f2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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} · <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
|
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
|
-
[
|
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
|
-
|
278
|
+
end
|
279
|
+
|
280
|
+
class StatusListView
|
219
281
|
|
220
|
-
def
|
282
|
+
def initialize(basepath, css_url, weblet_file, static_urlbase)
|
221
283
|
|
222
|
-
|
223
|
-
|
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
|
-
|
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
|
-
|
228
|
-
|
229
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
261
|
-
"<
|
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
|
-
|
325
|
+
''
|
264
326
|
end
|
265
327
|
|
266
|
-
@w.render
|
267
|
-
|
328
|
+
@w.render :notice, binding
|
329
|
+
|
268
330
|
end
|
269
|
-
|
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.
|
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
|