taskwarrior-web 1.1.4 → 1.1.5
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.
- data/CHANGELOG.md +13 -0
- data/lib/taskwarrior-web.rb +1 -0
- data/lib/taskwarrior-web/app.rb +12 -18
- data/lib/taskwarrior-web/helpers.rb +9 -9
- data/lib/taskwarrior-web/model/config.rb +29 -3
- data/lib/taskwarrior-web/model/task.rb +20 -0
- data/lib/taskwarrior-web/public/css/bootstrap.min.css +2 -2
- data/lib/taskwarrior-web/public/css/styles.css +13 -1
- data/lib/taskwarrior-web/public/img/relax.jpg +0 -0
- data/lib/taskwarrior-web/public/js/application.js +48 -22
- data/lib/taskwarrior-web/public/js/bootstrap.js +165 -31
- data/lib/taskwarrior-web/public/js/jquery.hotkeys.js +99 -0
- data/lib/taskwarrior-web/services/builder/base.rb +5 -5
- data/lib/taskwarrior-web/version.rb +3 -0
- data/lib/taskwarrior-web/views/_footer.erb +10 -0
- data/lib/taskwarrior-web/views/_hotkeys.erb +18 -0
- data/lib/taskwarrior-web/views/_topbar.erb +1 -1
- data/lib/taskwarrior-web/views/layout.erb +19 -9
- data/lib/taskwarrior-web/views/listing.erb +42 -40
- data/spec/app/app_spec.rb +10 -10
- data/taskwarrior-web.gemspec +2 -2
- metadata +32 -38
@@ -0,0 +1,99 @@
|
|
1
|
+
/*
|
2
|
+
* jQuery Hotkeys Plugin
|
3
|
+
* Copyright 2010, John Resig
|
4
|
+
* Dual licensed under the MIT or GPL Version 2 licenses.
|
5
|
+
*
|
6
|
+
* Based upon the plugin by Tzury Bar Yochay:
|
7
|
+
* http://github.com/tzuryby/hotkeys
|
8
|
+
*
|
9
|
+
* Original idea by:
|
10
|
+
* Binny V A, http://www.openjs.com/scripts/events/keyboard_shortcuts/
|
11
|
+
*/
|
12
|
+
|
13
|
+
(function(jQuery){
|
14
|
+
|
15
|
+
jQuery.hotkeys = {
|
16
|
+
version: "0.8",
|
17
|
+
|
18
|
+
specialKeys: {
|
19
|
+
8: "backspace", 9: "tab", 13: "return", 16: "shift", 17: "ctrl", 18: "alt", 19: "pause",
|
20
|
+
20: "capslock", 27: "esc", 32: "space", 33: "pageup", 34: "pagedown", 35: "end", 36: "home",
|
21
|
+
37: "left", 38: "up", 39: "right", 40: "down", 45: "insert", 46: "del",
|
22
|
+
96: "0", 97: "1", 98: "2", 99: "3", 100: "4", 101: "5", 102: "6", 103: "7",
|
23
|
+
104: "8", 105: "9", 106: "*", 107: "+", 109: "-", 110: ".", 111 : "/",
|
24
|
+
112: "f1", 113: "f2", 114: "f3", 115: "f4", 116: "f5", 117: "f6", 118: "f7", 119: "f8",
|
25
|
+
120: "f9", 121: "f10", 122: "f11", 123: "f12", 144: "numlock", 145: "scroll", 191: "/", 224: "meta"
|
26
|
+
},
|
27
|
+
|
28
|
+
shiftNums: {
|
29
|
+
"`": "~", "1": "!", "2": "@", "3": "#", "4": "$", "5": "%", "6": "^", "7": "&",
|
30
|
+
"8": "*", "9": "(", "0": ")", "-": "_", "=": "+", ";": ": ", "'": "\"", ",": "<",
|
31
|
+
".": ">", "/": "?", "\\": "|"
|
32
|
+
}
|
33
|
+
};
|
34
|
+
|
35
|
+
function keyHandler( handleObj ) {
|
36
|
+
// Only care when a possible input has been specified
|
37
|
+
if ( typeof handleObj.data !== "string" ) {
|
38
|
+
return;
|
39
|
+
}
|
40
|
+
|
41
|
+
var origHandler = handleObj.handler,
|
42
|
+
keys = handleObj.data.toLowerCase().split(" ");
|
43
|
+
|
44
|
+
handleObj.handler = function( event ) {
|
45
|
+
// Don't fire in text-accepting inputs that we didn't directly bind to
|
46
|
+
if ( this !== event.target && (/textarea|select/i.test( event.target.nodeName ) ||
|
47
|
+
event.target.type === "text") ) {
|
48
|
+
return;
|
49
|
+
}
|
50
|
+
|
51
|
+
// Keypress represents characters, not special keys
|
52
|
+
var special = event.type !== "keypress" && jQuery.hotkeys.specialKeys[ event.which ],
|
53
|
+
character = String.fromCharCode( event.which ).toLowerCase(),
|
54
|
+
key, modif = "", possible = {};
|
55
|
+
|
56
|
+
// check combinations (alt|ctrl|shift+anything)
|
57
|
+
if ( event.altKey && special !== "alt" ) {
|
58
|
+
modif += "alt+";
|
59
|
+
}
|
60
|
+
|
61
|
+
if ( event.ctrlKey && special !== "ctrl" ) {
|
62
|
+
modif += "ctrl+";
|
63
|
+
}
|
64
|
+
|
65
|
+
// TODO: Need to make sure this works consistently across platforms
|
66
|
+
if ( event.metaKey && !event.ctrlKey && special !== "meta" ) {
|
67
|
+
modif += "meta+";
|
68
|
+
}
|
69
|
+
|
70
|
+
if ( event.shiftKey && special !== "shift" ) {
|
71
|
+
modif += "shift+";
|
72
|
+
}
|
73
|
+
|
74
|
+
if ( special ) {
|
75
|
+
possible[ modif + special ] = true;
|
76
|
+
|
77
|
+
} else {
|
78
|
+
possible[ modif + character ] = true;
|
79
|
+
possible[ modif + jQuery.hotkeys.shiftNums[ character ] ] = true;
|
80
|
+
|
81
|
+
// "$" can be triggered as "Shift+4" or "Shift+$" or just "$"
|
82
|
+
if ( modif === "shift+" ) {
|
83
|
+
possible[ jQuery.hotkeys.shiftNums[ character ] ] = true;
|
84
|
+
}
|
85
|
+
}
|
86
|
+
|
87
|
+
for ( var i = 0, l = keys.length; i < l; i++ ) {
|
88
|
+
if ( possible[ keys[i] ] ) {
|
89
|
+
return origHandler.apply( this, arguments );
|
90
|
+
}
|
91
|
+
}
|
92
|
+
};
|
93
|
+
}
|
94
|
+
|
95
|
+
jQuery.each([ "keydown", "keyup", "keypress" ], function() {
|
96
|
+
jQuery.event.special[ this ] = { add: keyHandler };
|
97
|
+
});
|
98
|
+
|
99
|
+
})( jQuery );
|
@@ -40,22 +40,22 @@ module TaskwarriorWeb::CommandBuilder::Base
|
|
40
40
|
|
41
41
|
def parse_params
|
42
42
|
string = ''
|
43
|
-
string << %
|
43
|
+
string << %( #{@params.delete(:description).shellescape}) if @params.has_key?(:description)
|
44
44
|
|
45
45
|
if tags = @params.delete(:tags)
|
46
46
|
tag_indicator = TaskwarriorWeb::Config.property('tag.indicator') || '+'
|
47
|
-
tags.each { |tag| string << %
|
47
|
+
tags.each { |tag| string << %( #{tag_indicator}#{tag.to_s.shellescape}) }
|
48
48
|
end
|
49
49
|
|
50
50
|
if tags = @params.delete(:remove_tags)
|
51
|
-
tags.each { |tag| string << %
|
51
|
+
tags.each { |tag| string << %( -#{tag.to_s.shellescape}) }
|
52
52
|
end
|
53
53
|
|
54
54
|
@params.each do |attr, value|
|
55
55
|
if value.respond_to? :each
|
56
|
-
value.each { |val| string << %
|
56
|
+
value.each { |val| string << %( #{attr.to_s}:\\"#{val.to_s.shellescape}\\") }
|
57
57
|
else
|
58
|
-
string << %
|
58
|
+
string << %( #{attr.to_s}:\\"#{value.to_s.shellescape}\\")
|
59
59
|
end
|
60
60
|
end
|
61
61
|
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<div class="pull-left">
|
2
|
+
<p>TaskwarriorWeb <%= TaskwarriorWeb::VERSION %></p>
|
3
|
+
</div>
|
4
|
+
<div class="pull-right">
|
5
|
+
<p>
|
6
|
+
<a data-toggle="modal" data-target="#hotkeys" href="#">Hotkeys</a>
|
7
|
+
|
|
8
|
+
<a href="http://github.com/theunraveler/taskwarrior-web/issues">Report a bug</a>
|
9
|
+
</p>
|
10
|
+
</div>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<div id="hotkeys" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
|
2
|
+
<div class="modal-header">
|
3
|
+
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
4
|
+
<h3 id="myModalLabel">Hotkeys</h3>
|
5
|
+
</div>
|
6
|
+
<div class="modal-body">
|
7
|
+
<p>TaskwarriorWeb includes hotkeys for quick navigation to commonly-used parts of the application.</p>
|
8
|
+
<ul>
|
9
|
+
<li><code>1</code>: Go to the "Tasks" (/tasks) page</li>
|
10
|
+
<li><code>2</code>: Go to the "Projects" (/projects) page</li>
|
11
|
+
<li><code>n</code>: Create a new task</li>
|
12
|
+
<li><code>h</code>: Displays and dismisses this help dialog</li>
|
13
|
+
</ul>
|
14
|
+
</div>
|
15
|
+
<div class="modal-footer">
|
16
|
+
<button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>
|
17
|
+
</div>
|
18
|
+
</div>
|
@@ -3,7 +3,7 @@
|
|
3
3
|
<a href="/" class="brand">TaskwarriorWeb</a>
|
4
4
|
<%= render_navigation :level => 1 %>
|
5
5
|
<ul class="nav pull-right">
|
6
|
-
<li<% if @current_page =~ %r
|
6
|
+
<li<% if @current_page =~ %r(^/tasks/new/?) %> class="active"<% end %>>
|
7
7
|
<a href="/tasks/new">
|
8
8
|
<i class="icon-plus"></i>
|
9
9
|
Add a Task
|
@@ -3,23 +3,33 @@
|
|
3
3
|
<title><%= @title %> | TaskwarriorWeb</title>
|
4
4
|
|
5
5
|
<!-- Styles -->
|
6
|
-
<%
|
6
|
+
<% %w(bootstrap.min datepicker styles).each do |file| %>
|
7
7
|
<link rel="stylesheet" href="<%= url("/css/#{file}.css") %>">
|
8
8
|
<% end %>
|
9
9
|
|
10
10
|
<!-- Scripts -->
|
11
|
-
<%
|
11
|
+
<% %w(jquery.min bootstrap bootstrap-datepicker jquery.hotkeys application).each do |file| %>
|
12
12
|
<script text="text/javascript" src="<%= url("/js/#{file}.js") %>"></script>
|
13
13
|
<% end %>
|
14
14
|
</head>
|
15
15
|
|
16
16
|
<body data-spy="scroll" data-offset="60" data-target="#sidebar">
|
17
|
-
<div id="
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
17
|
+
<div id="wrap">
|
18
|
+
<div id="page" class="container">
|
19
|
+
<%= erb :_topbar %>
|
20
|
+
<%= erb :_subnav %>
|
21
|
+
<section class="content">
|
22
|
+
<%= erb :_flash %>
|
23
|
+
<%= yield %>
|
24
|
+
</section>
|
25
|
+
</div>
|
26
|
+
<div id="push"></div>
|
24
27
|
</div>
|
28
|
+
<div id="footer">
|
29
|
+
<div class="container muted">
|
30
|
+
<%= erb :_footer %>
|
31
|
+
</div>
|
32
|
+
</div>
|
33
|
+
<%= erb :_hotkeys %>
|
34
|
+
</body>
|
25
35
|
</html>
|
@@ -1,47 +1,49 @@
|
|
1
1
|
<% can_edit = @can_edit && params[:status].in?(['pending', 'waiting']) %>
|
2
2
|
|
3
3
|
<div id="listing">
|
4
|
-
|
5
|
-
<
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
<
|
12
|
-
<th>Due</th>
|
13
|
-
<th>Tags</th>
|
14
|
-
<th>Priority</th>
|
15
|
-
<% if @can_edit %><th></th><% end %>
|
16
|
-
</tr>
|
17
|
-
</thead>
|
18
|
-
<tbody>
|
19
|
-
<% @tasks.each do |task| %>
|
20
|
-
<% if task.status == 'pending' %>
|
21
|
-
<tr class="<%= colorize_date(task.due) %>">
|
22
|
-
<% else %>
|
23
|
-
<tr class="<%= task.status %>">
|
24
|
-
<% end %>
|
4
|
+
<% if @tasks.empty? and params[:status] == 'pending' %>
|
5
|
+
<h3>Congrats, you're in the clear!</h3>
|
6
|
+
<p><img src="/img/relax.jpg" alt="Relax" /></p>
|
7
|
+
<p>You've finished all of the things you need to do. Enjoy a nice break.</p>
|
8
|
+
<% else %>
|
9
|
+
<table class="table table-striped table-hover">
|
10
|
+
<thead>
|
11
|
+
<tr>
|
25
12
|
<% if params[:status] == 'pending' %>
|
26
|
-
<
|
13
|
+
<th></th>
|
27
14
|
<% end %>
|
28
|
-
<
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
<% end %>
|
35
|
-
</ul>
|
36
|
-
<% end %>
|
37
|
-
</td>
|
38
|
-
<td><a href="/projects/<%= linkify(task.project) %>"><%= task.project %></a></td>
|
39
|
-
<td><%= format_date(task.due) unless task.due.nil? %></td>
|
40
|
-
<td><%= task.tags.join(', ') unless task.tags.nil? %></td>
|
41
|
-
<td><%= task.priority unless task.priority.nil? %></td>
|
42
|
-
<% if can_edit %><td><%= crud_links(task) %></td><% end %>
|
15
|
+
<th>Description</th>
|
16
|
+
<th>Project</th>
|
17
|
+
<th>Due</th>
|
18
|
+
<th>Tags</th>
|
19
|
+
<th>Priority</th>
|
20
|
+
<% if @can_edit %><th></th><% end %>
|
43
21
|
</tr>
|
44
|
-
|
45
|
-
|
46
|
-
|
22
|
+
</thead>
|
23
|
+
<tbody>
|
24
|
+
<% @tasks.each do |task| %>
|
25
|
+
<tr class="<%= task.status == 'pending' ? colorize_date(task.due) : task.status %>">
|
26
|
+
<% if params[:status] == 'pending' %>
|
27
|
+
<td><input type="checkbox" class="complete" data-task-id="<%= task.uuid %>" /></td>
|
28
|
+
<% end %>
|
29
|
+
<td>
|
30
|
+
<%= task.description %>
|
31
|
+
<% unless task.annotations.nil? || task.annotations.empty? %>
|
32
|
+
<ul>
|
33
|
+
<% task.annotations.each do |annotation| %>
|
34
|
+
<li><%= format_date(annotation['entry']) %>: <%= auto_link(annotation['description']) %></li>
|
35
|
+
<% end %>
|
36
|
+
</ul>
|
37
|
+
<% end %>
|
38
|
+
</td>
|
39
|
+
<td><a href="/projects/<%= linkify(task.project) %>"><%= task.project %></a></td>
|
40
|
+
<td><%= format_date(task.due) unless task.due.nil? %></td>
|
41
|
+
<td><%= task.tags.join(', ') unless task.tags.nil? %></td>
|
42
|
+
<td><%= task.priority unless task.priority.nil? %></td>
|
43
|
+
<% if can_edit %><td><%= crud_links(task) %></td><% end %>
|
44
|
+
</tr>
|
45
|
+
<% end %>
|
46
|
+
</tbody>
|
47
|
+
</table>
|
48
|
+
<% end %>
|
47
49
|
</div>
|
data/spec/app/app_spec.rb
CHANGED
@@ -89,7 +89,7 @@ describe TaskwarriorWeb::App do
|
|
89
89
|
describe 'GET /tasks/:uuid' do
|
90
90
|
context 'given a non-existant task' do
|
91
91
|
it 'should return a 404' do
|
92
|
-
TaskwarriorWeb::Task.should_receive(:
|
92
|
+
TaskwarriorWeb::Task.should_receive(:find).and_return(nil)
|
93
93
|
get '/tasks/1'
|
94
94
|
last_response.should be_not_found
|
95
95
|
end
|
@@ -97,9 +97,9 @@ describe TaskwarriorWeb::App do
|
|
97
97
|
|
98
98
|
context 'given an existing task' do
|
99
99
|
before do
|
100
|
-
TaskwarriorWeb::Task.should_receive(:
|
100
|
+
TaskwarriorWeb::Task.should_receive(:find).and_return(
|
101
101
|
TaskwarriorWeb::Task.new({:uuid => 246, :description => 'Test task with a longer description'})
|
102
|
-
|
102
|
+
)
|
103
103
|
get '/tasks/246'
|
104
104
|
end
|
105
105
|
|
@@ -125,7 +125,7 @@ describe TaskwarriorWeb::App do
|
|
125
125
|
describe 'PATCH /tasks/:uuid' do
|
126
126
|
context 'given a non-existant task' do
|
127
127
|
it 'should return a 404' do
|
128
|
-
TaskwarriorWeb::Task.should_receive(:
|
128
|
+
TaskwarriorWeb::Task.should_receive(:find).and_return(nil)
|
129
129
|
patch '/tasks/429897527'
|
130
130
|
last_response.should be_not_found
|
131
131
|
end
|
@@ -133,7 +133,7 @@ describe TaskwarriorWeb::App do
|
|
133
133
|
|
134
134
|
context 'given an existing task' do
|
135
135
|
before do
|
136
|
-
TaskwarriorWeb::Task.should_receive(:
|
136
|
+
TaskwarriorWeb::Task.should_receive(:find).and_return('hello')
|
137
137
|
end
|
138
138
|
|
139
139
|
it 'should render an error message if the task is invalid' do
|
@@ -160,7 +160,7 @@ describe TaskwarriorWeb::App do
|
|
160
160
|
describe 'GET /tasks/:uuid/delete' do
|
161
161
|
context 'given a non-existant task' do
|
162
162
|
it 'should return a 404' do
|
163
|
-
TaskwarriorWeb::Task.should_receive(:
|
163
|
+
TaskwarriorWeb::Task.should_receive(:find).and_return(nil)
|
164
164
|
get '/tasks/429897527/delete'
|
165
165
|
last_response.should be_not_found
|
166
166
|
end
|
@@ -168,9 +168,9 @@ describe TaskwarriorWeb::App do
|
|
168
168
|
|
169
169
|
context 'given an existing task' do
|
170
170
|
before do
|
171
|
-
TaskwarriorWeb::Task.should_receive(:
|
171
|
+
TaskwarriorWeb::Task.should_receive(:find).and_return(
|
172
172
|
TaskwarriorWeb::Task.new({:uuid => 246, :description => 'Test task with a longer description'})
|
173
|
-
|
173
|
+
)
|
174
174
|
get '/tasks/246/delete'
|
175
175
|
end
|
176
176
|
|
@@ -189,7 +189,7 @@ describe TaskwarriorWeb::App do
|
|
189
189
|
describe 'DELETE /tasks/:uuid' do
|
190
190
|
context 'given a non-existant task' do
|
191
191
|
it 'should return a 404' do
|
192
|
-
TaskwarriorWeb::Task.should_receive(:
|
192
|
+
TaskwarriorWeb::Task.should_receive(:find).any_number_of_times.and_return(nil)
|
193
193
|
delete '/tasks/429897527'
|
194
194
|
last_response.should be_not_found
|
195
195
|
end
|
@@ -199,7 +199,7 @@ describe TaskwarriorWeb::App do
|
|
199
199
|
before do
|
200
200
|
@task = TaskwarriorWeb::Task.new
|
201
201
|
@task.should_receive(:delete!).once.and_return('Success')
|
202
|
-
TaskwarriorWeb::Task.should_receive(:
|
202
|
+
TaskwarriorWeb::Task.should_receive(:find).and_return(@task)
|
203
203
|
delete '/tasks/246'
|
204
204
|
end
|
205
205
|
|
data/taskwarrior-web.gemspec
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
2
|
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require 'taskwarrior-web/version'
|
3
4
|
|
4
5
|
Gem::Specification.new do |s|
|
5
6
|
s.name = "taskwarrior-web"
|
6
|
-
s.version =
|
7
|
+
s.version = TaskwarriorWeb::VERSION
|
7
8
|
s.platform = Gem::Platform::RUBY
|
8
9
|
s.authors = ["Jake Bell"]
|
9
10
|
s.email = ["jake@theunraveler.com"]
|
@@ -16,7 +17,6 @@ Gem::Specification.new do |s|
|
|
16
17
|
s.required_ruby_version = '>= 1.9.0'
|
17
18
|
|
18
19
|
s.add_dependency('sinatra')
|
19
|
-
s.add_dependency('rack-protection', '= 1.2.0')
|
20
20
|
s.add_dependency('parseconfig')
|
21
21
|
s.add_dependency('vegas')
|
22
22
|
s.add_dependency('rinku')
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: taskwarrior-web
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-12-
|
12
|
+
date: 2012-12-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sinatra
|
16
|
-
requirement: &
|
16
|
+
requirement: &70339183153940 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,21 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
25
|
-
- !ruby/object:Gem::Dependency
|
26
|
-
name: rack-protection
|
27
|
-
requirement: &70119053210420 !ruby/object:Gem::Requirement
|
28
|
-
none: false
|
29
|
-
requirements:
|
30
|
-
- - =
|
31
|
-
- !ruby/object:Gem::Version
|
32
|
-
version: 1.2.0
|
33
|
-
type: :runtime
|
34
|
-
prerelease: false
|
35
|
-
version_requirements: *70119053210420
|
24
|
+
version_requirements: *70339183153940
|
36
25
|
- !ruby/object:Gem::Dependency
|
37
26
|
name: parseconfig
|
38
|
-
requirement: &
|
27
|
+
requirement: &70339183153200 !ruby/object:Gem::Requirement
|
39
28
|
none: false
|
40
29
|
requirements:
|
41
30
|
- - ! '>='
|
@@ -43,10 +32,10 @@ dependencies:
|
|
43
32
|
version: '0'
|
44
33
|
type: :runtime
|
45
34
|
prerelease: false
|
46
|
-
version_requirements: *
|
35
|
+
version_requirements: *70339183153200
|
47
36
|
- !ruby/object:Gem::Dependency
|
48
37
|
name: vegas
|
49
|
-
requirement: &
|
38
|
+
requirement: &70339183152460 !ruby/object:Gem::Requirement
|
50
39
|
none: false
|
51
40
|
requirements:
|
52
41
|
- - ! '>='
|
@@ -54,10 +43,10 @@ dependencies:
|
|
54
43
|
version: '0'
|
55
44
|
type: :runtime
|
56
45
|
prerelease: false
|
57
|
-
version_requirements: *
|
46
|
+
version_requirements: *70339183152460
|
58
47
|
- !ruby/object:Gem::Dependency
|
59
48
|
name: rinku
|
60
|
-
requirement: &
|
49
|
+
requirement: &70339183151460 !ruby/object:Gem::Requirement
|
61
50
|
none: false
|
62
51
|
requirements:
|
63
52
|
- - ! '>='
|
@@ -65,10 +54,10 @@ dependencies:
|
|
65
54
|
version: '0'
|
66
55
|
type: :runtime
|
67
56
|
prerelease: false
|
68
|
-
version_requirements: *
|
57
|
+
version_requirements: *70339183151460
|
69
58
|
- !ruby/object:Gem::Dependency
|
70
59
|
name: versionomy
|
71
|
-
requirement: &
|
60
|
+
requirement: &70339183150820 !ruby/object:Gem::Requirement
|
72
61
|
none: false
|
73
62
|
requirements:
|
74
63
|
- - ! '>='
|
@@ -76,10 +65,10 @@ dependencies:
|
|
76
65
|
version: '0'
|
77
66
|
type: :runtime
|
78
67
|
prerelease: false
|
79
|
-
version_requirements: *
|
68
|
+
version_requirements: *70339183150820
|
80
69
|
- !ruby/object:Gem::Dependency
|
81
70
|
name: activesupport
|
82
|
-
requirement: &
|
71
|
+
requirement: &70339183149320 !ruby/object:Gem::Requirement
|
83
72
|
none: false
|
84
73
|
requirements:
|
85
74
|
- - ! '>='
|
@@ -87,10 +76,10 @@ dependencies:
|
|
87
76
|
version: '0'
|
88
77
|
type: :runtime
|
89
78
|
prerelease: false
|
90
|
-
version_requirements: *
|
79
|
+
version_requirements: *70339183149320
|
91
80
|
- !ruby/object:Gem::Dependency
|
92
81
|
name: sinatra-simple-navigation
|
93
|
-
requirement: &
|
82
|
+
requirement: &70339183147120 !ruby/object:Gem::Requirement
|
94
83
|
none: false
|
95
84
|
requirements:
|
96
85
|
- - ! '>='
|
@@ -98,10 +87,10 @@ dependencies:
|
|
98
87
|
version: '0'
|
99
88
|
type: :runtime
|
100
89
|
prerelease: false
|
101
|
-
version_requirements: *
|
90
|
+
version_requirements: *70339183147120
|
102
91
|
- !ruby/object:Gem::Dependency
|
103
92
|
name: rack-flash3
|
104
|
-
requirement: &
|
93
|
+
requirement: &70339183146020 !ruby/object:Gem::Requirement
|
105
94
|
none: false
|
106
95
|
requirements:
|
107
96
|
- - ! '>='
|
@@ -109,10 +98,10 @@ dependencies:
|
|
109
98
|
version: '0'
|
110
99
|
type: :runtime
|
111
100
|
prerelease: false
|
112
|
-
version_requirements: *
|
101
|
+
version_requirements: *70339183146020
|
113
102
|
- !ruby/object:Gem::Dependency
|
114
103
|
name: rake
|
115
|
-
requirement: &
|
104
|
+
requirement: &70339183144680 !ruby/object:Gem::Requirement
|
116
105
|
none: false
|
117
106
|
requirements:
|
118
107
|
- - ! '>='
|
@@ -120,10 +109,10 @@ dependencies:
|
|
120
109
|
version: '0'
|
121
110
|
type: :development
|
122
111
|
prerelease: false
|
123
|
-
version_requirements: *
|
112
|
+
version_requirements: *70339183144680
|
124
113
|
- !ruby/object:Gem::Dependency
|
125
114
|
name: rack-test
|
126
|
-
requirement: &
|
115
|
+
requirement: &70339183142960 !ruby/object:Gem::Requirement
|
127
116
|
none: false
|
128
117
|
requirements:
|
129
118
|
- - ! '>='
|
@@ -131,10 +120,10 @@ dependencies:
|
|
131
120
|
version: '0'
|
132
121
|
type: :development
|
133
122
|
prerelease: false
|
134
|
-
version_requirements: *
|
123
|
+
version_requirements: *70339183142960
|
135
124
|
- !ruby/object:Gem::Dependency
|
136
125
|
name: rspec
|
137
|
-
requirement: &
|
126
|
+
requirement: &70339183141820 !ruby/object:Gem::Requirement
|
138
127
|
none: false
|
139
128
|
requirements:
|
140
129
|
- - ! '>='
|
@@ -142,10 +131,10 @@ dependencies:
|
|
142
131
|
version: '0'
|
143
132
|
type: :development
|
144
133
|
prerelease: false
|
145
|
-
version_requirements: *
|
134
|
+
version_requirements: *70339183141820
|
146
135
|
- !ruby/object:Gem::Dependency
|
147
136
|
name: rspec-html-matchers
|
148
|
-
requirement: &
|
137
|
+
requirement: &70339183140920 !ruby/object:Gem::Requirement
|
149
138
|
none: false
|
150
139
|
requirements:
|
151
140
|
- - ! '>='
|
@@ -153,7 +142,7 @@ dependencies:
|
|
153
142
|
version: '0'
|
154
143
|
type: :development
|
155
144
|
prerelease: false
|
156
|
-
version_requirements: *
|
145
|
+
version_requirements: *70339183140920
|
157
146
|
description: This gem provides a graphical frontend for the Taskwarrior task manager.
|
158
147
|
It is based on Sinatra.
|
159
148
|
email:
|
@@ -188,9 +177,11 @@ files:
|
|
188
177
|
- lib/taskwarrior-web/public/img/ajax-loader.gif
|
189
178
|
- lib/taskwarrior-web/public/img/glyphicons-halflings-white.png
|
190
179
|
- lib/taskwarrior-web/public/img/glyphicons-halflings.png
|
180
|
+
- lib/taskwarrior-web/public/img/relax.jpg
|
191
181
|
- lib/taskwarrior-web/public/js/application.js
|
192
182
|
- lib/taskwarrior-web/public/js/bootstrap-datepicker.js
|
193
183
|
- lib/taskwarrior-web/public/js/bootstrap.js
|
184
|
+
- lib/taskwarrior-web/public/js/jquery.hotkeys.js
|
194
185
|
- lib/taskwarrior-web/public/js/jquery.min.js
|
195
186
|
- lib/taskwarrior-web/services/builder.rb
|
196
187
|
- lib/taskwarrior-web/services/builder/base.rb
|
@@ -200,8 +191,11 @@ files:
|
|
200
191
|
- lib/taskwarrior-web/services/parser/csv.rb
|
201
192
|
- lib/taskwarrior-web/services/parser/json.rb
|
202
193
|
- lib/taskwarrior-web/services/runner.rb
|
194
|
+
- lib/taskwarrior-web/version.rb
|
203
195
|
- lib/taskwarrior-web/views/404.erb
|
204
196
|
- lib/taskwarrior-web/views/_flash.erb
|
197
|
+
- lib/taskwarrior-web/views/_footer.erb
|
198
|
+
- lib/taskwarrior-web/views/_hotkeys.erb
|
205
199
|
- lib/taskwarrior-web/views/_subnav.erb
|
206
200
|
- lib/taskwarrior-web/views/_task_form.erb
|
207
201
|
- lib/taskwarrior-web/views/_topbar.erb
|
@@ -245,7 +239,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
245
239
|
version: '0'
|
246
240
|
segments:
|
247
241
|
- 0
|
248
|
-
hash:
|
242
|
+
hash: -1474998614985479488
|
249
243
|
requirements: []
|
250
244
|
rubyforge_project: taskwarrior-web
|
251
245
|
rubygems_version: 1.8.11
|