mongowiki 1.0.0.pre
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +6 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +103 -0
- data/README.md +39 -0
- data/Rakefile +21 -0
- data/lib/assets/javascripts/application.js +6 -0
- data/lib/assets/javascripts/jquery.autoSearch.js +83 -0
- data/lib/assets/javascripts/jquery.preventTab.js +13 -0
- data/lib/assets/stylesheets/application.css +71 -0
- data/lib/assets/stylesheets/articles.css +53 -0
- data/lib/assets/stylesheets/buttons.css +127 -0
- data/lib/assets/stylesheets/coderay.css +133 -0
- data/lib/assets/stylesheets/error.css +17 -0
- data/lib/assets/stylesheets/forms.css +66 -0
- data/lib/assets/stylesheets/reset.css +48 -0
- data/lib/assets/stylesheets/search.css +77 -0
- data/lib/mongowiki.rb +47 -0
- data/lib/mongowiki/app.rb +61 -0
- data/lib/mongowiki/articles.rb +67 -0
- data/lib/mongowiki/helpers.rb +2 -0
- data/lib/mongowiki/helpers/markdown_helper.rb +18 -0
- data/lib/mongowiki/helpers/message_helper.rb +28 -0
- data/lib/mongowiki/models/article.rb +15 -0
- data/lib/mongowiki/search.rb +30 -0
- data/lib/mongowiki/version.rb +3 -0
- data/lib/views/404.erb +6 -0
- data/lib/views/article/edit.erb +2 -0
- data/lib/views/article/form.erb +23 -0
- data/lib/views/article/list.erb +8 -0
- data/lib/views/article/new.erb +2 -0
- data/lib/views/article/show.erb +12 -0
- data/lib/views/error.erb +16 -0
- data/lib/views/layout.erb +36 -0
- data/lib/views/search/articles.erb +7 -0
- data/lib/views/search/articles.rabl +8 -0
- data/mongowiki.gemspec +49 -0
- data/test/test_helper.rb +7 -0
- data/test/unit/application_test.rb +22 -0
- metadata +408 -0
@@ -0,0 +1,133 @@
|
|
1
|
+
.CodeRay {
|
2
|
+
background-color: #FFF;
|
3
|
+
border: 1px solid #CCC;
|
4
|
+
font-family: Menlo, "Courier New", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", monospace;
|
5
|
+
color: #000;
|
6
|
+
padding: 10px;
|
7
|
+
margin: 15px 0;
|
8
|
+
}
|
9
|
+
|
10
|
+
span.CodeRay { white-space: pre; border: 0px; padding: 2px }
|
11
|
+
|
12
|
+
table.CodeRay { border-collapse: collapse; width: 100%; padding: 2px }
|
13
|
+
table.CodeRay td {
|
14
|
+
padding: 1em 0.5em;
|
15
|
+
vertical-align: top;
|
16
|
+
}
|
17
|
+
|
18
|
+
.CodeRay .line_numbers, .CodeRay .no {
|
19
|
+
background-color: #ECECEC;
|
20
|
+
color: #AAA;
|
21
|
+
text-align: right;
|
22
|
+
}
|
23
|
+
.CodeRay .line_numbers tt { font-weight: bold }
|
24
|
+
.CodeRay .line_numbers .highlighted { color: red }
|
25
|
+
.CodeRay .line { display: block; float: left; width: 100%; }
|
26
|
+
.CodeRay .no { padding: 0px 4px }
|
27
|
+
.CodeRay .code { width: 100%; }
|
28
|
+
|
29
|
+
ol.CodeRay { font-size: 10pt }
|
30
|
+
ol.CodeRay li { white-space: pre }
|
31
|
+
|
32
|
+
.CodeRay .code pre { padding: 5px 0 }
|
33
|
+
|
34
|
+
.CodeRay .debug { color:white ! important; background:blue ! important; }
|
35
|
+
|
36
|
+
.CodeRay .af { color:#00C }
|
37
|
+
.CodeRay .an { color:#007 }
|
38
|
+
.CodeRay .at { color:#f08 }
|
39
|
+
.CodeRay .av { color:#700 }
|
40
|
+
.CodeRay .aw { color:#C00 }
|
41
|
+
.CodeRay .bi { color:#509; font-weight:bold }
|
42
|
+
.CodeRay .c { color:#998; font-style: italic;}
|
43
|
+
|
44
|
+
.CodeRay .ch { color:#04D }
|
45
|
+
.CodeRay .ch .k { color:#04D }
|
46
|
+
.CodeRay .ch .dl { color:#039 }
|
47
|
+
|
48
|
+
.CodeRay .cl { color:#458; font-weight:bold }
|
49
|
+
.CodeRay .cm { color:#A08; font-weight:bold }
|
50
|
+
.CodeRay .co { color:teal; }
|
51
|
+
.CodeRay .cr { color:#0A0 }
|
52
|
+
.CodeRay .cv { color:#369 }
|
53
|
+
.CodeRay .de { color:#B0B; }
|
54
|
+
.CodeRay .df { color:#099; font-weight:bold }
|
55
|
+
.CodeRay .di { color:#088; font-weight:bold }
|
56
|
+
.CodeRay .dl { color:black }
|
57
|
+
.CodeRay .do { color:#970 }
|
58
|
+
.CodeRay .dt { color:#34b }
|
59
|
+
.CodeRay .ds { color:#D42; font-weight:bold }
|
60
|
+
.CodeRay .e { color:#666; font-weight:bold }
|
61
|
+
.CodeRay .en { color:#800; font-weight:bold }
|
62
|
+
.CodeRay .er { color:#F00; background-color:#FAA }
|
63
|
+
.CodeRay .ex { color:#C00; font-weight:bold }
|
64
|
+
.CodeRay .fl { color:#099; }
|
65
|
+
.CodeRay .fu { color:#900; font-weight:bold }
|
66
|
+
.CodeRay .gv { color:teal; font-weight:bold }
|
67
|
+
.CodeRay .hx { color:#058; font-weight:bold }
|
68
|
+
.CodeRay .i { color:#099; }
|
69
|
+
.CodeRay .ic { color:#B44; font-weight:bold }
|
70
|
+
|
71
|
+
.CodeRay .il { color: black }
|
72
|
+
.CodeRay .il .il { background: #ccc }
|
73
|
+
.CodeRay .il .il .il { background: #bbb }
|
74
|
+
.CodeRay .il .idl { color: #D14; }
|
75
|
+
.CodeRay .idl { color: #D14; }
|
76
|
+
|
77
|
+
.CodeRay .im { color:#f00; }
|
78
|
+
.CodeRay .in { color:#B2B; font-weight:bold }
|
79
|
+
.CodeRay .iv { color:teal }
|
80
|
+
.CodeRay .la { color:#970; font-weight:bold }
|
81
|
+
.CodeRay .lv { color:#963 }
|
82
|
+
.CodeRay .oc { color:#40E; font-weight:bold }
|
83
|
+
.CodeRay .of { color:#000; font-weight:bold }
|
84
|
+
.CodeRay .op { }
|
85
|
+
.CodeRay .pc { font-weight:bold }
|
86
|
+
.CodeRay .pd { color:#369; font-weight:bold }
|
87
|
+
.CodeRay .pp { color:#579; }
|
88
|
+
.CodeRay .ps { color:#00C; font-weight:bold }
|
89
|
+
.CodeRay .pt { color:#074; font-weight:bold }
|
90
|
+
.CodeRay .r, .kw { color:#000; font-weight:bold }
|
91
|
+
|
92
|
+
.CodeRay .ke { color: #808; }
|
93
|
+
.CodeRay .ke .dl { color: #606; }
|
94
|
+
.CodeRay .ke .ch { color: #80f; }
|
95
|
+
.CodeRay .vl { color: #088; }
|
96
|
+
|
97
|
+
.CodeRay .rx { background-color:#fff0ff }
|
98
|
+
.CodeRay .rx .k { color:#808 }
|
99
|
+
.CodeRay .rx .dl { color:#404 }
|
100
|
+
.CodeRay .rx .mod { color:#C2C }
|
101
|
+
.CodeRay .rx .fu { color:#404; font-weight: bold }
|
102
|
+
|
103
|
+
.CodeRay .s { color: #D20; }
|
104
|
+
.CodeRay .s .s { }
|
105
|
+
.CodeRay .s .s .s { background-color:#ffd0d0 }
|
106
|
+
.CodeRay .s .k { color: #D14; }
|
107
|
+
.CodeRay .s .ch { color: #D14; }
|
108
|
+
.CodeRay .s .dl { color: #D14; }
|
109
|
+
|
110
|
+
.CodeRay .sh { color:#D14 }
|
111
|
+
.CodeRay .sh .k { }
|
112
|
+
.CodeRay .sh .dl { color:#D14 }
|
113
|
+
|
114
|
+
.CodeRay .sy { color:#990073 }
|
115
|
+
.CodeRay .sy .k { color:#A60 }
|
116
|
+
.CodeRay .sy .dl { color:#630 }
|
117
|
+
|
118
|
+
.CodeRay .ta { color:#070 }
|
119
|
+
.CodeRay .tf { color:#070; font-weight:bold }
|
120
|
+
.CodeRay .ts { color:#D70; font-weight:bold }
|
121
|
+
.CodeRay .ty { color:#339; font-weight:bold }
|
122
|
+
.CodeRay .v { color:#036 }
|
123
|
+
.CodeRay .xt { color:#444 }
|
124
|
+
|
125
|
+
.CodeRay .ins { background: #afa; }
|
126
|
+
.CodeRay .del { background: #faa; }
|
127
|
+
.CodeRay .chg { color: #aaf; background: #007; }
|
128
|
+
.CodeRay .head { color: #f8f; background: #505 }
|
129
|
+
|
130
|
+
.CodeRay .ins .ins { color: #080; font-weight:bold }
|
131
|
+
.CodeRay .del .del { color: #800; font-weight:bold }
|
132
|
+
.CodeRay .chg .chg { color: #66f; }
|
133
|
+
.CodeRay .head .head { color: #f4f; }
|
@@ -0,0 +1,66 @@
|
|
1
|
+
form {
|
2
|
+
width: auto;
|
3
|
+
}
|
4
|
+
|
5
|
+
form label {
|
6
|
+
width: 50px;
|
7
|
+
max-width: 50px;
|
8
|
+
display: inline-block;
|
9
|
+
padding: 10px 20px 0 0;
|
10
|
+
text-align: right;
|
11
|
+
vertical-align: top;
|
12
|
+
}
|
13
|
+
|
14
|
+
form input[type='text'],
|
15
|
+
form input[type='search'],
|
16
|
+
form textarea {
|
17
|
+
width: 850px;
|
18
|
+
}
|
19
|
+
|
20
|
+
input[type="search"] {
|
21
|
+
-webkit-appearance: none;
|
22
|
+
}
|
23
|
+
|
24
|
+
input[type='text'],
|
25
|
+
input[type='search'],
|
26
|
+
textarea {
|
27
|
+
|
28
|
+
border-radius: 5px;
|
29
|
+
-o-border-radius: 5px;
|
30
|
+
-moz-border-radius: 5px;
|
31
|
+
-webkit-border-radius: 5px;
|
32
|
+
|
33
|
+
background-image: linear-gradient(bottom, rgb(240,240,240) 100%, rgb(227,227,227) 1%);
|
34
|
+
background-image: -o-linear-gradient(bottom, rgb(240,240,240) 100%, rgb(227,227,227) 1%);
|
35
|
+
background-image: -moz-linear-gradient(bottom, rgb(240,240,240) 100%, rgb(227,227,227) 1%);
|
36
|
+
background-image: -webkit-linear-gradient(bottom, rgb(240,240,240) 100%, rgb(227,227,227) 1%);
|
37
|
+
background-image: -ms-linear-gradient(bottom, rgb(240,240,240) 100%, rgb(227,227,227) 1%);
|
38
|
+
|
39
|
+
background-image: -webkit-gradient(
|
40
|
+
linear,
|
41
|
+
left bottom,
|
42
|
+
left top,
|
43
|
+
color-stop(1, rgb(227,227,227)),
|
44
|
+
color-stop(0.01, rgb(240,240,240))
|
45
|
+
);
|
46
|
+
|
47
|
+
box-shadow: 0 0 3px #DDD inset;
|
48
|
+
-o-box-shadow: 0 0 3px #DDD inset;
|
49
|
+
-moz-box-shadow: 0 0 3px #DDD inset;
|
50
|
+
-webkit-box-shadow: 0 0 3px #DDD inset;
|
51
|
+
|
52
|
+
border: 1px solid #CCC;
|
53
|
+
font-size: 20px;
|
54
|
+
padding: 5px;
|
55
|
+
|
56
|
+
outline: none;
|
57
|
+
}
|
58
|
+
|
59
|
+
form textarea {
|
60
|
+
height: 300px;
|
61
|
+
}
|
62
|
+
|
63
|
+
form p {
|
64
|
+
display: block;
|
65
|
+
margin: 10px ;
|
66
|
+
}
|
@@ -0,0 +1,48 @@
|
|
1
|
+
/* http://meyerweb.com/eric/tools/css/reset/
|
2
|
+
v2.0 | 20110126
|
3
|
+
License: none (public domain)
|
4
|
+
*/
|
5
|
+
|
6
|
+
html, body, div, span, applet, object, iframe,
|
7
|
+
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
|
8
|
+
a, abbr, acronym, address, big, cite, code,
|
9
|
+
del, dfn, em, img, ins, kbd, q, s, samp,
|
10
|
+
small, strike, strong, sub, sup, tt, var,
|
11
|
+
b, u, i, center,
|
12
|
+
dl, dt, dd, ol, ul, li,
|
13
|
+
fieldset, form, label, legend,
|
14
|
+
table, caption, tbody, tfoot, thead, tr, th, td,
|
15
|
+
article, aside, canvas, details, embed,
|
16
|
+
figure, figcaption, footer, header, hgroup,
|
17
|
+
menu, nav, output, ruby, section, summary,
|
18
|
+
time, mark, audio, video {
|
19
|
+
margin: 0;
|
20
|
+
padding: 0;
|
21
|
+
border: 0;
|
22
|
+
font-size: 100%;
|
23
|
+
font: inherit;
|
24
|
+
vertical-align: baseline;
|
25
|
+
}
|
26
|
+
/* HTML5 display-role reset for older browsers */
|
27
|
+
article, aside, details, figcaption, figure,
|
28
|
+
footer, header, hgroup, menu, nav, section {
|
29
|
+
display: block;
|
30
|
+
}
|
31
|
+
body {
|
32
|
+
line-height: 1;
|
33
|
+
}
|
34
|
+
ol, ul {
|
35
|
+
list-style: none;
|
36
|
+
}
|
37
|
+
blockquote, q {
|
38
|
+
quotes: none;
|
39
|
+
}
|
40
|
+
blockquote:before, blockquote:after,
|
41
|
+
q:before, q:after {
|
42
|
+
content: '';
|
43
|
+
content: none;
|
44
|
+
}
|
45
|
+
table {
|
46
|
+
border-collapse: collapse;
|
47
|
+
border-spacing: 0;
|
48
|
+
}
|
@@ -0,0 +1,77 @@
|
|
1
|
+
#search {
|
2
|
+
display: block;
|
3
|
+
margin: 0 5px 0 50px;
|
4
|
+
}
|
5
|
+
|
6
|
+
#search .query {
|
7
|
+
width: 485px;
|
8
|
+
margin: 0 5px;
|
9
|
+
padding: 5px;
|
10
|
+
}
|
11
|
+
|
12
|
+
#search .result-list {
|
13
|
+
position: absolute;
|
14
|
+
background: white;
|
15
|
+
|
16
|
+
box-shadow: 0 0 1px #DDD inset;
|
17
|
+
-o-box-shadow: 0 0 1px #DDD inset;
|
18
|
+
-moz-box-shadow: 0 0 1px #DDD inset;
|
19
|
+
-webkit-box-shadow: 0 0 1px #DDD inset;
|
20
|
+
|
21
|
+
border-radius: 5px;
|
22
|
+
-o-border-radius: 5px;
|
23
|
+
-moz-border-radius: 5px;
|
24
|
+
-webkit-border-radius: 5px;
|
25
|
+
border: 1px solid #CCC;
|
26
|
+
|
27
|
+
width: 495px;
|
28
|
+
padding: 10px 0;
|
29
|
+
margin: 0 5px;
|
30
|
+
}
|
31
|
+
|
32
|
+
#search .result-list .result-item {
|
33
|
+
background: none;
|
34
|
+
border: none;
|
35
|
+
font-weight: bold;
|
36
|
+
font-size: 15px;
|
37
|
+
padding: 5px 10px;
|
38
|
+
}
|
39
|
+
|
40
|
+
#search .result-list .result-item .item-title {
|
41
|
+
color: #212121;
|
42
|
+
font-size: 12px;
|
43
|
+
text-decoration: none;
|
44
|
+
padding-bottom: 10px;
|
45
|
+
}
|
46
|
+
|
47
|
+
#search .result-list .result-item .item-content {
|
48
|
+
color: #818181;
|
49
|
+
font-weight: normal;
|
50
|
+
padding: 8px 0;
|
51
|
+
font-size: 10px;
|
52
|
+
}
|
53
|
+
|
54
|
+
#search .result-list .result-item:hover {
|
55
|
+
background-image: linear-gradient(bottom, rgb(50,119,199) 01%, rgb(108,159,218) 100%);
|
56
|
+
background-image: -o-linear-gradient(bottom, rgb(50,119,199) 01%, rgb(108,159,218) 100%);
|
57
|
+
background-image: -moz-linear-gradient(bottom, rgb(50,119,199) 01%, rgb(108,159,218) 100%);
|
58
|
+
background-image: -webkit-linear-gradient(bottom, rgb(50,119,199) 01%, rgb(108,159,218) 100%);
|
59
|
+
background-image: -ms-linear-gradient(bottom, rgb(50,119,199) 01%, rgb(108,159,218) 100%);
|
60
|
+
background-image: -webkit-gradient(
|
61
|
+
linear,
|
62
|
+
left bottom,
|
63
|
+
left top,
|
64
|
+
color-stop(0.01, rgb(50,119,199)),
|
65
|
+
color-stop(1, rgb(108,159,218))
|
66
|
+
);
|
67
|
+
}
|
68
|
+
|
69
|
+
#search .result-list .result-item:hover .item-title,
|
70
|
+
#search .result-list .result-item:hover .item-content {
|
71
|
+
color: #FFF;
|
72
|
+
text-shadow: 1px 1px 5px #333;
|
73
|
+
}
|
74
|
+
|
75
|
+
#search .no-results {
|
76
|
+
outline: 5px auto red;
|
77
|
+
}
|
data/lib/mongowiki.rb
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'sinatra'
|
2
|
+
require 'mongoid'
|
3
|
+
require 'mongoid_search'
|
4
|
+
require 'rack/contrib'
|
5
|
+
require 'active_support/concern'
|
6
|
+
|
7
|
+
require 'erb'
|
8
|
+
require 'rabl'
|
9
|
+
require 'sass'
|
10
|
+
require 'sprockets'
|
11
|
+
require 'sprockets-helpers'
|
12
|
+
require 'redcarpet'
|
13
|
+
require 'coderay'
|
14
|
+
|
15
|
+
require 'mongowiki/models/article'
|
16
|
+
require 'mongowiki/helpers'
|
17
|
+
require 'mongowiki/articles'
|
18
|
+
require 'mongowiki/search'
|
19
|
+
require 'mongowiki/app'
|
20
|
+
|
21
|
+
module MongoWiki
|
22
|
+
|
23
|
+
class << self
|
24
|
+
|
25
|
+
attr_reader :mongo_uri
|
26
|
+
|
27
|
+
def mongo_uri=(uri)
|
28
|
+
Mongoid::Config.from_hash("uri" => uri)
|
29
|
+
@@mongo_uri = uri
|
30
|
+
end
|
31
|
+
|
32
|
+
def init!
|
33
|
+
if mongo_uri = ENV['MONGO_URL']
|
34
|
+
self.mongo_uri = mongo_uri
|
35
|
+
else
|
36
|
+
raise "environment variable MONGO_URL is not set!"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def run!
|
41
|
+
init!
|
42
|
+
MongoWiki::App.run!
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
module MongoWiki
|
2
|
+
class App < Sinatra::Base
|
3
|
+
|
4
|
+
# set paths
|
5
|
+
set :root, File.expand_path(__FILE__)
|
6
|
+
set :views, File.expand_path('../../views/', root)
|
7
|
+
set :assets_path, File.expand_path('../../assets', root)
|
8
|
+
|
9
|
+
# sinatra
|
10
|
+
set :show_exceptions, true
|
11
|
+
set :logging, false
|
12
|
+
|
13
|
+
# sprockets
|
14
|
+
set :sprockets, Sprockets::Environment.new(root)
|
15
|
+
set :assets_prefix, '/'
|
16
|
+
# at the moment that's stupid as fuck, but I couldn't come up
|
17
|
+
# with an acceptable solution, so I will stick with it for now
|
18
|
+
set :digest_assets, false
|
19
|
+
|
20
|
+
configure do
|
21
|
+
|
22
|
+
sprockets.append_path File.join(assets_path, "stylesheets")
|
23
|
+
sprockets.append_path File.join(assets_path, "javascripts")
|
24
|
+
sprockets.append_path File.join(assets_path, "images")
|
25
|
+
if logging
|
26
|
+
sprockets.logger = Logger.new($stdout)
|
27
|
+
Mongoid.logger = Logger.new($stdout)
|
28
|
+
end
|
29
|
+
|
30
|
+
# Configure Sprockets::Helpers (if necessary)
|
31
|
+
Sprockets::Helpers.configure do |config|
|
32
|
+
config.environment = sprockets
|
33
|
+
config.prefix = assets_prefix
|
34
|
+
config.digest = digest_assets
|
35
|
+
end
|
36
|
+
|
37
|
+
Rabl.register!
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
helpers do
|
42
|
+
include Sprockets::Helpers
|
43
|
+
include MongoWiki::Helpers::MessageHelper
|
44
|
+
include MongoWiki::Helpers::MarkdownHelper
|
45
|
+
end
|
46
|
+
|
47
|
+
include Rack::Utils
|
48
|
+
include MongoWiki::Articles
|
49
|
+
include MongoWiki::Search
|
50
|
+
|
51
|
+
not_found do
|
52
|
+
erb :"404"
|
53
|
+
end
|
54
|
+
|
55
|
+
def self.run!
|
56
|
+
Article.index_keywords!
|
57
|
+
Rack::Cascade.new([sprockets, self])
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
end
|