taskwarrior-web 0.0.12 → 0.0.13

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