mongowiki 1.0.0.pre

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. data/.gitignore +6 -0
  2. data/Gemfile +3 -0
  3. data/Gemfile.lock +103 -0
  4. data/README.md +39 -0
  5. data/Rakefile +21 -0
  6. data/lib/assets/javascripts/application.js +6 -0
  7. data/lib/assets/javascripts/jquery.autoSearch.js +83 -0
  8. data/lib/assets/javascripts/jquery.preventTab.js +13 -0
  9. data/lib/assets/stylesheets/application.css +71 -0
  10. data/lib/assets/stylesheets/articles.css +53 -0
  11. data/lib/assets/stylesheets/buttons.css +127 -0
  12. data/lib/assets/stylesheets/coderay.css +133 -0
  13. data/lib/assets/stylesheets/error.css +17 -0
  14. data/lib/assets/stylesheets/forms.css +66 -0
  15. data/lib/assets/stylesheets/reset.css +48 -0
  16. data/lib/assets/stylesheets/search.css +77 -0
  17. data/lib/mongowiki.rb +47 -0
  18. data/lib/mongowiki/app.rb +61 -0
  19. data/lib/mongowiki/articles.rb +67 -0
  20. data/lib/mongowiki/helpers.rb +2 -0
  21. data/lib/mongowiki/helpers/markdown_helper.rb +18 -0
  22. data/lib/mongowiki/helpers/message_helper.rb +28 -0
  23. data/lib/mongowiki/models/article.rb +15 -0
  24. data/lib/mongowiki/search.rb +30 -0
  25. data/lib/mongowiki/version.rb +3 -0
  26. data/lib/views/404.erb +6 -0
  27. data/lib/views/article/edit.erb +2 -0
  28. data/lib/views/article/form.erb +23 -0
  29. data/lib/views/article/list.erb +8 -0
  30. data/lib/views/article/new.erb +2 -0
  31. data/lib/views/article/show.erb +12 -0
  32. data/lib/views/error.erb +16 -0
  33. data/lib/views/layout.erb +36 -0
  34. data/lib/views/search/articles.erb +7 -0
  35. data/lib/views/search/articles.rabl +8 -0
  36. data/mongowiki.gemspec +49 -0
  37. data/test/test_helper.rb +7 -0
  38. data/test/unit/application_test.rb +22 -0
  39. 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,17 @@
1
+ .error {
2
+ padding: 10px;
3
+ }
4
+
5
+ .error .title {
6
+ color: #800001;
7
+ }
8
+
9
+ .error .message {
10
+ font-size: 15px;
11
+ }
12
+
13
+ .error .backtrace {
14
+ background-color: #B9B9B9;
15
+ font-family: "Monaco", "Myriad Pro", serif;
16
+ font-size: 12px;
17
+ }
@@ -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