bloggit 1.0.3 → 1.0.7
Sign up to get free protection for your applications and to get access to all the features.
- data/History +29 -0
- data/Manifest +3 -0
- data/ReadMe +4 -2
- data/Todo +3 -1
- data/lib/bloggit.rb +1 -1
- data/lib/bloggit/boilerplate/plugins/haloscan/init.rb +20 -2
- data/lib/bloggit/boilerplate/plugins/js_search/init.rb +69 -0
- data/lib/bloggit/boilerplate/plugins/js_search/scripts/search-engine.js +71 -0
- data/lib/bloggit/client/index.html +111 -2
- data/lib/bloggit/client/scripts/app.js +2 -2
- data/lib/bloggit/commandline.rb +1 -1
- data/lib/bloggit/generator.rb +9 -2
- data/lib/bloggit/media.rb +1 -1
- data/lib/bloggit/page.rb +8 -0
- data/lib/bloggit/plugin.rb +7 -4
- data/lib/bloggit/post.rb +1 -2
- data/lib/bloggit/site.rb +27 -3
- data/lib/bloggit/tasks/client.rb +14 -2
- data/lib/bloggit/tasks/publishing.rb +5 -3
- data/lib/bloggit/template.rb +35 -23
- data/lib/util/fixed_hoe.rb +1 -1
- data/test/fixtures/test.blog/plugins/haloscan/init.rb +3 -5
- data/test/fixtures/test.blog/plugins/js_search/init.rb +69 -51
- data/test/fixtures/test.blog/plugins/js_search/scripts/search-engine.js +71 -0
- metadata +97 -87
data/History
CHANGED
@@ -1,3 +1,32 @@
|
|
1
|
+
== 1.0.7 / 2003-04-02
|
2
|
+
|
3
|
+
* Experimental JSON Mongrel handler...
|
4
|
+
* Tagged as version 1.0.7
|
5
|
+
[2008-04-02 20:24:55 -0500]
|
6
|
+
* Absolute paths are availables for every link_to (uses the base_path from config)
|
7
|
+
* RSS feeds generate absolute paths now
|
8
|
+
* Post#to_yaml fixes
|
9
|
+
* Sub-folders are globbed when looking for pages and/or posts
|
10
|
+
* Added support for fetching latest posts that include, or exclude, a specified tag
|
11
|
+
* Experimental embedded server
|
12
|
+
* Fixed verbosity to actually honor the commandline
|
13
|
+
* Exposed 'path_to_root' in Page rendering context
|
14
|
+
[2007-10-27 12:53:04 -0500]
|
15
|
+
* Added 'content' to variable to context for pages and posts
|
16
|
+
* Updated version number
|
17
|
+
[2007-10-27 11:39:14 -0500]
|
18
|
+
* Updated gem manifest and the create_manifest task
|
19
|
+
* Added a .gitignore file for this project
|
20
|
+
[2007-10-23 21:38:52 -0500]
|
21
|
+
* Added JS Search plugin to test.blog fixture and boilerplate code.
|
22
|
+
* FIX: No longer dies when the $/media folder is missing
|
23
|
+
* Updated version number to 1.0.4
|
24
|
+
[2007-10-23 21:36:42 -0500]
|
25
|
+
* Added JS Search plugin to test.blog fixture and boilerplate code.
|
26
|
+
* FIX: No longer dies when the $/media folder is missing
|
27
|
+
* Updated version number to 1.0.4
|
28
|
+
|
29
|
+
|
1
30
|
== 1.0.0 / 2007-03-15
|
2
31
|
|
3
32
|
* Initial release!
|
data/Manifest
CHANGED
@@ -13,6 +13,8 @@ lib/bloggit.rb
|
|
13
13
|
lib/bloggit/boilerplate/Rakefile
|
14
14
|
lib/bloggit/boilerplate/pages/about.page
|
15
15
|
lib/bloggit/boilerplate/plugins/haloscan/init.rb
|
16
|
+
lib/bloggit/boilerplate/plugins/js_search/init.rb
|
17
|
+
lib/bloggit/boilerplate/plugins/js_search/scripts/search-engine.js
|
16
18
|
lib/bloggit/boilerplate/settings.yml
|
17
19
|
lib/bloggit/boilerplate/themes/default/styles/main.css
|
18
20
|
lib/bloggit/boilerplate/themes/default/templates/archive.rhtml
|
@@ -396,6 +398,7 @@ test/fixtures/test.blog/pages/todo.page
|
|
396
398
|
test/fixtures/test.blog/plugins/example/init.rb
|
397
399
|
test/fixtures/test.blog/plugins/haloscan/init.rb
|
398
400
|
test/fixtures/test.blog/plugins/js_search/init.rb
|
401
|
+
test/fixtures/test.blog/plugins/js_search/scripts/search-engine.js
|
399
402
|
test/fixtures/test.blog/plugins/rdoc_formatter/init.rb
|
400
403
|
test/fixtures/test.blog/posts/2004.03.07_to-boldly-go.post
|
401
404
|
test/fixtures/test.blog/posts/2007.03.25_sure-whatever.post
|
data/ReadMe
CHANGED
@@ -7,8 +7,10 @@
|
|
7
7
|
|
8
8
|
Bloggit is a desktop blog generator.
|
9
9
|
|
10
|
+
You can find the source at: http://repo.or.cz/w/bloggit.git
|
10
11
|
|
11
|
-
|
12
|
+
|
13
|
+
== FEATURES:
|
12
14
|
|
13
15
|
* Static generation of blog
|
14
16
|
* Tags
|
@@ -47,7 +49,7 @@ If you have a publish target defined, you can publish using Rake as well:
|
|
47
49
|
|
48
50
|
(The MIT License)
|
49
51
|
|
50
|
-
Copyright (c) 2007 Matthew McCray
|
52
|
+
Copyright (c) 2007-2008 Matthew McCray
|
51
53
|
|
52
54
|
Permission is hereby granted, free of charge, to any person obtaining
|
53
55
|
a copy of this software and associated documentation files (the
|
data/Todo
CHANGED
@@ -10,7 +10,9 @@ format: Markdown
|
|
10
10
|
* Base page folder setting ( defaults to `'.'` )
|
11
11
|
* Abstract content types (page, post, media)
|
12
12
|
* Cleanup error messages, application-wide
|
13
|
-
*
|
13
|
+
* Glob files so sub-directories are scanned
|
14
|
+
* Convert to MERB-style template names `filename.processor.type`. For example: `home.erb.page`. If a processor type is given, then it's processed via that utility.
|
15
|
+
* (Page|Post).find_by_tag(s)
|
14
16
|
|
15
17
|
## Completed
|
16
18
|
|
data/lib/bloggit.rb
CHANGED
@@ -1,5 +1,23 @@
|
|
1
1
|
# This is required automatically..
|
2
2
|
|
3
|
-
Bloggit::Plugin.
|
4
|
-
|
3
|
+
Bloggit::Plugin.register :haloscan do |settings|
|
4
|
+
$username = settings.fetch('username', '')
|
5
5
|
end
|
6
|
+
|
7
|
+
Bloggit::Template.register_tag :haloscan do |*args|
|
8
|
+
type, slug = args
|
9
|
+
case type
|
10
|
+
|
11
|
+
when :comments
|
12
|
+
%Q|<a href="javascript:HaloScan('#{slug}');" target="_self"><script type="text/javascript">postCount('#{slug}');</script></a>|
|
13
|
+
|
14
|
+
when :trackbacks
|
15
|
+
%Q|<a href="javascript:HaloScanTB('#{slug}');" target="_self"><script type="text/javascript">postCountTB('#{slug}'); </script></a>|
|
16
|
+
|
17
|
+
when :script
|
18
|
+
%Q|<script type="text/javascript" src="http://www.haloscan.com/load/#{$username}"> </script>|
|
19
|
+
|
20
|
+
else
|
21
|
+
'WHAT ELSE?'
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# This is required automatically..
|
2
|
+
|
3
|
+
Bloggit::Plugin.register :js_search do |settings|
|
4
|
+
|
5
|
+
end
|
6
|
+
|
7
|
+
Bloggit::Template.register_tag :js_search do |*args|
|
8
|
+
type, label = args
|
9
|
+
label ||= 'Search'
|
10
|
+
path = Bloggit::Template.current_template
|
11
|
+
case type
|
12
|
+
|
13
|
+
when :form
|
14
|
+
%Q|<form id="search-form" action="#" method="GET" onsubmit="Search.query(document.getElementById('q').value);return false;"><input class="search-query" type="search" name="q" id="q" placeholder=""/><input class="search-button" type="submit" value="#{label}"/></form>|
|
15
|
+
|
16
|
+
when :script
|
17
|
+
%Q|<script src="#{path.url_for :script=>'search-engine'}"></script><script>Search.index_uri='#{path.url_for :script=>'keyword-index'}';</script>|
|
18
|
+
else
|
19
|
+
'?'
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
NOISE_WORDS = %w(about after all also an and another any are as at be because been before
|
24
|
+
being between both but by came can come could did do each for from get
|
25
|
+
got has had he have her here him himself his how if in into is it like
|
26
|
+
make many me might more most much must my never now of on only or other
|
27
|
+
our out over said same see should since some still such take than that
|
28
|
+
the their them then there these they this those through to too under up
|
29
|
+
very was way we well were what where which while who with would you your a
|
30
|
+
b c d e f g h i j k l m n o p q r s t u v w x y z $ 1 2 3 4 5 6 7 8 9 0 _)
|
31
|
+
|
32
|
+
Bloggit::on_event(:after_generate) do |site, cache_dir|
|
33
|
+
puts "Generating search index..."
|
34
|
+
|
35
|
+
index_data = {
|
36
|
+
:count=>0,
|
37
|
+
:pages=>[]
|
38
|
+
}
|
39
|
+
|
40
|
+
site.pages.each do |page|
|
41
|
+
msg = page.source.downcase
|
42
|
+
total_words = msg.split(' ').length
|
43
|
+
words = msg.gsub!( /[\W|_]/, ' ' ).split(' ')
|
44
|
+
words.uniq!
|
45
|
+
words.delete_if {|word| NOISE_WORDS.include?( word ) }
|
46
|
+
# TODO: Add path key that's the path from ROOT...
|
47
|
+
index_data[:pages] << { :title=>page.title, 'url'=>site.absolute_path_to(page), 'keywords'=>words.join(' '), :type=>'page' }
|
48
|
+
puts " #{words.length.to_s.rjust(3,' ')}/#{total_words.to_s.ljust(3,' ')} - #{page.title} (page)"
|
49
|
+
end
|
50
|
+
|
51
|
+
site.posts.each do |post|
|
52
|
+
msg = post.source.downcase
|
53
|
+
msg += " #{post.tags.join(' ')} #{post.title}"
|
54
|
+
total_words = msg.split(' ').length
|
55
|
+
words = msg.gsub!( /[\W|_]/, ' ' ).split(' ')
|
56
|
+
words.uniq!
|
57
|
+
words.delete_if {|word| NOISE_WORDS.include?( word ) }
|
58
|
+
# TODO: Add path key that's the path from ROOT...
|
59
|
+
index_data[:pages] << { :title=>post.title, 'url'=>site.absolute_path_to(post), 'keywords'=>words.join(' '), :type=>'post' }
|
60
|
+
puts " #{words.length.to_s.rjust(3,' ')}/#{total_words.to_s.ljust(3,' ')} - #{post.title} (post)"
|
61
|
+
end
|
62
|
+
|
63
|
+
index_data[:count] = index_data[:pages].length
|
64
|
+
File.open( File.join(cache_dir, 'theme', 'scripts', 'keyword-index.js'), 'w') do |f|
|
65
|
+
f.write index_data.to_json
|
66
|
+
end
|
67
|
+
|
68
|
+
FileUtils.cp File.join(site.base_path, 'plugins', 'js_search', 'scripts', 'search-engine.js'), File.join(cache_dir, 'theme', 'scripts', 'search-engine.js')
|
69
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
// Simple Keyword Search Engine
|
2
|
+
//
|
3
|
+
// Usage:
|
4
|
+
// Search.query(keyword) - returns array of matched pages
|
5
|
+
|
6
|
+
window.Search = {
|
7
|
+
index_uri :'keyword-index.js', // Path to the keyword-index
|
8
|
+
_idx :null,
|
9
|
+
|
10
|
+
query :function(q) {
|
11
|
+
try {
|
12
|
+
this.fetch_index();
|
13
|
+
|
14
|
+
var re = new RegExp(q, 'gi');
|
15
|
+
var results = [];
|
16
|
+
|
17
|
+
for(var i=0; i<this._idx.pages.length; i++) {
|
18
|
+
var page = this._idx.pages[i];
|
19
|
+
if( re.test(page.keywords) ) {
|
20
|
+
results.push( page );
|
21
|
+
}
|
22
|
+
}
|
23
|
+
|
24
|
+
this._onSearchComplete(results, q);
|
25
|
+
return results;
|
26
|
+
} catch (err) {
|
27
|
+
// If something went wrong... punt!
|
28
|
+
this._onError(err);
|
29
|
+
}
|
30
|
+
},
|
31
|
+
|
32
|
+
onFetchIndex :function(callback) {
|
33
|
+
this._onFetchIndex = callback;
|
34
|
+
},
|
35
|
+
_onFetchIndex :function(complete){},
|
36
|
+
|
37
|
+
onSearchComplete :function(callback) {
|
38
|
+
this._onSearchComplete = callback;
|
39
|
+
},
|
40
|
+
_onSearchComplete: function(results, q){ },
|
41
|
+
|
42
|
+
onError :function(callback) {
|
43
|
+
this._onError = callback;
|
44
|
+
},
|
45
|
+
_onError: function(err){ alert(err.message || err.description || err); },
|
46
|
+
|
47
|
+
fetch_index :function() {
|
48
|
+
if(this._idx == null) {
|
49
|
+
this._onFetchIndex(false);
|
50
|
+
var xhr = this.get_xhr();
|
51
|
+
xhr.open("GET", this.index_uri, false); // Synchronous loading...
|
52
|
+
xhr.send("");
|
53
|
+
eval("window.Search._idx = "+ xhr.responseText);
|
54
|
+
this._onFetchIndex(true);
|
55
|
+
}
|
56
|
+
},
|
57
|
+
get_xhr :function() {
|
58
|
+
return this.one_of_these(
|
59
|
+
function() {return new XMLHttpRequest()},
|
60
|
+
function() {return new ActiveXObject('Msxml2.XMLHTTP')},
|
61
|
+
function() {return new ActiveXObject('Microsoft.XMLHTTP')}
|
62
|
+
);
|
63
|
+
},
|
64
|
+
one_of_these :function() {
|
65
|
+
var returnValue;
|
66
|
+
for (var i=0; i<arguments.length; i++) {
|
67
|
+
try { returnValue = arguments[i](); break; } catch (ignore) {};
|
68
|
+
}
|
69
|
+
return returnValue;
|
70
|
+
}
|
71
|
+
}
|
@@ -1,2 +1,111 @@
|
|
1
|
-
<
|
2
|
-
<
|
1
|
+
<html>
|
2
|
+
<head>
|
3
|
+
<title><%= site.title %> :: Bloggit</title>
|
4
|
+
<style>
|
5
|
+
HTML, BODY {
|
6
|
+
font: normal 12px Verdana;
|
7
|
+
margin: 0; padding: 0;
|
8
|
+
border: 0 none;
|
9
|
+
overflow: hidden;
|
10
|
+
height: 100%;
|
11
|
+
}
|
12
|
+
</style>
|
13
|
+
<link rel="stylesheet" type="text/css" href="/scripts/resources/css/ext-all.css" />
|
14
|
+
<script type="text/javascript" src="/scripts/adapter/jquery/jquery.js"></script>
|
15
|
+
<script type="text/javascript" src="/scripts/adapter/jquery/jquery-plugins.js"></script>
|
16
|
+
<script type="text/javascript" src="/scripts/adapter/jquery/ext-jquery-adapter.js"></script>
|
17
|
+
<script type="text/javascript" src="/scripts/ext-all.js"></script>
|
18
|
+
<script type="text/javascript" src="/scripts/app.js"></script>
|
19
|
+
<style>
|
20
|
+
.x-layout-panel-south, x-layout-panel-north {
|
21
|
+
background-color: #c9defa !important;
|
22
|
+
}
|
23
|
+
</style>
|
24
|
+
</head>
|
25
|
+
<body>
|
26
|
+
<div id="container">
|
27
|
+
<div id="tab-pages">
|
28
|
+
<div id="pages-tb">
|
29
|
+
+ New Page,
|
30
|
+
- Delete (selected)
|
31
|
+
</div>
|
32
|
+
<div id="pages-grid">
|
33
|
+
Pages Grid
|
34
|
+
</div>
|
35
|
+
<div>Splitter?</div>
|
36
|
+
<div>Content Editor</div>
|
37
|
+
<div>Extra Info? (tags, title, slug, etc)</div>
|
38
|
+
</div>
|
39
|
+
<div id="tab-posts">
|
40
|
+
<div id="posts-tb"></div>
|
41
|
+
<div id="posts-grid" style="height:500">
|
42
|
+
Posts Grid
|
43
|
+
</div>
|
44
|
+
<div>
|
45
|
+
Splitter?
|
46
|
+
</div>
|
47
|
+
<div>
|
48
|
+
Content Editor (title, slug, publish data, status, etc)
|
49
|
+
</div>
|
50
|
+
</div>
|
51
|
+
<div id="tab-themes">
|
52
|
+
<div id="themes-tb">
|
53
|
+
+ New Theme
|
54
|
+
</div>
|
55
|
+
<div>
|
56
|
+
Theme Tree
|
57
|
+
</div>
|
58
|
+
<div>
|
59
|
+
Theme Editor
|
60
|
+
</div>
|
61
|
+
</div>
|
62
|
+
<div id="tab-plugins">
|
63
|
+
<div id="plugins-tb">
|
64
|
+
+ New Plugin,
|
65
|
+
- Disable (selected)
|
66
|
+
</div>
|
67
|
+
<div>
|
68
|
+
Plugin Tree
|
69
|
+
</div>
|
70
|
+
<div>
|
71
|
+
Plugin Editor
|
72
|
+
</div>
|
73
|
+
</div>
|
74
|
+
<div id="tab-media">
|
75
|
+
<div id="media-tb">
|
76
|
+
+ New Media,
|
77
|
+
- Delete (selected)
|
78
|
+
</div>
|
79
|
+
<div>
|
80
|
+
Media Tree View
|
81
|
+
</div>
|
82
|
+
<div>
|
83
|
+
Media Preview (?)
|
84
|
+
</div>
|
85
|
+
</div>
|
86
|
+
<div id="tab-settings">
|
87
|
+
Settings
|
88
|
+
</div>
|
89
|
+
<div id="tab-preview">
|
90
|
+
<div id="preview-tb">
|
91
|
+
@ Refresh,
|
92
|
+
# Regenerate
|
93
|
+
</div>
|
94
|
+
<div>
|
95
|
+
Preview IFRAME
|
96
|
+
</div>
|
97
|
+
</div>
|
98
|
+
<div id="site-header">
|
99
|
+
Bloggit <%= Bloggit::VERSION %>
|
100
|
+
</div>
|
101
|
+
<div id="home-page">
|
102
|
+
At your service, my dear.
|
103
|
+
</div>
|
104
|
+
<div id="status-bar">
|
105
|
+
Ready.
|
106
|
+
</div>
|
107
|
+
</div>
|
108
|
+
</body>
|
109
|
+
</html>
|
110
|
+
<!-- <p>One moment...</p>
|
111
|
+
<script>setTimeout("location.href='/main'", 2000);</script> -->
|
@@ -97,12 +97,12 @@ Bloggit = (function(){
|
|
97
97
|
}
|
98
98
|
|
99
99
|
var cm = new Ext.grid.ColumnModel([
|
100
|
-
{header: "Title", width:
|
100
|
+
{header: "Title", width: 300, dataIndex: 'title', id:'title', renderer:titleRenderer},
|
101
101
|
{header: "Status", width: 115, dataIndex: 'status'},
|
102
102
|
{header: "Format", width: 100, dataIndex: 'format'},
|
103
103
|
{header: "Publish Date", width: 100, dataIndex: 'publish_date'},
|
104
104
|
]);
|
105
|
-
|
105
|
+
cm.defaultSortable = true;
|
106
106
|
|
107
107
|
dsPosts.load();
|
108
108
|
// create the grid
|
data/lib/bloggit/commandline.rb
CHANGED
@@ -33,7 +33,7 @@ module Bloggit
|
|
33
33
|
opt.on("--verbose", "Be verbose when outputting info") {|t| Bloggit::Cmdline.verbose = true }
|
34
34
|
end
|
35
35
|
|
36
|
-
|
36
|
+
puts "Loading commands from #{File.join( File.dirname(__FILE__), 'commands', '*.rb')} (#{Bloggit::Cmdline.verbose})"
|
37
37
|
Dir[ File.join( File.dirname(__FILE__), 'commands', '*.rb') ].each do |command|
|
38
38
|
require command
|
39
39
|
end
|
data/lib/bloggit/generator.rb
CHANGED
@@ -74,7 +74,7 @@ module Bloggit
|
|
74
74
|
|
75
75
|
puts_if_verbose "Copying media files..."
|
76
76
|
media_root = File.join(site.base_path, 'media')
|
77
|
-
FileUtils.cp_r media_root, cache_dir, :verbose=>false
|
77
|
+
FileUtils.cp_r media_root, cache_dir, :verbose=>false if File.exists?(media_root)
|
78
78
|
|
79
79
|
puts_if_verbose "Copying '#{site.theme}' theme files..."
|
80
80
|
create_folder 'theme'
|
@@ -123,6 +123,7 @@ module Bloggit
|
|
123
123
|
|
124
124
|
def gen_post(post)
|
125
125
|
ctx = {
|
126
|
+
'content' => post,
|
126
127
|
'post' => post,
|
127
128
|
'site' => @site
|
128
129
|
}
|
@@ -134,6 +135,7 @@ module Bloggit
|
|
134
135
|
|
135
136
|
def gen_page(page)
|
136
137
|
ctx = {
|
138
|
+
'content' => page,
|
137
139
|
'page' => page,
|
138
140
|
'site' => @site
|
139
141
|
}
|
@@ -238,6 +240,7 @@ module Bloggit
|
|
238
240
|
def gen_atom_feed(posts, io_obj)
|
239
241
|
tmpl = Template.from_text('')
|
240
242
|
Template.folder_depth = 0
|
243
|
+
Template.force_absolute_path = true
|
241
244
|
|
242
245
|
xml = Builder::XmlMarkup.new( :target=>io_obj, :indent=>2 )
|
243
246
|
#xml.instruct! 'xml-stylesheet', :href=>'/stylesheets/atom.css', :type=>'text/css'
|
@@ -269,12 +272,14 @@ module Bloggit
|
|
269
272
|
end
|
270
273
|
end
|
271
274
|
end
|
275
|
+
|
276
|
+
Template.force_absolute_path = false
|
272
277
|
end
|
273
278
|
|
274
279
|
def gen_rss_feed(posts, io_obj)
|
275
280
|
tmpl = Template.from_text('')
|
276
281
|
Template.folder_depth = 0
|
277
|
-
|
282
|
+
Template.force_absolute_path = true
|
278
283
|
xml = Builder::XmlMarkup.new( :target=>io_obj, :indent=>2 )
|
279
284
|
xml.instruct! :xml, :version=>"1.0"
|
280
285
|
xml.rss(:version=>"2.0"){
|
@@ -295,6 +300,8 @@ module Bloggit
|
|
295
300
|
end
|
296
301
|
}
|
297
302
|
}
|
303
|
+
Template.force_absolute_path = false
|
304
|
+
|
298
305
|
end
|
299
306
|
|
300
307
|
private
|
data/lib/bloggit/media.rb
CHANGED
data/lib/bloggit/page.rb
CHANGED
@@ -73,6 +73,14 @@ module Bloggit
|
|
73
73
|
class << self
|
74
74
|
private :new
|
75
75
|
|
76
|
+
def find_by_tag(tag)
|
77
|
+
find_by_tags( [tag] )
|
78
|
+
end
|
79
|
+
|
80
|
+
def find_by_tags(tags=[])
|
81
|
+
|
82
|
+
end
|
83
|
+
|
76
84
|
def from_file(path, site=nil)
|
77
85
|
path = File.expand_path(path)
|
78
86
|
raise "File must exist" unless File.exists?( path )
|
data/lib/bloggit/plugin.rb
CHANGED
@@ -12,11 +12,10 @@ module Bloggit
|
|
12
12
|
include Test::Unit::Assertions
|
13
13
|
|
14
14
|
class << self
|
15
|
-
attr_reader :site
|
15
|
+
attr_reader :site, :plugins
|
16
16
|
|
17
17
|
def init(site) #:nodoc:
|
18
18
|
@site = site
|
19
|
-
|
20
19
|
@plugins = {}
|
21
20
|
# Load/require plugins from plugins/ dir...
|
22
21
|
@plugin_path = File.join(site.base_path, 'plugins')
|
@@ -35,8 +34,7 @@ module Bloggit
|
|
35
34
|
|
36
35
|
def register(plugin_name, opts={}, &block)
|
37
36
|
# Yeah...
|
38
|
-
@plugins[plugin_name]
|
39
|
-
block.call( settings_for(plugin_name) )
|
37
|
+
@plugins[plugin_name] = block.call( settings_for(plugin_name) )
|
40
38
|
end
|
41
39
|
|
42
40
|
def settings_for(plugin_name)
|
@@ -46,6 +44,11 @@ module Bloggit
|
|
46
44
|
def active_site
|
47
45
|
@site
|
48
46
|
end
|
47
|
+
|
48
|
+
def [](key)
|
49
|
+
@plugins[key]
|
50
|
+
end
|
51
|
+
|
49
52
|
end
|
50
53
|
end
|
51
54
|
|
data/lib/bloggit/post.rb
CHANGED
data/lib/bloggit/site.rb
CHANGED
@@ -31,7 +31,7 @@ module Bloggit
|
|
31
31
|
@pages = []
|
32
32
|
@page_hsh = {}
|
33
33
|
@inactive_pages = []
|
34
|
-
Dir
|
34
|
+
Dir.glob( File.join(base_path, 'pages', '**', '*.page') ).each do |page_path|
|
35
35
|
page = Page.from_file(page_path, self)
|
36
36
|
if page.is_publishable?
|
37
37
|
@pages << page
|
@@ -49,7 +49,7 @@ module Bloggit
|
|
49
49
|
@posts = []
|
50
50
|
@inactive_posts = []
|
51
51
|
@post_hsh = {}
|
52
|
-
Dir
|
52
|
+
Dir.glob( File.join(base_path, 'posts', '**', '*.post') ).each do |post_path|
|
53
53
|
post = Post.from_file(post_path, self)
|
54
54
|
if post.is_publishable?
|
55
55
|
@posts << post
|
@@ -65,7 +65,7 @@ module Bloggit
|
|
65
65
|
|
66
66
|
# Load Media... (?)
|
67
67
|
@media = {}
|
68
|
-
Dir
|
68
|
+
Dir.glob( File.join(base_path, 'media', '**', '*') ).each do |media_path|
|
69
69
|
unless FileTest.directory?(media_path)
|
70
70
|
media_item = Media.from_file(media_path, self)
|
71
71
|
@media[ media_item.relative_path ] = media_item
|
@@ -107,6 +107,30 @@ module Bloggit
|
|
107
107
|
limit = @settings.syndication.fetch('number_of_entries', 10) if limit.nil?
|
108
108
|
@posts[0..limit]
|
109
109
|
end
|
110
|
+
|
111
|
+
def latest_posts_excluding_tag(limit=nil, tag=nil)
|
112
|
+
limit = @settings.syndication.fetch('number_of_entries', 10) if limit.nil?
|
113
|
+
latest = @posts.select do |post|
|
114
|
+
if post.has_tags? && !post.tags.include?(tag)
|
115
|
+
true
|
116
|
+
else
|
117
|
+
false
|
118
|
+
end
|
119
|
+
end
|
120
|
+
latest[0..limit]
|
121
|
+
end
|
122
|
+
|
123
|
+
def latest_posts_with_tag(limit=nil, tag=nil)
|
124
|
+
limit = @settings.syndication.fetch('number_of_entries', 10) if limit.nil?
|
125
|
+
latest = @posts.select do |post|
|
126
|
+
if post.has_tags? && post.tags.include?(tag)
|
127
|
+
true
|
128
|
+
else
|
129
|
+
false
|
130
|
+
end
|
131
|
+
end
|
132
|
+
latest[0..limit]
|
133
|
+
end
|
110
134
|
|
111
135
|
def absolute_path_to(obj)
|
112
136
|
case obj.class.to_s
|
data/lib/bloggit/tasks/client.rb
CHANGED
@@ -4,6 +4,18 @@ require 'bloggit'
|
|
4
4
|
desc "Runs the (Browser) client"
|
5
5
|
task :client do
|
6
6
|
# This is ugly -- find a better way!
|
7
|
-
|
8
|
-
|
7
|
+
fork do
|
8
|
+
Bloggit::Server.run()
|
9
|
+
end
|
10
|
+
|
11
|
+
# A pathetic hack to delay for a fraction of second the starting of the browser...
|
12
|
+
1000000.times {|i| i.to_s }
|
13
|
+
|
14
|
+
begin
|
15
|
+
`open http://127.0.0.1:3322`
|
16
|
+
rescue
|
17
|
+
# This may fail ???
|
18
|
+
end
|
19
|
+
|
20
|
+
Process.wait
|
9
21
|
end
|
@@ -2,13 +2,15 @@
|
|
2
2
|
require 'rake'
|
3
3
|
require 'bloggit'
|
4
4
|
|
5
|
+
VERBOSE = true unless defined?(VERBOSE)
|
6
|
+
|
5
7
|
task :default=>:generate
|
6
8
|
|
7
9
|
desc "Generate static HTML in cache"
|
8
10
|
task :generate=>[:cleanup] do
|
9
11
|
# Generate the HTML site and structure under cache/
|
10
12
|
site = Bloggit::Site.from_file('.') #File.dirname( __FILE__ )
|
11
|
-
gen = Bloggit::Generator.new(site,
|
13
|
+
gen = Bloggit::Generator.new(site, VERBOSE)
|
12
14
|
gen.generate_cache
|
13
15
|
end
|
14
16
|
|
@@ -16,7 +18,7 @@ desc "Upload cache to target location"
|
|
16
18
|
task :upload do
|
17
19
|
# Copy/SFTP/FTP site from cache/ to target location defined in settings.yml (?)
|
18
20
|
site = Bloggit::Site.from_file('.') #File.dirname( __FILE__ )
|
19
|
-
pub = Bloggit::Publisher.new(site,
|
21
|
+
pub = Bloggit::Publisher.new(site, VERBOSE)
|
20
22
|
pub.upload
|
21
23
|
end
|
22
24
|
|
@@ -29,7 +31,7 @@ desc "Removes site cache"
|
|
29
31
|
task :cleanup do
|
30
32
|
# Kill the files/folders under cache/
|
31
33
|
site = Bloggit::Site.from_file('.', true) #File.dirname( __FILE__ )
|
32
|
-
pub = Bloggit::Generator.new(site,
|
34
|
+
pub = Bloggit::Generator.new(site, VERBOSE)
|
33
35
|
pub.cleanup_cache
|
34
36
|
end
|
35
37
|
|
data/lib/bloggit/template.rb
CHANGED
@@ -63,47 +63,49 @@ module Bloggit
|
|
63
63
|
end
|
64
64
|
|
65
65
|
def url_for(params={})
|
66
|
+
absolute = params.fetch(:absolute, false)
|
67
|
+
|
66
68
|
if post = params.delete(:post)
|
67
69
|
if post.is_a? String
|
68
|
-
Template.path_to_root + site.get_post_by_slug(post).permalink
|
70
|
+
Template.path_to_root(absolute) + site.get_post_by_slug(post).permalink
|
69
71
|
elsif post.is_a? Post
|
70
|
-
Template.path_to_root + post.permalink
|
72
|
+
Template.path_to_root(absolute) + post.permalink
|
71
73
|
end
|
72
74
|
|
73
75
|
elsif page = params.delete(:page)
|
74
76
|
if page.is_a? String
|
75
|
-
Template.path_to_root + site.get_page_by_slug(page).permalink
|
77
|
+
Template.path_to_root(absolute) + site.get_page_by_slug(page).permalink
|
76
78
|
elsif page.is_a? Page
|
77
|
-
Template.path_to_root + page.permalink
|
79
|
+
Template.path_to_root(absolute) + page.permalink
|
78
80
|
end
|
79
81
|
|
80
82
|
elsif tag = params.delete(:tag)
|
81
83
|
if tag.is_a? String
|
82
|
-
Template.path_to_root + Tag.tag_list[tag].permalink
|
84
|
+
Template.path_to_root(absolute) + Tag.tag_list[tag].permalink
|
83
85
|
elsif tag.is_a? Tag
|
84
|
-
Template.path_to_root + tag.permalink
|
86
|
+
Template.path_to_root(absolute) + tag.permalink
|
85
87
|
end
|
86
88
|
|
87
89
|
elsif media = params.delete(:media)
|
88
90
|
if media.is_a? String
|
89
|
-
Template.path_to_root + site.media[media].permalink
|
91
|
+
Template.path_to_root(absolute) + site.media[media].permalink
|
90
92
|
elsif media.is_a? Media
|
91
|
-
Template.path_to_root + media.permalink
|
93
|
+
Template.path_to_root(absolute) + media.permalink
|
92
94
|
end
|
93
95
|
|
94
96
|
elsif script = params.delete(:script)
|
95
97
|
script += '.js' unless script.ends_with? '.js'
|
96
|
-
"#{ Template.path_to_root }theme/scripts/#{ script }"
|
98
|
+
"#{ Template.path_to_root(absolute) }theme/scripts/#{ script }"
|
97
99
|
|
98
100
|
elsif style = params.delete(:style)
|
99
101
|
style += '.css' unless style.ends_with? '.css'
|
100
|
-
"#{ Template.path_to_root }theme/styles/#{ style }"
|
102
|
+
"#{ Template.path_to_root(absolute) }theme/styles/#{ style }"
|
101
103
|
|
102
104
|
elsif image = params.delete(:image)
|
103
|
-
"#{ Template.path_to_root }theme/images/#{ image }"
|
105
|
+
"#{ Template.path_to_root(absolute) }theme/images/#{ image }"
|
104
106
|
|
105
107
|
elsif path = params.delete(:from_root)
|
106
|
-
Template.path_to_root + path
|
108
|
+
Template.path_to_root(absolute) + path
|
107
109
|
|
108
110
|
elsif url = params.delete(:url)
|
109
111
|
url
|
@@ -111,24 +113,24 @@ module Bloggit
|
|
111
113
|
end
|
112
114
|
end
|
113
115
|
|
114
|
-
def tag_links(obj)
|
116
|
+
def tag_links(obj, absolute=false)
|
115
117
|
links = []
|
116
118
|
obj.tags.each do |tag|
|
117
|
-
links << link_to(tag, :tag=>tag)
|
119
|
+
links << link_to(tag, :tag=>tag, :absolute=>absolute)
|
118
120
|
end
|
119
121
|
links
|
120
122
|
end
|
121
123
|
|
122
|
-
def url_for_blog
|
123
|
-
"#{ Template.path_to_root }#{site.build_post_path('index.html')}"
|
124
|
+
def url_for_blog(params={})
|
125
|
+
"#{ Template.path_to_root(params.fetch(:absolute, false)) }#{site.build_post_path('index.html')}"
|
124
126
|
end
|
125
127
|
|
126
|
-
def url_for_home
|
127
|
-
"#{ Template.path_to_root }index.html"
|
128
|
+
def url_for_home(params={})
|
129
|
+
"#{ Template.path_to_root(params.fetch(:absolute, false)) }index.html"
|
128
130
|
end
|
129
131
|
|
130
|
-
def url_for_feed
|
131
|
-
"#{ Template.path_to_root }#{site.settings.syndication.filename}"
|
132
|
+
def url_for_feed(params={})
|
133
|
+
"#{ Template.path_to_root(params.fetch(:absolute, false)) }#{site.settings.syndication.filename}"
|
132
134
|
end
|
133
135
|
|
134
136
|
def link_to(title, params={})
|
@@ -166,6 +168,9 @@ module Bloggit
|
|
166
168
|
link_to image_tag, params
|
167
169
|
end
|
168
170
|
|
171
|
+
def path_to_root(absolute=false)
|
172
|
+
Template.path_to_root(absolute)
|
173
|
+
end
|
169
174
|
|
170
175
|
# def link_to_archive(title, params={})
|
171
176
|
# atts = ""
|
@@ -255,7 +260,7 @@ module Bloggit
|
|
255
260
|
class << self
|
256
261
|
private :new
|
257
262
|
|
258
|
-
attr_accessor :site, :template_dir, :content_parts, :src_path, :current_template, :folder_depth
|
263
|
+
attr_accessor :site, :template_dir, :content_parts, :src_path, :current_template, :folder_depth, :force_absolute_path
|
259
264
|
|
260
265
|
include Test::Unit::Assertions
|
261
266
|
|
@@ -266,6 +271,7 @@ module Bloggit
|
|
266
271
|
@is_ready = true
|
267
272
|
@template_cache = {}
|
268
273
|
@content_parts = {}
|
274
|
+
@force_absolute_path = false
|
269
275
|
end
|
270
276
|
|
271
277
|
# Do not call directly!
|
@@ -298,8 +304,14 @@ module Bloggit
|
|
298
304
|
set_content_for(key, value)
|
299
305
|
end
|
300
306
|
|
301
|
-
def path_to_root
|
302
|
-
'../' * @folder_depth
|
307
|
+
def path_to_root(absolute_path = false)
|
308
|
+
path_to_root = '../' * @folder_depth
|
309
|
+
if @force_absolute_path || absolute_path
|
310
|
+
root_url = @site.settings.syndication.fetch('base_url', '')
|
311
|
+
[root_url, path_to_root].join('/')
|
312
|
+
else
|
313
|
+
path_to_root
|
314
|
+
end
|
303
315
|
end
|
304
316
|
|
305
317
|
def from_file(path)
|
data/lib/util/fixed_hoe.rb
CHANGED
@@ -1,11 +1,10 @@
|
|
1
1
|
# This is required automatically..
|
2
|
-
include Bloggit
|
3
2
|
|
4
|
-
Plugin.register :haloscan do |settings|
|
3
|
+
Bloggit::Plugin.register :haloscan do |settings|
|
5
4
|
$username = settings.fetch('username', '')
|
6
5
|
end
|
7
6
|
|
8
|
-
Template.register_tag :haloscan do |*args|
|
7
|
+
Bloggit::Template.register_tag :haloscan do |*args|
|
9
8
|
type, slug = args
|
10
9
|
case type
|
11
10
|
|
@@ -20,6 +19,5 @@ Template.register_tag :haloscan do |*args|
|
|
20
19
|
|
21
20
|
else
|
22
21
|
'WHAT ELSE?'
|
23
|
-
end
|
24
|
-
|
22
|
+
end
|
25
23
|
end
|
@@ -1,51 +1,69 @@
|
|
1
|
-
#
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
#
|
15
|
-
|
16
|
-
|
17
|
-
#
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
#
|
47
|
-
|
48
|
-
#
|
49
|
-
|
50
|
-
|
51
|
-
|
1
|
+
# This is required automatically..
|
2
|
+
|
3
|
+
Bloggit::Plugin.register :js_search do |settings|
|
4
|
+
|
5
|
+
end
|
6
|
+
|
7
|
+
Bloggit::Template.register_tag :js_search do |*args|
|
8
|
+
type, label = args
|
9
|
+
label ||= 'Search'
|
10
|
+
path = Bloggit::Template.current_template
|
11
|
+
case type
|
12
|
+
|
13
|
+
when :form
|
14
|
+
%Q|<form id="search-form" action="#" method="GET" onsubmit="Search.query(document.getElementById('q').value);return false;"><input class="search-query" type="search" name="q" id="q" placeholder=""/><input class="search-button" type="submit" value="#{label}"/></form>|
|
15
|
+
|
16
|
+
when :script
|
17
|
+
%Q|<script src="#{path.url_for :script=>'search-engine'}"></script><script>Search.index_uri='#{path.url_for :script=>'keyword-index'}';</script>|
|
18
|
+
else
|
19
|
+
'?'
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
NOISE_WORDS = %w(about after all also an and another any are as at be because been before
|
24
|
+
being between both but by came can come could did do each for from get
|
25
|
+
got has had he have her here him himself his how if in into is it like
|
26
|
+
make many me might more most much must my never now of on only or other
|
27
|
+
our out over said same see should since some still such take than that
|
28
|
+
the their them then there these they this those through to too under up
|
29
|
+
very was way we well were what where which while who with would you your a
|
30
|
+
b c d e f g h i j k l m n o p q r s t u v w x y z $ 1 2 3 4 5 6 7 8 9 0 _)
|
31
|
+
|
32
|
+
Bloggit::on_event(:after_generate) do |site, cache_dir|
|
33
|
+
puts "Generating search index..."
|
34
|
+
|
35
|
+
index_data = {
|
36
|
+
:count=>0,
|
37
|
+
:pages=>[]
|
38
|
+
}
|
39
|
+
|
40
|
+
site.pages.each do |page|
|
41
|
+
msg = page.source.downcase
|
42
|
+
total_words = msg.split(' ').length
|
43
|
+
words = msg.gsub!( /[\W|_]/, ' ' ).split(' ')
|
44
|
+
words.uniq!
|
45
|
+
words.delete_if {|word| NOISE_WORDS.include?( word ) }
|
46
|
+
# TODO: Add path key that's the path from ROOT...
|
47
|
+
index_data[:pages] << { :title=>page.title, 'url'=>site.absolute_path_to(page), 'keywords'=>words.join(' '), :type=>'page' }
|
48
|
+
puts " #{words.length.to_s.rjust(3,' ')}/#{total_words.to_s.ljust(3,' ')} - #{page.title} (page)"
|
49
|
+
end
|
50
|
+
|
51
|
+
site.posts.each do |post|
|
52
|
+
msg = post.source.downcase
|
53
|
+
msg += " #{post.tags.join(' ')} #{post.title}"
|
54
|
+
total_words = msg.split(' ').length
|
55
|
+
words = msg.gsub!( /[\W|_]/, ' ' ).split(' ')
|
56
|
+
words.uniq!
|
57
|
+
words.delete_if {|word| NOISE_WORDS.include?( word ) }
|
58
|
+
# TODO: Add path key that's the path from ROOT...
|
59
|
+
index_data[:pages] << { :title=>post.title, 'url'=>site.absolute_path_to(post), 'keywords'=>words.join(' '), :type=>'post' }
|
60
|
+
puts " #{words.length.to_s.rjust(3,' ')}/#{total_words.to_s.ljust(3,' ')} - #{post.title} (post)"
|
61
|
+
end
|
62
|
+
|
63
|
+
index_data[:count] = index_data[:pages].length
|
64
|
+
File.open( File.join(cache_dir, 'theme', 'scripts', 'keyword-index.js'), 'w') do |f|
|
65
|
+
f.write index_data.to_json
|
66
|
+
end
|
67
|
+
|
68
|
+
FileUtils.cp File.join(site.base_path, 'plugins', 'js_search', 'scripts', 'search-engine.js'), File.join(cache_dir, 'theme', 'scripts', 'search-engine.js')
|
69
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
// Simple Keyword Search Engine
|
2
|
+
//
|
3
|
+
// Usage:
|
4
|
+
// Search.query(keyword) - returns array of matched pages
|
5
|
+
|
6
|
+
window.Search = {
|
7
|
+
index_uri :'keyword-index.js', // Path to the keyword-index
|
8
|
+
_idx :null,
|
9
|
+
|
10
|
+
query :function(q) {
|
11
|
+
try {
|
12
|
+
this.fetch_index();
|
13
|
+
|
14
|
+
var re = new RegExp(q, 'gi');
|
15
|
+
var results = [];
|
16
|
+
|
17
|
+
for(var i=0; i<this._idx.pages.length; i++) {
|
18
|
+
var page = this._idx.pages[i];
|
19
|
+
if( re.test(page.keywords) ) {
|
20
|
+
results.push( page );
|
21
|
+
}
|
22
|
+
}
|
23
|
+
|
24
|
+
this._onSearchComplete(results, q);
|
25
|
+
return results;
|
26
|
+
} catch (err) {
|
27
|
+
// If something went wrong... punt!
|
28
|
+
this._onError(err);
|
29
|
+
}
|
30
|
+
},
|
31
|
+
|
32
|
+
onFetchIndex :function(callback) {
|
33
|
+
this._onFetchIndex = callback;
|
34
|
+
},
|
35
|
+
_onFetchIndex :function(complete){},
|
36
|
+
|
37
|
+
onSearchComplete :function(callback) {
|
38
|
+
this._onSearchComplete = callback;
|
39
|
+
},
|
40
|
+
_onSearchComplete: function(results, q){ },
|
41
|
+
|
42
|
+
onError :function(callback) {
|
43
|
+
this._onError = callback;
|
44
|
+
},
|
45
|
+
_onError: function(err){ alert(err.message || err.description || err); },
|
46
|
+
|
47
|
+
fetch_index :function() {
|
48
|
+
if(this._idx == null) {
|
49
|
+
this._onFetchIndex(false);
|
50
|
+
var xhr = this.get_xhr();
|
51
|
+
xhr.open("GET", this.index_uri, false); // Synchronous loading...
|
52
|
+
xhr.send("");
|
53
|
+
eval("window.Search._idx = "+ xhr.responseText);
|
54
|
+
this._onFetchIndex(true);
|
55
|
+
}
|
56
|
+
},
|
57
|
+
get_xhr :function() {
|
58
|
+
return this.one_of_these(
|
59
|
+
function() {return new XMLHttpRequest()},
|
60
|
+
function() {return new ActiveXObject('Msxml2.XMLHTTP')},
|
61
|
+
function() {return new ActiveXObject('Microsoft.XMLHTTP')}
|
62
|
+
);
|
63
|
+
},
|
64
|
+
one_of_these :function() {
|
65
|
+
var returnValue;
|
66
|
+
for (var i=0; i<arguments.length; i++) {
|
67
|
+
try { returnValue = arguments[i](); break; } catch (ignore) {};
|
68
|
+
}
|
69
|
+
return returnValue;
|
70
|
+
}
|
71
|
+
}
|
metadata
CHANGED
@@ -1,33 +1,79 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.9.4
|
3
|
-
specification_version: 1
|
4
2
|
name: bloggit
|
5
3
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 1.0.
|
7
|
-
date: 2007-10-23 00:00:00 -05:00
|
8
|
-
summary: A static site generator for a blog with static pages
|
9
|
-
require_paths:
|
10
|
-
- lib
|
11
|
-
email: darthapo@gmail.com
|
12
|
-
homepage: http://www.mattmccray.com
|
13
|
-
rubyforge_project: bloggit
|
14
|
-
description: "== FEATURES/PROBLEMS: * Static generation of blog * Tags * Archives * ERb based layout support * ERb processing in pages/posts * Simple static pages * Comments (via Haloscan) * Searching (using JavaScript) == SYNOPSIS: You can generate the site from the commandline using Rake:"
|
15
|
-
autorequire:
|
16
|
-
default_executable:
|
17
|
-
bindir: bin
|
18
|
-
has_rdoc: true
|
19
|
-
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
-
requirements:
|
21
|
-
- - ">"
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: 0.0.0
|
24
|
-
version:
|
4
|
+
version: 1.0.7
|
25
5
|
platform: ruby
|
26
|
-
signing_key:
|
27
|
-
cert_chain:
|
28
|
-
post_install_message:
|
29
6
|
authors:
|
30
7
|
- M@ McCray
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2008-04-02 00:00:00 -05:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: activesupport
|
17
|
+
version_requirement:
|
18
|
+
version_requirements: !ruby/object:Gem::Requirement
|
19
|
+
requirements:
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: "0"
|
23
|
+
version:
|
24
|
+
- !ruby/object:Gem::Dependency
|
25
|
+
name: RedCloth
|
26
|
+
version_requirement:
|
27
|
+
version_requirements: !ruby/object:Gem::Requirement
|
28
|
+
requirements:
|
29
|
+
- - ">="
|
30
|
+
- !ruby/object:Gem::Version
|
31
|
+
version: "0"
|
32
|
+
version:
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: cmdparse
|
35
|
+
version_requirement:
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: "0"
|
41
|
+
version:
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: BlueCloth
|
44
|
+
version_requirement:
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: "0"
|
50
|
+
version:
|
51
|
+
- !ruby/object:Gem::Dependency
|
52
|
+
name: builder
|
53
|
+
version_requirement:
|
54
|
+
version_requirements: !ruby/object:Gem::Requirement
|
55
|
+
requirements:
|
56
|
+
- - ">="
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
version: "0"
|
59
|
+
version:
|
60
|
+
- !ruby/object:Gem::Dependency
|
61
|
+
name: markaby
|
62
|
+
version_requirement:
|
63
|
+
version_requirements: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: "0"
|
68
|
+
version:
|
69
|
+
description: "You can find the source at: http://repo.or.cz/w/bloggit.git == FEATURES: * Static generation of blog * Tags * Archives * ERb based layout support * ERb processing in pages/posts * Simple static pages * Comments (via Haloscan) * Searching (using JavaScript) == SYNOPSIS:"
|
70
|
+
email: darthapo@gmail.com
|
71
|
+
executables:
|
72
|
+
- bloggit
|
73
|
+
extensions: []
|
74
|
+
|
75
|
+
extra_rdoc_files: []
|
76
|
+
|
31
77
|
files:
|
32
78
|
- History
|
33
79
|
- Manifest
|
@@ -44,6 +90,8 @@ files:
|
|
44
90
|
- lib/bloggit/boilerplate/Rakefile
|
45
91
|
- lib/bloggit/boilerplate/pages/about.page
|
46
92
|
- lib/bloggit/boilerplate/plugins/haloscan/init.rb
|
93
|
+
- lib/bloggit/boilerplate/plugins/js_search/init.rb
|
94
|
+
- lib/bloggit/boilerplate/plugins/js_search/scripts/search-engine.js
|
47
95
|
- lib/bloggit/boilerplate/settings.yml
|
48
96
|
- lib/bloggit/boilerplate/themes/default/styles/main.css
|
49
97
|
- lib/bloggit/boilerplate/themes/default/templates/archive.rhtml
|
@@ -427,6 +475,7 @@ files:
|
|
427
475
|
- test/fixtures/test.blog/plugins/example/init.rb
|
428
476
|
- test/fixtures/test.blog/plugins/haloscan/init.rb
|
429
477
|
- test/fixtures/test.blog/plugins/js_search/init.rb
|
478
|
+
- test/fixtures/test.blog/plugins/js_search/scripts/search-engine.js
|
430
479
|
- test/fixtures/test.blog/plugins/rdoc_formatter/init.rb
|
431
480
|
- test/fixtures/test.blog/posts/2004.03.07_to-boldly-go.post
|
432
481
|
- test/fixtures/test.blog/posts/2007.03.25_sure-whatever.post
|
@@ -451,70 +500,31 @@ files:
|
|
451
500
|
- test/unit/site_test.rb
|
452
501
|
- test/unit/template_test.rb
|
453
502
|
- test/unit/text_formatter_test.rb
|
454
|
-
|
455
|
-
|
503
|
+
has_rdoc: true
|
504
|
+
homepage: http://www.mattmccray.com
|
505
|
+
post_install_message:
|
456
506
|
rdoc_options: []
|
457
507
|
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
|
508
|
+
require_paths:
|
509
|
+
- lib
|
510
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
511
|
+
requirements:
|
512
|
+
- - ">="
|
513
|
+
- !ruby/object:Gem::Version
|
514
|
+
version: "0"
|
515
|
+
version:
|
516
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
517
|
+
requirements:
|
518
|
+
- - ">="
|
519
|
+
- !ruby/object:Gem::Version
|
520
|
+
version: "0"
|
521
|
+
version:
|
464
522
|
requirements: []
|
465
523
|
|
466
|
-
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
473
|
-
- !ruby/object:Gem::Version
|
474
|
-
version: 0.0.0
|
475
|
-
version:
|
476
|
-
- !ruby/object:Gem::Dependency
|
477
|
-
name: RedCloth
|
478
|
-
version_requirement:
|
479
|
-
version_requirements: !ruby/object:Gem::Version::Requirement
|
480
|
-
requirements:
|
481
|
-
- - ">"
|
482
|
-
- !ruby/object:Gem::Version
|
483
|
-
version: 0.0.0
|
484
|
-
version:
|
485
|
-
- !ruby/object:Gem::Dependency
|
486
|
-
name: cmdparse
|
487
|
-
version_requirement:
|
488
|
-
version_requirements: !ruby/object:Gem::Version::Requirement
|
489
|
-
requirements:
|
490
|
-
- - ">"
|
491
|
-
- !ruby/object:Gem::Version
|
492
|
-
version: 0.0.0
|
493
|
-
version:
|
494
|
-
- !ruby/object:Gem::Dependency
|
495
|
-
name: BlueCloth
|
496
|
-
version_requirement:
|
497
|
-
version_requirements: !ruby/object:Gem::Version::Requirement
|
498
|
-
requirements:
|
499
|
-
- - ">"
|
500
|
-
- !ruby/object:Gem::Version
|
501
|
-
version: 0.0.0
|
502
|
-
version:
|
503
|
-
- !ruby/object:Gem::Dependency
|
504
|
-
name: builder
|
505
|
-
version_requirement:
|
506
|
-
version_requirements: !ruby/object:Gem::Version::Requirement
|
507
|
-
requirements:
|
508
|
-
- - ">"
|
509
|
-
- !ruby/object:Gem::Version
|
510
|
-
version: 0.0.0
|
511
|
-
version:
|
512
|
-
- !ruby/object:Gem::Dependency
|
513
|
-
name: markaby
|
514
|
-
version_requirement:
|
515
|
-
version_requirements: !ruby/object:Gem::Version::Requirement
|
516
|
-
requirements:
|
517
|
-
- - ">"
|
518
|
-
- !ruby/object:Gem::Version
|
519
|
-
version: 0.0.0
|
520
|
-
version:
|
524
|
+
rubyforge_project: bloggit
|
525
|
+
rubygems_version: 1.0.1
|
526
|
+
signing_key:
|
527
|
+
specification_version: 2
|
528
|
+
summary: A static site generator for a blog with static pages
|
529
|
+
test_files: []
|
530
|
+
|