taskwarrior-web 1.0.8 → 1.0.9
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 +6 -0
- data/README.md +5 -1
- data/lib/taskwarrior-web/app.rb +14 -41
- data/lib/taskwarrior-web/helpers.rb +1 -1
- data/lib/taskwarrior-web/public/css/datepicker.css +230 -112
- data/lib/taskwarrior-web/public/js/application.js +2 -1
- data/lib/taskwarrior-web/public/js/bootstrap-datepicker.js +570 -135
- data/lib/taskwarrior-web/{command_builders → services/builder}/base.rb +3 -3
- data/lib/taskwarrior-web/{command_builders → services/builder}/v1.rb +1 -2
- data/lib/taskwarrior-web/{command_builders → services/builder}/v2.rb +0 -0
- data/lib/taskwarrior-web/{command_builder.rb → services/builder.rb} +3 -3
- data/lib/taskwarrior-web/{parser → services/parser}/csv.rb +0 -0
- data/lib/taskwarrior-web/{parser → services/parser}/json.rb +0 -0
- data/lib/taskwarrior-web/{parser.rb → services/parser.rb} +2 -2
- data/lib/taskwarrior-web/{runner.rb → services/runner.rb} +0 -0
- data/lib/taskwarrior-web/task.rb +11 -1
- data/lib/taskwarrior-web/views/projects.erb +31 -33
- data/lib/taskwarrior-web/views/task_form.erb +4 -4
- data/lib/taskwarrior-web.rb +3 -3
- data/spec/app/app_spec.rb +68 -1
- data/spec/app/helpers_spec.rb +6 -0
- data/spec/models/task_spec.rb +20 -0
- data/spec/{models/command_builders → services/builder}/base_spec.rb +19 -2
- data/spec/{models/command_builders → services/builder}/v1_spec.rb +7 -4
- data/spec/{models/command_builder_spec.rb → services/builder_spec.rb} +1 -1
- data/spec/services/parser_spec.rb +14 -0
- data/spec/{models → services}/runner_spec.rb +1 -1
- data/taskwarrior-web.gemspec +1 -1
- metadata +39 -39
- data/spec/models/command_builders/v2_spec.rb +0 -0
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
A lightweight, Sinatra-based web interface for the
|
4
4
|
wonderful [Taskwarrior](http://taskwarrior.org/) todo application.
|
5
5
|
|
6
|
-
**Now compatible with all versions of Taskwarrior, including 2.x**
|
6
|
+
**Now compatible with all versions of Taskwarrior, including 2.x**
|
7
7
|
**Also, now including a NEW theme based on Twitter Bootstrap. Mobile version
|
8
8
|
forthcoming!**
|
9
9
|
|
@@ -13,6 +13,10 @@ forthcoming!**
|
|
13
13
|
|
14
14
|
* `ruby` >= 1.9 (support for `ruby` < 1.9 is very unlikely, but pull requests
|
15
15
|
are gladly accepted).
|
16
|
+
* In your `.taskrc` file, `xterm.title` cannot be enabled. Either remove that
|
17
|
+
line from `.taskrc` or set it to `off`. If you have a very compelling reason
|
18
|
+
for needing this to be enabled, submit a bug report and I'll reconsider
|
19
|
+
adding support for it.
|
16
20
|
|
17
21
|
## Installation
|
18
22
|
|
data/lib/taskwarrior-web/app.rb
CHANGED
@@ -53,28 +53,20 @@ class TaskwarriorWeb::App < Sinatra::Base
|
|
53
53
|
|
54
54
|
get '/tasks/new/?' do
|
55
55
|
@title = 'New Task'
|
56
|
-
@date_format = TaskwarriorWeb::Config.dateformat || 'm/d/yy'
|
57
|
-
@date_format.gsub!('Y', 'yy')
|
56
|
+
@date_format = (TaskwarriorWeb::Config.dateformat || 'm/d/yy').gsub('Y', 'yy')
|
58
57
|
erb :task_form
|
59
58
|
end
|
60
59
|
|
61
60
|
post '/tasks/?' do
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
task.save
|
61
|
+
@task = TaskwarriorWeb::Task.new(params[:task])
|
62
|
+
|
63
|
+
if @task.is_valid?
|
64
|
+
@task.save!
|
66
65
|
redirect '/tasks'
|
67
|
-
else
|
68
|
-
@task = params[:task]
|
69
|
-
@title = 'New Task'
|
70
|
-
@date_format = TaskwarriorWeb::Config.dateformat || 'm/d/yy'
|
71
|
-
@date_format.gsub!('Y', 'yy')
|
72
|
-
@messages = []
|
73
|
-
results.each do |result|
|
74
|
-
@messages << { :severity => 'alert-error', :message => result }
|
75
|
-
end
|
76
|
-
erb :task_form
|
77
66
|
end
|
67
|
+
|
68
|
+
@messages = @task.errors.map { |error| { :severity => 'alert-error', :message => error } }
|
69
|
+
call! env.merge('REQUEST_METHOD' => 'GET', 'PATH_INFO' => '/tasks/new')
|
78
70
|
end
|
79
71
|
|
80
72
|
# Projects
|
@@ -85,14 +77,18 @@ class TaskwarriorWeb::App < Sinatra::Base
|
|
85
77
|
get '/projects/overview/?' do
|
86
78
|
@title = 'Projects'
|
87
79
|
@subnav = subnav('projects')
|
88
|
-
@tasks = TaskwarriorWeb::Task.query('status.not' =>
|
80
|
+
@tasks = TaskwarriorWeb::Task.query('status.not' => :deleted, 'project.not' => '')
|
81
|
+
.sort_by! { |x| [x.priority.nil?.to_s, x.priority.to_s, x.due.nil?.to_s, x.due.to_s] }
|
82
|
+
.group_by { |x| x.project.to_s }
|
83
|
+
.reject { |project, tasks| tasks.select { |task| task.status == 'pending' }.empty? }
|
89
84
|
erb :projects
|
90
85
|
end
|
91
86
|
|
92
87
|
get '/projects/:name/?' do
|
93
88
|
@subnav = subnav('projects')
|
94
89
|
subbed = params[:name].gsub('--', '.')
|
95
|
-
@tasks = TaskwarriorWeb::Task.query('status.not' => 'deleted', :project => subbed)
|
90
|
+
@tasks = TaskwarriorWeb::Task.query('status.not' => 'deleted', :project => subbed)
|
91
|
+
.sort_by! { |x| [x.priority.nil?.to_s, x.priority.to_s, x.due.nil?.to_s, x.due.to_s] }
|
96
92
|
@title = @tasks.select { |t| t.project.match(/^#{subbed}$/i) }.first.project
|
97
93
|
erb :project
|
98
94
|
end
|
@@ -102,18 +98,6 @@ class TaskwarriorWeb::App < Sinatra::Base
|
|
102
98
|
TaskwarriorWeb::Command.new(:projects).run.split("\n").to_json
|
103
99
|
end
|
104
100
|
|
105
|
-
get '/ajax/tags/?' do
|
106
|
-
tags = TaskwarriorWeb::Command.new(:tags).run.split("\n")
|
107
|
-
tags.keep_if { |tag| tag.include?(params[:query]) }
|
108
|
-
|
109
|
-
json = []
|
110
|
-
tags.each do |tag|
|
111
|
-
json << { :name => tag, :id => tag }
|
112
|
-
end
|
113
|
-
|
114
|
-
json.to_json
|
115
|
-
end
|
116
|
-
|
117
101
|
get '/ajax/count/?' do
|
118
102
|
TaskwarriorWeb::Task.count(:status => :pending).to_s
|
119
103
|
end
|
@@ -130,15 +114,4 @@ class TaskwarriorWeb::App < Sinatra::Base
|
|
130
114
|
@referrer = request.referrer
|
131
115
|
erb :'404'
|
132
116
|
end
|
133
|
-
|
134
|
-
def passes_validation(item, method)
|
135
|
-
results = []
|
136
|
-
case method
|
137
|
-
when :task
|
138
|
-
if item['description'].empty?
|
139
|
-
results << 'You must provide a description'
|
140
|
-
end
|
141
|
-
end
|
142
|
-
results
|
143
|
-
end
|
144
117
|
end
|
@@ -34,7 +34,7 @@ module TaskwarriorWeb::App::Helpers
|
|
34
34
|
|
35
35
|
def subnav(type)
|
36
36
|
case type
|
37
|
-
when 'tasks'
|
37
|
+
when 'tasks'
|
38
38
|
{ '/tasks/pending' => "Pending <span class=\"badge\">#{TaskwarriorWeb::Task.count(:status => :pending)}</span>",
|
39
39
|
'/tasks/waiting' => "Waiting",
|
40
40
|
'/tasks/completed' => "Completed",
|
@@ -1,156 +1,274 @@
|
|
1
1
|
/*!
|
2
|
-
* Datepicker for Bootstrap
|
3
|
-
*
|
4
|
-
* Copyright 2012 Stefan Petre
|
5
|
-
*
|
6
|
-
*
|
7
|
-
*
|
8
|
-
|
2
|
+
* Datepicker for Bootstrap
|
3
|
+
*
|
4
|
+
* Copyright 2012 Stefan Petre
|
5
|
+
* Improvements by Andrew Rowls
|
6
|
+
* Licensed under the Apache License v2.0
|
7
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
*
|
9
|
+
*/
|
9
10
|
.datepicker {
|
10
|
-
top: 0;
|
11
|
-
left: 0;
|
12
|
-
padding: 4px;
|
13
|
-
margin-top: 1px;
|
14
|
-
-webkit-border-radius: 4px;
|
15
|
-
-moz-border-radius: 4px;
|
16
|
-
border-radius: 4px;
|
17
|
-
/*.dow {
|
18
|
-
border-top: 1px solid #ddd !important;
|
19
|
-
}*/
|
11
|
+
top: 0;
|
12
|
+
left: 0;
|
13
|
+
padding: 4px;
|
14
|
+
margin-top: 1px;
|
15
|
+
-webkit-border-radius: 4px;
|
16
|
+
-moz-border-radius: 4px;
|
17
|
+
border-radius: 4px;
|
18
|
+
/*.dow {
|
19
|
+
border-top: 1px solid #ddd !important;
|
20
|
+
}*/
|
21
|
+
|
20
22
|
}
|
21
23
|
.datepicker:before {
|
22
|
-
content: '';
|
23
|
-
display: inline-block;
|
24
|
-
border-left: 7px solid transparent;
|
25
|
-
border-right: 7px solid transparent;
|
26
|
-
border-bottom: 7px solid #ccc;
|
27
|
-
border-bottom-color: rgba(0, 0, 0, 0.2);
|
28
|
-
position: absolute;
|
29
|
-
top: -7px;
|
30
|
-
left: 6px;
|
24
|
+
content: '';
|
25
|
+
display: inline-block;
|
26
|
+
border-left: 7px solid transparent;
|
27
|
+
border-right: 7px solid transparent;
|
28
|
+
border-bottom: 7px solid #ccc;
|
29
|
+
border-bottom-color: rgba(0, 0, 0, 0.2);
|
30
|
+
position: absolute;
|
31
|
+
top: -7px;
|
32
|
+
left: 6px;
|
31
33
|
}
|
32
34
|
.datepicker:after {
|
33
|
-
content: '';
|
34
|
-
display: inline-block;
|
35
|
-
border-left: 6px solid transparent;
|
36
|
-
border-right: 6px solid transparent;
|
37
|
-
border-bottom: 6px solid #ffffff;
|
38
|
-
position: absolute;
|
39
|
-
top: -6px;
|
40
|
-
left: 7px;
|
35
|
+
content: '';
|
36
|
+
display: inline-block;
|
37
|
+
border-left: 6px solid transparent;
|
38
|
+
border-right: 6px solid transparent;
|
39
|
+
border-bottom: 6px solid #ffffff;
|
40
|
+
position: absolute;
|
41
|
+
top: -6px;
|
42
|
+
left: 7px;
|
41
43
|
}
|
42
44
|
.datepicker > div {
|
43
|
-
display: none;
|
45
|
+
display: none;
|
46
|
+
}
|
47
|
+
.datepicker.days div.datepicker-days {
|
48
|
+
display: block;
|
49
|
+
}
|
50
|
+
.datepicker.months div.datepicker-months {
|
51
|
+
display: block;
|
52
|
+
}
|
53
|
+
.datepicker.years div.datepicker-years {
|
54
|
+
display: block;
|
44
55
|
}
|
45
56
|
.datepicker table {
|
46
|
-
|
47
|
-
margin: 0;
|
57
|
+
margin: 0;
|
48
58
|
}
|
49
|
-
.datepicker td,
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
-
|
55
|
-
border-radius: 4px;
|
59
|
+
.datepicker td,
|
60
|
+
.datepicker th {
|
61
|
+
text-align: center;
|
62
|
+
width: 20px;
|
63
|
+
height: 20px;
|
64
|
+
-webkit-border-radius: 4px;
|
65
|
+
-moz-border-radius: 4px;
|
66
|
+
border-radius: 4px;
|
56
67
|
}
|
57
68
|
.datepicker td.day:hover {
|
58
|
-
background: #eeeeee;
|
59
|
-
cursor: pointer;
|
60
|
-
}
|
61
|
-
.datepicker td.old,
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
background
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
69
|
+
background: #eeeeee;
|
70
|
+
cursor: pointer;
|
71
|
+
}
|
72
|
+
.datepicker td.old,
|
73
|
+
.datepicker td.new {
|
74
|
+
color: #999999;
|
75
|
+
}
|
76
|
+
.datepicker td.disabled,
|
77
|
+
.datepicker td.disabled:hover {
|
78
|
+
background: none;
|
79
|
+
color: #999999;
|
80
|
+
cursor: default;
|
81
|
+
}
|
82
|
+
.datepicker td.today,
|
83
|
+
.datepicker td.today:hover,
|
84
|
+
.datepicker td.today.disabled,
|
85
|
+
.datepicker td.today.disabled:hover {
|
86
|
+
background-color: #fde19a;
|
87
|
+
background-image: -moz-linear-gradient(top, #fdd49a, #fdf59a);
|
88
|
+
background-image: -ms-linear-gradient(top, #fdd49a, #fdf59a);
|
89
|
+
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fdd49a), to(#fdf59a));
|
90
|
+
background-image: -webkit-linear-gradient(top, #fdd49a, #fdf59a);
|
91
|
+
background-image: -o-linear-gradient(top, #fdd49a, #fdf59a);
|
92
|
+
background-image: linear-gradient(top, #fdd49a, #fdf59a);
|
93
|
+
background-repeat: repeat-x;
|
94
|
+
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fdd49a', endColorstr='#fdf59a', GradientType=0);
|
95
|
+
border-color: #fdf59a #fdf59a #fbed50;
|
96
|
+
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
|
97
|
+
filter: progid:dximagetransform.microsoft.gradient(enabled=false);
|
98
|
+
}
|
99
|
+
.datepicker td.today:hover,
|
100
|
+
.datepicker td.today:hover:hover,
|
101
|
+
.datepicker td.today.disabled:hover,
|
102
|
+
.datepicker td.today.disabled:hover:hover,
|
103
|
+
.datepicker td.today:active,
|
104
|
+
.datepicker td.today:hover:active,
|
105
|
+
.datepicker td.today.disabled:active,
|
106
|
+
.datepicker td.today.disabled:hover:active,
|
107
|
+
.datepicker td.today.active,
|
108
|
+
.datepicker td.today:hover.active,
|
109
|
+
.datepicker td.today.disabled.active,
|
110
|
+
.datepicker td.today.disabled:hover.active,
|
111
|
+
.datepicker td.today.disabled,
|
112
|
+
.datepicker td.today:hover.disabled,
|
113
|
+
.datepicker td.today.disabled.disabled,
|
114
|
+
.datepicker td.today.disabled:hover.disabled,
|
115
|
+
.datepicker td.today[disabled],
|
116
|
+
.datepicker td.today:hover[disabled],
|
117
|
+
.datepicker td.today.disabled[disabled],
|
118
|
+
.datepicker td.today.disabled:hover[disabled] {
|
119
|
+
background-color: #fdf59a;
|
120
|
+
}
|
121
|
+
.datepicker td.today:active,
|
122
|
+
.datepicker td.today:hover:active,
|
123
|
+
.datepicker td.today.disabled:active,
|
124
|
+
.datepicker td.today.disabled:hover:active,
|
125
|
+
.datepicker td.today.active,
|
126
|
+
.datepicker td.today:hover.active,
|
127
|
+
.datepicker td.today.disabled.active,
|
128
|
+
.datepicker td.today.disabled:hover.active {
|
129
|
+
background-color: #fbf069 \9;
|
130
|
+
}
|
131
|
+
.datepicker td.active,
|
132
|
+
.datepicker td.active:hover,
|
133
|
+
.datepicker td.active.disabled,
|
134
|
+
.datepicker td.active.disabled:hover {
|
135
|
+
background-color: #006dcc;
|
136
|
+
background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
|
137
|
+
background-image: -ms-linear-gradient(top, #0088cc, #0044cc);
|
138
|
+
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
|
139
|
+
background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
|
140
|
+
background-image: -o-linear-gradient(top, #0088cc, #0044cc);
|
141
|
+
background-image: linear-gradient(top, #0088cc, #0044cc);
|
142
|
+
background-repeat: repeat-x;
|
143
|
+
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0);
|
144
|
+
border-color: #0044cc #0044cc #002a80;
|
145
|
+
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
|
146
|
+
filter: progid:dximagetransform.microsoft.gradient(enabled=false);
|
147
|
+
color: #fff;
|
148
|
+
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
|
79
149
|
}
|
80
150
|
.datepicker td.active:hover,
|
81
151
|
.datepicker td.active:hover:hover,
|
152
|
+
.datepicker td.active.disabled:hover,
|
153
|
+
.datepicker td.active.disabled:hover:hover,
|
82
154
|
.datepicker td.active:active,
|
83
155
|
.datepicker td.active:hover:active,
|
156
|
+
.datepicker td.active.disabled:active,
|
157
|
+
.datepicker td.active.disabled:hover:active,
|
84
158
|
.datepicker td.active.active,
|
85
159
|
.datepicker td.active:hover.active,
|
160
|
+
.datepicker td.active.disabled.active,
|
161
|
+
.datepicker td.active.disabled:hover.active,
|
86
162
|
.datepicker td.active.disabled,
|
87
163
|
.datepicker td.active:hover.disabled,
|
164
|
+
.datepicker td.active.disabled.disabled,
|
165
|
+
.datepicker td.active.disabled:hover.disabled,
|
88
166
|
.datepicker td.active[disabled],
|
89
|
-
.datepicker td.active:hover[disabled]
|
90
|
-
|
167
|
+
.datepicker td.active:hover[disabled],
|
168
|
+
.datepicker td.active.disabled[disabled],
|
169
|
+
.datepicker td.active.disabled:hover[disabled] {
|
170
|
+
background-color: #0044cc;
|
91
171
|
}
|
92
172
|
.datepicker td.active:active,
|
93
173
|
.datepicker td.active:hover:active,
|
174
|
+
.datepicker td.active.disabled:active,
|
175
|
+
.datepicker td.active.disabled:hover:active,
|
94
176
|
.datepicker td.active.active,
|
95
|
-
.datepicker td.active:hover.active
|
96
|
-
|
177
|
+
.datepicker td.active:hover.active,
|
178
|
+
.datepicker td.active.disabled.active,
|
179
|
+
.datepicker td.active.disabled:hover.active {
|
180
|
+
background-color: #003399 \9;
|
97
181
|
}
|
98
182
|
.datepicker td span {
|
99
|
-
display: block;
|
100
|
-
width:
|
101
|
-
height: 54px;
|
102
|
-
line-height: 54px;
|
103
|
-
float: left;
|
104
|
-
margin:
|
105
|
-
cursor: pointer;
|
106
|
-
-webkit-border-radius: 4px;
|
107
|
-
-moz-border-radius: 4px;
|
108
|
-
border-radius: 4px;
|
183
|
+
display: block;
|
184
|
+
width: 23%;
|
185
|
+
height: 54px;
|
186
|
+
line-height: 54px;
|
187
|
+
float: left;
|
188
|
+
margin: 1%;
|
189
|
+
cursor: pointer;
|
190
|
+
-webkit-border-radius: 4px;
|
191
|
+
-moz-border-radius: 4px;
|
192
|
+
border-radius: 4px;
|
109
193
|
}
|
110
194
|
.datepicker td span:hover {
|
111
|
-
background: #eeeeee;
|
112
|
-
}
|
113
|
-
.datepicker td span.
|
114
|
-
|
115
|
-
background
|
116
|
-
|
117
|
-
|
118
|
-
background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
|
119
|
-
background-image: -o-linear-gradient(top, #0088cc, #0044cc);
|
120
|
-
background-image: linear-gradient(top, #0088cc, #0044cc);
|
121
|
-
background-repeat: repeat-x;
|
122
|
-
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0);
|
123
|
-
border-color: #0044cc #0044cc #002a80;
|
124
|
-
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
|
125
|
-
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
126
|
-
color: #fff;
|
127
|
-
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
|
195
|
+
background: #eeeeee;
|
196
|
+
}
|
197
|
+
.datepicker td span.disabled,
|
198
|
+
.datepicker td span.disabled:hover {
|
199
|
+
background: none;
|
200
|
+
color: #999999;
|
201
|
+
cursor: default;
|
128
202
|
}
|
203
|
+
.datepicker td span.active,
|
129
204
|
.datepicker td span.active:hover,
|
205
|
+
.datepicker td span.active.disabled,
|
206
|
+
.datepicker td span.active.disabled:hover {
|
207
|
+
background-color: #006dcc;
|
208
|
+
background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
|
209
|
+
background-image: -ms-linear-gradient(top, #0088cc, #0044cc);
|
210
|
+
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
|
211
|
+
background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
|
212
|
+
background-image: -o-linear-gradient(top, #0088cc, #0044cc);
|
213
|
+
background-image: linear-gradient(top, #0088cc, #0044cc);
|
214
|
+
background-repeat: repeat-x;
|
215
|
+
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0);
|
216
|
+
border-color: #0044cc #0044cc #002a80;
|
217
|
+
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
|
218
|
+
filter: progid:dximagetransform.microsoft.gradient(enabled=false);
|
219
|
+
color: #fff;
|
220
|
+
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
|
221
|
+
}
|
222
|
+
.datepicker td span.active:hover,
|
223
|
+
.datepicker td span.active:hover:hover,
|
224
|
+
.datepicker td span.active.disabled:hover,
|
225
|
+
.datepicker td span.active.disabled:hover:hover,
|
130
226
|
.datepicker td span.active:active,
|
227
|
+
.datepicker td span.active:hover:active,
|
228
|
+
.datepicker td span.active.disabled:active,
|
229
|
+
.datepicker td span.active.disabled:hover:active,
|
131
230
|
.datepicker td span.active.active,
|
231
|
+
.datepicker td span.active:hover.active,
|
232
|
+
.datepicker td span.active.disabled.active,
|
233
|
+
.datepicker td span.active.disabled:hover.active,
|
132
234
|
.datepicker td span.active.disabled,
|
133
|
-
.datepicker td span.active
|
134
|
-
|
235
|
+
.datepicker td span.active:hover.disabled,
|
236
|
+
.datepicker td span.active.disabled.disabled,
|
237
|
+
.datepicker td span.active.disabled:hover.disabled,
|
238
|
+
.datepicker td span.active[disabled],
|
239
|
+
.datepicker td span.active:hover[disabled],
|
240
|
+
.datepicker td span.active.disabled[disabled],
|
241
|
+
.datepicker td span.active.disabled:hover[disabled] {
|
242
|
+
background-color: #0044cc;
|
135
243
|
}
|
136
|
-
.datepicker td span.active:active,
|
137
|
-
|
244
|
+
.datepicker td span.active:active,
|
245
|
+
.datepicker td span.active:hover:active,
|
246
|
+
.datepicker td span.active.disabled:active,
|
247
|
+
.datepicker td span.active.disabled:hover:active,
|
248
|
+
.datepicker td span.active.active,
|
249
|
+
.datepicker td span.active:hover.active,
|
250
|
+
.datepicker td span.active.disabled.active,
|
251
|
+
.datepicker td span.active.disabled:hover.active {
|
252
|
+
background-color: #003399 \9;
|
138
253
|
}
|
139
254
|
.datepicker td span.old {
|
140
|
-
color: #999999;
|
255
|
+
color: #999999;
|
141
256
|
}
|
142
257
|
.datepicker th.switch {
|
143
|
-
width: 145px;
|
258
|
+
width: 145px;
|
259
|
+
}
|
260
|
+
.datepicker thead tr:first-child th,
|
261
|
+
.datepicker tfoot tr:first-child th {
|
262
|
+
cursor: pointer;
|
144
263
|
}
|
145
|
-
.datepicker thead tr:first-child th
|
146
|
-
|
264
|
+
.datepicker thead tr:first-child th:hover,
|
265
|
+
.datepicker tfoot tr:first-child th:hover {
|
266
|
+
background: #eeeeee;
|
147
267
|
}
|
148
|
-
.
|
149
|
-
|
268
|
+
.input-append.date .add-on i,
|
269
|
+
.input-prepend.date .add-on i {
|
270
|
+
display: block;
|
271
|
+
cursor: pointer;
|
272
|
+
width: 16px;
|
273
|
+
height: 16px;
|
150
274
|
}
|
151
|
-
.input-append.date .add-on i, .input-prepend.date .add-on i {
|
152
|
-
display: block;
|
153
|
-
cursor: pointer;
|
154
|
-
width: 16px;
|
155
|
-
height: 16px;
|
156
|
-
}
|