carte-server 1.0.0 → 1.0.1
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 +4 -4
- data/lib/carte/client.css +4 -2
- data/lib/carte/client.jade +3 -1
- data/lib/carte/client/router.coffee +8 -2
- data/lib/carte/client/views/content.cjsx +7 -12
- data/lib/carte/client/views/list.cjsx +6 -1
- data/lib/carte/client/views/slideshow.cjsx +203 -0
- data/package.json +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 132ae5812e302de8c0d26fa7fc7f976317aadc02
|
4
|
+
data.tar.gz: f8c1dbf6608dc043567eb942351be1f8d9b60b07
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 379fe71b54212b0a6e5c5a7841ce43429aafea15ae5109488766848566f5a9e400c530f83308c4a02e6430b7274b1dfe3ae59f5f85cb306aec14e09425f93dc5
|
7
|
+
data.tar.gz: cb3eb492d5e6ad1f97cead588ea87d8593816ff078a743accc4e19eda483aaa2c57cd0566d831592a9990c2748df02599c67553fb0de0da4fd320b971e6d9de4
|
data/lib/carte/client.css
CHANGED
@@ -106,10 +106,12 @@ ul.nav-pills li a {
|
|
106
106
|
}
|
107
107
|
|
108
108
|
.carte-slideshow {
|
109
|
-
height: 100%;
|
110
|
-
width: 100%;
|
111
109
|
background-color: white;
|
112
110
|
position : absolute;
|
111
|
+
left: 0;
|
112
|
+
top: 0;
|
113
|
+
right: 0;
|
114
|
+
bottom: 0;
|
113
115
|
}
|
114
116
|
|
115
117
|
/* http://stackoverflow.com/questions/24511887/css-animation-works-in-chrome-but-not-in-firefox-resolved */
|
data/lib/carte/client.jade
CHANGED
@@ -2,7 +2,9 @@ doctype html
|
|
2
2
|
html
|
3
3
|
head
|
4
4
|
meta(charset="utf-8")
|
5
|
-
meta(name="viewport",content="width=device-width,initial-scale=1
|
5
|
+
meta(name="viewport",content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no,minimal-ui")
|
6
|
+
meta(name="apple-mobile-web-app-capable",content="yes")
|
7
|
+
meta(name="apple-mobile-web-app-status-bar-style",content="black-translucent")
|
6
8
|
meta(name="description",content=config.description)
|
7
9
|
title= config.title
|
8
10
|
script(type="text/javascript",src=config.script_path)
|
@@ -3,8 +3,9 @@ Backbone = require('backbone')
|
|
3
3
|
|
4
4
|
module.exports = class Router extends Backbone.Router
|
5
5
|
routes:
|
6
|
-
'
|
7
|
-
''
|
6
|
+
'': 'list'
|
7
|
+
'slideshow': 'slideshow'
|
8
|
+
':title': 'show'
|
8
9
|
|
9
10
|
list: (string)->
|
10
11
|
console.log '[router] list', string
|
@@ -16,3 +17,8 @@ module.exports = class Router extends Backbone.Router
|
|
16
17
|
console.log '[router] show', title
|
17
18
|
@current = 'show'
|
18
19
|
@title = title
|
20
|
+
|
21
|
+
slideshow: (string)->
|
22
|
+
console.log 'slideshow', string
|
23
|
+
@current = 'slideshow'
|
24
|
+
@query = querystring.parse(string)
|
@@ -2,6 +2,7 @@
|
|
2
2
|
$ = require('jquery')
|
3
3
|
React = require('react')
|
4
4
|
List = require('./list')
|
5
|
+
Slideshow = require('./slideshow')
|
5
6
|
CardCollection = require('../models/cards')
|
6
7
|
CardModel = require('../models/card')
|
7
8
|
String = require('string')
|
@@ -34,8 +35,12 @@ module.exports = React.createClass
|
|
34
35
|
#title = title.join(', ')
|
35
36
|
#title = config.title + ' (' + title + ')'
|
36
37
|
#document.title = title
|
37
|
-
|
38
|
-
|
38
|
+
if cards.query.mode == 'flash'
|
39
|
+
document.title = config.title + '、スライドショー'
|
40
|
+
<Slideshow key='slideshow' router={@props.router} cards={cards} />
|
41
|
+
else
|
42
|
+
document.title = config.title
|
43
|
+
<List key='list' router={@props.router} cards={cards} />
|
39
44
|
when "show"
|
40
45
|
cards = new CardCollection()
|
41
46
|
cards.fetching = true
|
@@ -57,16 +62,6 @@ module.exports = React.createClass
|
|
57
62
|
cards.fetching = false
|
58
63
|
document.title = config.title + '、' + card.get('title')
|
59
64
|
<List key='show' cards={cards} card={card} />
|
60
|
-
when "slideshow"
|
61
|
-
console.log 'slideshow', @props.router.query
|
62
|
-
cards = new CardCollection()
|
63
|
-
cards.query = $.extend {}, config.default_query, @props.router.query
|
64
|
-
cards.fetching = true
|
65
|
-
cards.fetch success: ()-> cards.fetching = false
|
66
|
-
document.title = config.title + '、スライドショー'
|
67
|
-
e = React.createElement(Slideshow, cards: cards)
|
68
|
-
React.render(e, document.body)
|
69
|
-
#<Slideshow key='slideshow' router={@props.router} cards={cards} />
|
70
65
|
else
|
71
66
|
<div>Loading ...</div>
|
72
67
|
}
|
@@ -29,7 +29,7 @@ module.exports = React.createClass
|
|
29
29
|
@queryParam {order: 'random'}, ['sort', 'page']
|
30
30
|
|
31
31
|
tagParam: (tag)->
|
32
|
-
@queryParam {tag: tag}, [
|
32
|
+
@queryParam {tag: tag}, []
|
33
33
|
|
34
34
|
queryParam: (param, deleteKeys)->
|
35
35
|
query = $.extend {}, @props.cards.query, param
|
@@ -85,6 +85,11 @@ module.exports = React.createClass
|
|
85
85
|
<i className="fa fa-rss" />
|
86
86
|
</a>
|
87
87
|
</li>
|
88
|
+
<li>
|
89
|
+
<a href={"#/?" + @queryParam({'mode': 'flash'}, [])}>
|
90
|
+
<i className="fa fa-arrows-alt" />
|
91
|
+
</a>
|
92
|
+
</li>
|
88
93
|
</ul>
|
89
94
|
</div>
|
90
95
|
<div className="col-sm-4">
|
@@ -0,0 +1,203 @@
|
|
1
|
+
# @cjsx React.DOM
|
2
|
+
$ = require('jquery')
|
3
|
+
Backbone = require('backbone')
|
4
|
+
React = require('react')
|
5
|
+
CardCollection = require('../models/cards')
|
6
|
+
config = require('../config')
|
7
|
+
helpers = require('../helpers')
|
8
|
+
classnames = require('classnames')
|
9
|
+
markdownIt = require('markdown-it')(linkify: true)
|
10
|
+
|
11
|
+
#window.onerror = (error, url, line) -> alert error
|
12
|
+
|
13
|
+
Portal = React.createClass
|
14
|
+
componentDidMount: ->
|
15
|
+
console.log '[views/slideshow] Portal#componentDidMount'
|
16
|
+
@setState currCards: @props.cards
|
17
|
+
$(document).on 'keydown', @onKeyDown
|
18
|
+
@props.cards.on 'sync', =>
|
19
|
+
@setState currCard: @props.cards.at(0)
|
20
|
+
@loadNextCards()
|
21
|
+
@loadPrevCards()
|
22
|
+
@forceUpdate.bind(@, null)
|
23
|
+
|
24
|
+
componentWillUnmount: ->
|
25
|
+
$(document).off 'keydown', @onKeyDown
|
26
|
+
|
27
|
+
onKeyDown: (event)->
|
28
|
+
switch event.keyCode
|
29
|
+
when 37 then @onClickPrev()
|
30
|
+
when 39 then @onClickNext()
|
31
|
+
|
32
|
+
getInitialState: ->
|
33
|
+
currCard: null
|
34
|
+
currCards: null
|
35
|
+
nextCards: null
|
36
|
+
prevCards: null
|
37
|
+
hideValue: 'none'
|
38
|
+
hiding: true
|
39
|
+
|
40
|
+
prevCard: ->
|
41
|
+
_prevCard = @state.currCards.at(@currCardIndex() - 1)
|
42
|
+
console.log '[views/slideshow] prevCard', _prevCard
|
43
|
+
_prevCard
|
44
|
+
|
45
|
+
nextCard: ->
|
46
|
+
_nextCard = @state.currCards.at(@currCardIndex() + 1)
|
47
|
+
console.log '[views/slideshow] nextCard', _nextCard
|
48
|
+
_nextCard
|
49
|
+
|
50
|
+
currCardIndex: ->
|
51
|
+
_currCardIndex = @state.currCards.indexOf(@state.currCard)
|
52
|
+
console.log '[views/slideshow] currCardIndex, @state.currCard', @state.currCard
|
53
|
+
console.log '[views/slideshow] currCardIndex', _currCardIndex
|
54
|
+
_currCardIndex
|
55
|
+
|
56
|
+
currPage: ->
|
57
|
+
_currPage = @state.currCards.pagination.current_page
|
58
|
+
console.log '[views/slideshow] currPage', _currPage
|
59
|
+
_currPage
|
60
|
+
|
61
|
+
totalPages: ->
|
62
|
+
@state.currCards.pagination.total_pages
|
63
|
+
|
64
|
+
nextPage: ->
|
65
|
+
_nextPage = if @currPage() < @totalPages() then @currPage() + 1 else 1
|
66
|
+
console.log '[views/slideshow] nextPage', _nextPage
|
67
|
+
_nextPage
|
68
|
+
|
69
|
+
prevPage: ->
|
70
|
+
_prevPage = if @currPage() > 1 then @currPage() - 1 else @totalPages()
|
71
|
+
console.log '[views/slideshow] prevPage', _prevPage
|
72
|
+
_prevPage
|
73
|
+
|
74
|
+
loadNextCards: ->
|
75
|
+
console.log '[views/slideshow] loadNextCards'
|
76
|
+
nextCards = new CardCollection()
|
77
|
+
nextCards.query = $.extend {}, @state.currCards.query, {page: @nextPage()}
|
78
|
+
nextCards.fetching = true
|
79
|
+
nextCards.fetch success: ()-> nextCards.fetching = false
|
80
|
+
@setState nextCards: nextCards
|
81
|
+
|
82
|
+
loadPrevCards: ->
|
83
|
+
console.log '[views/slideshow] loadPrevCards'
|
84
|
+
prevCards = new CardCollection()
|
85
|
+
prevCards.query = $.extend {}, @state.currCards.query, {page: @prevPage()}
|
86
|
+
prevCards.fetching = true
|
87
|
+
prevCards.fetch success: ()-> prevCards.fetching = false
|
88
|
+
@setState prevCards: prevCards
|
89
|
+
|
90
|
+
onTouchStart: (event)->
|
91
|
+
@touchStartX = event.changedTouches[0].pageX
|
92
|
+
|
93
|
+
onTouchEnd: (event)->
|
94
|
+
touchEndX = event.changedTouches[0].pageX
|
95
|
+
distance = touchEndX - @touchStartX
|
96
|
+
if Math.abs(distance) > 100
|
97
|
+
if distance > 0
|
98
|
+
@onClickNext()
|
99
|
+
else
|
100
|
+
@onClickPrev()
|
101
|
+
|
102
|
+
onClickNext: ->
|
103
|
+
if @state.hideValue != 'none' && @state.hiding
|
104
|
+
@setState hiding: false
|
105
|
+
else
|
106
|
+
@setState hiding: true
|
107
|
+
if nextCard = @nextCard()
|
108
|
+
@setState currCard: nextCard
|
109
|
+
else
|
110
|
+
return if @state.nextCards.fetching
|
111
|
+
@setState currCards: @state.nextCards, prevCards: @state.currCards, ()=>
|
112
|
+
@setState currCard: @state.currCards.at(0), ()=>
|
113
|
+
@loadNextCards()
|
114
|
+
|
115
|
+
onClickPrev: ->
|
116
|
+
if @state.hideValue != 'none' && @state.hiding
|
117
|
+
@setState hiding: false
|
118
|
+
else
|
119
|
+
@setState hiding: true
|
120
|
+
if prevCard = @prevCard()
|
121
|
+
@setState currCard: prevCard
|
122
|
+
else
|
123
|
+
return if @state.prevCards.fetching
|
124
|
+
@setState currCards: @state.prevCards, nextCards: @state.currCards, ()=>
|
125
|
+
@setState currCard: @state.currCards.at(@state.currCards.length - 1), ()=>
|
126
|
+
@loadPrevCards()
|
127
|
+
|
128
|
+
closeLink: ->
|
129
|
+
params = $.extend {}, @props.cards.query
|
130
|
+
delete params.mode
|
131
|
+
'#/?' + $.param(params)
|
132
|
+
|
133
|
+
onChangeHide: (event)->
|
134
|
+
@setState hideValue: event.target.value
|
135
|
+
|
136
|
+
render: ->
|
137
|
+
<div className="carte-slideshow" onTouchStart={@onTouchStart} onTouchEnd={@onTouchEnd}>
|
138
|
+
<div style={fontSize:'10vh',padding:'1vh 5vh',overflow:'hidden'}>
|
139
|
+
<div>
|
140
|
+
<strong>
|
141
|
+
{
|
142
|
+
if @state.currCard
|
143
|
+
if @state.hideValue == 'title' && @state.hiding == true
|
144
|
+
'?????'
|
145
|
+
else
|
146
|
+
@state.currCard.get('title')
|
147
|
+
else
|
148
|
+
<i className="glyphicon glyphicon-refresh glyphicon-refresh-animate" />
|
149
|
+
}
|
150
|
+
</strong>
|
151
|
+
<span className="pull-right tools" style={fontSize:'0.5em'}>
|
152
|
+
hide:
|
153
|
+
<select value={@state.hideValue} onChange={@onChangeHide}>
|
154
|
+
<option value="none">none</option>
|
155
|
+
<option value="title">title</option>
|
156
|
+
<option value="content">content</option>
|
157
|
+
</select>
|
158
|
+
<a href={@closeLink()}>
|
159
|
+
<strong>×</strong>
|
160
|
+
</a>
|
161
|
+
</span>
|
162
|
+
</div>
|
163
|
+
<div style={paddingTop:'5vh'}>
|
164
|
+
{
|
165
|
+
if @state.currCard
|
166
|
+
if @state.hideValue == 'content' && @state.hiding == true
|
167
|
+
'???????'
|
168
|
+
else
|
169
|
+
<div dangerouslySetInnerHTML={__html: markdownIt.render @state.currCard.get('content')} />
|
170
|
+
else
|
171
|
+
<i className="glyphicon glyphicon-refresh glyphicon-refresh-animate" />
|
172
|
+
}
|
173
|
+
</div>
|
174
|
+
</div>
|
175
|
+
</div>
|
176
|
+
|
177
|
+
MyPortal = React.createFactory Portal
|
178
|
+
|
179
|
+
module.exports = React.createClass
|
180
|
+
displayName: 'Slideshow'
|
181
|
+
|
182
|
+
componentDidMount: ->
|
183
|
+
console.log '[views/slideshow] componentDidMount'
|
184
|
+
@props.cards.on 'sync', @forceUpdate.bind(@, null)
|
185
|
+
@node = document.createElement('div')
|
186
|
+
@node.className = 'carte-slideshow'
|
187
|
+
document.body.appendChild(@node)
|
188
|
+
@renderSlideshow()
|
189
|
+
|
190
|
+
componentWillReceiveProps: (nextProps)->
|
191
|
+
console.log '[views/slideshow] componentWillReceiveProps', nextProps
|
192
|
+
nextProps.cards.on 'sync', @forceUpdate.bind(@, null)
|
193
|
+
|
194
|
+
componentWillUnmount: ->
|
195
|
+
console.log '[views/slideshow] componentWillUnmount'
|
196
|
+
document.body.removeChild(@node)
|
197
|
+
|
198
|
+
renderSlideshow: ->
|
199
|
+
React.render(MyPortal(@props), @node)
|
200
|
+
|
201
|
+
render: ->
|
202
|
+
console.log '[views/slideshow] render', @props
|
203
|
+
null
|
data/package.json
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: carte-server
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- tily
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-05-
|
11
|
+
date: 2015-05-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -277,6 +277,7 @@ files:
|
|
277
277
|
- lib/carte/client/views/list.cjsx
|
278
278
|
- lib/carte/client/views/message.cjsx
|
279
279
|
- lib/carte/client/views/pagination.cjsx
|
280
|
+
- lib/carte/client/views/slideshow.cjsx
|
280
281
|
- lib/carte/server.rb
|
281
282
|
- lib/carte/server/models.rb
|
282
283
|
- lib/carte/server/models/card.rb
|