pig-media-server 0.3.2 → 2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/bin/pig-media-server +4 -1
- data/gulpfile.js +33 -0
- data/javascripts/application.js +117 -0
- data/javascripts/chromecast.js +57 -0
- data/javascripts/components/head.js +106 -0
- data/javascripts/components/list.js +104 -0
- data/javascripts/components/new_flag.js +23 -0
- data/javascripts/components/player.js +171 -0
- data/javascripts/components/query_list.js +68 -0
- data/javascripts/components/sort.js +64 -0
- data/javascripts/components/watch.js +48 -0
- data/javascripts/controller.js +62 -0
- data/javascripts/custom_list.js +14 -0
- data/javascripts/event_dispatcher.js +21 -0
- data/javascripts/recent.js +34 -0
- data/javascripts/utils.js +22 -0
- data/javascripts/video.js +10 -0
- data/lib/pig-media-server/api.rb +96 -0
- data/lib/pig-media-server/aspect.rb +10 -5
- data/lib/pig-media-server/backup.rb +69 -0
- data/lib/pig-media-server/cli.rb +60 -25
- data/lib/pig-media-server/crawl.rb +41 -5
- data/lib/pig-media-server/kindle_send.rb +31 -24
- data/lib/pig-media-server/model/data.rb +106 -0
- data/lib/pig-media-server/model/migrate.rb +34 -0
- data/lib/pig-media-server/model/pig.rb +11 -2
- data/lib/pig-media-server/version.rb +1 -1
- data/lib/pig-media-server/views/_custom_links.haml +4 -0
- data/lib/pig-media-server/views/_ft_flv.haml +1 -0
- data/lib/pig-media-server/views/_ft_pdf.haml +0 -0
- data/lib/pig-media-server/views/_ft_video.haml +9 -4
- data/lib/pig-media-server/views/_link.haml +4 -1
- data/lib/pig-media-server/views/_new_flag.haml +1 -1
- data/lib/pig-media-server/views/app.scss +10 -1
- data/lib/pig-media-server/views/bundle.js +13 -0
- data/lib/pig-media-server/views/chromecast.coffee +54 -0
- data/lib/pig-media-server/views/config.coffee +13 -1
- data/lib/pig-media-server/views/config.haml +27 -4
- data/lib/pig-media-server/views/feed.builder +3 -2
- data/lib/pig-media-server/views/flv.coffee +33 -0
- data/lib/pig-media-server/views/index.haml +11 -5
- data/lib/pig-media-server/views/meta.haml +4 -4
- data/lib/pig-media-server/views/movie.coffee +65 -39
- data/lib/pig-media-server/views/react.haml +22 -0
- data/lib/pig-media-server/views/remote.haml +2 -2
- data/lib/pig-media-server/views/session.coffee +5 -0
- data/lib/pig-media-server/views/storage.coffee +5 -16
- data/lib/pig-media-server/views/sub.haml +5 -6
- data/lib/pig-media-server/views/subview.coffee +109 -19
- data/lib/pig-media-server/views/tv.coffee +97 -0
- data/lib/pig-media-server/views/tv.haml +33 -0
- data/lib/pig-media-server/views/unread.coffee +10 -0
- data/lib/pig-media-server/web.rb +102 -37
- data/package.json +23 -0
- data/pig-media-server.gemspec +5 -0
- metadata +123 -38
@@ -0,0 +1,54 @@
|
|
1
|
+
currentMedia = null
|
2
|
+
currentVolume = 0.5
|
3
|
+
progressFlag = 1
|
4
|
+
mediaCurrentTime = 0
|
5
|
+
session = null
|
6
|
+
|
7
|
+
null_func = (obj)-> ''
|
8
|
+
|
9
|
+
sessionListener = (e)->
|
10
|
+
console.log('New session ID: ' + e.sessionId)
|
11
|
+
session = e
|
12
|
+
|
13
|
+
onRequestSessionSuccess = (e)->
|
14
|
+
console.log("session success: " + e.sessionId)
|
15
|
+
session = e
|
16
|
+
onMediaDiscovered('onRequestSession', session.media[0]) if (session.media.length != 0)
|
17
|
+
session.addMediaListener(
|
18
|
+
onMediaDiscovered.bind(this, 'addMediaListener'))
|
19
|
+
|
20
|
+
onMediaDiscovered = (how, media)->
|
21
|
+
console.log("new media session ID:" + media.mediaSessionId)
|
22
|
+
currentMedia = media
|
23
|
+
mediaCurrentTime = currentMedia.currentTime
|
24
|
+
|
25
|
+
initializeCastApi = ->
|
26
|
+
sessionRequest = new chrome.cast.SessionRequest(chrome.cast.media.DEFAULT_MEDIA_RECEIVER_APP_ID)
|
27
|
+
apiConfig = new chrome.cast.ApiConfig(sessionRequest, sessionListener, null_func)
|
28
|
+
chrome.cast.initialize(apiConfig, null_func, null_func)
|
29
|
+
|
30
|
+
console.log("launching app...")
|
31
|
+
chrome.cast.requestSession(onRequestSessionSuccess, null_func)
|
32
|
+
$('a.chromecast').show()
|
33
|
+
|
34
|
+
window.chrome_cast = (mediaURL, key)->
|
35
|
+
mediaInfo = new chrome.cast.media.MediaInfo(mediaURL)
|
36
|
+
mediaInfo.contentType = 'video/mp4'
|
37
|
+
request = new chrome.cast.media.LoadRequest(mediaInfo)
|
38
|
+
request.autoplay = true
|
39
|
+
request.currentTime = 0
|
40
|
+
session.loadMedia(request, onMediaDiscovered.bind(this, 'loadMedia'), null_func)
|
41
|
+
|
42
|
+
get_recents (recents)->
|
43
|
+
recents["movie/#{key}"] = {time: parseInt((new Date)/1000), type: 'movie'}
|
44
|
+
window.save_recents recents
|
45
|
+
$('.new_flag').text('')
|
46
|
+
$('.main_span').attr('data-new': '')
|
47
|
+
unless $('#action').text() == 'remote'
|
48
|
+
setTimeout ->
|
49
|
+
window.set_new()
|
50
|
+
,2000
|
51
|
+
|
52
|
+
window['__onGCastApiAvailable'] = (loaded, errorInfo)->
|
53
|
+
if loaded
|
54
|
+
initializeCastApi()
|
@@ -1,7 +1,14 @@
|
|
1
1
|
save = ->
|
2
2
|
localStorage.gyazo = $('#gyazo').val()
|
3
3
|
if $('#kindle_to').get(0)
|
4
|
-
save_to_pig(
|
4
|
+
save_to_pig('kindle_to', $('#kindle_to').val())
|
5
|
+
save_to_pig('kindle_from', $('#kindle_from').val())
|
6
|
+
save_to_pig('token_secret', $('#token_secret').val())
|
7
|
+
save_to_pig('token', $('#token').val())
|
8
|
+
save_to_pig('consumer_secret', $('#consumer_secret').val())
|
9
|
+
save_to_pig('consumer_key', $('#consumer_key').val())
|
10
|
+
save_to_pig('remote', $('#remote').prop('checked'))
|
11
|
+
save_to_pig('animetick', $('#animetick').val())
|
5
12
|
|
6
13
|
|
7
14
|
$ ->
|
@@ -13,4 +20,9 @@ $ ->
|
|
13
20
|
|
14
21
|
get_from_pig('kindle_to', (data)-> $('#kindle_to').val(data))
|
15
22
|
get_from_pig('kindle_from', (data)-> $('#kindle_from').val(data))
|
23
|
+
get_from_pig('consumer_key', (data)-> $('#consumer_key').val(data))
|
24
|
+
get_from_pig('consumer_secret', (data)-> $('#consumer_secret').val(data))
|
25
|
+
get_from_pig('token', (data)-> $('#token').val(data))
|
26
|
+
get_from_pig('token_secret', (data)-> $('#token_secret').val(data))
|
27
|
+
get_from_pig('animetick', (data)-> $('#animetick').val(data))
|
16
28
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
<!DOCTYPE html>
|
2
2
|
%meta{charset: 'UTF-8'}
|
3
|
-
%title Config -
|
4
|
-
%script{src: '
|
3
|
+
%title Config - #{config['page_title']}
|
4
|
+
%script{src: 'https://code.jquery.com/jquery.min.js'}
|
5
5
|
%script{src: '/config.js'}
|
6
6
|
%script{src: '/storage.js'}
|
7
7
|
%link{href: '/app.css', rel: 'stylesheet', type: 'text/css'}
|
@@ -13,7 +13,7 @@
|
|
13
13
|
Login as
|
14
14
|
%span#user_id=session[:user_id]
|
15
15
|
%a{href: '/sessions'} Logout
|
16
|
-
%h1
|
16
|
+
%h1 #{config['page_title']}
|
17
17
|
%form{method: 'GET', action: '/'}
|
18
18
|
%input{name: 'query', value: params[:query]}
|
19
19
|
%button Search
|
@@ -29,7 +29,7 @@
|
|
29
29
|
%tr
|
30
30
|
%th Use Remote?
|
31
31
|
%td
|
32
|
-
-if
|
32
|
+
-if remote?
|
33
33
|
%input#remote{type: :checkbox}(checked)
|
34
34
|
-else
|
35
35
|
%input#remote{type: :checkbox}
|
@@ -41,7 +41,30 @@
|
|
41
41
|
%th Kindle From
|
42
42
|
%td
|
43
43
|
%input#kindle_from{size: 60}
|
44
|
+
%tr
|
45
|
+
%th Consumer Key
|
46
|
+
%td
|
47
|
+
%input#consumer_key
|
48
|
+
%tr
|
49
|
+
%th Consumer Secret
|
50
|
+
%td
|
51
|
+
%input#consumer_secret
|
52
|
+
%tr
|
53
|
+
%th Token
|
54
|
+
%td
|
55
|
+
%input#token
|
56
|
+
%tr
|
57
|
+
%th Token Secret
|
58
|
+
%td
|
59
|
+
%input#token_secret
|
60
|
+
%tr
|
61
|
+
%th Animetick User Name
|
62
|
+
%td
|
63
|
+
%input#animetick
|
44
64
|
|
45
65
|
%tr
|
46
66
|
%td
|
47
67
|
%button#save Save
|
68
|
+
|
69
|
+
:css
|
70
|
+
table input{width:600px}
|
@@ -1,9 +1,9 @@
|
|
1
1
|
xml.instruct! :xml, :version => '1.0'
|
2
2
|
xml.rss :version => "2.0" do
|
3
3
|
xml.channel do
|
4
|
-
xml.title "
|
4
|
+
xml.title "#{config['page_title']} - feed - '#{h params[:query]}'"
|
5
5
|
xml.description "pig feed"
|
6
|
-
xml.link "http://#{config['hostname']}
|
6
|
+
xml.link "http://#{config['hostname']}/?query=#{CGI.escape params[:query]}"
|
7
7
|
|
8
8
|
@list.each do |p|
|
9
9
|
xml.item do
|
@@ -12,6 +12,7 @@ xml.rss :version => "2.0" do
|
|
12
12
|
xml.description p.name
|
13
13
|
xml.pubDate p.mtime.rfc822
|
14
14
|
xml.guid p.url
|
15
|
+
xml.key p.key
|
15
16
|
xml.enclosure url: p.url, title: 'Podcast'
|
16
17
|
end
|
17
18
|
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
flv = (link)->
|
2
|
+
$link = $(link)
|
3
|
+
key = $(link).attr 'key'
|
4
|
+
url = $("##{key} .main_link").attr('href')
|
5
|
+
$link.click ->
|
6
|
+
$('#area').html('')
|
7
|
+
$('#area').css 'min-height', 0
|
8
|
+
width = $('body').width()
|
9
|
+
$('<embed>').attr(src: "/OSplayer.swf?movie=#{url}&autoload=on&autoplay=on&volume=200", allowFullScreen: true, type: 'application/x-shockwave-flash', width: '800', height: 600).appendTo('#area')
|
10
|
+
$('<br>').appendTo('#area')
|
11
|
+
$('<a>close video</a>').attr('href', 'javascript:void(0)').click(->
|
12
|
+
$('#area').html('')
|
13
|
+
$('#area').css 'min-height', 0
|
14
|
+
).appendTo('#area')
|
15
|
+
|
16
|
+
window.get_recents (recents)->
|
17
|
+
recents['movie/'+key] = {time: parseInt((new Date)/1000), type: 'movie'}
|
18
|
+
window.save_recents recents
|
19
|
+
$('.new_flag').text('')
|
20
|
+
$('.main_span').attr('data-new': '')
|
21
|
+
unless $('#action').text() == 'remote'
|
22
|
+
setTimeout ->
|
23
|
+
window.set_new()
|
24
|
+
,2000
|
25
|
+
|
26
|
+
window.watch_flv = flv
|
27
|
+
|
28
|
+
initialize_flv = ->
|
29
|
+
$.each $('a.flv'), -> flv(this)
|
30
|
+
|
31
|
+
$ ->
|
32
|
+
initialize_flv() if $('#action').text() == 'list' or $('#action').text() == 'others'
|
33
|
+
|
@@ -1,8 +1,9 @@
|
|
1
1
|
!!!
|
2
|
-
%title
|
2
|
+
%title= title
|
3
3
|
%meta(content='width=320, initial-scale=1.0, maximum-scale=1.0, user-scalable=no' name='viewport')
|
4
|
-
%script
|
5
|
-
|
4
|
+
%script(type="text/javascript" src="https://www.gstatic.com/cv/js/sender/v1/cast_sender.js")
|
5
|
+
%script{src: 'https://code.jquery.com/jquery.min.js'}
|
6
|
+
-%w{flv storage session movie unread book book2 swipe chromecast}.each do |js|
|
6
7
|
%script{src: "/#{js}.js"}
|
7
8
|
|
8
9
|
%link{href: '/app.css', rel: 'stylesheet', type: 'text/css'}
|
@@ -15,18 +16,23 @@
|
|
15
16
|
-else
|
16
17
|
Login as
|
17
18
|
%span#user_id=session[:user_id]
|
18
|
-
%a{href: '
|
19
|
+
%a{href: 'javascript:void(0)', onclick: 'logout()'} Logout
|
19
20
|
%p=flash[:notice]
|
20
|
-
%h1
|
21
|
+
%h1 #{config['page_title']}
|
21
22
|
%form{method: 'GET', action: '/'}
|
22
23
|
%input{name: 'query', value: params[:query]}
|
23
24
|
%button Search
|
24
25
|
%a{href: '/latest'} Latest
|
25
26
|
%a{href: '/config'} Config
|
27
|
+
-if session[:user_id]
|
28
|
+
%a{href: '/stars'} Stars
|
29
|
+
%a{href: '/tv'} Cast
|
26
30
|
%a#only-new{href: 'javascript:void(0)'} Only New
|
27
31
|
-if config['custom_list'].class == Hash
|
28
32
|
-config['custom_list'].each do |k,v|
|
29
33
|
%a{href: "/custom?name=#{CGI.escape k}"}=k
|
34
|
+
-if remote?
|
35
|
+
%a(href='javascript:void(0)' onclick='save_to_pig("remote_key", "")') Stop Remote
|
30
36
|
-if @page
|
31
37
|
-if params[:query] and params[:query].empty? == false
|
32
38
|
%p
|
@@ -1,13 +1,13 @@
|
|
1
1
|
<!DOCTYPE html>
|
2
2
|
%meta{charset: 'UTF-8'}
|
3
|
-
%title
|
4
|
-
%script{src: '
|
3
|
+
%title= title
|
4
|
+
%script{src: 'https://code.jquery.com/jquery.min.js'}
|
5
5
|
%script{src: '/meta.js'}
|
6
6
|
|
7
7
|
%link{href: '/app.css', rel: 'stylesheet', type: 'text/css'}
|
8
8
|
<meta content='width=320, initial-scale=1.0, maximum-scale=1.0, user-scalable=no' name='viewport' />
|
9
9
|
#all
|
10
|
-
%h1
|
10
|
+
%h1 #{config['page_title']}
|
11
11
|
%p=flash[:notice]
|
12
12
|
%form{method: 'GET', action: '/'}
|
13
13
|
%input{name: 'query', value: params[:query]}
|
@@ -29,7 +29,7 @@
|
|
29
29
|
%p
|
30
30
|
%video{src: @p.url, controls: :controls, style: 'max-width:50%;max-height:50%'}
|
31
31
|
%p
|
32
|
-
-if
|
32
|
+
-if remote?
|
33
33
|
%a.remote{href: 'javascript:void(0)', key: @p.record.key} remote
|
34
34
|
-if @p.metadata
|
35
35
|
%h4 Data
|
@@ -1,4 +1,4 @@
|
|
1
|
-
watch = (link)->
|
1
|
+
window.watch = (link)->
|
2
2
|
$link = $(link)
|
3
3
|
key = $(link).attr 'key'
|
4
4
|
url = $("##{key} .main_link").attr('href')
|
@@ -9,8 +9,7 @@ watch = (link)->
|
|
9
9
|
$('#area').html('')
|
10
10
|
$('#area').css 'min-height', 0
|
11
11
|
width = $('body').width()
|
12
|
-
$('<
|
13
|
-
$('<video>').attr(id: 'play', src: url, key: key, controls: 'controles').css('width', '98%').css('max-height', '98%').appendTo('#area')
|
12
|
+
$('<video>').click(-> pause()).attr(id: 'play', src: url, key: key, controls: 'controles').css('width', '98%').css('max-height', '98%').appendTo('#area')
|
14
13
|
$('<br>').appendTo('#area')
|
15
14
|
$('<a href="javascript:void(0)">Gyazo</a>').click(-> gyazo()).appendTo('#area')
|
16
15
|
$('<span> </span>').appendTo('#area')
|
@@ -71,6 +70,7 @@ movie_size = (origin_height)->
|
|
71
70
|
setTimeout ->
|
72
71
|
if $('#play').length > 0
|
73
72
|
space_height = parseInt(($('#area').height() - $('#play').height())/4)
|
73
|
+
space_height = space_height *2
|
74
74
|
if origin_height != space_height
|
75
75
|
$('#area').css 'min-height', $(window).height()
|
76
76
|
$('.space').css 'height', space_height if space_height != origin_height
|
@@ -78,41 +78,28 @@ movie_size = (origin_height)->
|
|
78
78
|
movie_size(origin_height)
|
79
79
|
, 20
|
80
80
|
|
81
|
-
gyazo = ->
|
82
|
-
c = document.querySelector '#canvas'
|
83
|
-
v = document.querySelector '#play'
|
84
|
-
context = c.getContext '2d'
|
85
|
-
c.width = v.videoWidth
|
86
|
-
c.height = v.videoHeight
|
87
|
-
context.drawImage(v, 0, 0)
|
88
|
-
url = c.toDataURL()
|
89
|
-
$.post('/gyazo', {url: url, point: localStorage.gyazo}).success((data)->
|
90
|
-
window.open(data.url, "", "width=500,height=400")
|
91
|
-
copyArea = $("<textarea/>")
|
92
|
-
copyArea.text(data.url)
|
93
|
-
$("body").append(copyArea)
|
94
|
-
copyArea.select()
|
95
|
-
document.execCommand("copy")
|
96
|
-
copyArea.remove()
|
97
|
-
)
|
98
|
-
|
99
81
|
next_loop = ->
|
100
82
|
setTimeout ->
|
101
83
|
if $('video')[0]
|
102
84
|
v = document.querySelector 'video'
|
103
85
|
if v.currentTime== v.duration
|
104
|
-
|
105
|
-
keys = $.map($('.watch'), (n,i)-> $(n).attr('key'))
|
106
|
-
index = keys.indexOf key
|
107
|
-
next = keys[index-1]
|
108
|
-
if next
|
109
|
-
$('.watch[key="'+next+'"]').click()
|
110
|
-
else
|
111
|
-
next = keys[keys.length-1]
|
112
|
-
$('.watch[key="'+next+'"]').click()
|
86
|
+
next_movie()
|
113
87
|
next_loop()
|
114
88
|
,200
|
115
89
|
|
90
|
+
next_movie = ->
|
91
|
+
if $('video')[0]
|
92
|
+
v = document.querySelector 'video'
|
93
|
+
key = $(v).attr 'key'
|
94
|
+
keys = $.map($('.watch'), (n,i)-> $(n).attr('key'))
|
95
|
+
index = keys.indexOf key
|
96
|
+
if $('#tv').text() == 'true'
|
97
|
+
next = keys[index+1]
|
98
|
+
else
|
99
|
+
next = keys[index-1]
|
100
|
+
if next
|
101
|
+
$('.watch[key="'+next+'"]').click()
|
102
|
+
|
116
103
|
seek = (count)->
|
117
104
|
node = document.querySelector '#play'
|
118
105
|
node.currentTime = node.currentTime + count
|
@@ -123,22 +110,55 @@ pause = ->
|
|
123
110
|
node.play()
|
124
111
|
else
|
125
112
|
node.pause()
|
113
|
+
window.gyazo = ->
|
114
|
+
c = document.querySelector '#canvas'
|
115
|
+
v = document.querySelector 'video'
|
116
|
+
context = c.getContext '2d'
|
117
|
+
c.width = v.videoWidth
|
118
|
+
c.height = v.videoHeight
|
119
|
+
context.drawImage(v, 0, 0)
|
120
|
+
url = c.toDataURL()
|
121
|
+
$.post('/gyazo', {url: url, point: localStorage.gyazo}).success((data)->
|
122
|
+
window.open(data.url, "", "width=500,height=400")
|
123
|
+
)
|
126
124
|
|
127
|
-
|
128
|
-
|
125
|
+
window.tweet = ->
|
126
|
+
c = document.querySelector '#canvas'
|
127
|
+
v = document.querySelector 'video'
|
128
|
+
context = c.getContext '2d'
|
129
|
+
c.width = v.videoWidth
|
130
|
+
c.height = v.videoHeight
|
131
|
+
context.drawImage(v, 0, 0)
|
132
|
+
url = c.toDataURL()
|
133
|
+
$.post('/gyazo/tweet', {url: url}).success((data)->
|
134
|
+
true
|
135
|
+
)
|
129
136
|
|
130
|
-
|
131
|
-
|
137
|
+
window.tweet_with_comment = ->
|
138
|
+
c = document.querySelector '#canvas'
|
139
|
+
v = document.querySelector 'video'
|
140
|
+
context = c.getContext '2d'
|
141
|
+
c.width = v.videoWidth
|
142
|
+
c.height = v.videoHeight
|
143
|
+
context.drawImage(v, 0, 0)
|
144
|
+
url = c.toDataURL()
|
145
|
+
comment = prompt 'Tweet'
|
146
|
+
$.post('/gyazo/tweet', {url: url, comment: comment}).success((data)->
|
147
|
+
true
|
148
|
+
)
|
132
149
|
|
133
|
-
key_func_g = ->
|
134
|
-
gyazo() if $('video')[0]
|
135
150
|
|
136
|
-
|
137
|
-
|
151
|
+
key_func_j = -> seek (15) if $('video')[0]
|
152
|
+
key_func_k = -> seek (-15) if $('video')[0]
|
153
|
+
key_func_g = -> gyazo() if $('video')[0]
|
154
|
+
key_func_t = -> tweet() if $('video')[0]
|
155
|
+
key_func_c = -> tweet_with_comment() if $('video')[0]
|
156
|
+
key_func_p = -> pause() if $('video')[0]
|
157
|
+
key_func_n = -> next_movie()
|
138
158
|
|
139
159
|
remote = ->
|
140
160
|
$('a.remote').click ->
|
141
|
-
save_to_pig remote_key
|
161
|
+
save_to_pig 'remote_key', $(this).attr('key')
|
142
162
|
|
143
163
|
|
144
164
|
$ ->
|
@@ -148,6 +168,10 @@ $ ->
|
|
148
168
|
remote()
|
149
169
|
$(window).keyup (e)->
|
150
170
|
switch e.keyCode
|
171
|
+
when 67
|
172
|
+
key_func_c()
|
173
|
+
when 84
|
174
|
+
key_func_t()
|
151
175
|
when 74
|
152
176
|
key_func_j()
|
153
177
|
when 75
|
@@ -156,5 +180,7 @@ $ ->
|
|
156
180
|
key_func_p()
|
157
181
|
when 71
|
158
182
|
key_func_g()
|
183
|
+
when 78
|
184
|
+
key_func_n()
|
159
185
|
|
160
186
|
# vim: set ft=coffee:
|
@@ -0,0 +1,22 @@
|
|
1
|
+
!!!
|
2
|
+
%title Pig Media Server
|
3
|
+
%meta(content='width=320, initial-scale=1.0, maximum-scale=1.0, user-scalable=no' name='viewport')
|
4
|
+
%script(src="https://www.gstatic.com/cv/js/sender/v1/cast_sender.js")
|
5
|
+
%link{href: '/app.css', rel: 'stylesheet', type: 'text/css'}
|
6
|
+
%script{src: 'https://code.jquery.com/jquery.min.js'}
|
7
|
+
|
8
|
+
%span.none#user_id=session[:user_id]
|
9
|
+
|
10
|
+
#application
|
11
|
+
|
12
|
+
:javascript
|
13
|
+
var user_id = document.querySelector('#user_id').textContent
|
14
|
+
if(user_id == ''){
|
15
|
+
if(localStorage.user_id != undefined && localStorage.user_id != ''){
|
16
|
+
$.post('/sessions', {user_id: localStorage.user_id}).done(function(){location.reload()});
|
17
|
+
}
|
18
|
+
} else {
|
19
|
+
if(user_id != ''){ localStorage.user_id = user_id }
|
20
|
+
}
|
21
|
+
|
22
|
+
%script(src="/bundle.js")
|
@@ -1,7 +1,7 @@
|
|
1
1
|
<!DOCTYPE html>
|
2
2
|
%meta{charset: 'UTF-8'}
|
3
|
-
%title Remote -
|
4
|
-
%script{src: '
|
3
|
+
%title Remote - #{config['page_title']}
|
4
|
+
%script{src: 'https://code.jquery.com/jquery.min.js'}
|
5
5
|
-%w{movie storage remote unread session}.each do |js|
|
6
6
|
%script{src: "/#{js}.js"}
|
7
7
|
%meta(content='width=320, initial-scale=1.0, maximum-scale=1.0, user-scalable=no' name='viewport')
|
@@ -4,3 +4,8 @@ $ ->
|
|
4
4
|
if localStorage.user_id != undefined and localStorage.user_id != ''
|
5
5
|
if user_id == ''
|
6
6
|
$.post('/sessions', user_id: localStorage.user_id).success(-> location.reload())
|
7
|
+
|
8
|
+
window.logout = ->
|
9
|
+
console.log 'Logout'
|
10
|
+
delete localStorage.user_id
|
11
|
+
location.pathname = '/sessions'
|
@@ -1,12 +1,7 @@
|
|
1
1
|
window.get_recents = (func)->
|
2
2
|
if $('#user_id').text() and $('#user_id').text() != ''
|
3
3
|
dd = new Date()
|
4
|
-
$.get('/
|
5
|
-
if data['recents']
|
6
|
-
func data['recents']
|
7
|
-
else
|
8
|
-
func {}
|
9
|
-
)
|
4
|
+
$.get('/recents', stamp: dd.getTime()).success((data)-> func data)
|
10
5
|
else
|
11
6
|
try
|
12
7
|
recents = JSON.parse window.localStorage['recents']
|
@@ -16,17 +11,11 @@ window.get_recents = (func)->
|
|
16
11
|
|
17
12
|
window.save_recents = (recents)->
|
18
13
|
if $('#user_id').text() and $('#user_id').text() != ''
|
19
|
-
$.
|
20
|
-
data['recents'] = recents
|
21
|
-
$.post('/hash', json: JSON.stringify(data))
|
22
|
-
)
|
23
|
-
|
14
|
+
$.post("/recents", data: JSON.stringify(recents))
|
24
15
|
else
|
25
16
|
window.localStorage['recents'] = JSON.stringify recents
|
26
17
|
|
27
|
-
window.save_to_pig = (
|
28
|
-
$.
|
29
|
-
|
30
|
-
$.post('/hash', json: JSON.stringify(data)))
|
31
|
-
window.get_from_pig = (key, func)-> $.get('/hash').success((data)-> func(data[key]))
|
18
|
+
window.save_to_pig = (key, value)->
|
19
|
+
$.post('/data', key: key, value: value)
|
20
|
+
window.get_from_pig = (key, func)-> $.get('/data', key: key).success((data)-> func(data))
|
32
21
|
|
@@ -1,14 +1,13 @@
|
|
1
1
|
<!DOCTYPE html>
|
2
2
|
%meta{charset: 'UTF-8'}
|
3
|
-
%title
|
3
|
+
%title #{config['page_title']}
|
4
4
|
%link{href: '/app.css', rel: 'stylesheet', type: 'text/css'}
|
5
|
-
%script{src: '
|
6
|
-
|
5
|
+
%script{src: 'https://code.jquery.com/jquery.min.js'}
|
7
6
|
%script{src: '/sub.js'}
|
8
7
|
%script{src: '/subview.js'}
|
9
8
|
%meta{content: 'width=320, initial-scale=1.0, maximum-scale=1.0, user-scalable=no', name: 'viewport'}
|
10
9
|
#all
|
11
|
-
%h1
|
10
|
+
%h1 #{config['page_title']}
|
12
11
|
%form{method: 'GET', action: '/'}
|
13
12
|
%input{name: 'query', value: params[:query]}
|
14
13
|
%button Search
|
@@ -27,6 +26,6 @@
|
|
27
26
|
%a{href: "/nosub/#{params[:key]}"} Edit
|
28
27
|
.none
|
29
28
|
%span#key=params[:key]
|
30
|
-
%span#url
|
29
|
+
%span#url=@p.url
|
31
30
|
%span#path
|
32
|
-
%canvas
|
31
|
+
%canvas#canvas
|