keithsalisbury-subtrac 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +20 -0
- data/README.rdoc +7 -0
- data/Rakefile +56 -0
- data/VERSION.yml +4 -0
- data/bin/subtrac +40 -0
- data/lib/subtrac.rb +245 -0
- data/lib/subtrac/common/clients/index.wsgi +89 -0
- data/lib/subtrac/common/favicon.ico +0 -0
- data/lib/subtrac/common/images/trac/banner_bg.jpg +0 -0
- data/lib/subtrac/common/images/trac/bar_bg.gif +0 -0
- data/lib/subtrac/common/images/trac/footer_back.png +0 -0
- data/lib/subtrac/common/images/trac/main_bg.gif +0 -0
- data/lib/subtrac/common/images/trac/saint_logo_small.png +0 -0
- data/lib/subtrac/common/static/404.html +14 -0
- data/lib/subtrac/common/styles/trac.css +222 -0
- data/lib/subtrac/common/trac.ini +178 -0
- data/lib/subtrac/config/config.yml +54 -0
- data/lib/subtrac/passwords +1 -0
- data/lib/subtrac/shared/trac.ini +178 -0
- data/lib/subtrac/templates/location.erb +16 -0
- data/lib/subtrac/templates/projects/blank/svn/branches/README +0 -0
- data/lib/subtrac/templates/projects/blank/svn/tags/README +0 -0
- data/lib/subtrac/templates/projects/blank/svn/trunk/README +0 -0
- data/lib/subtrac/templates/projects/blank/trac/wiki/WikiStart +57 -0
- data/lib/subtrac/templates/projects/new/svn/trunk/trac/wiki/WikiStart +46 -0
- data/lib/subtrac/templates/projects/new/trac/wiki/WikiStart +23 -0
- data/lib/subtrac/templates/projects/trac_theme/svn/trunk/index/index.html +22 -0
- data/lib/subtrac/templates/projects/trac_theme/svn/trunk/templates/layout.html +56 -0
- data/lib/subtrac/templates/projects/trac_theme/svn/trunk/templates/site.html +27 -0
- data/lib/subtrac/templates/projects/trac_theme/svn/trunk/templates/theme.html +86 -0
- data/lib/subtrac/templates/projects/trac_theme/trac/wiki/WikiStart +4 -0
- data/lib/subtrac/templates/trac.erb +25 -0
- data/lib/subtrac/templates/vhost.erb +35 -0
- data/lib/subtrac/trac-plugins/advancedticketworkflowplugin/advancedworkflow/__init__.py +0 -0
- data/lib/subtrac/trac-plugins/advancedticketworkflowplugin/advancedworkflow/controller.py +419 -0
- data/lib/subtrac/trac-plugins/advancedticketworkflowplugin/setup.cfg +3 -0
- data/lib/subtrac/trac-plugins/advancedticketworkflowplugin/setup.py +20 -0
- data/lib/subtrac/trac-plugins/clientsplugin/clients/__init__.py +0 -0
- data/lib/subtrac/trac-plugins/clientsplugin/clients/action.py +28 -0
- data/lib/subtrac/trac-plugins/clientsplugin/clients/action_email.py +168 -0
- data/lib/subtrac/trac-plugins/clientsplugin/clients/action_zendesk_forum.py +137 -0
- data/lib/subtrac/trac-plugins/clientsplugin/clients/admin.py +91 -0
- data/lib/subtrac/trac-plugins/clientsplugin/clients/api.py +199 -0
- data/lib/subtrac/trac-plugins/clientsplugin/clients/client.py +105 -0
- data/lib/subtrac/trac-plugins/clientsplugin/clients/events.py +287 -0
- data/lib/subtrac/trac-plugins/clientsplugin/clients/eventsadmin.py +71 -0
- data/lib/subtrac/trac-plugins/clientsplugin/clients/htdocs/clients.css +4 -0
- data/lib/subtrac/trac-plugins/clientsplugin/clients/model.py +135 -0
- data/lib/subtrac/trac-plugins/clientsplugin/clients/processor.py +70 -0
- data/lib/subtrac/trac-plugins/clientsplugin/clients/reportmanager.py +142 -0
- data/lib/subtrac/trac-plugins/clientsplugin/clients/reports.py +231 -0
- data/lib/subtrac/trac-plugins/clientsplugin/clients/summary.py +27 -0
- data/lib/subtrac/trac-plugins/clientsplugin/clients/summary_milestone.py +152 -0
- data/lib/subtrac/trac-plugins/clientsplugin/clients/summary_ticketchanges.py +160 -0
- data/lib/subtrac/trac-plugins/clientsplugin/clients/templates/admin_client_events.html +124 -0
- data/lib/subtrac/trac-plugins/clientsplugin/clients/templates/admin_clients.html +134 -0
- data/lib/subtrac/trac-plugins/clientsplugin/cron/changes.xslt +132 -0
- data/lib/subtrac/trac-plugins/clientsplugin/cron/run-client-event +97 -0
- data/lib/subtrac/trac-plugins/clientsplugin/cron/summary.xslt +161 -0
- data/lib/subtrac/trac-plugins/clientsplugin/setup.py +43 -0
- data/lib/subtrac/trac-plugins/estimationtoolsplugin/estimationtools/__init__.py +4 -0
- data/lib/subtrac/trac-plugins/estimationtoolsplugin/estimationtools/burndownchart.py +273 -0
- data/lib/subtrac/trac-plugins/estimationtoolsplugin/estimationtools/hoursinplaceeditor.py +44 -0
- data/lib/subtrac/trac-plugins/estimationtoolsplugin/estimationtools/hoursremaining.py +36 -0
- data/lib/subtrac/trac-plugins/estimationtoolsplugin/estimationtools/htdocs/jquery-1.2.3.min.js +32 -0
- data/lib/subtrac/trac-plugins/estimationtoolsplugin/estimationtools/htdocs/jquery.jeditable.js +409 -0
- data/lib/subtrac/trac-plugins/estimationtoolsplugin/estimationtools/htdocs/jquery.jeditable.mini.js +30 -0
- data/lib/subtrac/trac-plugins/estimationtoolsplugin/estimationtools/templates/edithours.html +53 -0
- data/lib/subtrac/trac-plugins/estimationtoolsplugin/estimationtools/tests/burndownchart.py +181 -0
- data/lib/subtrac/trac-plugins/estimationtoolsplugin/estimationtools/tests/hoursremaining.py +66 -0
- data/lib/subtrac/trac-plugins/estimationtoolsplugin/estimationtools/tests/workloadchart.py +47 -0
- data/lib/subtrac/trac-plugins/estimationtoolsplugin/estimationtools/utils.py +93 -0
- data/lib/subtrac/trac-plugins/estimationtoolsplugin/estimationtools/workloadchart.py +86 -0
- data/lib/subtrac/trac-plugins/estimationtoolsplugin/setup.py +20 -0
- data/lib/subtrac/trac-plugins/timingandestimationplugin/scripts/SumRollups.js +23 -0
- data/lib/subtrac/trac-plugins/timingandestimationplugin/scripts/adw_tracdb.py +128 -0
- data/lib/subtrac/trac-plugins/timingandestimationplugin/scripts/git-post-receive +40 -0
- data/lib/subtrac/trac-plugins/timingandestimationplugin/scripts/trac-post-commit.py +285 -0
- data/lib/subtrac/trac-plugins/timingandestimationplugin/scripts/trac_billing.py +173 -0
- data/lib/subtrac/trac-plugins/timingandestimationplugin/scripts/utils/__init__.py +0 -0
- data/lib/subtrac/trac-plugins/timingandestimationplugin/scripts/utils/mail.py +164 -0
- data/lib/subtrac/trac-plugins/timingandestimationplugin/setup.py +69 -0
- data/lib/subtrac/trac-plugins/timingandestimationplugin/timingandestimationplugin/__init__.py +1 -0
- data/lib/subtrac/trac-plugins/timingandestimationplugin/timingandestimationplugin/api.py +292 -0
- data/lib/subtrac/trac-plugins/timingandestimationplugin/timingandestimationplugin/blackmagic.py +172 -0
- data/lib/subtrac/trac-plugins/timingandestimationplugin/timingandestimationplugin/dbhelper.py +178 -0
- data/lib/subtrac/trac-plugins/timingandestimationplugin/timingandestimationplugin/htdocs/billingplugin.css +25 -0
- data/lib/subtrac/trac-plugins/timingandestimationplugin/timingandestimationplugin/htdocs/field_disabler.js +6 -0
- data/lib/subtrac/trac-plugins/timingandestimationplugin/timingandestimationplugin/htdocs/formatDate.js +356 -0
- data/lib/subtrac/trac-plugins/timingandestimationplugin/timingandestimationplugin/htdocs/js/tip_centerwindow.js +100 -0
- data/lib/subtrac/trac-plugins/timingandestimationplugin/timingandestimationplugin/htdocs/js/tip_followscroll.js +84 -0
- data/lib/subtrac/trac-plugins/timingandestimationplugin/timingandestimationplugin/htdocs/js/wz_tooltip.js +1149 -0
- data/lib/subtrac/trac-plugins/timingandestimationplugin/timingandestimationplugin/htdocs/linkifyer.js +119 -0
- data/lib/subtrac/trac-plugins/timingandestimationplugin/timingandestimationplugin/htdocs/query.js +73 -0
- data/lib/subtrac/trac-plugins/timingandestimationplugin/timingandestimationplugin/htdocs/ticket.js +165 -0
- data/lib/subtrac/trac-plugins/timingandestimationplugin/timingandestimationplugin/query_webui.py +28 -0
- data/lib/subtrac/trac-plugins/timingandestimationplugin/timingandestimationplugin/reportmanager.py +221 -0
- data/lib/subtrac/trac-plugins/timingandestimationplugin/timingandestimationplugin/reports.py +675 -0
- data/lib/subtrac/trac-plugins/timingandestimationplugin/timingandestimationplugin/reports_filter.py +150 -0
- data/lib/subtrac/trac-plugins/timingandestimationplugin/timingandestimationplugin/statuses.py +25 -0
- data/lib/subtrac/trac-plugins/timingandestimationplugin/timingandestimationplugin/tande_filters.py +131 -0
- data/lib/subtrac/trac-plugins/timingandestimationplugin/timingandestimationplugin/templates/billing.cs +84 -0
- data/lib/subtrac/trac-plugins/timingandestimationplugin/timingandestimationplugin/templates/billing.html +104 -0
- data/lib/subtrac/trac-plugins/timingandestimationplugin/timingandestimationplugin/ticket_daemon.py +194 -0
- data/lib/subtrac/trac-plugins/timingandestimationplugin/timingandestimationplugin/ticket_policy.py +62 -0
- data/lib/subtrac/trac-plugins/timingandestimationplugin/timingandestimationplugin/ticket_webui.py +28 -0
- data/lib/subtrac/trac-plugins/timingandestimationplugin/timingandestimationplugin/usermanual.py +127 -0
- data/lib/subtrac/trac-plugins/timingandestimationplugin/timingandestimationplugin/webui.py +129 -0
- data/lib/subtrac/trac-plugins/worklogplugin/setup.py +29 -0
- data/lib/subtrac/trac-plugins/worklogplugin/worklog/__init__.py +1 -0
- data/lib/subtrac/trac-plugins/worklogplugin/worklog/api.py +187 -0
- data/lib/subtrac/trac-plugins/worklogplugin/worklog/htdocs/jqModal.css +40 -0
- data/lib/subtrac/trac-plugins/worklogplugin/worklog/htdocs/jqModal.js +67 -0
- data/lib/subtrac/trac-plugins/worklogplugin/worklog/htdocs/jquery.mousewheel.pack.js +12 -0
- data/lib/subtrac/trac-plugins/worklogplugin/worklog/htdocs/jquery.timeentry.pack.js +7 -0
- data/lib/subtrac/trac-plugins/worklogplugin/worklog/htdocs/tracWorklog.js +40 -0
- data/lib/subtrac/trac-plugins/worklogplugin/worklog/htdocs/ui.datepicker.css +208 -0
- data/lib/subtrac/trac-plugins/worklogplugin/worklog/htdocs/ui.datepicker.js +1439 -0
- data/lib/subtrac/trac-plugins/worklogplugin/worklog/htdocs/work.png +0 -0
- data/lib/subtrac/trac-plugins/worklogplugin/worklog/htdocs/work.xcf +0 -0
- data/lib/subtrac/trac-plugins/worklogplugin/worklog/htdocs/worklogplugin.css +80 -0
- data/lib/subtrac/trac-plugins/worklogplugin/worklog/htdocs/workstart.png +0 -0
- data/lib/subtrac/trac-plugins/worklogplugin/worklog/htdocs/workstop.png +0 -0
- data/lib/subtrac/trac-plugins/worklogplugin/worklog/manager.py +336 -0
- data/lib/subtrac/trac-plugins/worklogplugin/worklog/reports.py +598 -0
- data/lib/subtrac/trac-plugins/worklogplugin/worklog/templates/worklog.html +45 -0
- data/lib/subtrac/trac-plugins/worklogplugin/worklog/templates/worklog_stop.html +70 -0
- data/lib/subtrac/trac-plugins/worklogplugin/worklog/templates/worklog_user.html +40 -0
- data/lib/subtrac/trac-plugins/worklogplugin/worklog/templates/worklog_webadminui.html +59 -0
- data/lib/subtrac/trac-plugins/worklogplugin/worklog/ticket_daemon.py +33 -0
- data/lib/subtrac/trac-plugins/worklogplugin/worklog/ticket_filter.py +153 -0
- data/lib/subtrac/trac-plugins/worklogplugin/worklog/timeline_hook.py +96 -0
- data/lib/subtrac/trac-plugins/worklogplugin/worklog/usermanual.py +29 -0
- data/lib/subtrac/trac-plugins/worklogplugin/worklog/util.py +31 -0
- data/lib/subtrac/trac-plugins/worklogplugin/worklog/webadminui.py +47 -0
- data/lib/subtrac/trac-plugins/worklogplugin/worklog/webui.py +174 -0
- data/lib/subtrac/trac-plugins/worklogplugin/worklog/xmlrpc.py +73 -0
- data/lib/subtrac/version.rb +4 -0
- 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
|
+
}
|