carte-server 0.0.26 → 0.0.27

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: 62dd6b63cb3dc76b0ec49dc9eb0e1218947c3d9d
4
- data.tar.gz: cfc482d9f3834d61ad601a2b341b1ae5f58c19f0
3
+ metadata.gz: d5d689a6bbbfaebcc4b2317306ece56bc01860d9
4
+ data.tar.gz: 62c6865bd68b8fba5ab18230aed5a11f917b5cb5
5
5
  SHA512:
6
- metadata.gz: a35116bcb9945a1fe83a566db288c5189eb85f9ce71047ef70ad73aa3f1622d21d596bc2b609e24e4dbcb59a5fc7792c6d14928d8f7f4a75f613af00826cf57d
7
- data.tar.gz: e38cc8e0f86b9f68d88f44b0b2bbea58e6cb7334538c8df289e3397df6a3a7cbb54aa9cccb714292b2ad02ce61d133ccee7c89f4f4762f3e7ff6be703b7710c3
6
+ metadata.gz: 4822231b9c7e7bd40fe3a55278bec3c6ff5df2d0600315ecffb799979db1b078625585cdf55ea7113ce57cef67113ba1b0aafc2857f56af2f89e0857dc24eb1d
7
+ data.tar.gz: ad53d1b291851888f3f41951f18575c2d83cb473b048a45ed1a45c5d8f0618185eac927584ea591d362917c4610d0af94e66be46dd9617e12aa0565d8f8cce3e
@@ -10,7 +10,6 @@ PATH
10
10
  mongoid_auto_increment_id (= 0.6.5)
11
11
  pry
12
12
  redcarpet
13
- rspec
14
13
  sinatra
15
14
  sinatra-contrib
16
15
  will_paginate_mongoid
@@ -117,4 +116,5 @@ DEPENDENCIES
117
116
  carte-server!
118
117
  httparty
119
118
  rake (~> 10.0)
119
+ rspec
120
120
  shotgun
