keithsalisbury-subtrac 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (139) hide show
  1. data/LICENSE +20 -0
  2. data/README.rdoc +7 -0
  3. data/Rakefile +56 -0
  4. data/VERSION.yml +4 -0
  5. data/bin/subtrac +40 -0
  6. data/lib/subtrac.rb +245 -0
  7. data/lib/subtrac/common/clients/index.wsgi +89 -0
  8. data/lib/subtrac/common/favicon.ico +0 -0
  9. data/lib/subtrac/common/images/trac/banner_bg.jpg +0 -0
  10. data/lib/subtrac/common/images/trac/bar_bg.gif +0 -0
  11. data/lib/subtrac/common/images/trac/footer_back.png +0 -0
  12. data/lib/subtrac/common/images/trac/main_bg.gif +0 -0
  13. data/lib/subtrac/common/images/trac/saint_logo_small.png +0 -0
  14. data/lib/subtrac/common/static/404.html +14 -0
  15. data/lib/subtrac/common/styles/trac.css +222 -0
  16. data/lib/subtrac/common/trac.ini +178 -0
  17. data/lib/subtrac/config/config.yml +54 -0
  18. data/lib/subtrac/passwords +1 -0
  19. data/lib/subtrac/shared/trac.ini +178 -0
  20. data/lib/subtrac/templates/location.erb +16 -0
  21. data/lib/subtrac/templates/projects/blank/svn/branches/README +0 -0
  22. data/lib/subtrac/templates/projects/blank/svn/tags/README +0 -0
  23. data/lib/subtrac/templates/projects/blank/svn/trunk/README +0 -0
  24. data/lib/subtrac/templates/projects/blank/trac/wiki/WikiStart +57 -0
  25. data/lib/subtrac/templates/projects/new/svn/trunk/trac/wiki/WikiStart +46 -0
  26. data/lib/subtrac/templates/projects/new/trac/wiki/WikiStart +23 -0
  27. data/lib/subtrac/templates/projects/trac_theme/svn/trunk/index/index.html +22 -0
  28. data/lib/subtrac/templates/projects/trac_theme/svn/trunk/templates/layout.html +56 -0
  29. data/lib/subtrac/templates/projects/trac_theme/svn/trunk/templates/site.html +27 -0
  30. data/lib/subtrac/templates/projects/trac_theme/svn/trunk/templates/theme.html +86 -0
  31. data/lib/subtrac/templates/projects/trac_theme/trac/wiki/WikiStart +4 -0
  32. data/lib/subtrac/templates/trac.erb +25 -0
  33. data/lib/subtrac/templates/vhost.erb +35 -0
  34. data/lib/subtrac/trac-plugins/advancedticketworkflowplugin/advancedworkflow/__init__.py +0 -0
  35. data/lib/subtrac/trac-plugins/advancedticketworkflowplugin/advancedworkflow/controller.py +419 -0
  36. data/lib/subtrac/trac-plugins/advancedticketworkflowplugin/setup.cfg +3 -0
  37. data/lib/subtrac/trac-plugins/advancedticketworkflowplugin/setup.py +20 -0
  38. data/lib/subtrac/trac-plugins/clientsplugin/clients/__init__.py +0 -0
  39. data/lib/subtrac/trac-plugins/clientsplugin/clients/action.py +28 -0
  40. data/lib/subtrac/trac-plugins/clientsplugin/clients/action_email.py +168 -0
  41. data/lib/subtrac/trac-plugins/clientsplugin/clients/action_zendesk_forum.py +137 -0
  42. data/lib/subtrac/trac-plugins/clientsplugin/clients/admin.py +91 -0
  43. data/lib/subtrac/trac-plugins/clientsplugin/clients/api.py +199 -0
  44. data/lib/subtrac/trac-plugins/clientsplugin/clients/client.py +105 -0
  45. data/lib/subtrac/trac-plugins/clientsplugin/clients/events.py +287 -0
  46. data/lib/subtrac/trac-plugins/clientsplugin/clients/eventsadmin.py +71 -0
  47. data/lib/subtrac/trac-plugins/clientsplugin/clients/htdocs/clients.css +4 -0
  48. data/lib/subtrac/trac-plugins/clientsplugin/clients/model.py +135 -0
  49. data/lib/subtrac/trac-plugins/clientsplugin/clients/processor.py +70 -0
  50. data/lib/subtrac/trac-plugins/clientsplugin/clients/reportmanager.py +142 -0
  51. data/lib/subtrac/trac-plugins/clientsplugin/clients/reports.py +231 -0
  52. data/lib/subtrac/trac-plugins/clientsplugin/clients/summary.py +27 -0
  53. data/lib/subtrac/trac-plugins/clientsplugin/clients/summary_milestone.py +152 -0
  54. data/lib/subtrac/trac-plugins/clientsplugin/clients/summary_ticketchanges.py +160 -0
  55. data/lib/subtrac/trac-plugins/clientsplugin/clients/templates/admin_client_events.html +124 -0
  56. data/lib/subtrac/trac-plugins/clientsplugin/clients/templates/admin_clients.html +134 -0
  57. data/lib/subtrac/trac-plugins/clientsplugin/cron/changes.xslt +132 -0
  58. data/lib/subtrac/trac-plugins/clientsplugin/cron/run-client-event +97 -0
  59. data/lib/subtrac/trac-plugins/clientsplugin/cron/summary.xslt +161 -0
  60. data/lib/subtrac/trac-plugins/clientsplugin/setup.py +43 -0
  61. data/lib/subtrac/trac-plugins/estimationtoolsplugin/estimationtools/__init__.py +4 -0
  62. data/lib/subtrac/trac-plugins/estimationtoolsplugin/estimationtools/burndownchart.py +273 -0
  63. data/lib/subtrac/trac-plugins/estimationtoolsplugin/estimationtools/hoursinplaceeditor.py +44 -0
  64. data/lib/subtrac/trac-plugins/estimationtoolsplugin/estimationtools/hoursremaining.py +36 -0
  65. data/lib/subtrac/trac-plugins/estimationtoolsplugin/estimationtools/htdocs/jquery-1.2.3.min.js +32 -0
  66. data/lib/subtrac/trac-plugins/estimationtoolsplugin/estimationtools/htdocs/jquery.jeditable.js +409 -0
  67. data/lib/subtrac/trac-plugins/estimationtoolsplugin/estimationtools/htdocs/jquery.jeditable.mini.js +30 -0
  68. data/lib/subtrac/trac-plugins/estimationtoolsplugin/estimationtools/templates/edithours.html +53 -0
  69. data/lib/subtrac/trac-plugins/estimationtoolsplugin/estimationtools/tests/burndownchart.py +181 -0
  70. data/lib/subtrac/trac-plugins/estimationtoolsplugin/estimationtools/tests/hoursremaining.py +66 -0
  71. data/lib/subtrac/trac-plugins/estimationtoolsplugin/estimationtools/tests/workloadchart.py +47 -0
  72. data/lib/subtrac/trac-plugins/estimationtoolsplugin/estimationtools/utils.py +93 -0
  73. data/lib/subtrac/trac-plugins/estimationtoolsplugin/estimationtools/workloadchart.py +86 -0
  74. data/lib/subtrac/trac-plugins/estimationtoolsplugin/setup.py +20 -0
  75. data/lib/subtrac/trac-plugins/timingandestimationplugin/scripts/SumRollups.js +23 -0
  76. data/lib/subtrac/trac-plugins/timingandestimationplugin/scripts/adw_tracdb.py +128 -0
  77. data/lib/subtrac/trac-plugins/timingandestimationplugin/scripts/git-post-receive +40 -0
  78. data/lib/subtrac/trac-plugins/timingandestimationplugin/scripts/trac-post-commit.py +285 -0
  79. data/lib/subtrac/trac-plugins/timingandestimationplugin/scripts/trac_billing.py +173 -0
  80. data/lib/subtrac/trac-plugins/timingandestimationplugin/scripts/utils/__init__.py +0 -0
  81. data/lib/subtrac/trac-plugins/timingandestimationplugin/scripts/utils/mail.py +164 -0
  82. data/lib/subtrac/trac-plugins/timingandestimationplugin/setup.py +69 -0
  83. data/lib/subtrac/trac-plugins/timingandestimationplugin/timingandestimationplugin/__init__.py +1 -0
  84. data/lib/subtrac/trac-plugins/timingandestimationplugin/timingandestimationplugin/api.py +292 -0
  85. data/lib/subtrac/trac-plugins/timingandestimationplugin/timingandestimationplugin/blackmagic.py +172 -0
  86. data/lib/subtrac/trac-plugins/timingandestimationplugin/timingandestimationplugin/dbhelper.py +178 -0
  87. data/lib/subtrac/trac-plugins/timingandestimationplugin/timingandestimationplugin/htdocs/billingplugin.css +25 -0
  88. data/lib/subtrac/trac-plugins/timingandestimationplugin/timingandestimationplugin/htdocs/field_disabler.js +6 -0
  89. data/lib/subtrac/trac-plugins/timingandestimationplugin/timingandestimationplugin/htdocs/formatDate.js +356 -0
  90. data/lib/subtrac/trac-plugins/timingandestimationplugin/timingandestimationplugin/htdocs/js/tip_centerwindow.js +100 -0
  91. data/lib/subtrac/trac-plugins/timingandestimationplugin/timingandestimationplugin/htdocs/js/tip_followscroll.js +84 -0
  92. data/lib/subtrac/trac-plugins/timingandestimationplugin/timingandestimationplugin/htdocs/js/wz_tooltip.js +1149 -0
  93. data/lib/subtrac/trac-plugins/timingandestimationplugin/timingandestimationplugin/htdocs/linkifyer.js +119 -0
  94. data/lib/subtrac/trac-plugins/timingandestimationplugin/timingandestimationplugin/htdocs/query.js +73 -0
  95. data/lib/subtrac/trac-plugins/timingandestimationplugin/timingandestimationplugin/htdocs/ticket.js +165 -0
  96. data/lib/subtrac/trac-plugins/timingandestimationplugin/timingandestimationplugin/query_webui.py +28 -0
  97. data/lib/subtrac/trac-plugins/timingandestimationplugin/timingandestimationplugin/reportmanager.py +221 -0
  98. data/lib/subtrac/trac-plugins/timingandestimationplugin/timingandestimationplugin/reports.py +675 -0
  99. data/lib/subtrac/trac-plugins/timingandestimationplugin/timingandestimationplugin/reports_filter.py +150 -0
  100. data/lib/subtrac/trac-plugins/timingandestimationplugin/timingandestimationplugin/statuses.py +25 -0
  101. data/lib/subtrac/trac-plugins/timingandestimationplugin/timingandestimationplugin/tande_filters.py +131 -0
  102. data/lib/subtrac/trac-plugins/timingandestimationplugin/timingandestimationplugin/templates/billing.cs +84 -0
  103. data/lib/subtrac/trac-plugins/timingandestimationplugin/timingandestimationplugin/templates/billing.html +104 -0
  104. data/lib/subtrac/trac-plugins/timingandestimationplugin/timingandestimationplugin/ticket_daemon.py +194 -0
  105. data/lib/subtrac/trac-plugins/timingandestimationplugin/timingandestimationplugin/ticket_policy.py +62 -0
  106. data/lib/subtrac/trac-plugins/timingandestimationplugin/timingandestimationplugin/ticket_webui.py +28 -0
  107. data/lib/subtrac/trac-plugins/timingandestimationplugin/timingandestimationplugin/usermanual.py +127 -0
  108. data/lib/subtrac/trac-plugins/timingandestimationplugin/timingandestimationplugin/webui.py +129 -0
  109. data/lib/subtrac/trac-plugins/worklogplugin/setup.py +29 -0
  110. data/lib/subtrac/trac-plugins/worklogplugin/worklog/__init__.py +1 -0
  111. data/lib/subtrac/trac-plugins/worklogplugin/worklog/api.py +187 -0
  112. data/lib/subtrac/trac-plugins/worklogplugin/worklog/htdocs/jqModal.css +40 -0
  113. data/lib/subtrac/trac-plugins/worklogplugin/worklog/htdocs/jqModal.js +67 -0
  114. data/lib/subtrac/trac-plugins/worklogplugin/worklog/htdocs/jquery.mousewheel.pack.js +12 -0
  115. data/lib/subtrac/trac-plugins/worklogplugin/worklog/htdocs/jquery.timeentry.pack.js +7 -0
  116. data/lib/subtrac/trac-plugins/worklogplugin/worklog/htdocs/tracWorklog.js +40 -0
  117. data/lib/subtrac/trac-plugins/worklogplugin/worklog/htdocs/ui.datepicker.css +208 -0
  118. data/lib/subtrac/trac-plugins/worklogplugin/worklog/htdocs/ui.datepicker.js +1439 -0
  119. data/lib/subtrac/trac-plugins/worklogplugin/worklog/htdocs/work.png +0 -0
  120. data/lib/subtrac/trac-plugins/worklogplugin/worklog/htdocs/work.xcf +0 -0
  121. data/lib/subtrac/trac-plugins/worklogplugin/worklog/htdocs/worklogplugin.css +80 -0
  122. data/lib/subtrac/trac-plugins/worklogplugin/worklog/htdocs/workstart.png +0 -0
  123. data/lib/subtrac/trac-plugins/worklogplugin/worklog/htdocs/workstop.png +0 -0
  124. data/lib/subtrac/trac-plugins/worklogplugin/worklog/manager.py +336 -0
  125. data/lib/subtrac/trac-plugins/worklogplugin/worklog/reports.py +598 -0
  126. data/lib/subtrac/trac-plugins/worklogplugin/worklog/templates/worklog.html +45 -0
  127. data/lib/subtrac/trac-plugins/worklogplugin/worklog/templates/worklog_stop.html +70 -0
  128. data/lib/subtrac/trac-plugins/worklogplugin/worklog/templates/worklog_user.html +40 -0
  129. data/lib/subtrac/trac-plugins/worklogplugin/worklog/templates/worklog_webadminui.html +59 -0
  130. data/lib/subtrac/trac-plugins/worklogplugin/worklog/ticket_daemon.py +33 -0
  131. data/lib/subtrac/trac-plugins/worklogplugin/worklog/ticket_filter.py +153 -0
  132. data/lib/subtrac/trac-plugins/worklogplugin/worklog/timeline_hook.py +96 -0
  133. data/lib/subtrac/trac-plugins/worklogplugin/worklog/usermanual.py +29 -0
  134. data/lib/subtrac/trac-plugins/worklogplugin/worklog/util.py +31 -0
  135. data/lib/subtrac/trac-plugins/worklogplugin/worklog/webadminui.py +47 -0
  136. data/lib/subtrac/trac-plugins/worklogplugin/worklog/webui.py +174 -0
  137. data/lib/subtrac/trac-plugins/worklogplugin/worklog/xmlrpc.py +73 -0
  138. data/lib/subtrac/version.rb +4 -0
  139. metadata +191 -0
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env python
2
+
3
+ from setuptools import setup
4
+
5
+ PACKAGE = 'worklog'
6
+
7
+ setup(name=PACKAGE,
8
+ description='Plugin to manage the which tickets users are currently working on',
9
+ keywords='trac plugin ticket working',
10
+ version='0.1',
11
+ url='',
12
+ license='http://www.opensource.org/licenses/mit-license.php',
13
+ author='Colin Guthrie',
14
+ author_email='trac@colin.guthr.ie',
15
+ long_description="""
16
+ I'll write this later!
17
+ """,
18
+ packages=[PACKAGE],
19
+ package_data={PACKAGE : ['templates/*.cs', 'templates/*.html', 'htdocs/*.css', 'htdocs/*.png', 'htdocs/*.js']},
20
+ entry_points={'trac.plugins': '%s = %s' % (PACKAGE, PACKAGE)})
21
+
22
+
23
+ #### AUTHORS ####
24
+ ## Primary Author:
25
+ ## Colin Guthrie
26
+ ## http://colin.guthr.ie/
27
+ ## trac@colin.guthr.ie
28
+ ## trac-hacks user: coling
29
+
@@ -0,0 +1 @@
1
+ from api import *
@@ -0,0 +1,187 @@
1
+ import re
2
+ import time
3
+ from usermanual import *
4
+ from trac.log import logger_factory
5
+ from trac.ticket import ITicketChangeListener, Ticket
6
+ from trac.core import *
7
+ from trac.env import IEnvironmentSetupParticipant
8
+ from trac.perm import IPermissionRequestor, PermissionSystem
9
+ from webui import *
10
+ from webadminui import *
11
+ from ticket_filter import *
12
+ from timeline_hook import *
13
+ from ticket_daemon import *
14
+ try:
15
+ from xmlrpc import *
16
+ except:
17
+ pass
18
+
19
+ class WorkLogSetupParticipant(Component):
20
+ implements(IEnvironmentSetupParticipant)
21
+
22
+ db_version_key = None
23
+ db_version = None
24
+ db_installed_version = None
25
+
26
+ """Extension point interface for components that need to participate in the
27
+ creation and upgrading of Trac environments, for example to create
28
+ additional database tables."""
29
+ def __init__(self):
30
+ self.db_version_key = 'WorklogPlugin_Db_Version'
31
+ self.db_version = 3
32
+ self.db_installed_version = None
33
+
34
+ # Initialise database schema version tracking.
35
+ db = self.env.get_db_cnx()
36
+ cursor = db.cursor()
37
+ cursor.execute("SELECT value FROM system WHERE name=%s", (self.db_version_key,))
38
+ try:
39
+ self.db_installed_version = int(cursor.fetchone()[0])
40
+ except:
41
+ self.db_installed_version = 0
42
+ cursor.execute("INSERT INTO system (name,value) VALUES(%s,%s)",
43
+ (self.db_version_key, self.db_installed_version))
44
+ db.commit()
45
+ db.close()
46
+
47
+
48
+ def environment_created(self):
49
+ """Called when a new Trac environment is created."""
50
+ if self.environment_needs_upgrade(None):
51
+ self.upgrade_environment(None)
52
+
53
+ def system_needs_upgrade(self):
54
+ return self.db_installed_version < self.db_version
55
+
56
+ def do_db_upgrade(self):
57
+ # Legacy support hack (supports upgrades from revisions r2495 or before)
58
+ if self.db_installed_version == 0:
59
+ db = self.env.get_db_cnx()
60
+ cursor = db.cursor()
61
+ try:
62
+ cursor.execute('SELECT * FROM work_log LIMIT 1')
63
+ # We've succeeded so we actually have version 1
64
+ self.db_installed_version = 1
65
+ except:
66
+ pass
67
+ db.close()
68
+ # End Legacy support hack
69
+
70
+ db = self.env.get_db_cnx()
71
+ cursor = db.cursor()
72
+
73
+ # Do the staged updates
74
+ try:
75
+ # This var is to deal with a problem case with pgsql and the "user"
76
+ # keyword. We need to skip over new installations but not upgrades
77
+ # for other db backends.
78
+ skip = False
79
+
80
+ if self.db_installed_version < 1:
81
+ print 'Creating work_log table'
82
+ cursor.execute('CREATE TABLE work_log ('
83
+ 'worker TEXT,'
84
+ 'ticket INTEGER,'
85
+ 'lastchange INTEGER,'
86
+ 'starttime INTEGER,'
87
+ 'endtime INTEGER'
88
+ ')')
89
+ skip = True
90
+
91
+ if self.db_installed_version < 2:
92
+ print 'Updating work_log table (v2)'
93
+ cursor.execute('ALTER TABLE work_log '
94
+ 'ADD COLUMN comment TEXT')
95
+
96
+ if self.db_installed_version < 3:
97
+ print 'Updating work_log table (v3)'
98
+ if not skip:
99
+ # This whole section is just to rename the "user" column to "worker"
100
+ # This column used to be created in step 1 above, but we
101
+ # can no longer do this in order to support pgsql.
102
+ # This step is skipped if step 1 was also run (e.g. new installs)
103
+ # The below seems to be the only way to rename (or drop) a column on sqlite *sigh*
104
+ cursor.execute('CREATE TABLE work_log_tmp ('
105
+ 'worker TEXT,'
106
+ 'ticket INTEGER,'
107
+ 'lastchange INTEGER,'
108
+ 'starttime INTEGER,'
109
+ 'endtime INTEGER,'
110
+ 'comment TEXT'
111
+ ')')
112
+ cursor.execute('INSERT INTO work_log_tmp (worker, ticket, lastchange, starttime, endtime, comment) '
113
+ 'SELECT user, ticket, lastchange, starttime, endtime, comment FROM work_log')
114
+ cursor.execute('DROP TABLE work_log')
115
+ cursor.execute('ALTER TABLE work_log_tmp RENAME TO work_log')
116
+
117
+ #if self.db_installed_version < 4:
118
+ # print 'Updating work_log table (v4)'
119
+ # cursor.execute('...')
120
+
121
+ # Updates complete, set the version
122
+ cursor.execute("UPDATE system SET value=%s WHERE name=%s",
123
+ (self.db_version, self.db_version_key))
124
+ db.commit()
125
+ db.close()
126
+ except Exception, e:
127
+ self.log.error("WorklogPlugin Exception: %s" % (e,));
128
+ db.rollback()
129
+
130
+
131
+
132
+ def needs_user_man(self):
133
+ db = self.env.get_db_cnx()
134
+ cursor = db.cursor()
135
+ try:
136
+ cursor.execute('SELECT MAX(version) FROM wiki WHERE name=%s', (user_manual_wiki_title,))
137
+ maxversion = int(cursor.fetchone()[0])
138
+ except:
139
+ maxversion = 0
140
+ db.close()
141
+
142
+ return maxversion < user_manual_version
143
+
144
+ def do_user_man_update(self):
145
+ when = int(time.time())
146
+ db = self.env.get_db_cnx()
147
+ cursor = db.cursor()
148
+ cursor.execute('INSERT INTO wiki (name,version,time,author,ipnr,text,comment,readonly) '
149
+ 'VALUES (%s, %s, %s, %s, %s, %s, %s, %s)',
150
+ (user_manual_wiki_title, user_manual_version, when,
151
+ 'WorkLog Plugin', '127.0.0.1', user_manual_content,
152
+ '', 0))
153
+ db.commit()
154
+ db.close()
155
+
156
+ def environment_needs_upgrade(self, db):
157
+ """Called when Trac checks whether the environment needs to be upgraded.
158
+
159
+ Should return `True` if this participant needs an upgrade to be
160
+ performed, `False` otherwise.
161
+
162
+ """
163
+ return (self.system_needs_upgrade() \
164
+ or self.needs_user_man())
165
+
166
+ def upgrade_environment(self, db):
167
+ """Actually perform an environment upgrade.
168
+
169
+ Implementations of this method should not commit any database
170
+ transactions. This is done implicitly after all participants have
171
+ performed the upgrades they need without an error being raised.
172
+ """
173
+ def p(s):
174
+ print s
175
+ return True
176
+ print "Worklog needs an upgrade"
177
+ if self.system_needs_upgrade():
178
+ p("Upgrading Database")
179
+ self.do_db_upgrade()
180
+ if self.needs_user_man():
181
+ p("Upgrading usermanual")
182
+ self.do_user_man_update()
183
+ print "Done upgrading Worklog"
184
+
185
+
186
+
187
+
@@ -0,0 +1,40 @@
1
+ /* jqModal base Styling courtesy of;
2
+ Brice Burgess <bhb@iceburg.net> */
3
+
4
+ /* The Window's CSS z-index value is respected (takes priority). If none is supplied,
5
+ the Window's z-index value will be set to 3000 by default (in jqModal.js). You
6
+ can change this value by either;
7
+ a) supplying one via CSS
8
+ b) passing the "zIndex" parameter. E.g. (window).jqm({zIndex: 500}); */
9
+
10
+ .jqmWindow {
11
+ display: none;
12
+
13
+ position: fixed;
14
+ top: 17%;
15
+ left: 50%;
16
+
17
+ margin-left: -300px;
18
+ width: 600px;
19
+
20
+ background-color: #EEE;
21
+ color: #333;
22
+ border: 1px solid black;
23
+ padding: 12px;
24
+ }
25
+
26
+ .jqmOverlay { background-color: #000; }
27
+
28
+ /* Background iframe styling for IE6. Prevents ActiveX bleed-through (<select> form elements, etc.) */
29
+ * iframe.jqm {position:absolute;top:0;left:0;z-index:-1;
30
+ width: expression(this.parentNode.offsetWidth+'px');
31
+ height: expression(this.parentNode.offsetHeight+'px');
32
+ }
33
+
34
+ /* Fixed posistioning emulation for IE6
35
+ Star selector used to hide definition from browsers other than IE6
36
+ For valid CSS, use a conditional include instead */
37
+ * html .jqmWindow {
38
+ position: absolute;
39
+ top: expression((document.documentElement.scrollTop || document.body.scrollTop) + Math.round(17 * (document.documentElement.offsetHeight || document.body.clientHeight) / 100) + 'px');
40
+ }
@@ -0,0 +1,67 @@
1
+ /*
2
+ * jqModal - Minimalist Modaling with jQuery
3
+ *
4
+ * Copyright (c) 2007 Brice Burgess <bhb@iceburg.net>, http://www.iceburg.net
5
+ * Licensed under the MIT License:
6
+ * http://www.opensource.org/licenses/mit-license.php
7
+ *
8
+ * $Version: 2007.08.17 +r11
9
+ *
10
+ */
11
+ (function($) {
12
+ $.fn.jqm=function(o){
13
+ var _o = {
14
+ zIndex: 3000,
15
+ overlay: 50,
16
+ overlayClass: 'jqmOverlay',
17
+ closeClass: 'jqmClose',
18
+ trigger: '.jqModal',
19
+ ajax: false,
20
+ target: false,
21
+ modal: false,
22
+ toTop: false,
23
+ onShow: false,
24
+ onHide: false,
25
+ onLoad: false
26
+ };
27
+ return this.each(function(){if(this._jqm)return; s++; this._jqm=s;
28
+ H[s]={c:$.extend(_o, o),a:false,w:$(this).addClass('jqmID'+s),s:s};
29
+ if(_o.trigger)$(this).jqmAddTrigger(_o.trigger);
30
+ });};
31
+
32
+ $.fn.jqmAddClose=function(e){hs(this,e,'jqmHide'); return this;};
33
+ $.fn.jqmAddTrigger=function(e){hs(this,e,'jqmShow'); return this;};
34
+ $.fn.jqmShow=function(t){return this.each(function(){if(!H[this._jqm].a)$.jqm.open(this._jqm,t)});};
35
+ $.fn.jqmHide=function(t){return this.each(function(){if(H[this._jqm].a)$.jqm.close(this._jqm,t)});};
36
+
37
+ $.jqm = {
38
+ hash:{},
39
+ open:function(s,t){var h=H[s],c=h.c,cc='.'+c.closeClass,z=(/^\d+$/.test(h.w.css('z-index')))?h.w.css('z-index'):c.zIndex,o=$('<div></div>').css({height:'100%',width:'100%',position:'fixed',left:0,top:0,'z-index':z-1,opacity:c.overlay/100});h.t=t;h.a=true;h.w.css('z-index',z);
40
+ if(c.modal) {if(!A[0])F('bind');A.push(s);o.css('cursor','wait');}
41
+ else if(c.overlay > 0)h.w.jqmAddClose(o);
42
+ else o=false;
43
+
44
+ h.o=(o)?o.addClass(c.overlayClass).prependTo('body'):false;
45
+ if(ie6){$('html,body').css({height:'100%',width:'100%'});if(o){o=o.css({position:'absolute'})[0];for(var y in {Top:1,Left:1})o.style.setExpression(y.toLowerCase(),"(_=(document.documentElement.scroll"+y+" || document.body.scroll"+y+"))+'px'");}}
46
+
47
+ if(c.ajax) {var r=c.target||h.w,u=c.ajax,r=(typeof r == 'string')?$(r,h.w):$(r),u=(u.substr(0,1) == '@')?$(t).attr(u.substring(1)):u;
48
+ r.load(u,function(){if(c.onLoad)c.onLoad.call(this,h);if(cc)h.w.jqmAddClose($(cc,h.w));e(h);});}
49
+ else if(cc)h.w.jqmAddClose($(cc,h.w));
50
+
51
+ if(c.toTop&&h.o)h.w.before('<span id="jqmP'+h.w[0]._jqm+'"></span>').insertAfter(h.o);
52
+ (c.onShow)?c.onShow(h):h.w.show();e(h);return false;
53
+ },
54
+ close:function(s){var h=H[s];h.a=false;
55
+ if(A[0]){A.pop();if(!A[0])F('unbind');}
56
+ if(h.c.toTop&&h.o)$('#jqmP'+h.w[0]._jqm).after(h.w).remove();
57
+ if(h.c.onHide)h.c.onHide(h);else{h.w.hide();if(h.o)h.o.remove();} return false;
58
+ }};
59
+ var s=0,H=$.jqm.hash,A=[],ie6=$.browser.msie&&($.browser.version == "6.0"),
60
+ i=$('<iframe src="javascript:false;document.write(\'\');" class="jqm"></iframe>').css({opacity:0}),
61
+ e=function(h){if(ie6)if(h.o)h.o.html('<p style="width:100%;height:100%"/>').prepend(i);else if(!$('iframe.jqm',h.w)[0])h.w.prepend(i); f(h);},
62
+ f=function(h){try{$(':input:visible',h.w)[0].focus();}catch(e){}},
63
+ F=function(t){$()[t]("keypress",m)[t]("keydown",m)[t]("mousedown",m);},
64
+ m=function(e){var h=H[A[A.length-1]],r=(!$(e.target).parents('.jqmID'+h.s)[0]);if(r)f(h);return !r;},
65
+ hs=function(w,e,y){var s=[];w.each(function(){s.push(this._jqm)});
66
+ $(e).each(function(){if(this[y])$.extend(this[y],s);else{this[y]=s;$(this).click(function(){for(var i in {jqmShow:1,jqmHide:1})for(var s in this[i])if(H[this[i][s]])H[this[i][s]].w[i](this);return false;});}});};
67
+ })(jQuery);
@@ -0,0 +1,12 @@
1
+ /* Copyright (c) 2006 Brandon Aaron (brandon.aaron@gmail.com || http://brandonaaron.net)
2
+ * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
3
+ * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
4
+ * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers.
5
+ * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix.
6
+ *
7
+ * $LastChangedDate: 2007-06-20 16:24:37 -0500 (Wed, 20 Jun 2007) $
8
+ * $Rev: 2124 $
9
+ *
10
+ * Version: 2.2
11
+ */
12
+ eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(5($){$.V.x({t:5(f){2(!f.d)f.d=$.7.d++;2(!$.7.l)$.7.l=[];j 1.A(5(){2(1.4)j 1.4.n(f);8 1.4=[];1.4.n(f);c s=1;1.6=5(e){e=$.7.R(e||o.7);$.x(e,1.p||{});c a=0,m=P;2(e.u)a=e.u/M;2(e.H)a=-e.H/3;2(o.I)a=-e.u;r(c i=0;i<s.4.q;i++)2(s.4[i])2(s.4[i].U(s,e,a)===9){m=9;e.T();e.S()}j m};2($.k.h&&!1.b){1.b=5(e){1.p={F:e.F,E:e.E,D:e.D,C:e.C}};$(1).Q(\'B\',1.b)}2(1.g)2($.k.h)1.g(\'z\',1.6,9);8 1.g(\'t\',1.6,9);8 1.y=1.6;$.7.l.n($(1))})},v:5(f){j 1.A(5(){2(f&&1.4){r(c i=0;i<1.4.q;i++)2(1.4[i]&&1.4[i].d==f.d)O 1.4[i]}8{2($.k.h&&!1.b)$(1).N(\'B\',1.b);2(1.g)2($.k.h)1.w(\'z\',1.6,9);8 1.w(\'t\',1.6,9);8 1.y=G;1.4=1.6=1.b=1.p=G}})}});$(o).L(\'K\',5(){c a=$.7.l||[];r(c i=0;i<a.q;i++)a[i].v()})})(J);',58,58,'|this|if||_mwHandlers|function|_mwHandler|event|else|false||_mwFixCursorPos|var|guid|||addEventListener|mozilla||return|browser|_mwCache|returnValue|push|window|_mwCursorPos|length|for||mousewheel|wheelDelta|unmousewheel|removeEventListener|extend|onmousewheel|DOMMouseScroll|each|mousemove|clientY|clientX|pageY|pageX|null|detail|opera|jQuery|unload|one|120|unbind|delete|true|bind|fix|stopPropagation|preventDefault|call|fn'.split('|'),0,{}))
@@ -0,0 +1,7 @@
1
+ /* http://keith-wood.name/timeEntry.html
2
+ Time entry for jQuery v1.3.0.
3
+ Written by Keith Wood (kbwood@virginbroadband.com.au) June 2007.
4
+ Dual licensed under the GPL (http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt) and
5
+ MIT (http://dev.jquery.com/browser/trunk/jquery/MIT-LICENSE.txt) licenses.
6
+ Please attribute the author if you use it. */
7
+ eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(o($){o 15(){7.2O=0;7.1r=[];7.H=[];7.28=[];7.28[\'\']={1b:x,W:\':\',16:\'\',X:[\'3l\',\'4F\'],2W:[\'4e\',\'41 2N\',\'3R 2N\',\'3N\',\'3I\']};7.19={2v:\'\',1o:x,1M:[1,1,1],2g:0,2f:S,3g:t,2Y:t,2T:\'p.47\',1u:[20,20,8],2K:x,1Y:[3Q,3M],2A:t};$.1i(7.19,7.28[\'\'])}$.1i(15.1R,{1j:\'3D\',2u:o(a){m b=7.2O++;7.1r[b]=a;r b},D:o(a){r 7.1r[a]||a},3p:o(a){1e(7.19,a||{})},1s:o(a){m b=(a.1m&&a.1m.1d()==\'F\'?a:7);n($.p.L==b){r}n($.p.1D(b)){r}m c=$.p.D(b.w);c.A=$(b);$.p.L=b;$.p.13=t;m d=c.q(\'2A\');1e(c.17,(d?d(b):{}));c.1w()},27:o(a){$.p.13=$.p.L;$.p.L=t},25:o(a){m b=a.23;m c=$.p.D(b.w);m d=c.q(\'W\').y+2;c.s=0;n($.u.1t){m e=a.3S;c.s=(e>z.R(1,c.J)*d+2?c.v:z.3O(e/d))}G n($.u.1h){m f=b.1z;Z(m g=0;g<=z.R(1,c.J,c.v);g++){m h=(g!=c.v?(g*d)+2:(c.v*d)+c.q(\'16\').y+c.q(\'X\')[0].y);b.1z=f.Y(0,h);m i=b.1Q();n(a.3C<i.3A){c.s=g;B}}b.1z=f}G n($.u.T||$.u.3w){m f=b.1z;Z(m g=0;g<=z.R(1,c.J,c.v);g++){m j=(g!=c.v?(g*d):(c.v*d)+c.q(\'16\').y);n(j>=b.3v){c.s=g;B}}}c.M()},1K:o(a){n(a.1L>=48){r S}m b=$.p.D(7.w);2o(a.1L){C 9:r(a.3o?b.1p(S):b.1a(S));C 35:n(a.2i){b.1y(\'\')}G{b.s=z.R(1,b.J,b.v);b.I(0)}B;C 36:n(a.2i){b.N()}G{b.s=0;b.I(0)}B;C 37:b.1p(x);B;C 38:b.I(+1);B;C 39:b.1a(x);B;C 40:b.I(-1);B;C 46:b.1y(\'\');B}r x},21:o(a){m b=3j.4C(a.3e==3c?a.1L:a.3e);n(b<\' \'){r S}m c=$.p.D(7.w);c.3b(b);r x},34:o(a,b){b=($.u.T?-b/z.2b(b):b);m c=$.p.D(7.w);c.I(b);a.4r()},30:o(b,c){m d=$(b);n(d.2U(\'.\'+7.1j)){r}m e=c.q(\'2T\');m f=c.q(\'4o\');m g=c.q(\'1u\');m h=c.q(\'2v\');m i=(!e?t:$(\'<V 2a="4j" 4h="\'+c.1C+\'" 4f="4d: 4a-49; 2R: 45(\\\'\'+e+\'\\\') 0 0 44-43; \'+\'42: \'+g[0]+\'1c; 3Z: \'+g[1]+\'1c;\'+($.u.1t?\' 2P-3Y: \'+g[0]+\'1c; 2P-3X: \'+(g[1]-18)+\'1c;\':\'\')+\'"></V>\'));d.3W(\'<V 2a="3V"></V>\').2L(h?\'<V 2a="3U">\'+h+\'</V>\':\'\').2L(i||\'\');d.3T(7.1j).1Z(7.1s).2J(7.27).2I(7.25).2H(7.1K).2M(7.21);n($.u.1t){d.2G(\'F\',o(a){c.1w()})}n($.u.1h){d.2G(\'2F\',o(a){1X(o(){c.1w()},1)})}n(c.q(\'2f\')&&$.29.1W){d.1W(7.34)}d[0].w=c.1C;n(i){i.3P(7.2E).2D(7.1V).2C(7.1V).3L(7.2B);i[0].w=c.1C}},3K:o(a){7.1U(a,x)},3J:o(a){7.1U(a,S)},1U:o(b,c){m d=$.p.D(b.w);n(!d){r}b.2z=c;n(b.1T&&b.1T.1m.1d()==\'V\'){$.p.1B(d,b.1T,(c?5:-1))}$.p.H=$.2x($.p.H,o(a){r(a==b?t:a)});n(c){$.p.H[$.p.H.y]=b}},1D:o(a){Z(m i=0;i<7.H.y;i++){n(7.H[i]==a){r S}}r x},3H:o(a,b){m c=7.D(a.w);n(c){m d=c.1A();1e(c.17,b||{});n(d){c.N(K 14(0,0,0,d[0],d[1],d[2]))}}},3G:o(b){$F=$(b);n(!$F.2U(\'.\'+7.1j)){r}b.1q.1q.3F(b,b.1q);$F.3E(7.1j).P(\'1Z\',7.1s).P(\'2J\',7.27).P(\'2I\',7.25).P(\'2H\',7.1K).P(\'2M\',7.21);n($.u.1t){$F.P(\'F\')}n($.u.1h){$F.P(\'2F\')}n($.29.1W){$F.3B()}7.1r[b.w]=t;b.w=3c;7.H=$.2x(7.H,o(a){r(a==b?t:a)})},3z:o(a,b){m c=7.D(a.w);n(c){c.A=$(a);c.N(b)}},3y:o(a){m b=7.D(a.w);m c=(b?b.1A():t);r(!c?t:K 14(0,0,0,c[0],c[1],c[2]))},2B:o(a){m b=$.p.1g(a);m c=$.p.D(b.w);b.3x=c.q(\'2W\')[$.p.1F(c,a)]},2E:o(a){m b=$.p.1g(a);m c=b.2t;n($.p.1D(c)){r}n(c==$.p.13){$.p.L=c;$.p.13=t}m d=$.p.D(c.w);$.p.1s(c);m e=$.p.1F(d,a);$.p.1B(d,b,e);$.p.1P(d,e);m f=d.q(\'1Y\');n(e>=3&&f[0]){$.p.1O=1X(o(){$.p.1J(d,e)},f[0]);$(b).2s(\'2C\',$.p.1N).2s(\'2D\',$.p.1N)}},1P:o(a,b){2o(b){C 0:a.N();B;C 1:a.1p(x);B;C 2:a.1a(x);B;C 3:a.I(+1);B;C 4:a.I(-1);B}},1J:o(a,b){$.p.L=$.p.13;7.1P(a,b);7.1O=1X(o(){$.p.1J(a,b)},a.q(\'1Y\')[1])},1N:o(a){3u($.p.1O)},1V:o(a){m b=$.p.1g(a);m c=$.p.D(b.w);n(!$.p.1D(b.2t)){$.p.1B(c,b,-1)}n(!$.u.T){$.p.L=$.p.13}n($.p.L){c.M()}},1g:o(a){r(a.23?a.23:a.3t)},1F:o(a,b){m c=7.1g(b);m d=7.2r(c);m e=7.2q(c);m f=a.q(\'2K\');m g=(f?2p:b.3s+e[0]-d[0]-($.u.1h?1:0));m h=b.3r+e[1]-d[1]-($.u.1h?1:0);m i=a.q(\'1u\');m j=(f?2p:i[0]-g);m k=i[1]-h;n(i[2]>0&&z.2b(g-j)<=i[2]&&z.2b(h-k)<=i[2]){r 0}m l=z.2n(g,h,j,k);r(l==g?1:(l==j?2:(l==h?3:4)))},1B:o(a,b,c){$(b).2w(\'2R-2m\',\'-\'+((c+1)*a.q(\'1u\')[0])+\'1c 3q\')},2r:o(a){m b=1n=0;n(a.2l){b=a.2k;1n=a.3h;2j(a=a.2l){m c=b;b+=a.2k;n(b<0){b=c}1n+=a.3h}}r[b,1n]},2q:o(a){m b=x;$(a).3n().2y(o(){b|=$(7).2w(\'2m\')==\'3m\'});n(b&&!$.u.T){r[0,0]}m c=($.u.T?1S.2h.1I:a.1I);m d=($.u.T?1S.2h.2c:a.2c);n(!$.u.T){2j(a=a.1q){c+=a.1I||0;d+=a.2c||0}}r[c,d]}});o 1H(a){7.1C=$.p.2u(7);7.E=0;7.Q=0;7.U=0;7.A=t;7.17=1e({},a||{})}$.1i(1H.1R,{q:o(a){r(7.17[a]!=t?7.17[a]:$.p.19[a])},1w:o(){m a=7.1A();m b=7.q(\'1o\');n(a){7.E=a[0];7.Q=a[1];7.U=a[2]}G{m c=7.1l();7.E=c[0];7.Q=c[1];7.U=(b?c[2]:0)}7.J=(b?2:-1);7.v=(7.q(\'1b\')?-1:(b?3:2));7.1f=\'\';7.s=z.R(0,z.2n(z.R(1,7.J,7.v),7.q(\'2g\')));n(7.A.O()!=\'\'){7.1G()}},1A:o(){m a=(7.A?7.A.O():\'\');m b=7.q(\'W\');m c=a.3k(b);n(b==\'\'&&a!=\'\'){c[0]=a.Y(0,2);c[1]=a.Y(2,4);c[2]=a.Y(4,6)}m d=7.q(\'X\');n(c.y>=2){m e=(a.2S(d[0])>-1);m f=(a.2S(d[1])>-1);m g=22(c[0],10);g=(1E(g)?0:g);g=((e||f)&&g==12?0:g)+(f?12:0);m h=22(c[1],10);h=(1E(h)?0:h);m i=(c.y>=3?22(c[2],10):0);i=(1E(i)||!7.q(\'1o\')?0:i);r[g,h,i]}r t},1l:o(a){m b=(a!=t);n(!b){m c=K 14();a=[c.2e(),c.2d(),c.2Q()]}m d=x;m e=7.q(\'1M\');Z(m i=0;i<e.y;i++){n(d){a[i]=0}G n(e[i]>1){a[i]=z.3i(a[i]/e[i])*e[i];d=!b}}r a},1G:o(){m a=7.q(\'1b\');m b=7.q(\'W\');m c=(7.1v(a?7.E:((7.E+11)%12)+1)+b+7.1v(7.Q)+(7.q(\'1o\')?b+7.1v(7.U):\'\')+(a?\'\':7.q(\'16\')+7.q(\'X\')[(7.E<12?0:1)]));7.1y(c);7.M()},M:o(){n(!7.A){r}m a=7.A[0];m b=7.q(\'W\');m c=b.y+2;m d=(7.s!=7.v?(7.s*c):(7.v*c)-b.y+7.q(\'16\').y);m e=d+(7.s!=7.v?2:7.q(\'X\')[0].y);n(a.3f){a.3f(d,e)}G n(a.1Q){m f=a.1Q();f.4z(\'3d\',d);f.4y(\'3d\',e-7.A.O().y);f.4x()}n(!a.2z){a.1Z()}},1v:o(a){r(a<10?\'0\':\'\')+a},1y:o(a){7.A.O(a);7.A.4w(\'4v\')},1p:o(a){m b=(7.A.O()==\'\'||7.s==0);n(!b){7.s--}7.M();7.1f=\'\';r(b&&a)},1a:o(a){m b=(7.A.O()==\'\'||7.s==z.R(1,7.J,7.v));n(!b){7.s++}7.M();7.1f=\'\';r(b&&a)},I:o(a){n(7.A.O()==\'\'){a=0}m b=7.q(\'1M\');7.N(K 14(0,0,0,7.E+(7.s==0?a*b[0]:0)+(7.s==7.v?a*12:0),7.Q+(7.s==1?a*b[1]:0),7.U+(7.s==7.J?a*b[2]:0)))},N:o(a){n(!a){m b=7.1l();a=K 14(0,0,0,b[0],b[1],b[2])}m a=7.1k(a);m c=7.1k(7.q(\'3g\'));m d=7.1k(7.q(\'2Y\'));a=(c&&a<c?c:(d&&a>d?d:a));7.E=a.2e();7.Q=a.2d();7.U=a.2Q();7.1G()},1k:o(a){n(!a){r t}a.4u(4t);a.4s(1-1);a.4q(26);r a},3b:o(a){n(a==7.q(\'W\')){7.1a(x)}G n(a>=\'0\'&&a<=\'9\'){m b=(7.1f+a)*1;m c=(7.s==0&&((7.q(\'1b\')&&b<24)||(b>=1&&b<=12))?b:7.E);m d=(7.s==1&&b<2Z?b:7.Q);m e=(7.s==7.J&&b<2Z?b:7.U);m f=7.1l([c,d,e]);7.N(K 14(0,0,0,f[0],f[1],f[2]));7.1f=a}G n(!7.q(\'1b\')){m g=7.q(\'X\');n((a==g[0].Y(0,1).1d()&&7.E>=12)||(a==g[1].Y(0,1).1d()&&7.E<12)){m h=7.s;7.s=7.v;7.I(+1);7.s=h;7.M()}}}});o 1e(a,b){$.1i(a,b);Z(m c 2X b){n(b[c]==t){a[c]=t}}r a}$.29.p=o(e){m f=4p.1R.4n.4m(4l,1);n(2V e==\'32\'&&(e==\'4k\'||e==\'4i\')){r $.p[\'31\'+e+\'15\'].3a($.p,[7[0]].33(f))}r 7.2y(o(){m a=7.1m.1d();n(a==\'F\'){n(2V e==\'32\'){$.p[\'31\'+e+\'15\'].3a($.p,[7].33(f))}G{m b=t;Z(1x 2X $.p.19){m c=7.4g(\'4A:\'+1x);n(c){b=b||{};4B{b[1x]=4c(c)}4b(4D){b[1x]=c}}}m d=(d&&!b?d:K 1H(!b?e:$.1i(b,e)));$.p.30(7,d)}}})};$(1S).4E(o(){$.p=K 15()})})(4G);',62,291,'|||||||this|||||||||||||||var|if|function|timeEntry|_get|return|_field|null|browser|_ampmField|_timeId|false|length|Math|_input|break|case|_getInst|_selectedHour|input|else|_disabledInputs|_adjustField|_secondField|new|_lastInput|_showField|_setTime|val|unbind|_selectedMinute|max|true|opera|_selectedSecond|span|separator|ampmNames|substring|for||||_blurredInput|Date|TimeEntry|ampmPrefix|_settings||_defaults|_nextField|show24Hours|px|toLowerCase|extendRemove|_lastChr|_getSpinnerTarget|msie|extend|markerClassName|_normaliseTime|_constrainTime|nodeName|curTop|showSeconds|_previousField|parentNode|_inst|_doFocus|mozilla|spinnerSize|_formatNumber|_parseTime|attrName|_setValue|value|_extractTime|_changeSpinner|_id|_isDisabledTimeEntry|isNaN|_getSpinnerRegion|_showTime|TimeEntryInstance|scrollLeft|_repeatSpinner|_doKeyDown|keyCode|timeSteps|_releaseSpinner|_timer|_actionSpinner|createTextRange|prototype|document|nextSibling|_enableDisable|_endSpinner|mousewheel|setTimeout|spinnerRepeat|focus||_doKeyPress|parseInt|target||_doDblClick||_doBlur|regional|fn|class|abs|scrollTop|getMinutes|getHours|useMouseWheel|initialField|body|ctrlKey|while|offsetLeft|offsetParent|position|min|switch|99|_findScroll|_findPos|one|previousSibling|_register|appendText|css|map|each|disabled|beforeShow|_describeSpinner|mouseout|mouseup|_handleSpinner|paste|bind|keydown|dblclick|blur|spinnerIncDecOnly|after|keypress|field|_nextId|padding|getSeconds|background|indexOf|spinnerImage|is|typeof|spinnerTexts|in|maxTime|60|_connectTimeEntry|_|string|concat|_doMouseWheel||||||apply|_handleKeyPress|undefined|character|charCode|setSelectionRange|minTime|offsetTop|round|String|split|AM|fixed|parents|shiftKey|setDefaults|0px|clientY|clientX|srcElement|clearTimeout|selectionStart|safari|title|_getTimeTimeEntry|_setTimeTimeEntry|boundingWidth|unmousewheel|offsetX|hasTimeEntry|removeClass|replaceChild|_destroyTimeEntry|_changeTimeEntry|Decrement|_disableTimeEntry|_enableTimeEntry|mousemove|250|Increment|floor|mousedown|500|Next|rangeOffset|addClass|timeEntry_append|timeEntry_wrap|wrap|top|left|height||Previous|width|repeat|no|url||png||block|inline|catch|eval|display|Now|style|getAttribute|_timeid|getTime|timeEntry_control|isDisabled|arguments|call|slice|spinnerText|Array|setDate|preventDefault|setMonth|2001|setFullYear|change|trigger|select|moveEnd|moveStart|time|try|fromCharCode|err|ready|PM|jQuery'.split('|'),0,{}))
@@ -0,0 +1,40 @@
1
+ /*
2
+ * Work log plugin JavaScript code.
3
+ *
4
+ * This assumes that jQuery, jqModal and jCalendar are all loaded.
5
+ */
6
+
7
+ var tracWorklog = {
8
+
9
+ start: function() { return true; },
10
+ stop: function() {
11
+ var mynow = new Date();
12
+ var change_handler = function()
13
+ {
14
+ var chosen_date = $('#worklogStopDate').datepicker('getDate');
15
+ var chosen_time = $('#worklogStopTime').timeEntry('getTime');
16
+
17
+ var chosen = new Date();
18
+ chosen.setTime(chosen_date.getTime() + (((chosen_time.getHours() * 60) + chosen_time.getMinutes()) * 60) * 1000);
19
+
20
+ $('#worklogSubmit')[0].disabled = (chosen > (new Date()));
21
+ $('#worklogStoptime')[0].value = (chosen.getTime() / 1000);
22
+ };
23
+
24
+ $('#worklogStopDate').datepicker({onSelect: change_handler,
25
+ maxDate: new Date()});
26
+ $('#worklogPopup').jqm({modal: true}).jqmShow();
27
+
28
+ try
29
+ {
30
+ $('#worklogStopTime').timeEntry({show24Hours: true, spinnerImage: ''});
31
+ $('#worklogStopTime').timeEntry('setTime', mynow);
32
+ $('#worklogStopTime').bind('change', change_handler);
33
+ }
34
+ catch (er)
35
+ {
36
+ alert(er);
37
+ }
38
+ return false;
39
+ }
40
+ };
@@ -0,0 +1,208 @@
1
+ /* Main Style Sheet for jQuery UI date picker */
2
+ #datepicker_div, .datepicker_inline {
3
+ font-family: Arial, Helvetica, sans-serif;
4
+ font-size: 14px;
5
+ padding: 0;
6
+ margin: 0;
7
+ background: #ddd;
8
+ width: 185px;
9
+ }
10
+ #datepicker_div {
11
+ display: none;
12
+ border: 1px solid #777;
13
+ z-index: 9999; /*must have*/
14
+ }
15
+ .datepicker_inline {
16
+ float: left;
17
+ display: block;
18
+ border: 0;
19
+ }
20
+ .datepicker_rtl {
21
+ direction: rtl;
22
+ }
23
+ .datepicker_dialog {
24
+ padding: 5px !important;
25
+ border: 4px ridge #ddd !important;
26
+ }
27
+ button.datepicker_trigger {
28
+ width: 25px;
29
+ }
30
+ img.datepicker_trigger {
31
+ margin: 2px;
32
+ vertical-align: middle;
33
+ }
34
+ .datepicker_prompt {
35
+ float: left;
36
+ padding: 2px;
37
+ background: #ddd;
38
+ color: #000;
39
+ }
40
+ * html .datepicker_prompt {
41
+ width: 185px;
42
+ }
43
+ .datepicker_control, .datepicker_links, .datepicker_header, .datepicker {
44
+ clear: both;
45
+ float: left;
46
+ width: 100%;
47
+ color: #fff;
48
+ }
49
+ .datepicker_control {
50
+ background: #400;
51
+ padding: 2px 0px;
52
+ }
53
+ .datepicker_links {
54
+ background: #000;
55
+ padding: 2px 0px;
56
+ }
57
+ .datepicker_control, .datepicker_links {
58
+ font-weight: bold;
59
+ font-size: 80%;
60
+ letter-spacing: 1px;
61
+ }
62
+ .datepicker_links label { /* disabled links */
63
+ padding: 2px 5px;
64
+ color: #888;
65
+ }
66
+ .datepicker_clear, .datepicker_prev {
67
+ float: left;
68
+ width: 34%;
69
+ }
70
+ .datepicker_rtl .datepicker_clear, .datepicker_rtl .datepicker_prev {
71
+ float: right;
72
+ text-align: right;
73
+ }
74
+ .datepicker_current {
75
+ float: left;
76
+ width: 30%;
77
+ text-align: center;
78
+ }
79
+ .datepicker_close, .datepicker_next {
80
+ float: right;
81
+ width: 34%;
82
+ text-align: right;
83
+ }
84
+ .datepicker_rtl .datepicker_close, .datepicker_rtl .datepicker_next {
85
+ float: left;
86
+ text-align: left;
87
+ }
88
+ .datepicker_header {
89
+ padding: 1px 0 3px;
90
+ background: #333;
91
+ text-align: center;
92
+ font-weight: bold;
93
+ height: 1.3em;
94
+ }
95
+ .datepicker_header select {
96
+ background: #333;
97
+ color: #fff;
98
+ border: 0px;
99
+ font-weight: bold;
100
+ }
101
+ .datepicker {
102
+ background: #ccc;
103
+ text-align: center;
104
+ font-size: 100%;
105
+ }
106
+ .datepicker a {
107
+ display: block;
108
+ width: 100%;
109
+ }
110
+ .datepicker_titleRow {
111
+ background: #777;
112
+ }
113
+ .datepicker_daysRow {
114
+ background: #eee;
115
+ color: #666;
116
+ }
117
+ .datepicker_weekCol {
118
+ background: #777;
119
+ color: #fff;
120
+ }
121
+ .datepicker_daysCell {
122
+ color: #000;
123
+ border: 1px solid #ddd;
124
+ }
125
+ .datepicker_daysCell a{
126
+ display: block;
127
+ }
128
+ .datepicker_weekEndCell {
129
+ background: #ddd;
130
+ }
131
+ .datepicker_titleRow .datepicker_weekEndCell {
132
+ background: #777;
133
+ }
134
+ .datepicker_daysCellOver {
135
+ background: #fff;
136
+ border: 1px solid #777;
137
+ }
138
+ .datepicker_unselectable {
139
+ color: #888;
140
+ }
141
+ .datepicker_today {
142
+ background: #fcc !important;
143
+ }
144
+ .datepicker_currentDay {
145
+ background: #999 !important;
146
+ }
147
+ .datepicker_status {
148
+ background: #ddd;
149
+ width: 100%;
150
+ font-size: 80%;
151
+ text-align: center;
152
+ }
153
+
154
+ /* ________ Datepicker Links _______
155
+
156
+ ** Reset link properties and then override them with !important */
157
+ #datepicker_div a, .datepicker_inline a {
158
+ cursor: pointer;
159
+ margin: 0;
160
+ padding: 0;
161
+ background: none;
162
+ color: #000;
163
+ }
164
+ .datepicker_inline .datepicker_links a {
165
+ padding: 0 5px !important;
166
+ }
167
+ .datepicker_control a, .datepicker_links a {
168
+ padding: 2px 5px !important;
169
+ color: #eee !important;
170
+ }
171
+ .datepicker_titleRow a {
172
+ color: #eee !important;
173
+ }
174
+ .datepicker_control a:hover {
175
+ background: #fdd !important;
176
+ color: #333 !important;
177
+ }
178
+ .datepicker_links a:hover, .datepicker_titleRow a:hover {
179
+ background: #ddd !important;
180
+ color: #333 !important;
181
+ }
182
+
183
+ /* ___________ MULTIPLE MONTHS _________*/
184
+
185
+ .datepicker_multi .datepicker {
186
+ border: 1px solid #777;
187
+ }
188
+ .datepicker_oneMonth {
189
+ float: left;
190
+ width: 185px;
191
+ }
192
+ .datepicker_newRow {
193
+ clear: left;
194
+ }
195
+
196
+ /* ___________ IE6 IFRAME FIX ________ */
197
+
198
+ .datepicker_cover {
199
+ display: none; /*sorry for IE5*/
200
+ display/**/: block; /*sorry for IE5*/
201
+ position: absolute; /*must have*/
202
+ z-index: -1; /*must have*/
203
+ filter: mask(); /*must have*/
204
+ top: -4px; /*must have*/
205
+ left: -4px; /*must have*/
206
+ width: 200px; /*must have*/
207
+ height: 200px; /*must have*/
208
+ }