carte-server 1.0.0 → 1.0.1

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
  SHA1:
3
- metadata.gz: 13eacfbd43450a6c4a02c30a1fad54602c8b8608
4
- data.tar.gz: 4f844b0e8b46149bfa6376d075bae7217b542207
3
+ metadata.gz: 132ae5812e302de8c0d26fa7fc7f976317aadc02
4
+ data.tar.gz: f8c1dbf6608dc043567eb942351be1f8d9b60b07
5
5
  SHA512:
6
- metadata.gz: e841dd58143bdf917dd51931bc9e39f73e5c992fc11bba6fcee2da03ef7d2447abda686fd822186f194b513be8d0041b91c13e8b9832973705a933c131fc1ea9
7
- data.tar.gz: 362ec4bddeafea8a8987b668e8877a81c4245480c074ae56c09e02f83737a4b73155295fad59b580df04a5622b327e6fb2701571159e50e996c3f83dd4afbe0c
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 */
@@ -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.0")
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
- ':title' : 'show'
7
- '' : 'list'
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
- document.title = config.title
38
- <List key='list' router={@props.router} cards={cards} />
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}, ['seed']
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>&times;</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
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "carte-client",
3
3
  "description": "something like dictionary, wiki, or information card",
4
- "version": "1.0.0",
4
+ "version": "1.0.1",
5
5
  "main": "lib/carte.coffee",
6
6
  "scripts": {
7
7
  "test": "echo \"Error: no test specified\" && exit 1"
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.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-12 00:00:00.000000000 Z
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