@@ -6,85 +6,141 @@ UI.store = $rdf.graph()
66UI . fetcher = new $rdf . Fetcher ( UI . store )
77UI . updater = new $rdf . UpdateManager ( UI . store )
88
9-
10- function BookmarkItem ( props ) {
9+ function BookmarkItem ( props ) {
1110 const AUDIO_EXTENSIONS = / \. ( m 4 a | m p 4 a | m p g a | m p 2 | m p 2 a | m p 3 | m 2 a | m 3 a | w a v | w e b a | a a c | o g a | s p x ) ( $ | \? ) / i
1211 const VIDEO_EXTENSIONS = / \. ( m p 4 | o g [ g v ] | w e b m | m o v | m 4 v | m k v ) ( $ | \? ) / i
1312 const IMAGE_EXTENSIONS = / \. ( p n g | g i f | b m p | s v g | j p e g | j p g ) ( $ | \? ) / i
1413 const URL = / h t t p / i
1514
16-
1715 if ( props . recalls . match ( IMAGE_EXTENSIONS ) ) {
1816 return (
19- < div className = " box" >
17+ < div className = ' box' >
2018 < table >
2119 < tbody >
2220 < tr >
2321 < td > { props . id + 1 } . </ td >
24- < td > < a target = "_blank" href = { props . recalls } > { props . title } </ a > < a target = "_blank" href = { props . subject } > < img height = "10" width = "10" src = "./image/External.svg" /> </ a > </ td >
22+ < td >
23+ < a target = '_blank' href = { props . recalls } >
24+ { props . title }
25+ </ a > { ' ' }
26+ < a target = '_blank' href = { props . subject } >
27+ < img height = '10' width = '10' src = './image/External.svg' />
28+ </ a >
29+ </ td >
2530 </ tr >
2631 < tr >
27- < td > </ td >
28- < td > < sup > { moment . utc ( props . created ) . fromNow ( ) } by < a href = { props . maker } target = "_blank" style = { { color : 'inherit' } } > { props . maker } </ a > </ sup > </ td >
32+ < td > </ td >
33+ < td >
34+ < sup >
35+ { moment . utc ( props . created ) . fromNow ( ) } by{ ' ' }
36+ < a
37+ href = { props . maker }
38+ target = '_blank'
39+ style = { { color : 'inherit' } }
40+ >
41+ { props . maker }
42+ </ a >
43+ </ sup >
44+ </ td >
2945 </ tr >
3046 < tr >
31- < td > </ td >
32- < td > < img src = { props . recalls } /> </ td >
33-
47+ < td > </ td >
48+ < td >
49+ < img src = { props . recalls } />
50+ </ td >
3451 </ tr >
35-
3652 </ tbody >
3753 </ table >
38-
39- </ div > )
54+ </ div >
55+ )
4056 } else if ( props . recalls . match ( VIDEO_EXTENSIONS ) ) {
4157 return (
42- < div > { props . id + 1 } . < video controls autoplay = 'true' loop src = { props . recalls } /> </ div > )
58+ < div >
59+ { props . id + 1 } .{ ' ' }
60+ < video controls autoplay = 'true' loop src = { props . recalls } />
61+ </ div >
62+ )
4363 } else if ( props . recalls . match ( AUDIO_EXTENSIONS ) ) {
4464 return (
45- < div > { props . id + 1 } . < video controls autoplay = 'true' loop src = { props . recalls } /> </ div > )
46- } else if ( props . recalls . match ( URL ) ) {
47- return (
48- < div className = "box" >
49- < table >
50- < tbody >
51- < tr >
52- < td > { props . id + 1 } . </ td >
53- < td > < a target = "_blank" href = { props . recalls } > { props . title } </ a > < a target = "_blank" href = { props . subject } > < img height = "10" width = "10" src = "./image/External.svg" /> </ a > </ td >
54- </ tr >
55- < tr >
56- < td > </ td >
57- < td > < sup > { moment . utc ( props . created ) . fromNow ( ) } by < a href = { props . maker } target = "_blank" style = { { color : 'inherit' } } > { props . maker } </ a > </ sup > </ td >
58- </ tr >
59-
60- </ tbody >
61- </ table >
62-
63- </ div >
64- )
65- } else {
65+ < div >
66+ { props . id + 1 } .{ ' ' }
67+ < video controls autoplay = 'true' loop src = { props . recalls } />
68+ </ div >
69+ )
70+ } else if ( props . recalls . match ( URL ) ) {
6671 return (
67- < div className = " box" >
72+ < div className = ' box' >
6873 < table >
6974 < tbody >
7075 < tr >
7176 < td > { props . id + 1 } . </ td >
72- < td > < a target = "_blank" href = { props . recalls } > { props . title } </ a > < a target = "_blank" href = { props . subject } > < img height = "10" width = "10" src = "./image/External.svg" /> </ a > </ td >
77+ < td >
78+ < a target = '_blank' href = { props . recalls } >
79+ { props . title }
80+ </ a > { ' ' }
81+ < a target = '_blank' href = { props . subject } >
82+ < img height = '10' width = '10' src = './image/External.svg' />
83+ </ a >
84+ </ td >
7385 </ tr >
7486 < tr >
7587 < td > </ td >
76- < td > < sup > { moment . utc ( props . created ) . fromNow ( ) } by < a href = { props . maker } target = "_blank" style = { { color : 'inherit' } } > { props . maker } </ a > </ sup > </ td >
88+ < td >
89+ < sup >
90+ { moment . utc ( props . created ) . fromNow ( ) } by{ ' ' }
91+ < a
92+ href = { props . maker }
93+ target = '_blank'
94+ style = { { color : 'inherit' } }
95+ >
96+ { props . maker }
97+ </ a >
98+ </ sup >
99+ </ td >
100+ </ tr >
101+ </ tbody >
102+ </ table >
103+ </ div >
104+ )
105+ } else {
106+ return (
107+ < div className = 'box' >
108+ < table >
109+ < tbody >
110+ < tr >
111+ < td > { props . id + 1 } . </ td >
112+ < td >
113+ < a target = '_blank' href = { props . recalls } >
114+ { props . title }
115+ </ a > { ' ' }
116+ < a target = '_blank' href = { props . subject } >
117+ < img height = '10' width = '10' src = './image/External.svg' />
118+ </ a >
119+ </ td >
120+ </ tr >
121+ < tr >
122+ < td > </ td >
123+ < td >
124+ < sup >
125+ { moment . utc ( props . created ) . fromNow ( ) } by{ ' ' }
126+ < a
127+ href = { props . maker }
128+ target = '_blank'
129+ style = { { color : 'inherit' } }
130+ >
131+ { props . maker }
132+ </ a >
133+ </ sup >
134+ </ td >
77135 </ tr >
78-
79136 </ tbody >
80137 </ table >
81-
82138 </ div >
83139 )
84140 }
85141}
86142
87- function getTypeFromSubject ( subject ) {
143+ function getTypeFromSubject ( subject ) {
88144 let s = UI . store . sym ( subject )
89145 let p = UI . store . sym ( 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type' )
90146 let o = null
@@ -97,7 +153,7 @@ function getTypeFromSubject(subject) {
97153 }
98154}
99155
100- function getBookmarkFromSubject ( subject ) {
156+ function getBookmarkFromSubject ( subject ) {
101157 let s = UI . store . sym ( subject )
102158 let p = UI . store . sym ( 'http://www.w3.org/2002/01/bookmark#recalls' )
103159 let o = null
@@ -119,50 +175,65 @@ function getBookmarkFromSubject(subject) {
119175 w = UI . store . sym ( subject . split ( '#' ) [ 0 ] )
120176 let created = UI . store . any ( s , p , o , w )
121177
122- let bookmark = { 'recalls' : recalls . value , 'title' : title . value , 'maker' : maker . value , 'created' : created . value , 'subject' : subject }
178+ let bookmark = {
179+ recalls : recalls . value ,
180+ title : title . value ,
181+ created : created . value ,
182+ subject : subject
183+ }
184+ if ( maker ) {
185+ bookmark . maker = maker . value
186+ }
123187 return bookmark
124188}
125189
126190class Bookmark extends React . Component {
127- constructor ( props ) {
191+ constructor ( props ) {
128192 super ( props )
129193 let media = this . isMedia ( props . subject )
130- this . state = { 'media' : media , 'subject' : props . subject , 'title' : '' , bookmark : [ { 'recalls' : '' , 'title' : '' } ] }
194+ this . state = {
195+ media : media ,
196+ subject : props . subject ,
197+ title : '' ,
198+ bookmark : [ { recalls : '' , title : '' } ]
199+ }
131200 }
132201
133- fetchBookmark ( subject , force ) {
134- force = ! ! force
202+ fetchBookmark ( subject , force ) {
203+ force = ! ! force
135204 console . log ( 'fetch bookmark' , subject , 'force' , force )
136205 // hack to force fetcher
137206 UI . store = $rdf . graph ( )
138- UI . fetcher = new $rdf . Fetcher ( UI . store )
139- UI . fetcher . load ( subject , { force : true } ) . then ( response => {
140- var type = getTypeFromSubject ( subject )
141- var bm = [ ]
142- console . log ( 'type' , type ) ;
143-
144- if ( ! type ) {
145- let s = UI . store . sym ( subject )
146- let p = UI . store . sym ( 'http://purl.org/dc/terms/references' )
147- let subjects = UI . store . statementsMatching ( s , p )
148- for ( let subject of subjects ) {
149- bm . push ( getBookmarkFromSubject ( subject . object . value ) )
207+ UI . fetcher = new $rdf . Fetcher ( UI . store )
208+ UI . fetcher . load ( subject , { force : true } ) . then (
209+ response => {
210+ var type = getTypeFromSubject ( subject )
211+ var bm = [ ]
212+ console . log ( 'type' , type )
213+
214+ if ( ! type ) {
215+ let s = UI . store . sym ( subject )
216+ let p = UI . store . sym ( 'http://purl.org/dc/terms/references' )
217+ let subjects = UI . store . statementsMatching ( s , p )
218+ for ( let subject of subjects ) {
219+ bm . push ( getBookmarkFromSubject ( subject . object . value ) )
220+ }
221+
222+ bm = bm . sort ( function ( a , b ) {
223+ return b . created < a . created ? - 1 : b . created > a . created ? 1 : 0
224+ } )
225+
226+ this . setState ( { bookmark : bm } )
227+ } else {
228+ bm . push ( getBookmarkFromSubject ( subject ) )
229+
230+ this . setState ( { bookmark : bm } )
150231 }
151-
152- bm = bm . sort ( function ( a , b ) {
153- return ( b . created < a . created ) ? - 1 : ( ( b . created > a . created ) ? 1 : 0 ) ;
154- } )
155-
156- this . setState ( { 'bookmark' : bm } )
157-
158- } else {
159- bm . push ( getBookmarkFromSubject ( subject ) )
160-
161- this . setState ( { 'bookmark' : bm } )
232+ } ,
233+ err => {
234+ console . log ( err )
162235 }
163- } , err => {
164- console . log ( err )
165- } )
236+ )
166237 }
167238
168239 getUpdatesVia ( doc ) {
@@ -172,13 +243,13 @@ class Bookmark extends React.Component {
172243 return linkHeaders [ 0 ] . trim ( )
173244 }
174245
175- setRefreshHandler ( subject , handler ) {
246+ setRefreshHandler ( subject , handler ) {
176247 var self = this
177248 var wss = this . getUpdatesVia ( subject )
178249 console . log ( 'wss' , wss , 'subject' , subject )
179250 let w = new WebSocket ( wss )
180251 w . onmessage = function ( m ) {
181- let data = m . data
252+ let data = m . data
182253 console . log ( 'data' , data )
183254 if ( data . match ( / p u b .* / ) ) {
184255 console . log ( 'refresh' )
@@ -188,66 +259,68 @@ class Bookmark extends React.Component {
188259 }
189260 w . onopen = function ( ) {
190261 w . send ( 'sub ' + subject )
191- }
262+ }
192263 }
193264
194- refresh ( ) {
265+ refresh ( ) {
195266 this . fetchBookmark ( this . state . subject , true )
196267 }
197268
198- componentDidMount ( ) {
269+ componentDidMount ( ) {
199270 let subject = this . state . subject
200271 if ( this . isMedia ( subject ) === false ) {
201272 this . fetchBookmark ( subject )
202273 }
203274 if ( subject ) {
204275 console . log ( 'init subject' , subject )
205276 setTimeout ( ( ) => {
206- this . setRefreshHandler ( subject , this . refresh )
207- } , 1000 ) ;
277+ this . setRefreshHandler ( subject , this . refresh )
278+ } , 1000 )
208279 }
209280 }
210281
211- componentWillReceiveProps ( props ) {
282+ componentWillReceiveProps ( props ) {
212283 let subject = props . subject
213284 if ( this . isMedia ( subject ) === false ) {
214285 this . fetchBookmark ( subject )
215286 }
216287 }
217288
218- isMedia ( subject ) {
289+ isMedia ( subject ) {
219290 // TODO better test for linked data
220291 let isMedia = false
221- if ( subject . match ( / .t t l / ) || subject . match ( / \/ [ ^ . ] * $ / ) ) {
292+ if ( subject . match ( / .t t l / ) || subject . match ( / \/ [ ^ . ] * $ / ) ) {
222293 isMedia = false
223294 } else {
224295 isMedia = true
225296 }
226297 return isMedia
227298 }
228299
229- render ( ) {
300+ render ( ) {
230301 let med = this . isMedia ( this . props . subject )
231- console . log ( 'subject' , this . props . subject , med ) ;
302+ console . log ( 'subject' , this . props . subject , med )
232303
233304 if ( med === true ) {
234- return (
235- < Media href = { this . props . subject } />
236- )
305+ return < Media href = { this . props . subject } />
237306 } else {
238- const listItems = this . state . bookmark . map ( ( b , i ) =>
307+ const listItems = this . state . bookmark . map ( ( b , i ) => (
239308 < div >
240- < BookmarkItem key = { i } id = { i } recalls = { b . recalls } title = { b . title } maker = { b . maker } created = { b . created } subject = { b . subject } />
309+ < BookmarkItem
310+ key = { i }
311+ id = { i }
312+ recalls = { b . recalls }
313+ title = { b . title }
314+ maker = { b . maker }
315+ created = { b . created }
316+ subject = { b . subject }
317+ />
241318 </ div >
242- )
319+ ) )
243320
244- return (
245- < div > { listItems } </ div >
246- )
321+ return < div > { listItems } </ div >
247322 }
248323 }
249324}
250325
251-
252-
253326//REMOVE export default Bookmark
0 commit comments