gitdocs 0.4.7 → 0.4.8
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +27 -17
- data/gitdocs.gemspec +5 -5
- data/lib/gitdocs/docfile.rb +4 -26
- data/lib/gitdocs/manager.rb +38 -25
- data/lib/gitdocs/public/js/app.js +34 -0
- data/lib/gitdocs/public/js/bootstrap-alerts.js +113 -0
- data/lib/gitdocs/public/js/search.js +1 -1
- data/lib/gitdocs/rendering.rb +2 -1
- data/lib/gitdocs/runner.rb +11 -16
- data/lib/gitdocs/server.rb +6 -2
- data/lib/gitdocs/version.rb +2 -2
- data/lib/gitdocs/views/app.haml +1 -0
- data/lib/gitdocs/views/dir.haml +21 -17
- data/lib/gitdocs/views/settings.haml +4 -3
- metadata +166 -165
data/CHANGELOG
CHANGED
@@ -1,32 +1,42 @@
|
|
1
|
-
0.4.
|
1
|
+
0.4.8 (12/29/2011)
|
2
2
|
|
3
|
-
*
|
4
|
-
*
|
3
|
+
* Only encode to utf-8 on ruby 1.9.x
|
4
|
+
* Fixes so that settings form on the web front-end saves
|
5
|
+
* Cleanup the front-end directory listing significantly
|
6
|
+
* More robust EM reactor loop handling
|
5
7
|
|
6
|
-
0.4.
|
8
|
+
0.4.7 (12/15/2011)
|
7
9
|
|
8
|
-
*
|
10
|
+
* Re-throw exceptions from reactor loop
|
11
|
+
* Socket testing moved to defer block
|
9
12
|
|
10
|
-
0.4.
|
13
|
+
0.4.5, 0.4.6 (12/14/2011)
|
11
14
|
|
12
|
-
*
|
15
|
+
* Enables logs in ~/.gitdocs/log for easier debugging
|
16
|
+
* Fix issue with default sort order on web interface
|
17
|
+
* Fixes major mime type detection issues
|
18
|
+
* Fixes rendering issues
|
13
19
|
|
14
|
-
0.4.4 (12/14/
|
20
|
+
0.4.4 (12/14/2011)
|
15
21
|
|
16
22
|
* Lock to eventmachine 1.0
|
17
23
|
* Use mime-types over file for better platform support
|
18
24
|
* Remove signal handling and just leverage EM start/stop
|
19
25
|
* Adds table sorting and file+folder icons in web front-end
|
20
26
|
|
21
|
-
0.4.
|
27
|
+
0.4.3 (12/13/2011)
|
28
|
+
|
29
|
+
* Javascript fixes for front-end
|
30
|
+
|
31
|
+
0.4.2 (12/13/2011)
|
32
|
+
|
33
|
+
* Fixes search on blank results case
|
34
|
+
|
35
|
+
0.4.1 (12/13/2011)
|
36
|
+
|
37
|
+
* Adds a basic search to web front-end
|
38
|
+
* Beginning of the work towards cross-platform notifications
|
39
|
+
|
22
40
|
|
23
|
-
* Enables logs in ~/.gitdocs/log for easier debugging
|
24
|
-
* Fix issue with default sort order on web interface
|
25
|
-
* Fixes major mime type detection issues
|
26
|
-
* Fixes rendering issues
|
27
41
|
|
28
|
-
0.4.7 (12/15/2012)
|
29
42
|
|
30
|
-
* Re-throw exceptions from reactor loop
|
31
|
-
* Socket testing moved to defer block
|
32
|
-
|
data/gitdocs.gemspec
CHANGED
@@ -19,15 +19,15 @@ Gem::Specification.new do |s|
|
|
19
19
|
s.require_paths = ["lib"]
|
20
20
|
|
21
21
|
s.add_dependency 'joshbuddy-guard', '~> 0.10.0'
|
22
|
-
s.add_dependency 'thin'
|
22
|
+
s.add_dependency 'thin', '~> 1.3.1'
|
23
23
|
s.add_dependency 'renee', '~> 0.3.7'
|
24
24
|
s.add_dependency 'redcarpet', '~> 2.0.0'
|
25
|
-
s.add_dependency 'thor'
|
26
|
-
s.add_dependency 'coderay'
|
25
|
+
s.add_dependency 'thor', '~> 0.14.6'
|
26
|
+
s.add_dependency 'coderay', '~> 1.0.4'
|
27
27
|
s.add_dependency 'dante', '~> 0.1.2'
|
28
28
|
s.add_dependency 'growl', '~> 1.0.3'
|
29
|
-
s.add_dependency 'yajl-ruby'
|
30
|
-
s.add_dependency 'haml'
|
29
|
+
s.add_dependency 'yajl-ruby', '~> 1.1.0'
|
30
|
+
s.add_dependency 'haml', '~> 3.1.4'
|
31
31
|
s.add_dependency 'sqlite3', "~> 1.3.4"
|
32
32
|
s.add_dependency 'activerecord', "~> 3.1.0"
|
33
33
|
s.add_dependency 'grit', "~> 2.4.1"
|
data/lib/gitdocs/docfile.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
module Gitdocs
|
2
2
|
class Docfile
|
3
|
-
|
3
|
+
attr_accessor :parent
|
4
|
+
attr_reader :path, :name
|
4
5
|
|
5
6
|
def initialize(path)
|
6
7
|
@path = path
|
@@ -15,31 +16,8 @@ module Gitdocs
|
|
15
16
|
File.expand_path(@path, root).include?(expanded_root)
|
16
17
|
end
|
17
18
|
|
18
|
-
def
|
19
|
-
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
class Docdir < Docfile
|
24
|
-
attr_accessor :subdirs
|
25
|
-
attr_accessor :files
|
26
|
-
|
27
|
-
def initialize(path)
|
28
|
-
super
|
29
|
-
@subdirs = []
|
30
|
-
@files = []
|
31
|
-
end
|
32
|
-
|
33
|
-
def items
|
34
|
-
(subdirs + files).sort { |a,b| a.name.downcase <=> b.name.downcase }
|
35
|
-
end
|
36
|
-
|
37
|
-
def parent=(dir)
|
38
|
-
dir.subdirs.push(self) if dir
|
39
|
-
end
|
40
|
-
|
41
|
-
def file?
|
42
|
-
false
|
19
|
+
def dir?
|
20
|
+
File.directory?(@path)
|
43
21
|
end
|
44
22
|
end
|
45
23
|
end
|
data/lib/gitdocs/manager.rb
CHANGED
@@ -29,30 +29,40 @@ module Gitdocs
|
|
29
29
|
self.log "Shares: #{config.shares.map(&:inspect).join(", ")}"
|
30
30
|
# Start the repo watchers
|
31
31
|
runners = nil
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
32
|
+
retrying = false
|
33
|
+
begin
|
34
|
+
EM.run do
|
35
|
+
self.log "Starting EM loop..."
|
36
|
+
@runners = config.shares.map { |share|
|
37
|
+
self.log "Starting #{share}"
|
38
|
+
Runner.new(share)
|
39
|
+
}
|
40
|
+
self.log "Running runners... #{@runners.size}"
|
41
|
+
@runners.each(&:run)
|
42
|
+
# Start the web front-end
|
43
|
+
if self.config.global.start_web_frontend
|
44
|
+
Server.new(self, *@runners).start
|
45
|
+
EM.defer( proc {
|
46
|
+
i = 0
|
47
|
+
web_started = false
|
48
|
+
begin
|
49
|
+
TCPSocket.open('127.0.0.1', 8888).close
|
50
|
+
web_started = true
|
51
|
+
rescue Errno::ECONNREFUSED
|
52
|
+
self.log "Retrying server loop..."
|
53
|
+
sleep 0.2
|
54
|
+
i += 1
|
55
|
+
retry if i <= 20
|
56
|
+
end
|
57
|
+
system("open http://localhost:8888/") if !retrying && self.config.global.load_browser_on_startup && web_started
|
58
|
+
}, proc {
|
59
|
+
self.log "Web server running!"
|
60
|
+
})
|
61
|
+
end
|
55
62
|
end
|
63
|
+
rescue Restart
|
64
|
+
retrying = true
|
65
|
+
retry
|
56
66
|
end
|
57
67
|
rescue Exception => e # Report all errors in log
|
58
68
|
self.log(e.class.inspect + " - " + e.inspect + " - " + e.message.inspect, :error)
|
@@ -63,8 +73,11 @@ module Gitdocs
|
|
63
73
|
end
|
64
74
|
|
65
75
|
def restart
|
66
|
-
|
67
|
-
|
76
|
+
Thread.new do
|
77
|
+
Thread.main.raise Restart, "restarting ... "
|
78
|
+
sleep 0.1 while EM.reactor_running?
|
79
|
+
start
|
80
|
+
end
|
68
81
|
end
|
69
82
|
|
70
83
|
def stop
|
@@ -33,6 +33,25 @@ GitDocs = {
|
|
33
33
|
// Enable table sorter
|
34
34
|
var extractor = function(e) { return $(e).data('val') || $(e).text() }
|
35
35
|
$("table#fileListing").tablesorter({ textExtraction : extractor, sortList: [[0,0]] });
|
36
|
+
},
|
37
|
+
// To make the settings form ajax-y
|
38
|
+
observeSettingsForm : function() {
|
39
|
+
$('#settings').submit(function(e) {
|
40
|
+
e.preventDefault();
|
41
|
+
$.ajax({
|
42
|
+
type: 'POST',
|
43
|
+
url: this.action,
|
44
|
+
data: $(this).serialize(),
|
45
|
+
success: function() {
|
46
|
+
$('.content div.alert-message').remove();
|
47
|
+
var el = $('.content').prepend('<div class="alert-message success"><a class="close" href="#">×</a>' +
|
48
|
+
'<p><strong>Settings saved!</strong> Gitdocs has been restarted with your new settings.</p>' +
|
49
|
+
'</div>');
|
50
|
+
$('div.alert-message').alert();
|
51
|
+
}
|
52
|
+
});
|
53
|
+
return false;
|
54
|
+
});
|
36
55
|
}
|
37
56
|
};
|
38
57
|
|
@@ -40,6 +59,7 @@ $(document).ready(function() {
|
|
40
59
|
GitDocs.linkBreadcrumbs();
|
41
60
|
GitDocs.fillDirMeta();
|
42
61
|
StringFormatter.autoLink();
|
62
|
+
GitDocs.observeSettingsForm();
|
43
63
|
});
|
44
64
|
|
45
65
|
// Redirect to edit page for new file when new file form is submitted
|
@@ -51,3 +71,17 @@ $('form.add').live('submit', function(e){
|
|
51
71
|
window.location = newPath;
|
52
72
|
e.preventDefault(); return false;
|
53
73
|
});
|
74
|
+
|
75
|
+
// Link method redirection
|
76
|
+
$('a[data-method]').live('click', function(e) {
|
77
|
+
e.preventDefault();
|
78
|
+
var link = $(this);
|
79
|
+
var href = link.attr('href'),
|
80
|
+
method = link.data('method'),
|
81
|
+
target = link.attr('target'),
|
82
|
+
form = $('<form method="post" action="' + href + '"></form>'),
|
83
|
+
metadata_input = '<input name="_method" value="' + method + '" type="hidden" />';
|
84
|
+
if (target) { form.attr('target', target); }
|
85
|
+
form.hide().append(metadata_input).appendTo('body');
|
86
|
+
form.submit();
|
87
|
+
});
|
@@ -0,0 +1,113 @@
|
|
1
|
+
/* ==========================================================
|
2
|
+
* bootstrap-alerts.js v1.4.0
|
3
|
+
* http://twitter.github.com/bootstrap/javascript.html#alerts
|
4
|
+
* ==========================================================
|
5
|
+
* Copyright 2011 Twitter, Inc.
|
6
|
+
*
|
7
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
8
|
+
* you may not use this file except in compliance with the License.
|
9
|
+
* You may obtain a copy of the License at
|
10
|
+
*
|
11
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
12
|
+
*
|
13
|
+
* Unless required by applicable law or agreed to in writing, software
|
14
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
15
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
16
|
+
* See the License for the specific language governing permissions and
|
17
|
+
* limitations under the License.
|
18
|
+
* ========================================================== */
|
19
|
+
|
20
|
+
|
21
|
+
!function( $ ){
|
22
|
+
|
23
|
+
"use strict"
|
24
|
+
|
25
|
+
/* CSS TRANSITION SUPPORT (https://gist.github.com/373874)
|
26
|
+
* ======================================================= */
|
27
|
+
|
28
|
+
var transitionEnd
|
29
|
+
|
30
|
+
$(document).ready(function () {
|
31
|
+
|
32
|
+
$.support.transition = (function () {
|
33
|
+
var thisBody = document.body || document.documentElement
|
34
|
+
, thisStyle = thisBody.style
|
35
|
+
, support = thisStyle.transition !== undefined || thisStyle.WebkitTransition !== undefined || thisStyle.MozTransition !== undefined || thisStyle.MsTransition !== undefined || thisStyle.OTransition !== undefined
|
36
|
+
return support
|
37
|
+
})()
|
38
|
+
|
39
|
+
// set CSS transition event type
|
40
|
+
if ( $.support.transition ) {
|
41
|
+
transitionEnd = "TransitionEnd"
|
42
|
+
if ( $.browser.webkit ) {
|
43
|
+
transitionEnd = "webkitTransitionEnd"
|
44
|
+
} else if ( $.browser.mozilla ) {
|
45
|
+
transitionEnd = "transitionend"
|
46
|
+
} else if ( $.browser.opera ) {
|
47
|
+
transitionEnd = "oTransitionEnd"
|
48
|
+
}
|
49
|
+
}
|
50
|
+
|
51
|
+
})
|
52
|
+
|
53
|
+
/* ALERT CLASS DEFINITION
|
54
|
+
* ====================== */
|
55
|
+
|
56
|
+
var Alert = function ( content, options ) {
|
57
|
+
this.settings = $.extend({}, $.fn.alert.defaults, options)
|
58
|
+
this.$element = $(content)
|
59
|
+
.delegate(this.settings.selector, 'click', this.close)
|
60
|
+
}
|
61
|
+
|
62
|
+
Alert.prototype = {
|
63
|
+
|
64
|
+
close: function (e) {
|
65
|
+
var $element = $(this).parent('.alert-message')
|
66
|
+
|
67
|
+
e && e.preventDefault()
|
68
|
+
$element.removeClass('in')
|
69
|
+
|
70
|
+
function removeElement () {
|
71
|
+
$element.remove()
|
72
|
+
}
|
73
|
+
|
74
|
+
$.support.transition && $element.hasClass('fade') ?
|
75
|
+
$element.bind(transitionEnd, removeElement) :
|
76
|
+
removeElement()
|
77
|
+
}
|
78
|
+
|
79
|
+
}
|
80
|
+
|
81
|
+
|
82
|
+
/* ALERT PLUGIN DEFINITION
|
83
|
+
* ======================= */
|
84
|
+
|
85
|
+
$.fn.alert = function ( options ) {
|
86
|
+
|
87
|
+
if ( options === true ) {
|
88
|
+
return this.data('alert')
|
89
|
+
}
|
90
|
+
|
91
|
+
return this.each(function () {
|
92
|
+
var $this = $(this)
|
93
|
+
|
94
|
+
if ( typeof options == 'string' ) {
|
95
|
+
return $this.data('alert')[options]()
|
96
|
+
}
|
97
|
+
|
98
|
+
$(this).data('alert', new Alert( this, options ))
|
99
|
+
|
100
|
+
})
|
101
|
+
}
|
102
|
+
|
103
|
+
$.fn.alert.defaults = {
|
104
|
+
selector: '.close'
|
105
|
+
}
|
106
|
+
|
107
|
+
$(document).ready(function () {
|
108
|
+
new Alert($('body'), {
|
109
|
+
selector: '.alert-message[data-alert] .close'
|
110
|
+
})
|
111
|
+
})
|
112
|
+
|
113
|
+
}( window.jQuery || window.ender );
|
@@ -1,7 +1,7 @@
|
|
1
1
|
GitDocs.search = {
|
2
2
|
highlight : function(query) {
|
3
3
|
$('.results dl dd').each(function(idx, el) {
|
4
|
-
var result = $(el).text().replace(query, "<strong>" +
|
4
|
+
var result = $(el).text().replace(new RegExp(query, 'ig'), function($0) { return"<strong>" + $0 + "</strong>"; });
|
5
5
|
$(el).html(result);
|
6
6
|
});
|
7
7
|
}
|
data/lib/gitdocs/rendering.rb
CHANGED
data/lib/gitdocs/runner.rb
CHANGED
@@ -6,7 +6,7 @@ module Gitdocs
|
|
6
6
|
|
7
7
|
def initialize(share)
|
8
8
|
@share = share
|
9
|
-
@root = share.path
|
9
|
+
@root = share.path.sub(%r{/+$},'') if share.path
|
10
10
|
@polling_interval = share.polling_interval
|
11
11
|
@icon = File.expand_path("../../img/icon.png", __FILE__)
|
12
12
|
end
|
@@ -14,14 +14,14 @@ module Gitdocs
|
|
14
14
|
SearchResult = Struct.new(:file, :context)
|
15
15
|
def search(term)
|
16
16
|
results = []
|
17
|
-
if result_test = sh_string("git grep #{ShellTools.escape(term)}")
|
17
|
+
if result_test = sh_string("git grep -i #{ShellTools.escape(term)}")
|
18
18
|
result_test.scan(/(.*?):([^\n]*)/) { |(file, context)| results << SearchResult.new(file, context) }
|
19
19
|
end
|
20
20
|
results
|
21
21
|
end
|
22
22
|
|
23
23
|
def run
|
24
|
-
return false unless self.valid?
|
24
|
+
return false unless self.valid? && !self.root.empty?
|
25
25
|
@show_notifications = @share.notification
|
26
26
|
@current_remote = @share.remote_name
|
27
27
|
@current_branch = @share.branch_name
|
@@ -140,26 +140,21 @@ module Gitdocs
|
|
140
140
|
|
141
141
|
IGNORED_FILES = ['.gitignore']
|
142
142
|
# dir_files("some/dir") => [<Docfile>, <Docfile>]
|
143
|
-
def dir_files(
|
144
|
-
dir_path
|
145
|
-
files = {}
|
146
|
-
ls_files = sh_string("git ls-files").split("\n").map { |f| Docfile.new(f) }
|
147
|
-
ls_files.select { |f| f.within?(dir, @root) }.each do |f|
|
148
|
-
path = File.expand_path(f.parent, root)
|
149
|
-
files[path] ||= Docdir.new(path)
|
150
|
-
files[path].files << f unless IGNORED_FILES.include?(f.name)
|
151
|
-
end
|
152
|
-
files.keys.each { |f| files[f].parent = files[File.dirname(f)] }
|
153
|
-
files[dir_path]
|
143
|
+
def dir_files(dir_path)
|
144
|
+
Dir[File.join(dir_path, "*")].to_a.map { |path| Docfile.new(path) }
|
154
145
|
end
|
155
146
|
|
156
147
|
def file_meta(file)
|
148
|
+
result = {}
|
157
149
|
file = file.gsub(%r{^/}, '')
|
158
150
|
full_path = File.expand_path(file, @root)
|
159
|
-
|
151
|
+
log_result = sh_string("git log --format='%aN|%ai' -n1 #{ShellTools.escape(file)}")
|
152
|
+
result = {} unless File.exist?(full_path) && log_result
|
153
|
+
author, modified = log_result.split("|")
|
160
154
|
modified = Time.parse(modified.sub(' ', 'T')).utc.iso8601
|
161
155
|
size = (File.symlink?(full_path) || File.directory?(full_path)) ? -1 : File.size(full_path)
|
162
|
-
{ :author => author, :size => size, :modified => modified }
|
156
|
+
result = { :author => author, :size => size, :modified => modified }
|
157
|
+
result
|
163
158
|
end
|
164
159
|
|
165
160
|
def valid?
|
data/lib/gitdocs/server.rb
CHANGED
@@ -33,7 +33,7 @@ module Gitdocs
|
|
33
33
|
end
|
34
34
|
shares[Integer(idx)].update_attributes(share)
|
35
35
|
end
|
36
|
-
manager.restart
|
36
|
+
EM.add_timer(0.1) { manager.restart }
|
37
37
|
redirect! '/settings'
|
38
38
|
end
|
39
39
|
end
|
@@ -42,6 +42,10 @@ module Gitdocs
|
|
42
42
|
render! "search", :layout => 'app', :locals => {:conf => manager.config, :results => manager.search(request.GET['q']), :nav_state => nil}
|
43
43
|
end
|
44
44
|
|
45
|
+
path('shares').post do
|
46
|
+
Configuration::Share.create
|
47
|
+
end
|
48
|
+
|
45
49
|
var :int do |idx|
|
46
50
|
gd = gds[idx]
|
47
51
|
halt 404 if gd.nil?
|
@@ -68,7 +72,7 @@ module Gitdocs
|
|
68
72
|
elsif !File.exist?(expanded_path) # edit for non-existent file
|
69
73
|
render! "edit", :layout => 'app', :locals => locals.merge(:contents => "")
|
70
74
|
elsif File.directory?(expanded_path) # list directory
|
71
|
-
contents =
|
75
|
+
contents = gd.dir_files(expanded_path)
|
72
76
|
render! "dir", :layout => 'app', :locals => locals.merge(:contents => contents)
|
73
77
|
elsif mode == 'delete' # delete file
|
74
78
|
FileUtils.rm(expanded_path)
|
data/lib/gitdocs/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
1
|
module Gitdocs
|
2
|
-
VERSION = "0.4.
|
3
|
-
end
|
2
|
+
VERSION = "0.4.8"
|
3
|
+
end
|
data/lib/gitdocs/views/app.haml
CHANGED
@@ -9,6 +9,7 @@
|
|
9
9
|
%script{ :src => "/js/util.js", :type => "text/javascript", :charset => "utf-8" }
|
10
10
|
%script{ :src => "/js/jquery.js", :type => "text/javascript", :charset => "utf-8" }
|
11
11
|
%script{ :src => "/js/jquery.tablesorter.js", :type => "text/javascript", :charset => "utf-8" }
|
12
|
+
%script{ :src => "/js/bootstrap-alerts.js", :type => "text/javascript", :charset => "utf-8" }
|
12
13
|
%script{ :src => "/js/app.js", :type => "text/javascript", :charset => "utf-8" }
|
13
14
|
%body
|
14
15
|
#nav.topbar
|
data/lib/gitdocs/views/dir.haml
CHANGED
@@ -2,24 +2,28 @@
|
|
2
2
|
|
3
3
|
= partial("header", :locals => { :parent => parent, :file => false, :idx => idx })
|
4
4
|
|
5
|
-
|
6
|
-
%
|
7
|
-
%
|
8
|
-
%th File
|
9
|
-
%th Author
|
10
|
-
%th Last Modified
|
11
|
-
%th Size
|
12
|
-
|
13
|
-
%tbody
|
14
|
-
- contents.items.each_with_index do |f, i|
|
5
|
+
- if contents && contents.any?
|
6
|
+
%table#fileListing.condensed-table.zebra-striped
|
7
|
+
%thead
|
15
8
|
%tr
|
16
|
-
%
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
9
|
+
%th File
|
10
|
+
%th Author
|
11
|
+
%th Last Modified
|
12
|
+
%th Size
|
13
|
+
|
14
|
+
%tbody
|
15
|
+
- contents.each_with_index do |f, i|
|
16
|
+
%tr
|
17
|
+
%td
|
18
|
+
%img{ :src => "/img/#{f.dir? ? 'folder' : 'file'}.png", :width => 16, :height => 16 }
|
19
|
+
%a{ :href => "/#{idx}#{request.path_info}/#{f.name}" }
|
20
|
+
= f.name
|
21
|
+
%td.author
|
22
|
+
%td.modified
|
23
|
+
%td.size
|
24
|
+
|
25
|
+
- if contents.empty?
|
26
|
+
%p No files were found in this directory.
|
23
27
|
|
24
28
|
.row
|
25
29
|
.span6
|
@@ -1,6 +1,6 @@
|
|
1
1
|
- @title = "Settings"
|
2
2
|
|
3
|
-
%form{:method => 'POST', :action => '/settings'}
|
3
|
+
%form#settings{:method => 'POST', :action => '/settings'}
|
4
4
|
%h2 Gitdocs
|
5
5
|
#config.field.config
|
6
6
|
%input{:type =>'hidden', :value => '0', :name=>"config[load_browser_on_startup]"}
|
@@ -41,8 +41,9 @@
|
|
41
41
|
%input{:type =>'hidden', :value => '0', :name=>"share[#{idx}][notification]"}
|
42
42
|
%input{:type =>'checkbox', :value => '1', :name=>"share[#{idx}][notification]", :checked => share.notification ? 'checked' : nil}
|
43
43
|
%span Notifications?
|
44
|
-
.delete
|
44
|
+
.delete{ :style => "display: none;" }
|
45
45
|
%input{:type =>'button', :value => "Delete", :class => "btn danger"}
|
46
46
|
%input{:type =>'hidden', :name=>"share[#{idx}][delete]"}
|
47
47
|
|
48
|
-
%input{:value => 'Save', :type => 'submit', :class => "btn primary" }
|
48
|
+
%input{:value => 'Save', :type => 'submit', :class => "btn primary" }
|
49
|
+
%a{ :class => "btn secondary new-share", :href => "/shares", :"data-method" => "post" } Add Share
|
metadata
CHANGED
@@ -1,246 +1,249 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: gitdocs
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.7
|
3
|
+
version: !ruby/object:Gem::Version
|
5
4
|
prerelease:
|
5
|
+
version: 0.4.8
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- Josh Hull
|
9
9
|
- Nathan Esquenazi
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
|
14
|
+
date: 2011-12-30 00:00:00 Z
|
15
|
+
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
16
17
|
name: joshbuddy-guard
|
17
|
-
|
18
|
+
prerelease: false
|
19
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
18
20
|
none: false
|
19
|
-
requirements:
|
21
|
+
requirements:
|
20
22
|
- - ~>
|
21
|
-
- !ruby/object:Gem::Version
|
23
|
+
- !ruby/object:Gem::Version
|
22
24
|
version: 0.10.0
|
23
25
|
type: :runtime
|
24
|
-
|
25
|
-
|
26
|
-
- !ruby/object:Gem::Dependency
|
26
|
+
version_requirements: *id001
|
27
|
+
- !ruby/object:Gem::Dependency
|
27
28
|
name: thin
|
28
|
-
|
29
|
+
prerelease: false
|
30
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
29
31
|
none: false
|
30
|
-
requirements:
|
31
|
-
- -
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version:
|
32
|
+
requirements:
|
33
|
+
- - ~>
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: 1.3.1
|
34
36
|
type: :runtime
|
35
|
-
|
36
|
-
|
37
|
-
- !ruby/object:Gem::Dependency
|
37
|
+
version_requirements: *id002
|
38
|
+
- !ruby/object:Gem::Dependency
|
38
39
|
name: renee
|
39
|
-
|
40
|
+
prerelease: false
|
41
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
40
42
|
none: false
|
41
|
-
requirements:
|
43
|
+
requirements:
|
42
44
|
- - ~>
|
43
|
-
- !ruby/object:Gem::Version
|
45
|
+
- !ruby/object:Gem::Version
|
44
46
|
version: 0.3.7
|
45
47
|
type: :runtime
|
46
|
-
|
47
|
-
|
48
|
-
- !ruby/object:Gem::Dependency
|
48
|
+
version_requirements: *id003
|
49
|
+
- !ruby/object:Gem::Dependency
|
49
50
|
name: redcarpet
|
50
|
-
|
51
|
+
prerelease: false
|
52
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
51
53
|
none: false
|
52
|
-
requirements:
|
54
|
+
requirements:
|
53
55
|
- - ~>
|
54
|
-
- !ruby/object:Gem::Version
|
56
|
+
- !ruby/object:Gem::Version
|
55
57
|
version: 2.0.0
|
56
58
|
type: :runtime
|
57
|
-
|
58
|
-
|
59
|
-
- !ruby/object:Gem::Dependency
|
59
|
+
version_requirements: *id004
|
60
|
+
- !ruby/object:Gem::Dependency
|
60
61
|
name: thor
|
61
|
-
|
62
|
+
prerelease: false
|
63
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
62
64
|
none: false
|
63
|
-
requirements:
|
64
|
-
- -
|
65
|
-
- !ruby/object:Gem::Version
|
66
|
-
version:
|
65
|
+
requirements:
|
66
|
+
- - ~>
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 0.14.6
|
67
69
|
type: :runtime
|
68
|
-
|
69
|
-
|
70
|
-
- !ruby/object:Gem::Dependency
|
70
|
+
version_requirements: *id005
|
71
|
+
- !ruby/object:Gem::Dependency
|
71
72
|
name: coderay
|
72
|
-
|
73
|
+
prerelease: false
|
74
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
73
75
|
none: false
|
74
|
-
requirements:
|
75
|
-
- -
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
version:
|
76
|
+
requirements:
|
77
|
+
- - ~>
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: 1.0.4
|
78
80
|
type: :runtime
|
79
|
-
|
80
|
-
|
81
|
-
- !ruby/object:Gem::Dependency
|
81
|
+
version_requirements: *id006
|
82
|
+
- !ruby/object:Gem::Dependency
|
82
83
|
name: dante
|
83
|
-
|
84
|
+
prerelease: false
|
85
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
84
86
|
none: false
|
85
|
-
requirements:
|
87
|
+
requirements:
|
86
88
|
- - ~>
|
87
|
-
- !ruby/object:Gem::Version
|
89
|
+
- !ruby/object:Gem::Version
|
88
90
|
version: 0.1.2
|
89
91
|
type: :runtime
|
90
|
-
|
91
|
-
|
92
|
-
- !ruby/object:Gem::Dependency
|
92
|
+
version_requirements: *id007
|
93
|
+
- !ruby/object:Gem::Dependency
|
93
94
|
name: growl
|
94
|
-
|
95
|
+
prerelease: false
|
96
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
95
97
|
none: false
|
96
|
-
requirements:
|
98
|
+
requirements:
|
97
99
|
- - ~>
|
98
|
-
- !ruby/object:Gem::Version
|
100
|
+
- !ruby/object:Gem::Version
|
99
101
|
version: 1.0.3
|
100
102
|
type: :runtime
|
101
|
-
|
102
|
-
|
103
|
-
- !ruby/object:Gem::Dependency
|
103
|
+
version_requirements: *id008
|
104
|
+
- !ruby/object:Gem::Dependency
|
104
105
|
name: yajl-ruby
|
105
|
-
|
106
|
+
prerelease: false
|
107
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
106
108
|
none: false
|
107
|
-
requirements:
|
108
|
-
- -
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
version:
|
109
|
+
requirements:
|
110
|
+
- - ~>
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: 1.1.0
|
111
113
|
type: :runtime
|
112
|
-
|
113
|
-
|
114
|
-
- !ruby/object:Gem::Dependency
|
114
|
+
version_requirements: *id009
|
115
|
+
- !ruby/object:Gem::Dependency
|
115
116
|
name: haml
|
116
|
-
|
117
|
+
prerelease: false
|
118
|
+
requirement: &id010 !ruby/object:Gem::Requirement
|
117
119
|
none: false
|
118
|
-
requirements:
|
119
|
-
- -
|
120
|
-
- !ruby/object:Gem::Version
|
121
|
-
version:
|
120
|
+
requirements:
|
121
|
+
- - ~>
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: 3.1.4
|
122
124
|
type: :runtime
|
123
|
-
|
124
|
-
|
125
|
-
- !ruby/object:Gem::Dependency
|
125
|
+
version_requirements: *id010
|
126
|
+
- !ruby/object:Gem::Dependency
|
126
127
|
name: sqlite3
|
127
|
-
|
128
|
+
prerelease: false
|
129
|
+
requirement: &id011 !ruby/object:Gem::Requirement
|
128
130
|
none: false
|
129
|
-
requirements:
|
131
|
+
requirements:
|
130
132
|
- - ~>
|
131
|
-
- !ruby/object:Gem::Version
|
133
|
+
- !ruby/object:Gem::Version
|
132
134
|
version: 1.3.4
|
133
135
|
type: :runtime
|
134
|
-
|
135
|
-
|
136
|
-
- !ruby/object:Gem::Dependency
|
136
|
+
version_requirements: *id011
|
137
|
+
- !ruby/object:Gem::Dependency
|
137
138
|
name: activerecord
|
138
|
-
|
139
|
+
prerelease: false
|
140
|
+
requirement: &id012 !ruby/object:Gem::Requirement
|
139
141
|
none: false
|
140
|
-
requirements:
|
142
|
+
requirements:
|
141
143
|
- - ~>
|
142
|
-
- !ruby/object:Gem::Version
|
144
|
+
- !ruby/object:Gem::Version
|
143
145
|
version: 3.1.0
|
144
146
|
type: :runtime
|
145
|
-
|
146
|
-
|
147
|
-
- !ruby/object:Gem::Dependency
|
147
|
+
version_requirements: *id012
|
148
|
+
- !ruby/object:Gem::Dependency
|
148
149
|
name: grit
|
149
|
-
|
150
|
+
prerelease: false
|
151
|
+
requirement: &id013 !ruby/object:Gem::Requirement
|
150
152
|
none: false
|
151
|
-
requirements:
|
153
|
+
requirements:
|
152
154
|
- - ~>
|
153
|
-
- !ruby/object:Gem::Version
|
155
|
+
- !ruby/object:Gem::Version
|
154
156
|
version: 2.4.1
|
155
157
|
type: :runtime
|
156
|
-
|
157
|
-
|
158
|
-
- !ruby/object:Gem::Dependency
|
158
|
+
version_requirements: *id013
|
159
|
+
- !ruby/object:Gem::Dependency
|
159
160
|
name: shell_tools
|
160
|
-
|
161
|
+
prerelease: false
|
162
|
+
requirement: &id014 !ruby/object:Gem::Requirement
|
161
163
|
none: false
|
162
|
-
requirements:
|
164
|
+
requirements:
|
163
165
|
- - ~>
|
164
|
-
- !ruby/object:Gem::Version
|
166
|
+
- !ruby/object:Gem::Version
|
165
167
|
version: 0.1.0
|
166
168
|
type: :runtime
|
167
|
-
|
168
|
-
|
169
|
-
- !ruby/object:Gem::Dependency
|
169
|
+
version_requirements: *id014
|
170
|
+
- !ruby/object:Gem::Dependency
|
170
171
|
name: mimetype-fu
|
171
|
-
|
172
|
+
prerelease: false
|
173
|
+
requirement: &id015 !ruby/object:Gem::Requirement
|
172
174
|
none: false
|
173
|
-
requirements:
|
175
|
+
requirements:
|
174
176
|
- - ~>
|
175
|
-
- !ruby/object:Gem::Version
|
177
|
+
- !ruby/object:Gem::Version
|
176
178
|
version: 0.1.2
|
177
179
|
type: :runtime
|
178
|
-
|
179
|
-
|
180
|
-
- !ruby/object:Gem::Dependency
|
180
|
+
version_requirements: *id015
|
181
|
+
- !ruby/object:Gem::Dependency
|
181
182
|
name: eventmachine
|
182
|
-
|
183
|
+
prerelease: false
|
184
|
+
requirement: &id016 !ruby/object:Gem::Requirement
|
183
185
|
none: false
|
184
|
-
requirements:
|
185
|
-
- -
|
186
|
-
- !ruby/object:Gem::Version
|
186
|
+
requirements:
|
187
|
+
- - ">="
|
188
|
+
- !ruby/object:Gem::Version
|
187
189
|
version: 1.0.0.beta.3
|
188
190
|
type: :runtime
|
189
|
-
|
190
|
-
|
191
|
-
- !ruby/object:Gem::Dependency
|
191
|
+
version_requirements: *id016
|
192
|
+
- !ruby/object:Gem::Dependency
|
192
193
|
name: minitest
|
193
|
-
|
194
|
+
prerelease: false
|
195
|
+
requirement: &id017 !ruby/object:Gem::Requirement
|
194
196
|
none: false
|
195
|
-
requirements:
|
197
|
+
requirements:
|
196
198
|
- - ~>
|
197
|
-
- !ruby/object:Gem::Version
|
199
|
+
- !ruby/object:Gem::Version
|
198
200
|
version: 2.6.1
|
199
201
|
type: :development
|
200
|
-
|
201
|
-
|
202
|
-
- !ruby/object:Gem::Dependency
|
202
|
+
version_requirements: *id017
|
203
|
+
- !ruby/object:Gem::Dependency
|
203
204
|
name: rake
|
204
|
-
|
205
|
+
prerelease: false
|
206
|
+
requirement: &id018 !ruby/object:Gem::Requirement
|
205
207
|
none: false
|
206
|
-
requirements:
|
207
|
-
- -
|
208
|
-
- !ruby/object:Gem::Version
|
209
|
-
version:
|
208
|
+
requirements:
|
209
|
+
- - ">="
|
210
|
+
- !ruby/object:Gem::Version
|
211
|
+
version: "0"
|
210
212
|
type: :development
|
211
|
-
|
212
|
-
|
213
|
-
- !ruby/object:Gem::Dependency
|
213
|
+
version_requirements: *id018
|
214
|
+
- !ruby/object:Gem::Dependency
|
214
215
|
name: mocha
|
215
|
-
|
216
|
+
prerelease: false
|
217
|
+
requirement: &id019 !ruby/object:Gem::Requirement
|
216
218
|
none: false
|
217
|
-
requirements:
|
218
|
-
- -
|
219
|
-
- !ruby/object:Gem::Version
|
220
|
-
version:
|
219
|
+
requirements:
|
220
|
+
- - ">="
|
221
|
+
- !ruby/object:Gem::Version
|
222
|
+
version: "0"
|
221
223
|
type: :development
|
222
|
-
|
223
|
-
|
224
|
-
- !ruby/object:Gem::Dependency
|
224
|
+
version_requirements: *id019
|
225
|
+
- !ruby/object:Gem::Dependency
|
225
226
|
name: fakeweb
|
226
|
-
|
227
|
+
prerelease: false
|
228
|
+
requirement: &id020 !ruby/object:Gem::Requirement
|
227
229
|
none: false
|
228
|
-
requirements:
|
229
|
-
- -
|
230
|
-
- !ruby/object:Gem::Version
|
231
|
-
version:
|
230
|
+
requirements:
|
231
|
+
- - ">="
|
232
|
+
- !ruby/object:Gem::Version
|
233
|
+
version: "0"
|
232
234
|
type: :development
|
233
|
-
|
234
|
-
version_requirements: *70196233085840
|
235
|
+
version_requirements: *id020
|
235
236
|
description: Open-source Dropbox using Ruby and Git.
|
236
|
-
email:
|
237
|
+
email:
|
237
238
|
- joshbuddy@gmail.com
|
238
239
|
- nesquena@gmail.com
|
239
|
-
executables:
|
240
|
+
executables:
|
240
241
|
- gitdocs
|
241
242
|
extensions: []
|
243
|
+
|
242
244
|
extra_rdoc_files: []
|
243
|
-
|
245
|
+
|
246
|
+
files:
|
244
247
|
- .gitignore
|
245
248
|
- CHANGELOG
|
246
249
|
- Gemfile
|
@@ -300,6 +303,7 @@ files:
|
|
300
303
|
- lib/gitdocs/public/js/ace/worker-css.js
|
301
304
|
- lib/gitdocs/public/js/ace/worker-javascript.js
|
302
305
|
- lib/gitdocs/public/js/app.js
|
306
|
+
- lib/gitdocs/public/js/bootstrap-alerts.js
|
303
307
|
- lib/gitdocs/public/js/edit.js
|
304
308
|
- lib/gitdocs/public/js/jquery.js
|
305
309
|
- lib/gitdocs/public/js/jquery.tablesorter.js
|
@@ -324,35 +328,32 @@ files:
|
|
324
328
|
- test/test_helper.rb
|
325
329
|
homepage: http://engineering.gomiso.com/2011/11/30/collaborate-and-track-tasks-with-ease-using-gitdocs/
|
326
330
|
licenses: []
|
331
|
+
|
327
332
|
post_install_message:
|
328
333
|
rdoc_options: []
|
329
|
-
|
334
|
+
|
335
|
+
require_paths:
|
330
336
|
- lib
|
331
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
337
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
332
338
|
none: false
|
333
|
-
requirements:
|
334
|
-
- -
|
335
|
-
- !ruby/object:Gem::Version
|
336
|
-
version:
|
337
|
-
|
338
|
-
- 0
|
339
|
-
hash: -356674648532103914
|
340
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
339
|
+
requirements:
|
340
|
+
- - ">="
|
341
|
+
- !ruby/object:Gem::Version
|
342
|
+
version: "0"
|
343
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
341
344
|
none: false
|
342
|
-
requirements:
|
343
|
-
- -
|
344
|
-
- !ruby/object:Gem::Version
|
345
|
-
version:
|
346
|
-
segments:
|
347
|
-
- 0
|
348
|
-
hash: -356674648532103914
|
345
|
+
requirements:
|
346
|
+
- - ">="
|
347
|
+
- !ruby/object:Gem::Version
|
348
|
+
version: "0"
|
349
349
|
requirements: []
|
350
|
+
|
350
351
|
rubyforge_project: gitdocs
|
351
|
-
rubygems_version: 1.8.
|
352
|
+
rubygems_version: 1.8.12
|
352
353
|
signing_key:
|
353
354
|
specification_version: 3
|
354
355
|
summary: Open-source Dropbox using Ruby and Git
|
355
|
-
test_files:
|
356
|
+
test_files:
|
356
357
|
- test/configuration_test.rb
|
357
358
|
- test/runner_test.rb
|
358
359
|
- test/test_helper.rb
|