mongowiki 1.0.0.pre

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