taskwarrior-web 0.0.12 → 0.0.13

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ ## v0.0.13 (2/6/12)
2
+
3
+ * Adding Fluid app dock icon. The dock icons should now show a number of
4
+ pending tasks.
5
+
1
6
  ## v0.0.11 (1/10/12)
2
7
 
3
8
  * Added annotations to task listing, complete with autolinking (turns URLs into
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- taskwarrior-web (0.0.12)
4
+ taskwarrior-web (0.0.13)
5
5
  parseconfig
6
6
  rinku
7
7
  sinatra
@@ -12,7 +12,7 @@ GEM
12
12
  specs:
13
13
  diff-lcs (1.1.3)
14
14
  parseconfig (0.5.2)
15
- rack (1.4.0)
15
+ rack (1.4.1)
16
16
  rack-protection (1.2.0)
17
17
  rack
18
18
  rake (0.9.2.2)
@@ -30,7 +30,7 @@ GEM
30
30
  rack-protection (~> 1.2)
31
31
  tilt (~> 1.3, >= 1.3.3)
32
32
  tilt (1.3.3)
33
- vegas (0.1.8)
33
+ vegas (0.1.11)
34
34
  rack (>= 1.0.0)
35
35
 
36
36
  PLATFORMS
@@ -6,6 +6,7 @@ require 'parseconfig'
6
6
  require 'json'
7
7
  require 'time'
8
8
  require 'rinku'
9
+ require 'digest'
9
10
 
10
11
  module TaskwarriorWeb
11
12
  class App < Sinatra::Base
@@ -14,9 +15,21 @@ module TaskwarriorWeb
14
15
  set :root, @@root
15
16
  set :app_file, __FILE__
16
17
 
18
+ def protected!
19
+ response['WWW-Authenticate'] = %(Basic realm="Taskworrior Web") and throw(:halt, [401, "Not authorized\n"]) and return unless authorized?
20
+ end
21
+
22
+ def authorized?
23
+ @auth ||= Rack::Auth::Basic::Request.new(request.env)
24
+ @auth.provided? && @auth.basic? && @auth.credentials &&
25
+ @auth.credentials[0] == TaskwarriorWeb::Config.file.get_value('task-web.user') &&
26
+ Digest::MD5.hexdigest(@auth.credentials[1]) == TaskwarriorWeb::Config.file.get_value('task-web.passwd')
27
+ end
28
+
17
29
  # Before filter
18
30
  before do
19
31
  @current_page = request.path_info
32
+ protected! if TaskwarriorWeb::Config.file.get_value('task-web.user')
20
33
  end
21
34
 
22
35
  # Helpers
@@ -155,6 +168,10 @@ module TaskwarriorWeb
155
168
  tags.compact!.uniq!.to_json
156
169
  end
157
170
 
171
+ get '/ajax/count/?' do
172
+ TaskwarriorWeb::Task.count(:status => :pending).to_s
173
+ end
174
+
158
175
  # Error handling
159
176
  not_found do
160
177
  @title = 'Page Not Found'
@@ -4,6 +4,7 @@ $(document).ready(function() {
4
4
  initCompleteTask();
5
5
  initDatePicker();
6
6
  initAutocomplete();
7
+ refreshDockBadge();
7
8
  });
8
9
 
9
10
  var initPolling = function() {
@@ -40,6 +41,8 @@ var refreshPageContents = function() {
40
41
  url: window.location,
41
42
  success: function(data) {
42
43
  $('#listing').replaceWith($('#listing', data));
44
+ refreshSubnavCount();
45
+ refreshDockBadge();
43
46
  }
44
47
  });
45
48
  };
@@ -65,13 +68,8 @@ var initCompleteTask = function() {
65
68
  success: function(data) {
66
69
  row.fadeOut('slow', function() {
67
70
  row.remove();
68
- // TODO: Wow. This is nasty.
69
- var subnavItem = $('#subnav-bar ul li:first-child a');
70
- var oldCount = subnavItem.text().match(/((\d))/);
71
- var newCount = parseInt(oldCount[0]) - 1
72
- var newVal = subnavItem.text().replace(oldCount[0], newCount);
73
- console.log(newVal);
74
- subnavItem.text(newVal);
71
+ refreshSubnavCount();
72
+ refreshDockBadge();
75
73
  });
76
74
  }
77
75
  });
@@ -124,6 +122,27 @@ var initAutocomplete = function() {
124
122
  });
125
123
  };
126
124
 
125
+ // Count updating.
126
+
127
+ var getCount = function(callback) {
128
+ $.ajax({
129
+ url: '/ajax/count',
130
+ success: callback
131
+ });
132
+ };
133
+
134
+ var refreshDockBadge = function() {
135
+ getCount(function(data) {
136
+ window.fluid.dockBadge = data;
137
+ });
138
+ };
139
+
140
+ var refreshSubnavCount = function() {
141
+ getCount(function(data) {
142
+ $('#subnav-bar ul li:first-child a').text('Pending ('+data+')');
143
+ });
144
+ };
145
+
127
146
  function set_message(msg, severity) {
128
147
  severity = severity ? severity : 'info';
129
148
  $('#flash-messages').append('<div class="message ' + severity + '">' + msg + '</div>');
@@ -3,7 +3,7 @@ $:.push File.expand_path("../lib", __FILE__)
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "taskwarrior-web"
6
- s.version = '0.0.12'
6
+ s.version = '0.0.13'
7
7
  s.platform = Gem::Platform::RUBY
8
8
  s.authors = ["Jake Bell"]
9
9
  s.email = ["jake@theunraveler.com"]
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: 0.0.12
4
+ version: 0.0.13
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-01-20 00:00:00.000000000 Z
12
+ date: 2012-02-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sinatra
16
- requirement: &2162204640 !ruby/object:Gem::Requirement
16
+ requirement: &2162191880 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *2162204640
24
+ version_requirements: *2162191880
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: parseconfig
27
- requirement: &2162204180 !ruby/object:Gem::Requirement
27
+ requirement: &2162191420 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *2162204180
35
+ version_requirements: *2162191420
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: vegas
38
- requirement: &2162203760 !ruby/object:Gem::Requirement
38
+ requirement: &2162191000 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *2162203760
46
+ version_requirements: *2162191000
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rinku
49
- requirement: &2162203300 !ruby/object:Gem::Requirement
49
+ requirement: &2162190580 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *2162203300
57
+ version_requirements: *2162190580
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rake
60
- requirement: &2162202880 !ruby/object:Gem::Requirement
60
+ requirement: &2162190160 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *2162202880
68
+ version_requirements: *2162190160
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rspec
71
- requirement: &2162202460 !ruby/object:Gem::Requirement
71
+ requirement: &2162189740 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,7 +76,7 @@ dependencies:
76
76
  version: '0'
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *2162202460
79
+ version_requirements: *2162189740
80
80
  description: This gem provides a graphical frontend for the Taskwarrior task manager.
81
81
  It is based on Sinatra.
82
82
  email:
@@ -157,7 +157,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
157
157
  version: '0'
158
158
  segments:
159
159
  - 0
160
- hash: 1375552015921977647
160
+ hash: -705373290022093367
161
161
  requirements: []
162
162
  rubyforge_project: taskwarrior-web
163
163
  rubygems_version: 1.8.11