data/README.md CHANGED
@@ -33,13 +33,6 @@ Japanese introduction is [here](http://tily.tumblr.com/post/117678137942/carte).
33
33
 
34
34
  [![Deploy](https://www.herokucdn.com/deploy/button.png)](https://heroku.com/deploy?template=https://github.com/tily/carte-sandbox)
35
35
 
36
- ```
37
- ## change title and description
38
- $ vi config.json
39
- ## replace brand icon
40
- $ cp ~/Desktop/icon.png public/images/icon.png
41
- ```
42
-
43
36
  **Docker**
44
37
 
45
38
  ```bash
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
21
21
  spec.add_development_dependency "bundler", "~> 1.7"
22
22
  spec.add_development_dependency "rake", "~> 10.0"
23
23
  spec.add_development_dependency "shotgun"
24
- #spec.add_development_dependency "rspec"
24
+ spec.add_development_dependency "rspec"
25
25
  spec.add_development_dependency "httparty"
26
26
 
27
27
  spec.add_dependency "sinatra"
@@ -35,5 +35,4 @@ Gem::Specification.new do |spec|
35
35
  spec.add_dependency "mongoid-geospatial"
36
36
  spec.add_dependency "redcarpet"
37
37
  spec.add_dependency "pry"
38
- spec.add_dependency "rspec"
39
38
  end
@@ -1,3 +1,3 @@
1
1
  gulp = require 'gulp'
2
- Carte = require './lib/carte'
3
- new Carte().install(gulp, __dirname + '/config.json')
2
+ Tasks = require('./lib/carte').Tasks
3
+ (new Tasks).install(gulp, __dirname + '/config.json')
@@ -1,78 +1,9 @@
1
- fs = require 'fs-extra'
2
- path = require 'path'
3
- gulp = require 'gulp'
4
- gulpUtil = require 'gulp-util'
5
- gulpIf = require 'gulp-if'
6
- sourceStream = require 'vinyl-source-stream'
7
- browserify = require 'browserify'
8
- watchify = require 'watchify'
9
- uglify = require 'gulp-uglify'
10
- streamify = require 'gulp-streamify'
11
- coffeeReactify = require 'coffee-reactify'
12
- browserifyCss = require 'browserify-css'
13
- _ = require 'lodash'
14
- jade = require 'gulp-jade'
15
- rename = require 'gulp-rename'
16
-
17
- module.exports = class Carte
18
- watching: false
19
-
20
- install: (gulp, config)->
21
- custom = require(config)
22
- fs.writeFileSync(__dirname + '/carte/shared/custom.json', JSON.stringify(custom))
23
-
24
- gulp.task 'watching', => @watching = true
25
- gulp.task 'build', ['build:html', 'build:script']
26
- gulp.task 'watch', ['watching', 'build:html', 'build:script']
27
-
28
- gulp.task 'build:html', =>
29
- _config = require('./carte/client/config')
30
- gulp.src(__dirname + '/carte/client.jade')
31
- .pipe jade(locals: {config: _config}, pretty: true)
32
- .pipe rename(_config.html_path)
33
- .pipe gulp.dest(_config.root_dir)
34
-
35
- gulp.task 'build:script', =>
36
- @buildScript config: config
37
-
38
- buildScript: (options)->
39
- config = require(options.config)
40
- fs.writeFileSync(__dirname + '/carte/shared/custom.json', JSON.stringify(config))
41
- dir = config.root_dir
42
- file = path.basename config.script_path
43
- browserify = browserify
44
- cache: {}
45
- packageCache: {}
46
- fullPaths: true
47
- entries: [__dirname + '/carte/client.coffee']
48
- extensions: ['.coffee', '.js', '.cjsx', '.css']
49
- browserify
50
- .transform coffeeReactify
51
- .transform browserifyCss,
52
- rootDir: 'public'
53
- processRelativeUrl: (relativeUrl)->
54
- stripQueryStringAndHashFromPath = (url)-> url.split('?')[0].split('#')[0]
55
- rootDir = path.resolve(process.cwd(), 'public')
56
- relativePath = stripQueryStringAndHashFromPath(relativeUrl)
57
- queryStringAndHash = relativeUrl.substring(relativePath.length)
58
- prefix = '../node_modules/'
59
- if (_.startsWith(relativePath, prefix))
60
- vendorPath = 'vendor/' + relativePath.substring(prefix.length)
61
- source = path.join(rootDir, relativePath)
62
- target = path.join(rootDir, vendorPath)
63
- gulpUtil.log('Copying file from ' + JSON.stringify(source) + ' to ' + JSON.stringify(target))
64
- fs.copySync(source, target)
65
- return vendorPath + queryStringAndHash
66
- relativeUrl
67
- if @watching
68
- watchified = watchify(browserify)
69
- watchified.on 'update', ()=> @bundle(browserify, dir, file)
70
- watchified.on 'log', gulpUtil.log
71
- @bundle(browserify, dir, file)
72
-
73
- bundle: (browserify, dir, file)->
74
- browserify
75
- .bundle()
76
- .pipe sourceStream file
77
- .pipe gulpIf(!@watching, streamify(uglify(compress: {drop_console: !@watching})))
78
- .pipe gulp.dest dir
1
+ Tasks = require './carte/client/tasks'
2
+ Card = require './carte/client/models/card'
3
+ Cards = require './carte/client/models/cards'
4
+
5
+ module.exports =
6
+ Tasks: Tasks
7
+ Models:
8
+ Card: Card
9
+ Cards: Cards
@@ -15,22 +15,120 @@
15
15
  .tools a:visited,
16
16
  .tools a:active
17
17
  {
18
- color: #333333 !important;
18
+ color: #333 !important;
19
19
  text-decoration: none !important;
20
20
  }
21
21
 
22
+ ul.nav-pills li a {
23
+ padding: 6px 12px;
24
+ }
25
+
22
26
  .card ul,ol {
23
27
  padding-left: 20px;
24
28
  }
25
29
 
30
+ .col-sm-4 {
31
+ padding: 0px;
32
+ }
33
+
34
+ .col-sm-12 {
35
+ padding: 0px;
36
+ }
37
+
38
+ .alert {
39
+ padding: 5px;
40
+ }
41
+
42
+ .alert ul {
43
+ padding-left: 20px;
44
+ }
45
+
46
+ .list-group {
47
+ margin: 0px;
48
+ padding: 5px;
49
+ }
50
+
51
+ .list-group-item {
52
+ height: 200px;
53
+ }
54
+
55
+ .navbar {
56
+ padding: 0px;
57
+ background-color: white;
58
+ margin-bottom: 5px;
59
+ }
60
+
61
+ .badge {
62
+ color: #333;
63
+ background-color: #eee;
64
+ }
65
+
66
+ .modal-body .form-group:last-child {
67
+ padding-bottom: 17px;
68
+ }
69
+
70
+ .navbar-brand:first-child {
71
+ padding-top: 10px;
72
+ }
73
+
74
+ /* carte original definitions */
75
+ .carte-content {
76
+ padding: 0px 20px;
77
+ }
78
+
79
+ .carte-hidden {
80
+ visibility: hidden;
81
+ }
82
+
83
+ .carte-card-header {
84
+ margin-bottom: 10px;
85
+ }
86
+
87
+ .carte-card-header .glyphicon-star {
88
+ margin-right: 5px;
89
+ }
90
+
91
+ .carte-card-content {
92
+ overflow: hidden;
93
+ width: 100%;
94
+ height: 73%;
95
+ word-wrap: break-word;
96
+ }
97
+
98
+ .carte-pagination .carte-pagination-curr {
99
+ width: 7.5em;
100
+ text-align: center;
101
+ }
102
+
103
+ .carte-list {
104
+ padding-left: 5px;
105
+ padding-right: 5px;
106
+ }
107
+
108
+ .carte-slideshow {
109
+ height: 100%;
110
+ width: 100%;
111
+ background-color: white;
112
+ position : absolute;
113
+ }
114
+
115
+ /* http://stackoverflow.com/questions/24511887/css-animation-works-in-chrome-but-not-in-firefox-resolved */
26
116
  .glyphicon-refresh-animate {
27
- -animation: spin .7s infinite linear;
28
- -webkit-animation: spin2 .7s infinite linear;
117
+ -moz-animation: spin-moz .7s infinite linear;
118
+ -webkit-animation: spin-webkit .7s infinite linear;
119
+ animation: spin .7s infinite linear;
120
+ }
121
+
122
+ @-moz-keyframes spin-moz {
123
+ from { -moz-transform: rotate(0deg);}
124
+ to { -moz-transform: rotate(360deg);}
29
125
  }
30
- @-webkit-keyframes spin2 {
126
+
127
+ @-webkit-keyframes spin-webkit {
31
128
  from { -webkit-transform: rotate(0deg);}
32
129
  to { -webkit-transform: rotate(360deg);}
33
130
  }
131
+
34
132
  @keyframes spin {
35
133
  from { transform: scale(1) rotate(0deg);}
36
134
  to { transform: scale(1) rotate(360deg);}
@@ -0,0 +1,78 @@
1
+ fs = require 'fs-extra'
2
+ path = require 'path'
3
+ gulp = require 'gulp'
4
+ gulpUtil = require 'gulp-util'
5
+ gulpIf = require 'gulp-if'
6
+ sourceStream = require 'vinyl-source-stream'
7
+ browserify = require 'browserify'
8
+ watchify = require 'watchify'
9
+ uglify = require 'gulp-uglify'
10
+ streamify = require 'gulp-streamify'
11
+ coffeeReactify = require 'coffee-reactify'
12
+ browserifyCss = require 'browserify-css'
13
+ _ = require 'lodash'
14
+ jade = require 'gulp-jade'
15
+ rename = require 'gulp-rename'
16
+
17
+ module.exports = class Carte
18
+ watching: false
19
+
20
+ install: (gulp, config)->
21
+ custom = require(config)
22
+ fs.writeFileSync(__dirname + '/../shared/custom.json', JSON.stringify(custom))
23
+
24
+ gulp.task 'watching', => @watching = true
25
+ gulp.task 'build', ['build:html', 'build:script']
26
+ gulp.task 'watch', ['watching', 'build:html', 'build:script']
27
+
28
+ gulp.task 'build:html', =>
29
+ _config = require('./config')
30
+ gulp.src(__dirname + '/../client.jade')
31
+ .pipe jade(locals: {config: _config}, pretty: true)
32
+ .pipe rename(_config.html_path)
33
+ .pipe gulp.dest(_config.root_dir)
34
+
35
+ gulp.task 'build:script', =>
36
+ @buildScript config: config
37
+
38
+ buildScript: (options)->
39
+ config = require(options.config)
40
+ fs.writeFileSync(__dirname + '/../shared/custom.json', JSON.stringify(config))
41
+ dir = config.root_dir
42
+ file = path.basename config.script_path
43
+ browserify = browserify
44
+ cache: {}
45
+ packageCache: {}
46
+ fullPaths: true
47
+ entries: [__dirname + '/../client.coffee']
48
+ extensions: ['.coffee', '.js', '.cjsx', '.css']
49
+ browserify
50
+ .transform coffeeReactify
51
+ .transform browserifyCss,
52
+ rootDir: 'public'
53
+ processRelativeUrl: (relativeUrl)->
54
+ stripQueryStringAndHashFromPath = (url)-> url.split('?')[0].split('#')[0]
55
+ rootDir = path.resolve(process.cwd(), 'public')
56
+ relativePath = stripQueryStringAndHashFromPath(relativeUrl)
57
+ queryStringAndHash = relativeUrl.substring(relativePath.length)
58
+ prefix = '../node_modules/'
59
+ if (_.startsWith(relativePath, prefix))
60
+ vendorPath = 'vendor/' + relativePath.substring(prefix.length)
61
+ source = path.join(rootDir, relativePath)
62
+ target = path.join(rootDir, vendorPath)
63
+ gulpUtil.log('Copying file from ' + JSON.stringify(source) + ' to ' + JSON.stringify(target))
64
+ fs.copySync(source, target)
65
+ return vendorPath + queryStringAndHash
66
+ relativeUrl
67
+ if @watching
68
+ watchified = watchify(browserify)
69
+ watchified.on 'update', ()=> @bundle(browserify, dir, file)
70
+ watchified.on 'log', gulpUtil.log
71
+ @bundle(browserify, dir, file)
72
+
73
+ bundle: (browserify, dir, file)->
74
+ browserify
75
+ .bundle()
76
+ .pipe sourceStream file
77
+ .pipe gulpIf(!@watching, streamify(uglify(compress: {drop_console: !@watching})))
78
+ .pipe gulp.dest dir
@@ -15,8 +15,6 @@ module.exports = React.createClass
15
15
  Button = require('react-bootstrap/lib/Button')
16
16
  <div>
17
17
  <Header key='header' router={@props.router} />
18
- <div style={padding:"0px 20px"}>
19
- <Content key='content' router={@props.router} />
20
- </div>
18
+ <Content key='content' router={@props.router} />
21
19
  </div>
22
20
 
@@ -4,6 +4,7 @@ Edit = require('./edit')
4
4
  ModalTrigger = require('react-bootstrap/lib/ModalTrigger')
5
5
  markdownIt = require('markdown-it')(linkify: true)
6
6
  helpers = require('../helpers')
7
+ classnames = require('classnames')
7
8
 
8
9
  module.exports = React.createClass
9
10
  displayName: 'Card'
@@ -24,18 +25,21 @@ module.exports = React.createClass
24
25
  onMouseLeave: ()->
25
26
  @setState showTools: false
26
27
 
28
+ showTools: ()->
29
+ helpers.isMobile() || @state.showTools
30
+
27
31
  render: ->
28
- <div className='col-sm-4 col-xs-12 list-group' style={marginBottom:'0px',padding:"5px"} onMouseOver={@onMouseOver} onMouseLeave={@onMouseLeave}>
29
- <div className='list-group-item' style={height:'200px'}>
30
- <div style={marginBottom:'10px'}>
32
+ <div className='col-sm-4 col-xs-12 list-group' onMouseOver={@onMouseOver} onMouseLeave={@onMouseLeave}>
33
+ <div className='list-group-item'>
34
+ <div className="carte-card-header">
31
35
  {
32
36
  if @props.card.get('focused')
33
- <i className='glyphicon glyphicon-star' style={marginRight:'5px'} />
37
+ <i className='glyphicon glyphicon-star' />
34
38
  }
35
39
  <strong>
36
40
  {@props.card.get('title')}
37
41
  </strong>
38
- <span className='pull-right tools' style={{visibility: if helpers.isMobile() || @state.showTools then 'visible' else 'hidden'}}>
42
+ <span className={classnames('pull-right': true, 'tools': true, 'carte-hidden': !@showTools())}>
39
43
  <ModalTrigger modal={<Edit card={@props.card} />}>
40
44
  <a href="javascript:void(0)">
41
45
  <i className='glyphicon glyphicon-edit' />
@@ -48,14 +52,20 @@ module.exports = React.createClass
48
52
  </a>
49
53
  </span>
50
54
  </div>
51
- <div className="card" style={overflow:'hidden',width:'100%',height:'73%',wordWrap:'break-word'}>
55
+ <div className="carte-card-content">
52
56
  <div dangerouslySetInnerHTML={__html: markdownIt.render @props.card.get('content')} />
53
57
  </div>
54
- <div style={{visibility: if helpers.isMobile() || @state.showTools then 'visible' else 'hidden'}}>
58
+ <div className={classnames('carte-hidden': !@showTools())}>
55
59
  {
56
60
  if @props.card.get("tags")
57
61
  @props.card.get("tags").map (tag)->
58
- <span className="pull-right tools">&nbsp;&nbsp;<a href={"#/?tags=" + tag}><i className="glyphicon glyphicon-tag" />&nbsp;{tag}</a></span>
62
+ <span className="pull-right tools">
63
+ &nbsp;&nbsp;
64
+ <a href={"#/?tags=" + tag}>
65
+ <i className="glyphicon glyphicon-tag" />
66
+ &nbsp;{tag}
67
+ </a>
68
+ </span>
59
69
  }
60
70
  </div>
61
71
  </div>
@@ -20,40 +20,54 @@ module.exports = React.createClass
20
20
  @props.router.off "route", @callback
21
21
 
22
22
  render: ->
23
- switch @props.router.current
24
- when "list"
25
- cards = new CardCollection()
26
- cards.query = $.extend {}, config.default_query, @props.router.query
27
- cards.fetching = true
28
- cards.fetch success: ()-> cards.fetching = false
29
- #title = []
30
- #for k, v of cards.query
31
- # title.push(String(k).capitalize() + ': ' + v)
32
- #title = title.join(', ')
33
- #title = config.title + ' (' + title + ')'
34
- #document.title = title
35
- document.title = config.title
36
- <List key='list' router={@props.router} cards={cards} />
37
- when "show"
38
- cards = new CardCollection()
39
- cards.fetching = true
40
- card = new CardModel(title: @props.router.title)
41
- card.fetch
42
- success: (card)->
43
- for left in card.get("lefts")
44
- cardModel = new CardModel(left)
45
- cardModel.set 'focused', false
46
- cards.add cardModel
47
- card.set 'focused', true
48
- cards.add card
49
- for right in card.get("rights")
50
- cardModel = new CardModel(right)
51
- cardModel.set 'focused', false
52
- cards.add cardModel
53
- cards.fetching = false
54
- error: (card, response)=>
55
- cards.fetching = false
56
- document.title = config.title + '、' + card.get('title')
57
- <List key='show' cards={cards} card={card} />
58
- else
59
- <div>Loading ...</div>
23
+ <div className="carte-content">
24
+ {
25
+ switch @props.router.current
26
+ when "list"
27
+ cards = new CardCollection()
28
+ cards.query = $.extend {}, config.default_query, @props.router.query
29
+ cards.fetching = true
30
+ cards.fetch success: ()-> cards.fetching = false
31
+ #title = []
32
+ #for k, v of cards.query
33
+ # title.push(String(k).capitalize() + ': ' + v)
34
+ #title = title.join(', ')
35
+ #title = config.title + ' (' + title + ')'
36
+ #document.title = title
37
+ document.title = config.title
38
+ <List key='list' router={@props.router} cards={cards} />
39
+ when "show"
40
+ cards = new CardCollection()
41
+ cards.fetching = true
42
+ card = new CardModel(title: @props.router.title)
43
+ card.fetch
44
+ success: (card)->
45
+ for left in card.get("lefts")
46
+ cardModel = new CardModel(left)
47
+ cardModel.set 'focused', false
48
+ cards.add cardModel
49
+ card.set 'focused', true
50
+ cards.add card
51
+ for right in card.get("rights")
52
+ cardModel = new CardModel(right)
53
+ cardModel.set 'focused', false
54
+ cards.add cardModel
55
+ cards.fetching = false
56
+ error: (card, response)=>
57
+ cards.fetching = false
58
+ document.title = config.title + '、' + card.get('title')
59
+ <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
+ else
71
+ <div>Loading ...</div>
72
+ }
73
+ </div>
@@ -64,17 +64,17 @@ module.exports = React.createClass
64
64
  <div className='modal-body'>
65
65
  {
66
66
  if @state.errors
67
- <div className="alert alert-danger" role="alert" style={padding:'5px'}>
68
- <ul style={paddingLeft:"20px"}>
69
- {
70
- for key, errors of @state.errors
71
- for error in errors
72
- <li>{key + ' ' + error}</li>
73
- }
67
+ <div className="alert alert-danger" role="alert">
68
+ <ul>
69
+ {
70
+ for key, errors of @state.errors
71
+ for error in errors
72
+ <li>{key + ' ' + error}</li>
73
+ }
74
74
  </ul>
75
75
  </div>
76
76
  else if @state.createSuccess
77
- <div className="alert alert-success" role="alert" style={padding:'5px'}>
77
+ <div className="alert alert-success" role="alert">
78
78
  <i className="glyphicon glyphicon-info-sign" />&nbsp;
79
79
  You created a card successfully. Let's create next one.
80
80
  </div>
@@ -99,7 +99,7 @@ module.exports = React.createClass
99
99
  </label>
100
100
  </div>
101
101
  }
102
- <div className="form-group" style={{paddingBottom:'17px'}}>
102
+ <div className="form-group">
103
103
  <button className="btn btn-default pull-right" onClick={@onClickOk} disabled={@state.updating}>
104
104
  &nbsp;
105
105
  OK
@@ -5,5 +5,4 @@ module.exports = React.createClass
5
5
  displayName: 'Footer'
6
6
 
7
7
  render: ->
8
- <div style={{paddingTop:'0px',paddingBottom:'100px',paddingRight:"30px",paddingLeft:'30px'}}>
9
- </div>
8
+ <div />
@@ -70,10 +70,10 @@ module.exports = React.createClass
70
70
  location.hash = '/?' + $.param(query)
71
71
 
72
72
  render: ->
73
- <nav className="navbar navbar-default" style={{padding:"0px",backgroundColor:"white",marginBottom:"5px"}}>
73
+ <nav className="navbar navbar-default">
74
74
  <div className="container-fluid">
75
75
  <div className="navbar-header">
76
- <a className="navbar-brand" onClick={helpers.reload if !config.icon_link} href={if config.icon_link then config.icon_link else "#/"} style={{paddingTop:"10px"}}>
76
+ <a className="navbar-brand" onClick={helpers.reload if !config.icon_link} href={if config.icon_link then config.icon_link else "#/"}>
77
77
  <img alt="Brand" src={config.root_path + config.icon_path} width="30" height="30" />
78
78
  </a>
79
79
  <a className="navbar-brand" onClick={helpers.reload} href="#/">
@@ -38,48 +38,79 @@ module.exports = React.createClass
38
38
  $.param(query)
39
39
 
40
40
  render: ->
41
- <div className="container" style={{paddingLeft:"5px",paddingRight:"5px"}}>
41
+ <div className="container carte-list">
42
42
  {if !@props.card
43
43
  <div className="row">
44
- <div className="col-sm-4" style={{padding:"0px"}}>
44
+ <div className="col-sm-4">
45
45
  <ul className="nav nav-pills">
46
46
  {
47
47
  for menuItem in config.menu_items
48
48
  switch menuItem
49
49
  when 'atoz'
50
- <li><a onClick={helpers.reload} href={"#/?" + @atozParam()} style={{padding:'6px 12px',fontWeight: if @props.cards.query.sort == 'title' and @props.cards.query.order != 'random' then 'bold' else 'normal'}}>A to Z</a></li>
50
+ <li key='atoz'>
51
+ <a onClick={helpers.reload} href={"#/?" + @atozParam()}>
52
+ {
53
+ if @props.cards.query.sort == 'title' and @props.cards.query.order != 'random'
54
+ <strong>A to Z</strong>
55
+ else
56
+ <span>A to Z</span>
57
+ }
58
+ </a>
59
+ </li>
51
60
  when 'latest'
52
- <li><a onClick={helpers.reload} href={"#/?" + @latestParam()} style={{padding:'6px 12px',fontWeight: if @props.cards.query.sort == 'updated_at' and @props.cards.query.order != 'random' then 'bold' else 'normal'}}>Latest</a></li>
61
+ <li key='latest'>
62
+ <a onClick={helpers.reload} href={"#/?" + @latestParam()}>
63
+ {
64
+ if @props.cards.query.sort == 'updated_at' and @props.cards.query.order != 'random'
65
+ <strong>Latest</strong>
66
+ else
67
+ <span>Latest</span>
68
+ }
69
+ </a>
70
+ </li>
53
71
  when 'random'
54
- <li><a onClick={helpers.reload} href={"#/?" + @randomParam()} style={{padding:'6px 12px',fontWeight: if @props.cards.query.order == 'random' then 'bold' else 'normal'}}>Random</a></li>
72
+ <li key='random'>
73
+ <a onClick={helpers.reload} href={"#/?" + @randomParam()}>
74
+ {
75
+ if @props.cards.query.order == 'random'
76
+ <strong>Random</strong>
77
+ else
78
+ <span>Random</span>
79
+ }
80
+ </a>
81
+ </li>
55
82
  }
56
- <li><a href={config.root_path + config.api_path + "/cards.xml?" + @queryParam({}, [])} style={{padding:'6px 12px'}}><i className="fa fa-rss" /></a></li>
83
+ <li>
84
+ <a href={config.root_path + config.api_path + "/cards.xml?" + @queryParam({}, [])}>
85
+ <i className="fa fa-rss" />
86
+ </a>
87
+ </li>
57
88
  </ul>
58
89
  </div>
59
- <div className="col-sm-4" style={{padding:"0px"}}>
60
- <a href="javascript:void(0)" className="center-block text-center" style={padding:'6px 12px'}>
61
- <span className="badge text-center" style={color:'#333',backgroundColor:'#eee'}>
62
- {
63
- if @props.cards.pagination
64
- @props.cards.pagination.total_entries
65
- else
66
- <i className="glyphicon glyphicon-refresh glyphicon-refresh-animate" />
67
- }
68
- </span>
69
- </a>
90
+ <div className="col-sm-4">
91
+ <a href="javascript:void(0)" className="center-block text-center">
92
+ <span className="badge">
93
+ {
94
+ if @props.cards.pagination
95
+ @props.cards.pagination.total_entries
96
+ else
97
+ <i className="glyphicon glyphicon-refresh glyphicon-refresh-animate" />
98
+ }
99
+ </span>
100
+ </a>
70
101
  </div>
71
- <div className="col-sm-4" style={{padding:"0px"}}>
102
+ <div className="col-sm-4">
72
103
  {
73
104
  if @props.cards.query.order == 'random'
74
105
  <ul className="nav nav-pills pull-right">
75
106
  <li>
76
107
  {
77
108
  if @props.cards.pagination
78
- <a onClick={helpers.reload} href={"#/?" + @randomParam()} style={{padding:'6px 12px'}}>
109
+ <a onClick={helpers.reload} href={"#/?" + @randomParam()}>
79
110
  <i className="glyphicon glyphicon-refresh" />
80
111
  </a>
81
112
  else
82
- <a href="javascript:void(0)" style={{padding:'6px 12px'}}>
113
+ <a href="javascript:void(0)">
83
114
  <i className="glyphicon glyphicon-refresh glyphicon-refresh-animate" />
84
115
  </a>
85
116
  }
@@ -92,9 +123,15 @@ module.exports = React.createClass
92
123
  </div>
93
124
  else
94
125
  <div className="row">
95
- <div className="col-sm-12" style={{padding:"0px"}}>
126
+ <div className="col-sm-12">
96
127
  <ul className="nav nav-pills">
97
- <li><a href={"#/" + @props.card.get('title')} style={padding:'6px 12px',fontWeight:'bold'}>{@props.card.get('title')}</a></li>
128
+ <li>
129
+ <a href={"#/" + @props.card.get('title')}>
130
+ <strong>
131
+ {@props.card.get('title')}
132
+ </strong>
133
+ </a>
134
+ </li>
98
135
  </ul>
99
136
  </div>
100
137
  </div>
@@ -103,7 +140,7 @@ module.exports = React.createClass
103
140
  {
104
141
  if !@props.card && helpers.isMobile()
105
142
  <div className="row">
106
- <div className="col-sm-12" style={{padding:"0px"}}>
143
+ <div className="col-sm-12">
107
144
  <Pagination cards={@props.cards} />
108
145
  </div>
109
146
  </div>
@@ -9,9 +9,9 @@ module.exports = React.createClass
9
9
  <div className='row'>
10
10
  {
11
11
  for i in [1..9]
12
- <div className='col-sm-4' style={padding:'5px'} onMouseOver={@onMouseOver} onMouseLeave={@onMouseLeave}>
13
- <div className='list-group'style={margin:'0px',padding:'0px'}>
14
- <div className='list-group-item' style={height:'200px'}>
12
+ <div key={i} className='col-sm-4'>
13
+ <div className='list-group'>
14
+ <div className='list-group-item'>
15
15
  {@props.children}
16
16
  </div>
17
17
  </div>
@@ -13,8 +13,8 @@ module.exports = React.createClass
13
13
  $.param(query)
14
14
 
15
15
  render: ->
16
- <ul className="nav nav-pills pull-right">
17
- <li>
16
+ <ul className="nav nav-pills pull-right carte-pagination">
17
+ <li className="carte-pagination-prev">
18
18
  {
19
19
  if @props.cards.pagination
20
20
  if @props.cards.pagination.current_page > 1
@@ -23,24 +23,24 @@ module.exports = React.createClass
23
23
  href = "#/?" + @pageParam(@props.cards.pagination.total_pages)
24
24
  else
25
25
  href = "javascript:void(0)"
26
- <a href={href} aria-label="Previous" style={{padding:'6px 12px'}}>
26
+ <a href={href} aria-label="Previous">
27
27
  <span aria-hidden="true">&laquo;</span>
28
28
  </a>
29
29
  }
30
30
  </li>
31
- <li style={width:'7.5em',textAlign:'center'}>
31
+ <li className="carte-pagination-curr">
32
32
  {
33
33
  if @props.cards.pagination
34
- <a href={"#/?" + @pageParam(@props.cards.pagination.current_page)} onClick={helpers.reload} style={{padding:'6px 12px'}}>
34
+ <a href={"#/?" + @pageParam(@props.cards.pagination.current_page)} onClick={helpers.reload}>
35
35
  {@props.cards.pagination.current_page} / {@props.cards.pagination.total_pages}
36
36
  </a>
37
37
  else
38
- <a href="javascript:void(0)" style={{padding:'6px 12px'}}>
38
+ <a href="javascript:void(0)">
39
39
  <i className="glyphicon glyphicon-refresh glyphicon-refresh-animate" />
40
40
  </a>
41
41
  }
42
42
  </li>
43
- <li>
43
+ <li className="carte-pagination-next">
44
44
  {
45
45
  if @props.cards.pagination
46
46
  if @props.cards.pagination.current_page < @props.cards.pagination.total_pages
@@ -49,7 +49,7 @@ module.exports = React.createClass
49
49
  href = "#/?" + @pageParam(1)
50
50
  else
51
51
  href = "javascript:void(0)"
52
- <a href={href} aria-label="Next" style={{padding:'6px 12px'}}>
52
+ <a href={href} aria-label="Next">
53
53
  <span aria-hidden="true">&raquo;</span>
54
54
  </a>
55
55
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "carte-client",
3
3
  "description": "something like dictionary, wiki, or information card",
4
- "version": "0.0.26",
4
+ "version": "0.0.27",
5
5
  "main": "lib/carte.coffee",
6
6
  "scripts": {
7
7
  "test": "echo \"Error: no test specified\" && exit 1"
@@ -22,6 +22,7 @@
22
22
  "bootstrap": "^3.3.4",
23
23
  "browserify": "^9.0.8",
24
24
  "browserify-css": "^0.6.1",
25
+ "classnames": "^2.1.1",
25
26
  "coffee-reactify": "^3.0.0",
26
27
  "coffee-script": "^1.9.2",
27
28
  "coffeeify": "^1.0.0",
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: 0.0.26
4
+ version: 0.0.27
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-10 00:00:00.000000000 Z
11
+ date: 2015-05-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - '>='
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: httparty
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -220,20 +234,6 @@ dependencies:
220
234
  - - '>='
221
235
  - !ruby/object:Gem::Version
222
236
  version: '0'
223
- - !ruby/object:Gem::Dependency
224
- name: rspec
225
- requirement: !ruby/object:Gem::Requirement
226
- requirements:
227
- - - '>='
228
- - !ruby/object:Gem::Version
229
- version: '0'
230
- type: :runtime
231
- prerelease: false
232
- version_requirements: !ruby/object:Gem::Requirement
233
- requirements:
234
- - - '>='
235
- - !ruby/object:Gem::Version
236
- version: '0'
237
237
  description: something like dictionary, wiki, or information card
238
238
  email:
239
239
  - tidnlyam@gmail.com
@@ -266,6 +266,7 @@ files:
266
266
  - lib/carte/client/models/card.coffee
267
267
  - lib/carte/client/models/cards.coffee
268
268
  - lib/carte/client/router.coffee
269
+ - lib/carte/client/tasks.coffee
269
270
  - lib/carte/client/views/app.cjsx
270
271
  - lib/carte/client/views/card.cjsx
271
272
  - lib/carte/client/views/cards.cjsx