knjtasks 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/.document +5 -0
- data/.rspec +1 -0
- data/Gemfile +18 -0
- data/Gemfile.lock +66 -0
- data/LICENSE.txt +20 -0
- data/README.rdoc +19 -0
- data/Rakefile +49 -0
- data/VERSION +1 -0
- data/files/database_schema.rb +174 -0
- data/lib/knjtasks.rb +172 -0
- data/locales/da_DK/LC_MESSAGES/default.mo +0 -0
- data/locales/da_DK/LC_MESSAGES/default.po +1153 -0
- data/locales/da_DK/title.txt +1 -0
- data/locales/en_GB/title.txt +1 -0
- data/models/class_comment.rb +44 -0
- data/models/class_customer.rb +13 -0
- data/models/class_email_check.rb +7 -0
- data/models/class_project.rb +22 -0
- data/models/class_task.rb +163 -0
- data/models/class_task_assigned_user.rb +62 -0
- data/models/class_task_check.rb +26 -0
- data/models/class_timelog.rb +82 -0
- data/models/class_user.rb +125 -0
- data/models/class_user_project_link.rb +66 -0
- data/models/class_user_rank.rb +3 -0
- data/models/class_user_rank_link.rb +17 -0
- data/models/class_user_task_list_link.rb +17 -0
- data/pages/admin.rhtml +7 -0
- data/pages/comment_edit.rhtml +121 -0
- data/pages/comment_update_id_per_obj.rhtml +41 -0
- data/pages/customer_edit.rhtml +69 -0
- data/pages/customer_search.rhtml +80 -0
- data/pages/customer_show.rhtml +50 -0
- data/pages/frontpage.rhtml +198 -0
- data/pages/project_edit.rhtml +129 -0
- data/pages/project_search.rhtml +82 -0
- data/pages/project_show.rhtml +203 -0
- data/pages/task_check_edit.rhtml +98 -0
- data/pages/task_edit.rhtml +168 -0
- data/pages/task_search.rhtml +131 -0
- data/pages/task_show.rhtml +454 -0
- data/pages/timelog_edit.rhtml +134 -0
- data/pages/timelog_search.rhtml +318 -0
- data/pages/user_edit.rhtml +223 -0
- data/pages/user_login.rhtml +83 -0
- data/pages/user_profile.rhtml +89 -0
- data/pages/user_rank_search.rhtml +95 -0
- data/pages/user_search.rhtml +136 -0
- data/pages/user_show.rhtml +87 -0
- data/pages/workstatus.rhtml +320 -0
- data/scripts/fckeditor_validate_login.rb +23 -0
- data/spec/knjtasks_spec.rb +115 -0
- data/spec/spec_helper.rb +12 -0
- data/threads/thread_mail_task_comments.rb +114 -0
- data/www/api/task.rhtml +9 -0
- data/www/api/user.rhtml +20 -0
- data/www/clean.rhtml +14 -0
- data/www/css/default.css +186 -0
- data/www/gfx/body_bg.jpg +0 -0
- data/www/gfx/button_bg.png +0 -0
- data/www/gfx/main_box_design.png +0 -0
- data/www/gfx/main_box_left.png +0 -0
- data/www/gfx/main_box_right.png +0 -0
- data/www/gfx/main_box_top.png +0 -0
- data/www/gfx/main_box_top_left.png +0 -0
- data/www/gfx/main_box_top_right.png +0 -0
- data/www/index.rhtml +154 -0
- data/www/js/default.js +112 -0
- metadata +208 -0
data/www/gfx/body_bg.jpg
ADDED
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/www/index.rhtml
ADDED
@@ -0,0 +1,154 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
2
|
+
<%
|
3
|
+
_site.load_request
|
4
|
+
|
5
|
+
show = _get["show"] if !_get["show"].to_s.empty?
|
6
|
+
show = "frontpage" if !show
|
7
|
+
showp = "../pages/#{show}.rhtml"
|
8
|
+
|
9
|
+
head_title = ""
|
10
|
+
head_titles = {
|
11
|
+
"frontpage" => _("Frontpage"),
|
12
|
+
"customer_search" => _("Customers"),
|
13
|
+
"project_search" => _("Projects"),
|
14
|
+
"task_search" => _("Tasks"),
|
15
|
+
"user_search" => _("Users"),
|
16
|
+
"timelog_search" => _("Timelogs"),
|
17
|
+
"workstatus" => _("Work-status"),
|
18
|
+
"admin" => _("Administration")
|
19
|
+
}
|
20
|
+
|
21
|
+
if head_titles.has_key?(_get["show"])
|
22
|
+
head_title = head_titles[_get["show"]]
|
23
|
+
elsif _get["show"] == "task_show" or (_get["show"] == "task_edit" and _get["task_id"])
|
24
|
+
begin
|
25
|
+
task = _ob.get(:Task, _get["task_id"])
|
26
|
+
head_title = task.name
|
27
|
+
rescue Errno::ENOENT
|
28
|
+
_hb.alert(_("That task could not be found.")).back
|
29
|
+
end
|
30
|
+
elsif _get["show"] == "project_show" or (_get["show"] == "project_edit" and _get["project_id"])
|
31
|
+
begin
|
32
|
+
project = _ob.get(:Project, _get["project_id"])
|
33
|
+
head_title = project.name
|
34
|
+
rescue Errno::ENOENT
|
35
|
+
_hb.alert(_("That project could not be found.")).back
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
if head_title.length == 0
|
40
|
+
head_title = "knjTasks"
|
41
|
+
else
|
42
|
+
head_title = "#{head_title} - knjTasks"
|
43
|
+
end
|
44
|
+
|
45
|
+
_hb.redirect("?show=user_login&backurl=#{Php4r.urlencode(_meta["REQUEST_URI"])}") if !_site.user and _get["show"] != "user_login" and _get["show"] != "test_browser" and _get["show"] != "test"
|
46
|
+
%>
|
47
|
+
<html>
|
48
|
+
<head>
|
49
|
+
<title><%=head_title.html%></title>
|
50
|
+
|
51
|
+
<link rel="stylesheet" type="text/css" href="css/default.css" />
|
52
|
+
|
53
|
+
<script type="text/javascript" src="<%=_site.args[:knjjs_url]%>/jquery.js"></script>
|
54
|
+
<script type="text/javascript" src="<%=_site.args[:knjjs_url]%>/jquery.md5.js"></script>
|
55
|
+
<script type="text/javascript" src="<%=_site.args[:knjjs_url]%>/modal.js"></script>
|
56
|
+
<script type="text/javascript" src="<%=_site.args[:knjjs_url]%>/events.js"></script>
|
57
|
+
<script type="text/javascript" src="<%=_site.args[:knjjs_url]%>/forms.js"></script>
|
58
|
+
<script type="text/javascript" src="<%=_site.args[:knjjs_url]%>/select.js"></script>
|
59
|
+
|
60
|
+
<script type="text/javascript" src="js/default.js"></script>
|
61
|
+
</head>
|
62
|
+
<body>
|
63
|
+
<script type="text/javascript">
|
64
|
+
var js_settings = {
|
65
|
+
"knjjs_url": "<%=_site.args[:knjjs_url]%>"
|
66
|
+
}
|
67
|
+
|
68
|
+
var locale_strings = {
|
69
|
+
"close": "<%=_('Close')%>",
|
70
|
+
"comment_edit_title": "<%=_('Edit comment')%>",
|
71
|
+
"timelog_edit_title": "<%=_('Edit timelog')%>",
|
72
|
+
"task_check_edit_title": "<%=_('Edit task-check')%>"
|
73
|
+
}
|
74
|
+
</script>
|
75
|
+
|
76
|
+
<center>
|
77
|
+
<table class="main_table" cellspacing="0" cellpadding="0">
|
78
|
+
<tr>
|
79
|
+
<td colspan="3" class="main_logo">
|
80
|
+
knjTasks
|
81
|
+
</td>
|
82
|
+
</tr>
|
83
|
+
<tr>
|
84
|
+
<td class="main_corner_top_left"></td>
|
85
|
+
<td class="main_side_top"></td>
|
86
|
+
<td class="main_corner_top_right"></td>
|
87
|
+
</tr>
|
88
|
+
<tr>
|
89
|
+
<td class="main_side_left"></td>
|
90
|
+
<td class="main_body">
|
91
|
+
<div class="main_menu_outer">
|
92
|
+
<div class="main_menu_inner">
|
93
|
+
<%
|
94
|
+
if _site.user
|
95
|
+
menu = [
|
96
|
+
{:name => _("Frontpage"), :link => "?show=frontpage"}
|
97
|
+
]
|
98
|
+
|
99
|
+
if _site.has_rank?("admin") and (!_site.args.has_key?(:customers) or _site.args[:customers])
|
100
|
+
menu << {:name => _("Customers"), :link => "?show=customer_search"}
|
101
|
+
menu << {:name => _("Projects"), :link => "?show=project_search"}
|
102
|
+
end
|
103
|
+
|
104
|
+
menu << {:name => _("Tasks"), :link => "?show=task_search"}
|
105
|
+
menu << {:name => _("Users"), :link => "?show=user_search"}
|
106
|
+
|
107
|
+
if _site.has_rank?("admin")
|
108
|
+
menu << {:name => _("Timelogs"), :link => "?show=timelog_search"}
|
109
|
+
menu << {:name => _("Work-status"), :link => "?show=workstatus"}
|
110
|
+
menu << {:name => _("Administration"), :link => "?show=admin"}
|
111
|
+
end
|
112
|
+
|
113
|
+
menu << {:name => _("Your profile"), :link => "?show=user_profile"}
|
114
|
+
menu << {:name => _("Log out"), :link => "?show=user_login&choice=dologout"}
|
115
|
+
else
|
116
|
+
menu = [
|
117
|
+
{:name => _("Log in"), :link => "?show=user_login"}
|
118
|
+
]
|
119
|
+
end
|
120
|
+
|
121
|
+
menu.each do |mi|
|
122
|
+
%>
|
123
|
+
<a href="<%=mi[:link]%>"><%=mi[:name]%></a>
|
124
|
+
<%
|
125
|
+
end
|
126
|
+
%>
|
127
|
+
</div>
|
128
|
+
</div>
|
129
|
+
<div class="main_content">
|
130
|
+
<%
|
131
|
+
_hb.import(showp)
|
132
|
+
%>
|
133
|
+
</div>
|
134
|
+
</td>
|
135
|
+
<td class="main_side_right"></td>
|
136
|
+
</tr>
|
137
|
+
<tr>
|
138
|
+
<td class="main_side_left"></td>
|
139
|
+
<td class="main_bottom">
|
140
|
+
<div style="padding-bottom: 15px;">
|
141
|
+
Language:
|
142
|
+
<select style="width: 100px;" onchange="location.href='<%=_meta["REQUEST_URI"]%>&l=' + this.value;">
|
143
|
+
<%=Knj::Web.opts(_hb.gettext.lang_opts, _session[:locale])%>
|
144
|
+
</select>
|
145
|
+
</div>
|
146
|
+
|
147
|
+
<%=sprintf(_("Made by %s"), "<a href=\"mailto:k@spernj.org\">Kasper Johansen</a>")%>
|
148
|
+
</td>
|
149
|
+
<td class="main_side_right"></td>
|
150
|
+
</tr>
|
151
|
+
</table>
|
152
|
+
</center>
|
153
|
+
</body>
|
154
|
+
</html>
|
data/www/js/default.js
ADDED
@@ -0,0 +1,112 @@
|
|
1
|
+
var events = new Events();
|
2
|
+
|
3
|
+
$(document).ready(function(){
|
4
|
+
modal_setup({
|
5
|
+
url: js_settings["knjjs_url"],
|
6
|
+
css: {
|
7
|
+
"border": "3px solid #4e4e4e",
|
8
|
+
"background-color": "#f6f6f6",
|
9
|
+
"padding": "10px",
|
10
|
+
"padding-top": "0px",
|
11
|
+
"padding-bottom": "14px",
|
12
|
+
"width": "700px",
|
13
|
+
"height": "700px",
|
14
|
+
"overflow": "auto"
|
15
|
+
},
|
16
|
+
css_header: {
|
17
|
+
"font-size": "16px",
|
18
|
+
"font-weight": "bold",
|
19
|
+
"padding-bottom": "7px",
|
20
|
+
"padding-top": "5px",
|
21
|
+
"color": "#000000"
|
22
|
+
}
|
23
|
+
});
|
24
|
+
});
|
25
|
+
|
26
|
+
function comment_delete(comment_id){
|
27
|
+
$.ajax({type: "GET", url: "clean.rhtml?show=comment_edit&choice=dodelete&comment_id=" + comment_id, cache: false, async: true, complete: function(data){
|
28
|
+
if (data.responseText.length > 0){
|
29
|
+
alert(data.responseText);
|
30
|
+
}
|
31
|
+
|
32
|
+
events.call("do_comments_update");
|
33
|
+
}});
|
34
|
+
}
|
35
|
+
|
36
|
+
function comment_edit(comment_id){
|
37
|
+
modal({title: locale_strings["comment_edit_title"], url: "clean.rhtml?show=comment_edit&comment_id=" + comment_id});
|
38
|
+
}
|
39
|
+
|
40
|
+
function project_remove_assigned_user(link_id){
|
41
|
+
$.ajax({type: "GET", url: "clean.rhtml?show=project_show&choice=doremoveassigneduser&link_id=" + link_id, cache: false, async: true, complete: function(data){
|
42
|
+
if (data.responseText.length > 0){
|
43
|
+
alert(data.responseText);
|
44
|
+
}
|
45
|
+
|
46
|
+
events.call("do_project_assigned_users_update");
|
47
|
+
}});
|
48
|
+
}
|
49
|
+
|
50
|
+
function project_assign_user(project_id, user_id){
|
51
|
+
$.ajax({type: "GET", url: "clean.rhtml?show=project_show&choice=doassignuser&project_id=" + project_id + "&user_id=" + user_id, cache: false, async: true, complete: function(data){
|
52
|
+
if (data.responseText.length > 0){
|
53
|
+
alert(data.responseText);
|
54
|
+
}
|
55
|
+
|
56
|
+
events.call("do_project_assigned_users_update");
|
57
|
+
}});
|
58
|
+
}
|
59
|
+
|
60
|
+
function timelog_delete(tlog_id){
|
61
|
+
$.ajax({type: "GET", url: "clean.rhtml?show=timelog_edit&choice=dodelete&timelog_id=" + tlog_id, cache: false, async: true, complete: function(data){
|
62
|
+
if (data.responseText.length > 0){
|
63
|
+
alert(data.responseText);
|
64
|
+
}
|
65
|
+
|
66
|
+
events.call("do_timelogs_update");
|
67
|
+
}});
|
68
|
+
}
|
69
|
+
|
70
|
+
function timelog_edit(tlog_id){
|
71
|
+
modal({title: locale_strings["timelog_edit_title"], height: 600, url: "clean.rhtml?show=timelog_edit&timelog_id=" + tlog_id});
|
72
|
+
}
|
73
|
+
|
74
|
+
function timelog_add(task_id){
|
75
|
+
modal({title: locale_strings["timelog_edit_title"], height: 600, url: "clean.rhtml?show=timelog_edit&task_id=" + task_id});
|
76
|
+
}
|
77
|
+
|
78
|
+
function task_remove_assigned(link_id){
|
79
|
+
$.ajax({type: "GET", url: "clean.rhtml?show=task_show&choice=removeassigned&link_id=" + link_id, cache: false, async: true, complete: function(data){
|
80
|
+
if (data.responseText.length > 0){
|
81
|
+
alert(data.responseText);
|
82
|
+
}
|
83
|
+
|
84
|
+
events.call("do_task_assigned_users_update");
|
85
|
+
}});
|
86
|
+
}
|
87
|
+
|
88
|
+
function task_check_edit(check_id){
|
89
|
+
modal({title: locale_strings["task_check_edit_title"], url: "clean.rhtml?show=task_check_edit&check_id=" + check_id});
|
90
|
+
}
|
91
|
+
|
92
|
+
function task_check_delete(check_id){
|
93
|
+
$.ajax({type: "GET", url: "clean.rhtml?show=task_check_edit&choice=dodelete&check_id=" + check_id, cache: false, async: true, complete: function(data){
|
94
|
+
if (data.responseText.length > 0){
|
95
|
+
alert(data.responseText);
|
96
|
+
}
|
97
|
+
|
98
|
+
events.call("do_task_check_update");
|
99
|
+
}});
|
100
|
+
}
|
101
|
+
|
102
|
+
function task_check_set(check_id, val){
|
103
|
+
if (val == "on"){
|
104
|
+
val = 1;
|
105
|
+
}
|
106
|
+
|
107
|
+
$.ajax({type: "GET", url: "clean.rhtml?show=task_check_edit&choice=setcheck&check_id=" + check_id + "&checkval=" + val, cache: false, async: true, complete: function(data){
|
108
|
+
if (data.responseText.length > 0){
|
109
|
+
alert(data.responseText);
|
110
|
+
}
|
111
|
+
}});
|
112
|
+
}
|
metadata
ADDED
@@ -0,0 +1,208 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: knjtasks
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.3
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Kasper Johansen
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-10-11 00:00:00.000000000 +02:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: knjrbfw
|
17
|
+
requirement: &14707140 !ruby/object:Gem::Requirement
|
18
|
+
none: false
|
19
|
+
requirements:
|
20
|
+
- - ! '>='
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '0'
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: *14707140
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: datet
|
28
|
+
requirement: &14705900 !ruby/object:Gem::Requirement
|
29
|
+
none: false
|
30
|
+
requirements:
|
31
|
+
- - ! '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: *14705900
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: hayabusa
|
39
|
+
requirement: &14704820 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ! '>='
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: '0'
|
45
|
+
type: :runtime
|
46
|
+
prerelease: false
|
47
|
+
version_requirements: *14704820
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: http2
|
50
|
+
requirement: &14703720 !ruby/object:Gem::Requirement
|
51
|
+
none: false
|
52
|
+
requirements:
|
53
|
+
- - ! '>='
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
56
|
+
type: :development
|
57
|
+
prerelease: false
|
58
|
+
version_requirements: *14703720
|
59
|
+
- !ruby/object:Gem::Dependency
|
60
|
+
name: sqlite3
|
61
|
+
requirement: &14699200 !ruby/object:Gem::Requirement
|
62
|
+
none: false
|
63
|
+
requirements:
|
64
|
+
- - ! '>='
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: '0'
|
67
|
+
type: :development
|
68
|
+
prerelease: false
|
69
|
+
version_requirements: *14699200
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: rspec
|
72
|
+
requirement: &14698420 !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 2.3.0
|
78
|
+
type: :development
|
79
|
+
prerelease: false
|
80
|
+
version_requirements: *14698420
|
81
|
+
- !ruby/object:Gem::Dependency
|
82
|
+
name: bundler
|
83
|
+
requirement: &14697620 !ruby/object:Gem::Requirement
|
84
|
+
none: false
|
85
|
+
requirements:
|
86
|
+
- - ! '>='
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: 1.0.0
|
89
|
+
type: :development
|
90
|
+
prerelease: false
|
91
|
+
version_requirements: *14697620
|
92
|
+
- !ruby/object:Gem::Dependency
|
93
|
+
name: jeweler
|
94
|
+
requirement: &14696740 !ruby/object:Gem::Requirement
|
95
|
+
none: false
|
96
|
+
requirements:
|
97
|
+
- - ~>
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: 1.6.3
|
100
|
+
type: :development
|
101
|
+
prerelease: false
|
102
|
+
version_requirements: *14696740
|
103
|
+
description: A longer description will come...
|
104
|
+
email: k@spernj.org
|
105
|
+
executables: []
|
106
|
+
extensions: []
|
107
|
+
extra_rdoc_files:
|
108
|
+
- LICENSE.txt
|
109
|
+
- README.rdoc
|
110
|
+
files:
|
111
|
+
- .document
|
112
|
+
- .rspec
|
113
|
+
- Gemfile
|
114
|
+
- Gemfile.lock
|
115
|
+
- LICENSE.txt
|
116
|
+
- README.rdoc
|
117
|
+
- Rakefile
|
118
|
+
- VERSION
|
119
|
+
- files/database_schema.rb
|
120
|
+
- lib/knjtasks.rb
|
121
|
+
- locales/da_DK/LC_MESSAGES/default.mo
|
122
|
+
- locales/da_DK/LC_MESSAGES/default.po
|
123
|
+
- locales/da_DK/title.txt
|
124
|
+
- locales/en_GB/title.txt
|
125
|
+
- models/class_comment.rb
|
126
|
+
- models/class_customer.rb
|
127
|
+
- models/class_email_check.rb
|
128
|
+
- models/class_project.rb
|
129
|
+
- models/class_task.rb
|
130
|
+
- models/class_task_assigned_user.rb
|
131
|
+
- models/class_task_check.rb
|
132
|
+
- models/class_timelog.rb
|
133
|
+
- models/class_user.rb
|
134
|
+
- models/class_user_project_link.rb
|
135
|
+
- models/class_user_rank.rb
|
136
|
+
- models/class_user_rank_link.rb
|
137
|
+
- models/class_user_task_list_link.rb
|
138
|
+
- pages/admin.rhtml
|
139
|
+
- pages/comment_edit.rhtml
|
140
|
+
- pages/comment_update_id_per_obj.rhtml
|
141
|
+
- pages/customer_edit.rhtml
|
142
|
+
- pages/customer_search.rhtml
|
143
|
+
- pages/customer_show.rhtml
|
144
|
+
- pages/frontpage.rhtml
|
145
|
+
- pages/project_edit.rhtml
|
146
|
+
- pages/project_search.rhtml
|
147
|
+
- pages/project_show.rhtml
|
148
|
+
- pages/task_check_edit.rhtml
|
149
|
+
- pages/task_edit.rhtml
|
150
|
+
- pages/task_search.rhtml
|
151
|
+
- pages/task_show.rhtml
|
152
|
+
- pages/timelog_edit.rhtml
|
153
|
+
- pages/timelog_search.rhtml
|
154
|
+
- pages/user_edit.rhtml
|
155
|
+
- pages/user_login.rhtml
|
156
|
+
- pages/user_profile.rhtml
|
157
|
+
- pages/user_rank_search.rhtml
|
158
|
+
- pages/user_search.rhtml
|
159
|
+
- pages/user_show.rhtml
|
160
|
+
- pages/workstatus.rhtml
|
161
|
+
- scripts/fckeditor_validate_login.rb
|
162
|
+
- spec/knjtasks_spec.rb
|
163
|
+
- spec/spec_helper.rb
|
164
|
+
- threads/thread_mail_task_comments.rb
|
165
|
+
- www/api/task.rhtml
|
166
|
+
- www/api/user.rhtml
|
167
|
+
- www/clean.rhtml
|
168
|
+
- www/css/default.css
|
169
|
+
- www/gfx/body_bg.jpg
|
170
|
+
- www/gfx/button_bg.png
|
171
|
+
- www/gfx/main_box_design.png
|
172
|
+
- www/gfx/main_box_left.png
|
173
|
+
- www/gfx/main_box_right.png
|
174
|
+
- www/gfx/main_box_top.png
|
175
|
+
- www/gfx/main_box_top_left.png
|
176
|
+
- www/gfx/main_box_top_right.png
|
177
|
+
- www/index.rhtml
|
178
|
+
- www/js/default.js
|
179
|
+
has_rdoc: true
|
180
|
+
homepage: http://github.com/kaspernj/knjtasks
|
181
|
+
licenses:
|
182
|
+
- MIT
|
183
|
+
post_install_message:
|
184
|
+
rdoc_options: []
|
185
|
+
require_paths:
|
186
|
+
- lib
|
187
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
188
|
+
none: false
|
189
|
+
requirements:
|
190
|
+
- - ! '>='
|
191
|
+
- !ruby/object:Gem::Version
|
192
|
+
version: '0'
|
193
|
+
segments:
|
194
|
+
- 0
|
195
|
+
hash: -1063678652227390460
|
196
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
197
|
+
none: false
|
198
|
+
requirements:
|
199
|
+
- - ! '>='
|
200
|
+
- !ruby/object:Gem::Version
|
201
|
+
version: '0'
|
202
|
+
requirements: []
|
203
|
+
rubyforge_project:
|
204
|
+
rubygems_version: 1.6.2
|
205
|
+
signing_key:
|
206
|
+
specification_version: 3
|
207
|
+
summary: A task system for managing various projects, timelogs and much more.
|
208
|
+
test_files: []
|