carte-server 0.0.13 → 0.0.14
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/.gitignore +1 -0
- data/README.md +5 -3
- data/carte.gemspec +1 -0
- data/config.json +1 -1
- data/lib/carte/client.coffee +1 -0
- data/lib/carte/client/views/content.cjsx +1 -1
- data/lib/carte/client/views/edit.cjsx +4 -1
- data/lib/carte/client/views/header.cjsx +1 -1
- data/lib/carte/client/views/list.cjsx +1 -2
- data/lib/carte/server.rb +6 -0
- data/lib/carte/server/models/card.rb +4 -4
- data/lib/carte/server/version.rb +1 -1
- data/lib/carte/server/views/cards.builder +1 -1
- data/lib/carte/server/views/index.haml +8 -2
- data/lib/carte/shared/default.json +2 -1
- data/package.json +1 -1
- data/screenshot.png +0 -0
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 94f92bcba2bb68b4e76f4380f0d4bcd508db2470
|
4
|
+
data.tar.gz: ce41c8cdd0b3f0221c3e2b3cad4dae76ce5547f6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 73b8fca305b006462412bc800b10cf00cc65675538cb1fb07681edbdcc72478b51583390e423742cd81c7d23a1a03f5966e6928a30f9e3c3a541b608e6feb572
|
7
|
+
data.tar.gz: ba3a2d310e97f4eee0ca9fa2c57d88ff08cf8ef7a09843e6ef58a593d8569d2cdb7a5be504a90991af6187580af08018d3348b5022ff49fa9ed90fc4d902c0c8
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -21,9 +21,11 @@ Japanese introduction is [here](http://tily.tumblr.com/post/117678137942/carte).
|
|
21
21
|
|
22
22
|
## Components
|
23
23
|
|
24
|
-
|
25
|
-
|
26
|
-
|
24
|
+
| Package Name | Description |
|
25
|
+
|--------------|-------------|
|
26
|
+
| [carte-server](https://rubygems.org/gems/carte-server) | provides JSON API (document is [here](https://github.com/tily/carte/wiki/API)) |
|
27
|
+
| [carte-client](https://www.npmjs.com/package/carte-client) | builds client side javascript |
|
28
|
+
|
27
29
|
## Deploy
|
28
30
|
|
29
31
|
[](https://heroku.com/deploy?template=https://github.com/tily/carte-sandbox)
|
data/carte.gemspec
CHANGED
data/config.json
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
{
|
2
2
|
"title": "Carte Sandbox (custom)",
|
3
3
|
"description": "Sandbox for Carte",
|
4
|
+
"icon_link": "http://www.google.com",
|
4
5
|
"public_folder": "public",
|
5
6
|
"script_path": "public/app.js",
|
6
|
-
"link_color": "yellow",
|
7
7
|
"menu_items": ["latest", "random", "atoz"],
|
8
8
|
"default_query": {"sort": "updated_at", "order": "desc"},
|
9
9
|
"api_path": ""
|
data/lib/carte/client.coffee
CHANGED
@@ -8,6 +8,7 @@ Router = require('./client/router')
|
|
8
8
|
Backbone.$ = $
|
9
9
|
cssify.byUrl('//maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css')
|
10
10
|
cssify.byUrl('//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css')
|
11
|
+
cssify.byUrl('//cdnjs.cloudflare.com/ajax/libs/animate.css/3.2.6/animate.min.css')
|
11
12
|
|
12
13
|
$(document).ready ()->
|
13
14
|
AppView = React.createFactory(AppViewComponent)
|
@@ -25,7 +25,7 @@ module.exports = React.createClass
|
|
25
25
|
when "list"
|
26
26
|
console.log 'list', @props.router.query
|
27
27
|
cards = new CardCollection()
|
28
|
-
cards.query = $.extend config.default_query, @props.router.query
|
28
|
+
cards.query = $.extend {}, config.default_query, @props.router.query
|
29
29
|
cards.fetching = true
|
30
30
|
cards.fetch success: ()-> cards.fetching = false
|
31
31
|
title = []
|
@@ -16,6 +16,7 @@ module.exports = React.createClass
|
|
16
16
|
content: @props.card.get('content')
|
17
17
|
tags: @props.card.get('tags') || []
|
18
18
|
errors: false
|
19
|
+
shaking: false
|
19
20
|
|
20
21
|
onChangeTitle: ->
|
21
22
|
@setState title: event.target.value
|
@@ -41,9 +42,11 @@ module.exports = React.createClass
|
|
41
42
|
console.log response.responseJSON
|
42
43
|
@setState errors: response.responseJSON.card.errors
|
43
44
|
@setState updating: false
|
45
|
+
@setState shaking: true
|
46
|
+
setTimeout (=> @setState shaking: false), 300
|
44
47
|
|
45
48
|
render: ->
|
46
|
-
<Modal {...@props} bsStyle='default' title={if @props.card.isNew() then <i className="glyphicon glyphicon-plus" /> else <i className="glyphicon glyphicon-edit" />} animation={false}>
|
49
|
+
<Modal className={"animated infinite shake" if @state.shaking} {...@props} bsStyle='default' title={if @props.card.isNew() then <i className="glyphicon glyphicon-plus" /> else <i className="glyphicon glyphicon-edit" />} animation={false}>
|
47
50
|
<div className='modal-body'>
|
48
51
|
{
|
49
52
|
if @state.errors
|
@@ -62,7 +62,7 @@ module.exports = React.createClass
|
|
62
62
|
<nav className="navbar navbar-default" style={{padding:"0px",backgroundColor:"white",marginBottom:"5px"}}>
|
63
63
|
<div className="container-fluid">
|
64
64
|
<div className="navbar-header">
|
65
|
-
<a className="navbar-brand" onClick={helpers.reload} href={if config.icon_link then config.icon_link else "#/"} style={{paddingTop:"10px"}}>
|
65
|
+
<a className="navbar-brand" onClick={helpers.reload if !config.icon_link} href={if config.icon_link then config.icon_link else "#/"} style={{paddingTop:"10px"}}>
|
66
66
|
<img alt="Brand" src="/images/icon.png" width="30" height="30" />
|
67
67
|
</a>
|
68
68
|
<a className="navbar-brand" onClick={helpers.reload} href="#/">
|
@@ -31,8 +31,7 @@ module.exports = React.createClass
|
|
31
31
|
@queryParam {tag: tag}, ['seed']
|
32
32
|
|
33
33
|
queryParam: (param, deleteKeys)->
|
34
|
-
query = $.extend {}, @props.cards.query
|
35
|
-
query = $.extend query, param
|
34
|
+
query = $.extend {}, @props.cards.query, param
|
36
35
|
for key in deleteKeys
|
37
36
|
delete query[key]
|
38
37
|
$.param(query)
|
data/lib/carte/server.rb
CHANGED
@@ -5,6 +5,7 @@ require 'mongoid_auto_increment_id'
|
|
5
5
|
require 'will_paginate_mongoid'
|
6
6
|
require 'mongoid-simple-tags'
|
7
7
|
require 'mongoid/geospatial'
|
8
|
+
require 'redcarpet'
|
8
9
|
require 'carte/server/validators'
|
9
10
|
require 'carte/server/models'
|
10
11
|
|
@@ -53,6 +54,11 @@ module Carte
|
|
53
54
|
end
|
54
55
|
cards = cards.paginate(per_page: 9, page: params[:page])
|
55
56
|
end
|
57
|
+
|
58
|
+
def markdown2html(markdown)
|
59
|
+
renderer = Redcarpet::Render::HTML.new(filter_html:true)
|
60
|
+
Redcarpet::Markdown.new(renderer, autolink: true).render(markdown)
|
61
|
+
end
|
56
62
|
end
|
57
63
|
|
58
64
|
get '/' do
|
@@ -20,13 +20,13 @@ module Carte
|
|
20
20
|
on: :create
|
21
21
|
validates :title,
|
22
22
|
uniqueness: true,
|
23
|
-
length: {maximum: 70}
|
23
|
+
length: {maximum: (ENV['CARTE_TITLE_MAX_LENGTH'] || 70).to_i}
|
24
24
|
validates :content,
|
25
25
|
presence: true,
|
26
|
-
length: {maximum: 560}
|
26
|
+
length: {maximum: (ENV['CARTE_DESCRIPTION_MAX_LENGTH'] || 560).to_i}
|
27
27
|
validates :tags,
|
28
|
-
length: {maximum: 3, message: 'are too many (maximum is 3 tags)'},
|
29
|
-
array: {length: {maximum: 10}}
|
28
|
+
length: {maximum: (ENV['CARTE_TAGS_MAX_SIZE'] || 3).to_i, message: 'are too many (maximum is 3 tags)'},
|
29
|
+
array: {length: {maximum: (ENV['CARTE_TAG_MAX_LENGTH'] || 10).to_i}}
|
30
30
|
|
31
31
|
has_many :histories
|
32
32
|
|
data/lib/carte/server/version.rb
CHANGED
@@ -8,7 +8,7 @@ xml.rss version: "2.0", :"xmlns:atom" => "http://www.w3.org/2005/Atom" do
|
|
8
8
|
@cards.each do |card|
|
9
9
|
xml.item do
|
10
10
|
xml.title(card.title)
|
11
|
-
xml.description card.content
|
11
|
+
xml.description markdown2html(card.content)
|
12
12
|
xml.link("http://#{request.host}/#/#{URI.escape(card.title)}")
|
13
13
|
xml.pubDate card.updated_at.rfc822
|
14
14
|
xml.guid({isPermaLink: false}, "http://#{request.host}/#/#{URI.escape(card.title)}##{card.updated_at.to_i}")
|
@@ -23,8 +23,14 @@
|
|
23
23
|
color: #333333 !important;
|
24
24
|
text-decoration: none !important;
|
25
25
|
}
|
26
|
-
a
|
27
|
-
color: #{config['link_color']};
|
26
|
+
a {
|
27
|
+
color: #{config['link_color']};
|
28
|
+
text-decoration: none;
|
29
|
+
}
|
30
|
+
a:hover,
|
31
|
+
a:focus {
|
32
|
+
color: #{config['link_active_color']};
|
33
|
+
text-decoration: underline;
|
28
34
|
}
|
29
35
|
.glyphicon-refresh-animate {
|
30
36
|
-animation: spin .7s infinite linear;
|
@@ -3,7 +3,8 @@
|
|
3
3
|
"description": "Sandbox for Carte",
|
4
4
|
"public_folder": "public",
|
5
5
|
"script_path": "public/app.js",
|
6
|
-
"link_color": "
|
6
|
+
"link_color": "#337ab7",
|
7
|
+
"link_active_color": "#23527c",
|
7
8
|
"api_path": "",
|
8
9
|
"menu_items": ["atoz", "latest", "random"],
|
9
10
|
"default_query": {"sort": "title", "order": "asc"},
|
data/package.json
CHANGED
data/screenshot.png
CHANGED
Binary file
|
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.
|
4
|
+
version: 0.0.14
|
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-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -206,6 +206,20 @@ dependencies:
|
|
206
206
|
- - '>='
|
207
207
|
- !ruby/object:Gem::Version
|
208
208
|
version: '0'
|
209
|
+
- !ruby/object:Gem::Dependency
|
210
|
+
name: redcarpet
|
211
|
+
requirement: !ruby/object:Gem::Requirement
|
212
|
+
requirements:
|
213
|
+
- - '>='
|
214
|
+
- !ruby/object:Gem::Version
|
215
|
+
version: '0'
|
216
|
+
type: :runtime
|
217
|
+
prerelease: false
|
218
|
+
version_requirements: !ruby/object:Gem::Requirement
|
219
|
+
requirements:
|
220
|
+
- - '>='
|
221
|
+
- !ruby/object:Gem::Version
|
222
|
+
version: '0'
|
209
223
|
description: something like dictionary, wiki, or information card
|
210
224
|
email:
|
211
225
|
- tidnlyam@gmail.com
|