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 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