Merge lp:~coopebm1/sloecode/wiki-merge-proposal into lp:sloecode
- wiki-merge-proposal
- Merge into trunk
Status: | Needs review |
---|---|
Proposed branch: | lp:~coopebm1/sloecode/wiki-merge-proposal |
Merge into: | lp:sloecode |
Diff against target: |
2926 lines (+2321/-63) 57 files modified
.bzrignore (+1/-0) debian/README.Debian (+38/-0) debian/apache-config/sloecode (+37/-0) debian/changelog (+39/-0) debian/compat (+1/-0) debian/control (+28/-0) debian/copyright (+1/-0) debian/dbtemplate.ini (+11/-0) debian/po/POTFILES.in (+2/-0) debian/po/templates.pot (+76/-0) debian/postinst (+95/-0) debian/postrm (+32/-0) debian/prerm (+12/-0) debian/pycompat (+1/-0) debian/rules (+11/-0) debian/sloecode.config (+25/-0) debian/sloecode.dirs (+10/-0) debian/sloecode.init (+66/-0) debian/sloecode.install (+11/-0) debian/sloecode.links (+1/-0) debian/sloecode.templates (+24/-0) debian/sloecode.wsgi (+4/-0) debian/source/lintian-overrides (+2/-0) development.ini (+7/-1) sloecode/bzr/display.py (+7/-3) sloecode/bzr/factory.py (+23/-18) sloecode/config/environment.py (+0/-1) sloecode/config/routing.py (+11/-2) sloecode/controllers/admin/project.py (+8/-9) sloecode/controllers/admin/wiki.py (+91/-0) sloecode/controllers/project.py (+8/-12) sloecode/controllers/wiki.py (+145/-0) sloecode/lib/base.py (+2/-0) sloecode/lib/helpers.py (+3/-0) sloecode/model/__init__.py (+1/-0) sloecode/model/meta.py (+10/-2) sloecode/model/template.py (+72/-0) sloecode/public/css/smoothness/jquery-ui-1.8.23.custom.css (+563/-0) sloecode/public/css/wiki.css (+239/-0) sloecode/public/js/jquery-ui-1.8.23.custom.min.js (+69/-0) sloecode/public/js/wiki-edit-helpers.js (+66/-0) sloecode/sshserver/accesslog.py (+0/-1) sloecode/templates/admin/template-edit.html (+17/-0) sloecode/templates/admin/template-view.html (+12/-0) sloecode/templates/admin/template-viewall.html (+13/-0) sloecode/templates/project-details.html (+5/-0) sloecode/templates/wiki/base.html (+21/-0) sloecode/templates/wiki/directory.html (+31/-0) sloecode/templates/wiki/edit.html (+42/-0) sloecode/templates/wiki/load-template.html (+3/-0) sloecode/templates/wiki/newfile.html (+43/-0) sloecode/templates/wiki/page.html (+31/-0) sloecode/templates/wiki/text.html (+5/-0) sloecode/tests/test_project.py (+1/-1) sloecode/tests/test_template.py (+83/-0) sloecode/websetup.py (+2/-13) sloecode/wikkid_view_adapters.py (+159/-0) |
To merge this branch: | bzr merge lp:~coopebm1/sloecode/wiki-merge-proposal |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Thomi Richards | Pending | ||
Review via email:
|
Commit message
Description of the change
Adds a project wiki for each project.
Uses wikkid wiki to give users the ability to create documentation for their project from within sloecode.
As an administrator, templates can be created and edited so that users can create pages based on these templates.
Upon creating a project, A wiki branch is created in the same place as trunk.
- 244. By Brendan Cooper
-
Added debian packaging stuff
Unmerged revisions
- 244. By Brendan Cooper
-
Added debian packaging stuff
- 243. By Brendan Cooper
-
Added some tests for the template model.
- 242. By Sam Bailey
-
Merged Brendan's PEP fixes into main codebase.
- 241. By Sam Bailey
-
Refactored wiki css and javascript into seperate files.
- 240. By Sam Bailey
-
Link-adding dialog closes when done on edit page.
- 239. By Sam Bailey
-
Replaced the wikkidviewadapters class structure with one file
- 238. By Sam Bailey
-
Skeleton for wikkid view adapters being done in one file
- 237. By Sam Bailey
-
Reverted un-needed PEP8 changes
- 236. By Sam Bailey
-
PEP8 fixes
- 235. By Sam Bailey
-
Added some JQuery to allow users to automatically generate links via a javascript popup when using Markdown
Preview Diff
1 | === modified file '.bzrignore' |
2 | --- .bzrignore 2011-06-18 22:06:36 +0000 |
3 | +++ .bzrignore 2012-09-26 01:36:19 +0000 |
4 | @@ -6,3 +6,4 @@ |
5 | sloecode/public/help |
6 | twistd.pid |
7 | ./docs/build/* |
8 | +p |
9 | |
10 | === added directory 'debian' |
11 | === added file 'debian/README.Debian' |
12 | --- debian/README.Debian 1970-01-01 00:00:00 +0000 |
13 | +++ debian/README.Debian 2012-09-26 01:36:19 +0000 |
14 | @@ -0,0 +1,38 @@ |
15 | +# |
16 | +# configuration of the Pylons application 'sloecode' for production use |
17 | +# |
18 | + |
19 | +# Configure your contact email address and SMTP server |
20 | +[DEFAULT] |
21 | +debug = true |
22 | +email_to = root@localhost |
23 | +smtp_server = localhost |
24 | +error_email_from = paste@localhost |
25 | + |
26 | +# Configure the IP address and TCP port where the web server will listen |
27 | +[server:main] |
28 | +use = egg:Paste#http |
29 | +host = 0.0.0.0 |
30 | +port = 5000 |
31 | + |
32 | +# Configure the Pylons application |
33 | +# IMPORTANT: change the session_secret to another long string |
34 | +[app:main] |
35 | +use = egg:sloecode |
36 | +cache_dir = /var/cache/pylons-sloecode |
37 | +session_key = sloecode |
38 | +session_secret = HJtS52NNQzesc87wuO4zvU8CI90M9OCg |
39 | + |
40 | +# Specify the database for SQLAlchemy to use via |
41 | +# pylons.database.session_context. |
42 | +#sqlalchemy.dburi = sqlite:///location/of/sqlite.db |
43 | +#sqlalchemy.dburi = postgres://username:password@host/database |
44 | +#sqlalchemy.dburi = mysql://username:password@host/database |
45 | + |
46 | +# Specify the database for SQLObject to use via pylons.database.PackageHub. |
47 | +#sqlobject.dburi = sqlite:///location/of/sqlite.db |
48 | +#sqlobject.dburi = postgres://username:password@host/database |
49 | +#sqlobject.dburi = mysql://username:password@host/database |
50 | + |
51 | +# Only enable debug mode if needed. It's dangerous in production use! |
52 | +set debug = false |
53 | |
54 | === added directory 'debian/apache-config' |
55 | === added file 'debian/apache-config/sloecode' |
56 | --- debian/apache-config/sloecode 1970-01-01 00:00:00 +0000 |
57 | +++ debian/apache-config/sloecode 2012-09-26 01:36:19 +0000 |
58 | @@ -0,0 +1,37 @@ |
59 | +# |
60 | +# Apache configuration for sloecode web-app. See comments below for configuration: |
61 | + |
62 | +# set this to the hostname you want to serve with this VirtualHost, or keep it as-is |
63 | +# to serve all VirtualHosts. NOTE: Keeping it as-is will conflict with the default |
64 | +# apache2 site (you will have to disable it manually). |
65 | +<VirtualHost *:80> |
66 | + |
67 | + # Replace this with the name of your server: |
68 | + ServerName localhost |
69 | + # Replace this with the email address of the server admin. |
70 | + ServerAdmin root@localhost |
71 | + |
72 | + DocumentRoot /var/www |
73 | + |
74 | + # Change the first part of this to be where you want the site hosted. |
75 | + # The default will host the site at the root of your particular hostname. |
76 | + # NOTE: If you're not hosting this at the host-root, the first part of this |
77 | + # directive SHOULD NOT have a trailing slash! |
78 | + WSGIScriptAlias / /usr/share/sloecode/wsgi/sloecode.wsgi |
79 | + |
80 | + # The first argument to this must be unique across ALL mod_wsgi daemons. |
81 | + # If you're going to run sloecode on multiple virtual hosts then you may |
82 | + # need to change the first parameter to be something unique. |
83 | + # |
84 | + # The string at the end includes the user and group that the wsgi daemon will |
85 | + # run as. |
86 | + WSGIDaemonProcess SloecodeWsgiDaemon user=SLOECODE_USER group=SLOECODE_GROUP |
87 | + # This must match the first parameter of the line above: |
88 | + WSGIProcessGroup SloecodeWsgiDaemon |
89 | + |
90 | + <Directory /usr/share/sloecode/wsgi> |
91 | + Order allow,deny |
92 | + Allow from all |
93 | + </Directory> |
94 | + |
95 | +</VirtualHost> |
96 | |
97 | === added file 'debian/changelog' |
98 | --- debian/changelog 1970-01-01 00:00:00 +0000 |
99 | +++ debian/changelog 2012-09-26 01:36:19 +0000 |
100 | @@ -0,0 +1,39 @@ |
101 | +sloecode (1.1) precise; urgency=low |
102 | + |
103 | + * Sloecode error pages no link to missing static resources (Closes: 914550) |
104 | + * Creating a new project repository and branch no longer fails when running |
105 | + against bzr 2.1 (Closes: 948483) |
106 | + * Deleting a branch no works when running against bzrlib 2.1 (Closes: |
107 | + 965830) |
108 | + * Help page links now open correctly across Firefix, Chrome, and IE browsers |
109 | + (Closes: 757157) |
110 | + * Generated URLs now take into account the application url prefix. (Closes: |
111 | + 912118) |
112 | + * Can now delete branches pushed to the Bazaar server. (Closes: 826476) |
113 | + * Cleaned up static resource locations. (Closes: 912114) |
114 | + * Add the option to make Bazaar smart-server run under tcpd wrapper (Closes: |
115 | + 746815) |
116 | + * Fixed a problem in the Sloecode Person model that made it incompatible |
117 | + with SQLAlchemy 0.7 (Closes: 814106) |
118 | + * Configuraing the port for the sloecode web application to listen to is now |
119 | + much easier. (Closes: 814537) |
120 | + * Script to generate help pages on installation is now compatible with |
121 | + python virtual environments (Closes: 814700) |
122 | + * Page footers no longer cover content for very long pages (Closes: 825606) |
123 | + * Fixed a crash when a user tried to push to a branch without the correct |
124 | + permissions (Closes: 860915) |
125 | + * Static resources linked to by CSS files now use relative paths. (Closes: |
126 | + 912112) |
127 | + * Several static resources linked to from CSS files had incorrect case in |
128 | + path names (Closes: 912113) |
129 | + * SSH Keys are now stored in /var/lib/sloecode/keys, in accordance with FHS. |
130 | + * Sloecode now supports both public and private projects. |
131 | + * Newlines in commit messages are now displayed correctly in HTML pages. |
132 | + |
133 | + -- Thomi Richards <thomi@perv> Sat, 03 Mar 2012 13:37:24 +1300 |
134 | + |
135 | +sloecode (0.1dev) unstable; urgency=low |
136 | + |
137 | + * Initial release. (Closes: #735628) |
138 | + |
139 | + -- Thomi Richards <sloecode-dev@lists.launchpad.net> Thu, 14 Apr 2011 16:56:40 +1200 |
140 | |
141 | === added file 'debian/compat' |
142 | --- debian/compat 1970-01-01 00:00:00 +0000 |
143 | +++ debian/compat 2012-09-26 01:36:19 +0000 |
144 | @@ -0,0 +1,1 @@ |
145 | +5 |
146 | |
147 | === added file 'debian/control' |
148 | --- debian/control 1970-01-01 00:00:00 +0000 |
149 | +++ debian/control 2012-09-26 01:36:19 +0000 |
150 | @@ -0,0 +1,28 @@ |
151 | +Source: sloecode |
152 | +Section: vcs |
153 | +Priority: optional |
154 | +Maintainer: Sloecode Developers <sloecode-dev@lists.launchpad.net> |
155 | +Build-Depends: debhelper (>= 7.0.50~), python (>= 2.5), |
156 | + python-setuptools (>= 0.6b3), python-docutils, po-debconf, python-nose, |
157 | + python-pylons, python-zope.component, python-pyasn1, |
158 | + python-crypto, python-repoze.what-plugins, python-jinja2, |
159 | + python-twisted-conch, python-bzrlib | bzr (<< 2.3) |
160 | +Standards-Version: 3.9.2 |
161 | +XS-Python-Version: current, >=2.3 |
162 | + |
163 | +Package: sloecode |
164 | +Architecture: all |
165 | +Depends: ${python:Depends}, ${misc:Depends}, python-pylons (>=0.10), |
166 | + python-sqlalchemy (>=0.6), python-sqlalchemy-ext (>= 0.6), python-jinja2, |
167 | + python-formencode, python-repoze.who, python-repoze.who-plugins, |
168 | + python-repoze.what, python-repoze.what-plugins, python-zope.component, |
169 | + python-zope.event, bzr, dbconfig-common, python-pastescript, |
170 | + libapache2-mod-wsgi, sqlite3 | mysql-server |
171 | +Recommends: python-mysqldb |
172 | +Pre-Depends: python-twisted-conch |
173 | +XB-Python-Version: ${python:Versions} |
174 | +Description: Bazaar VCS server for small teams |
175 | + Sloecode is an installable server application for hosting and managing Bazaar |
176 | + repositories. It provides a web-based user interface to create and manage |
177 | + teams of developers with several possible levels of access to one or more |
178 | + projects. |
179 | |
180 | === added file 'debian/copyright' |
181 | --- debian/copyright 1970-01-01 00:00:00 +0000 |
182 | +++ debian/copyright 2012-09-26 01:36:19 +0000 |
183 | @@ -0,0 +1,1 @@ |
184 | +Copyright 2012 Thomi Richards <thomir@gmail.com> |
185 | |
186 | === added file 'debian/dbtemplate.ini' |
187 | --- debian/dbtemplate.ini 1970-01-01 00:00:00 +0000 |
188 | +++ debian/dbtemplate.ini 2012-09-26 01:36:19 +0000 |
189 | @@ -0,0 +1,11 @@ |
190 | +; database config file for sloecode. See main sloecode file for other |
191 | +; (non-database) configuration options. |
192 | + |
193 | +[database] |
194 | +dbuser = _DBC_DBUSER_ |
195 | +dbpass = _DBC_DBPASS_ |
196 | +dbname = _DBC_DBNAME_ |
197 | +dbserver = _DBC_DBSERVER_ |
198 | +dbport = _DBC_DBPORT_ |
199 | +dbtype = _DBC_DBTYPE_ |
200 | +dbpath = _DBC_BASEPATH_ |
201 | \ No newline at end of file |
202 | |
203 | === added directory 'debian/po' |
204 | === added file 'debian/po/POTFILES.in' |
205 | --- debian/po/POTFILES.in 1970-01-01 00:00:00 +0000 |
206 | +++ debian/po/POTFILES.in 2012-09-26 01:36:19 +0000 |
207 | @@ -0,0 +1,2 @@ |
208 | +[type: gettext/rfc822deb] sloecode.templates |
209 | + |
210 | |
211 | === added file 'debian/po/templates.pot' |
212 | --- debian/po/templates.pot 1970-01-01 00:00:00 +0000 |
213 | +++ debian/po/templates.pot 2012-09-26 01:36:19 +0000 |
214 | @@ -0,0 +1,76 @@ |
215 | +# SOME DESCRIPTIVE TITLE. |
216 | +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER |
217 | +# This file is distributed under the same license as the PACKAGE package. |
218 | +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. |
219 | +# |
220 | +#, fuzzy |
221 | +msgid "" |
222 | +msgstr "" |
223 | +"Project-Id-Version: sloecode\n" |
224 | +"Report-Msgid-Bugs-To: sloecode@packages.debian.org\n" |
225 | +"POT-Creation-Date: 2012-02-06 14:29+1300\n" |
226 | +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" |
227 | +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" |
228 | +"Language-Team: LANGUAGE <LL@li.org>\n" |
229 | +"Language: \n" |
230 | +"MIME-Version: 1.0\n" |
231 | +"Content-Type: text/plain; charset=CHARSET\n" |
232 | +"Content-Transfer-Encoding: 8bit\n" |
233 | + |
234 | +#. Type: string |
235 | +#. Description |
236 | +#: ../sloecode.templates:1001 |
237 | +msgid "User to run the sloecode WSGI daemon run as:" |
238 | +msgstr "" |
239 | + |
240 | +#. Type: string |
241 | +#. Description |
242 | +#: ../sloecode.templates:1001 |
243 | +msgid "" |
244 | +"The sloecode web application runs under an Apache mod_wsgi daemon process. " |
245 | +"You may customize which user this process runs as." |
246 | +msgstr "" |
247 | + |
248 | +#. Type: note |
249 | +#. Description |
250 | +#: ../sloecode.templates:2001 |
251 | +msgid "Setup Complete" |
252 | +msgstr "" |
253 | + |
254 | +#. Type: note |
255 | +#. Description |
256 | +#: ../sloecode.templates:2001 |
257 | +msgid "" |
258 | +"The sloecode code-forge has been installed. To continue you need to inspect " |
259 | +"the apache site configuration in:" |
260 | +msgstr "" |
261 | + |
262 | +#. Type: note |
263 | +#. Description |
264 | +#: ../sloecode.templates:2001 |
265 | +msgid "/etc/apache2/sites-available/sloecode" |
266 | +msgstr "" |
267 | + |
268 | +#. Type: note |
269 | +#. Description |
270 | +#: ../sloecode.templates:2001 |
271 | +msgid "and then enable the site by running:" |
272 | +msgstr "" |
273 | + |
274 | +#. Type: note |
275 | +#. Description |
276 | +#: ../sloecode.templates:2001 |
277 | +msgid "a2ensite sloecode" |
278 | +msgstr "" |
279 | + |
280 | +#. Type: note |
281 | +#. Description |
282 | +#: ../sloecode.templates:2001 |
283 | +msgid "At any time you may re-configure sloecode by running:" |
284 | +msgstr "" |
285 | + |
286 | +#. Type: note |
287 | +#. Description |
288 | +#: ../sloecode.templates:2001 |
289 | +msgid "dpkg-reconfigure sloecode" |
290 | +msgstr "" |
291 | |
292 | === added file 'debian/postinst' |
293 | --- debian/postinst 1970-01-01 00:00:00 +0000 |
294 | +++ debian/postinst 2012-09-26 01:36:19 +0000 |
295 | @@ -0,0 +1,95 @@ |
296 | +#!/bin/sh |
297 | +set -e |
298 | + |
299 | +# for all DB types, generate a config file: |
300 | +dbc_generate_include="template:/etc/sloecode/database.ini" |
301 | +dbc_generate_include_args="-o template_infile=/etc/sloecode/dbtemplate.ini --ucf" |
302 | +dbc_generate_include_perms="644" |
303 | + |
304 | +. /usr/share/debconf/confmodule |
305 | +# source dbconfig-common stuff |
306 | +. /usr/share/dbconfig-common/dpkg/postinst |
307 | +dbc_go sloecode $@ || true |
308 | + |
309 | +# Finally, create the public/private key pair so we can start the smart server |
310 | +# 'Here' document for creating keys in python: |
311 | +OUTFILE=`tempfile -s ".py"` |
312 | +( |
313 | +cat << 'EOF' |
314 | +#!/usr/bin/python |
315 | + |
316 | +""" |
317 | +Generates 1024-bit RSA key pairs for the sloecode server. We could use |
318 | +ssh-keygen for this, but it's not guaranteed to be installed, whereas |
319 | +python-twisted.conch is. |
320 | + |
321 | +Keys are only generated if "install" is the first argument to this script |
322 | +and the key files do not already exist. |
323 | +""" |
324 | +import getpass, os, socket |
325 | +from os.path import dirname, exists |
326 | +from os import system |
327 | +from sys import argv |
328 | + |
329 | +from twisted.conch.ssh import keys, common |
330 | +from twisted.python import filepath, randbytes |
331 | + |
332 | +from Crypto.PublicKey import RSA |
333 | + |
334 | +KEY_LENGTH = 1024 |
335 | +FILE_PATH='/var/lib/sloecode/keys/sloecode_rsa' |
336 | + |
337 | +if not exists(FILE_PATH) and not exists(FILE_PATH+'.pub'): |
338 | + #print 'Generating public/private rsa key pair.' |
339 | + key = RSA.generate(KEY_LENGTH, randbytes.secureRandom) |
340 | + |
341 | + keyObj = keys.Key(key) |
342 | + comment = '%s@%s' % (getpass.getuser(), socket.gethostname()) |
343 | + |
344 | + # Pass a password string as the second argument to toString() below to set |
345 | + # a key password. |
346 | + filepath.FilePath(FILE_PATH).setContent(keyObj.toString('openssh', None)) |
347 | + os.chmod(FILE_PATH, 0600) |
348 | + |
349 | + filepath.FilePath(FILE_PATH + '.pub').setContent( |
350 | + keyObj.public().toString('openssh', comment)) |
351 | + os.chmod(FILE_PATH+'.pub', 0644) |
352 | + |
353 | + #print "Key pair stored in: " + dirname(FILE_PATH) |
354 | + #print "Key fingerprint is: " + keyObj.fingerprint() |
355 | +EOF |
356 | +)>$OUTFILE |
357 | + |
358 | +python $OUTFILE |
359 | +rm $OUTFILE |
360 | + |
361 | + |
362 | +# get user & group config parameters: |
363 | +db_get sloecode/run_as_user |
364 | +SC_USER=$RET |
365 | + |
366 | +#db_get sloecode/run_as_group |
367 | +#SC_GROUP=$RET |
368 | + |
369 | +# add user and group to the system: |
370 | +if ! getent passwd $SC_USER >/dev/null; then |
371 | + useradd -r $RET |
372 | + #groupadd -r $RET |
373 | +fi |
374 | + |
375 | +# modify apache config file appropriately: |
376 | +sed -i "s/SLOECODE_USER/${SC_USER}/" /etc/apache2/sites-available/sloecode |
377 | +sed -i "s/SLOECODE_GROUP/${SC_USER}/" /etc/apache2/sites-available/sloecode |
378 | + |
379 | +# change ownership of bazaar staging area: |
380 | +chown -R $SC_USER.$SC_USER /srv/sloecode |
381 | +# and the pylons sloecode cache directory: |
382 | +chown -R $SC_USER.$SC_USER /var/cache/pylons-sloecode |
383 | + |
384 | +# run any auto-generated debhelper commands: |
385 | +# this will start the sloecode servers (and maybe do other things as well) |
386 | +#DEBHELPER# |
387 | + |
388 | +# the twistd app leaves at least one file descriptor open, which cases the debconf |
389 | +# front-end to hang, which means I need to do this manually: |
390 | +db_stop |
391 | |
392 | === added file 'debian/postrm' |
393 | --- debian/postrm 1970-01-01 00:00:00 +0000 |
394 | +++ debian/postrm 2012-09-26 01:36:19 +0000 |
395 | @@ -0,0 +1,32 @@ |
396 | +#!/bin/sh |
397 | +set -e |
398 | + |
399 | +# postrm maintainer script for sloecode |
400 | + |
401 | +# source debconf stuff |
402 | +. /usr/share/debconf/confmodule |
403 | +# source dbconfig-common stuff |
404 | +. /usr/share/dbconfig-common/dpkg/postrm |
405 | +dbc_go sloecode $@ |
406 | + |
407 | +cf="/etc/sloecode/database.ini" |
408 | +if [ "$1" = "purge" ]; then |
409 | + rm -f $cf |
410 | + if which ucf >/dev/null 2>&1; then |
411 | + ucf --purge $cf |
412 | + fi |
413 | + # Remove user and group we ran the sloecode wsgi daemon as: |
414 | + db_get sloecode/run_as_user |
415 | + SC_USER=$RET |
416 | + if getent passwd $SC_USER >/dev/null; then |
417 | + userdel $SC_USER |
418 | + fi |
419 | + db_get sloecode/run_as_user |
420 | + SC_GROUP=$RET |
421 | + if getent group $SC_GROUP >/dev/null; then |
422 | + groupdel $SC_GROUP |
423 | + fi |
424 | +fi |
425 | + |
426 | +# run any auto-generated debhelper commands: |
427 | +#DEBHELPER# |
428 | |
429 | === added file 'debian/prerm' |
430 | --- debian/prerm 1970-01-01 00:00:00 +0000 |
431 | +++ debian/prerm 2012-09-26 01:36:19 +0000 |
432 | @@ -0,0 +1,12 @@ |
433 | +#!/bin/sh |
434 | +set -e |
435 | +# prerm maintainer script for sloecode |
436 | + |
437 | +# source debconf stuff |
438 | +. /usr/share/debconf/confmodule |
439 | +# source dbconfig-common stuff |
440 | +. /usr/share/dbconfig-common/dpkg/prerm |
441 | +dbc_go sloecode $@ |
442 | + |
443 | +# run any auto-generated debhelper commands: |
444 | +#DEBHELPER# |
445 | |
446 | === added file 'debian/pycompat' |
447 | --- debian/pycompat 1970-01-01 00:00:00 +0000 |
448 | +++ debian/pycompat 2012-09-26 01:36:19 +0000 |
449 | @@ -0,0 +1,1 @@ |
450 | +2 |
451 | |
452 | === added file 'debian/rules' |
453 | --- debian/rules 1970-01-01 00:00:00 +0000 |
454 | +++ debian/rules 2012-09-26 01:36:19 +0000 |
455 | @@ -0,0 +1,11 @@ |
456 | +#!/usr/bin/make -f |
457 | + |
458 | +export DH_VERBOSE=1 |
459 | + |
460 | +%: |
461 | + dh $@ --with python2 --buildsystem=python_distutils |
462 | + |
463 | +override_dh_auto_configure: |
464 | + make help |
465 | + dh_auto_configure -- --buildsystem=python_distutils |
466 | + |
467 | |
468 | === added file 'debian/sloecode.config' |
469 | --- debian/sloecode.config 1970-01-01 00:00:00 +0000 |
470 | +++ debian/sloecode.config 2012-09-26 01:36:19 +0000 |
471 | @@ -0,0 +1,25 @@ |
472 | +#!/bin/sh |
473 | +set -e |
474 | + |
475 | +# config maintainer script for sloecode |
476 | + |
477 | +# source debconf stuff |
478 | +. /usr/share/debconf/confmodule |
479 | + |
480 | +# dbconfig-common stuff: |
481 | +if [ -f /usr/share/dbconfig-common/dpkg/config ]; then |
482 | + # we support mysql and sqlite3 |
483 | + dbc_dbtypes="mysql, sqlite3" |
484 | + # for sqlite, store the database next to bazaar repos |
485 | + dbc_basepath="/srv/sloecode/" |
486 | + |
487 | + |
488 | + # source dbconfig-common stuff |
489 | + . /usr/share/dbconfig-common/dpkg/config |
490 | + dbc_go sloecode $@ || true |
491 | +fi |
492 | + |
493 | +# get user to run wsgi daemon as: |
494 | +db_input high sloecode/run_as_user || true |
495 | +db_go || true |
496 | + |
497 | |
498 | === added file 'debian/sloecode.dirs' |
499 | --- debian/sloecode.dirs 1970-01-01 00:00:00 +0000 |
500 | +++ debian/sloecode.dirs 2012-09-26 01:36:19 +0000 |
501 | @@ -0,0 +1,10 @@ |
502 | +/var/cache/pylons-sloecode |
503 | +/var/log/sloecode |
504 | +/var/lib/sloecode |
505 | +/var/lib/sloecode/keys |
506 | +/srv/sloecode |
507 | +/etc/sloecode |
508 | +/usr/share/sloecode/wsgi |
509 | +/usr/share/sloecode/dbpatches |
510 | +/usr/share/sloecode/dbpatches/patches |
511 | +/usr/share/dbconfig-common/data/sloecode/install |
512 | |
513 | === added file 'debian/sloecode.init' |
514 | --- debian/sloecode.init 1970-01-01 00:00:00 +0000 |
515 | +++ debian/sloecode.init 2012-09-26 01:36:19 +0000 |
516 | @@ -0,0 +1,66 @@ |
517 | +#!/bin/sh |
518 | +# |
519 | +### BEGIN INIT INFO |
520 | +# Provides: sloecode |
521 | +# Required-Start: $network $local_fs |
522 | +# Required-Stop: $network $local_fs |
523 | +# Default-Start: 2 3 4 5 |
524 | +# Default-Stop: 0 1 6 |
525 | +# Short-Description: Start and stop the Pylons-based application 'sloecode' |
526 | +### END INIT INFO |
527 | + |
528 | +export SLOECODE_CONFIG="/etc/sloecode/production.ini" |
529 | +PASTE_OPTIONS="--pid-file=/var/run/sloecode-webapp --log-file /var/log/sloecode/webapp.log --daemon $SLOECODE_CONFIG" |
530 | +TWISTD_OPTIONS="--pidfile=/var/run/sloecode-smartserver --logfile=/var/log/sloecode/smartserver.log --no_save --python /etc/default/bzrssh.tac" |
531 | + |
532 | +smartserver_start() |
533 | +{ |
534 | + twistd $TWISTD_OPTIONS |
535 | +} |
536 | + |
537 | +smartserver_stop() |
538 | +{ |
539 | + if [ -e /var/run/sloecode-smartserver ] |
540 | + then |
541 | + kill `cat /var/run/sloecode-smartserver` || true |
542 | + fi |
543 | +} |
544 | + |
545 | +smartserver_restart() |
546 | +{ |
547 | + smartserver_stop |
548 | + smartserver_start |
549 | +} |
550 | + |
551 | + |
552 | +case "$1" in |
553 | + start) |
554 | + smartserver_start |
555 | + echo "Starting Sloecode" |
556 | + ;; |
557 | + |
558 | + stop) |
559 | + smartserver_stop |
560 | + echo "Stopping Sloecode" |
561 | + ;; |
562 | + |
563 | + reload) |
564 | + smartserver_restart |
565 | + ;; |
566 | + |
567 | + force-reload) |
568 | + smartserver_restart |
569 | + ;; |
570 | + |
571 | + restart) |
572 | + smartserver_restart |
573 | + ;; |
574 | + |
575 | + status) |
576 | + # TODO: check smartserver status by looking at pid file. |
577 | + ;; |
578 | + |
579 | + *) |
580 | + echo "Usage: $0 {stop|start|reload}" >&2 |
581 | + ;; |
582 | +esac |
583 | |
584 | === added file 'debian/sloecode.install' |
585 | --- debian/sloecode.install 1970-01-01 00:00:00 +0000 |
586 | +++ debian/sloecode.install 2012-09-26 01:36:19 +0000 |
587 | @@ -0,0 +1,11 @@ |
588 | +production.ini /etc/sloecode/ |
589 | +sloecode/sshserver/bzrssh.tac /etc/default/ |
590 | + |
591 | +dbpatches/schema/sqlite3 /usr/share/dbconfig-common/data/sloecode/install/ |
592 | +dbpatches/schema/mysql /usr/share/dbconfig-common/data/sloecode/install/ |
593 | + |
594 | +dbpatches/patches/* /usr/share/sloecode/dbpatches/patches/ |
595 | + |
596 | +debian/sloecode.wsgi /usr/share/sloecode/wsgi/ |
597 | +debian/dbtemplate.ini /etc/sloecode/ |
598 | +debian/apache-config/sloecode /etc/apache2/sites-available/ |
599 | |
600 | === added file 'debian/sloecode.links' |
601 | --- debian/sloecode.links 1970-01-01 00:00:00 +0000 |
602 | +++ debian/sloecode.links 2012-09-26 01:36:19 +0000 |
603 | @@ -0,0 +1,1 @@ |
604 | +/etc/sloecode/production.ini /etc/default/sloecode-production.ini |
605 | |
606 | === added file 'debian/sloecode.templates' |
607 | --- debian/sloecode.templates 1970-01-01 00:00:00 +0000 |
608 | +++ debian/sloecode.templates 2012-09-26 01:36:19 +0000 |
609 | @@ -0,0 +1,24 @@ |
610 | +Template: sloecode/run_as_user |
611 | +Type: string |
612 | +Default: sloecode |
613 | +_Description: User to run the sloecode WSGI daemon run as: |
614 | + The sloecode web application runs under an Apache mod_wsgi daemon process. You |
615 | + may customize which user this process runs as. |
616 | + |
617 | +Template: sloecode/setup_complete |
618 | +Type: note |
619 | +_Description: Setup Complete |
620 | + The sloecode code-forge has been installed. To continue you need to inspect |
621 | + the apache site configuration in: |
622 | + . |
623 | + /etc/apache2/sites-available/sloecode |
624 | + . |
625 | + and then enable the site by running: |
626 | + . |
627 | + a2ensite sloecode |
628 | + . |
629 | + At any time you may re-configure sloecode by running: |
630 | + . |
631 | + dpkg-reconfigure sloecode |
632 | + |
633 | + |
634 | |
635 | === added file 'debian/sloecode.wsgi' |
636 | --- debian/sloecode.wsgi 1970-01-01 00:00:00 +0000 |
637 | +++ debian/sloecode.wsgi 2012-09-26 01:36:19 +0000 |
638 | @@ -0,0 +1,4 @@ |
639 | +from paste.deploy import loadapp |
640 | +from os.path import realpath |
641 | +application = loadapp('config:' + realpath('/etc/default/sloecode-production.ini')) |
642 | + |
643 | |
644 | === added directory 'debian/source' |
645 | === added file 'debian/source/lintian-overrides' |
646 | --- debian/source/lintian-overrides 1970-01-01 00:00:00 +0000 |
647 | +++ debian/source/lintian-overrides 2012-09-26 01:36:19 +0000 |
648 | @@ -0,0 +1,2 @@ |
649 | +# This is where sloecode puts bzr repositories. |
650 | +sloecode: dir-or-file-in-srv |
651 | |
652 | === modified file 'development.ini' |
653 | --- development.ini 2012-04-22 06:35:21 +0000 |
654 | +++ development.ini 2012-09-26 01:36:19 +0000 |
655 | @@ -17,6 +17,7 @@ |
656 | bzr_person_root = %(bzr_root)s/person |
657 | bzr_deleted_project_root = %(bzr_root)s/deleted_project |
658 | bzr_deleted_person_root = %(bzr_root)s/deleted_person |
659 | +bzr_template_root = %(bzr_root)s/template |
660 | |
661 | # Change this to change the port the sloecode web interface runs on: |
662 | http_server_port = 5000 |
663 | @@ -82,8 +83,13 @@ |
664 | handlers = |
665 | qualname = sloecode |
666 | |
667 | +[logger_wikkid] |
668 | +level = DEBUG |
669 | +handlers = |
670 | +qualname = wikkid |
671 | + |
672 | [logger_sqlalchemy] |
673 | -level = INFO |
674 | +level = WARN |
675 | handlers = |
676 | qualname = sqlalchemy.engine |
677 | # "level = INFO" logs SQL queries. |
678 | |
679 | === modified file 'sloecode/bzr/display.py' |
680 | --- sloecode/bzr/display.py 2012-05-01 04:14:51 +0000 |
681 | +++ sloecode/bzr/display.py 2012-09-26 01:36:19 +0000 |
682 | @@ -99,13 +99,17 @@ |
683 | """Get the branch name. |
684 | |
685 | In fact this returns the branch nickname, since the branch name |
686 | - seems to always be set to None |
687 | + seems to always be set to None. |
688 | + |
689 | """ |
690 | return html_escape(self.branch.get_config().get_nickname()) |
691 | |
692 | + def get_bzrlib_branch(self): |
693 | + """Get the bzrlib.branch.Branch.""" |
694 | + return self.branch |
695 | + |
696 | def get_log(self): |
697 | - """Get a log of this branch. |
698 | - """ |
699 | + """Get a log of this branch.""" |
700 | from bzrlib.log import Logger, make_log_request_dict |
701 | |
702 | buf = StringIO() |
703 | |
704 | === modified file 'sloecode/bzr/factory.py' |
705 | --- sloecode/bzr/factory.py 2012-05-01 04:14:51 +0000 |
706 | +++ sloecode/bzr/factory.py 2012-09-26 01:36:19 +0000 |
707 | @@ -51,7 +51,7 @@ |
708 | to_transport.ensure_base() |
709 | newdir = format.initialize_on_transport(to_transport) |
710 | repo = newdir.create_repository(shared=True) |
711 | - repo.set_make_working_trees(False) |
712 | + repo.set_make_working_trees(True) |
713 | return repo |
714 | |
715 | |
716 | @@ -94,23 +94,28 @@ |
717 | def create_shared_repository_for_project(self, project_name): |
718 | """Create a repository for the project with a trunk branch.""" |
719 | dir_name = self.get_project_repo_dir(project_name) |
720 | - if os.path.exists(dir_name): |
721 | - logger.warning("Path '%s' already exists, not creating a new repository for project '%s'", |
722 | - dir_name, project_name) |
723 | - else: |
724 | - repo = create_shared_repo(dir_name) |
725 | - # Now to create the trunk. |
726 | - try: |
727 | - to_transport = repo.user_transport.clone('trunk') |
728 | - except AttributeError: |
729 | - # Fixes lp:948483 bzrlib version 2.1 (which is current in debian |
730 | - # squeeze) uses a different name for this: |
731 | - to_transport = repo._transport.clone('trunk') |
732 | - format = bzrdir.format_registry.make_bzrdir('default') |
733 | - branch = bzrdir.BzrDir.create_branch_convenience( |
734 | - to_transport.base, format=format, |
735 | - possible_transports=[to_transport]) |
736 | - branch.set_append_revisions_only(True) |
737 | + repo = create_shared_repo(dir_name) |
738 | + return repo |
739 | + |
740 | + def create_shared_repository_for_templates(self): |
741 | + """Create a repository to store global templates in.""" |
742 | + dir_name = self.get_template_dir() |
743 | + repo = create_shared_repo(dir_name) |
744 | + return repo |
745 | + |
746 | + def create_branch_on_repository (self, repo, branch_name): |
747 | + """Create a branch for the project.""" |
748 | + try: |
749 | + to_transport = repo.user_transport.clone(branch_name) |
750 | + except AttributeError: |
751 | + # Fixes lp:948483 bzrlib version 2.1 (which is current in debian |
752 | + # squeeze) uses a different name for this: |
753 | + to_transport = repo._transport.clone(branch_name) |
754 | + format = bzrdir.format_registry.make_bzrdir('default') |
755 | + branch = bzrdir.BzrDir.create_branch_convenience( |
756 | + to_transport.base, format=format, |
757 | + possible_transports=[to_transport]) |
758 | + branch.set_append_revisions_only(True) |
759 | |
760 | def get_repository_for_project(self, project_name): |
761 | """Get a bzrlib.repository.Repository object for a given project |
762 | |
763 | === modified file 'sloecode/config/environment.py' |
764 | --- sloecode/config/environment.py 2012-05-01 04:14:51 +0000 |
765 | +++ sloecode/config/environment.py 2012-09-26 01:36:19 +0000 |
766 | @@ -33,7 +33,6 @@ |
767 | from sloecode.config.routing import make_map |
768 | from sloecode.model import init_model, maybe_upgrade_database |
769 | |
770 | - |
771 | def load_environment(global_conf, app_conf): |
772 | """Configure the Pylons environment via the ``pylons.config`` |
773 | object |
774 | |
775 | === modified file 'sloecode/config/routing.py' |
776 | --- sloecode/config/routing.py 2012-05-01 04:14:51 +0000 |
777 | +++ sloecode/config/routing.py 2012-09-26 01:36:19 +0000 |
778 | @@ -40,13 +40,14 @@ |
779 | |
780 | # CUSTOM ROUTES HERE |
781 | |
782 | - |
783 | # Map / to the index controller: |
784 | map.connect('/', controller='index', action='front_page') |
785 | # Map /p/foo |
786 | + map.connect('/p/{project_name}/wiki/+newfile', controller='wiki', action='new_file', postfix='/+newfile') |
787 | + map.connect('/p/{project_name}/wiki/{path:.*}', controller='wiki', action='wiki') |
788 | + map.connect('/p/{project_name}/wiki', controller='wiki', action='wiki') |
789 | map.connect('/p/{project_name}/{action}', controller='project') |
790 | map.connect('/p/{project_name}', controller='project', action='index') |
791 | - |
792 | # map '/me' to the portal page. This allows us to show the user portal |
793 | # no matter who logs in: |
794 | map.connect('/me', controller='person', action='me') |
795 | @@ -59,6 +60,14 @@ |
796 | map.connect('/a/person/{action}', controller='admin/person') |
797 | map.connect('/a/person/{action}/{id}', controller='admin/person') |
798 | |
799 | + map.connect('/a/template', controller='admin/wiki', action='list_templates') |
800 | + map.connect('/a/template/+load', controller='wiki', action='load_template') |
801 | + map.connect('/a/template/+newfile', controller='admin/wiki', action='new_file') |
802 | + map.connect('/a/template/{filename}', controller='admin/wiki', action='view_template') |
803 | + map.connect('/a/template/{filename}/+edit', controller='admin/wiki', action='edit_template') |
804 | + # Don't actually need the filename in this map however it makes the URL nicer. |
805 | + map.connect('/a/template/{filename}/+save', controller='admin/wiki', action='save_template') |
806 | + |
807 | # TODO: I ahve no idea why we need this. It seems that the xmlrpc controller |
808 | # should be found without needing an explicit route to it, but I cannot seem |
809 | # to make it work. |
810 | |
811 | === modified file 'sloecode/controllers/admin/project.py' |
812 | --- sloecode/controllers/admin/project.py 2012-05-01 04:14:51 +0000 |
813 | +++ sloecode/controllers/admin/project.py 2012-09-26 01:36:19 +0000 |
814 | @@ -18,21 +18,16 @@ |
815 | import logging |
816 | import formencode |
817 | import formencode.htmlfill |
818 | - |
819 | +import sloecode.lib.helpers as h |
820 | from pylons import config, request |
821 | from pylons.controllers.util import redirect |
822 | - |
823 | from repoze.what.plugins.pylonshq import ControllerProtector |
824 | - |
825 | -from webhelpers.paginate import Page |
826 | - |
827 | from sloecode.lib.base import BaseController |
828 | from sloecode.model.project import Project, ProjectSchema |
829 | from sloecode.model.site_role import PROJECT_ADMIN |
830 | from sloecode.model.meta import Session |
831 | from sloecode.lib.predicates import has_site_role |
832 | -import sloecode.lib.helpers as h |
833 | - |
834 | +from webhelpers.paginate import Page |
835 | log = logging.getLogger(__name__) |
836 | |
837 | |
838 | @@ -74,8 +69,11 @@ |
839 | Session.commit() |
840 | h.flash("Project Added Successfully") |
841 | # Create a shared repo for the project. |
842 | - config['bzr.factory'].create_shared_repository_for_project( |
843 | + repo = config['bzr.factory'].create_shared_repository_for_project( |
844 | new_project.name) |
845 | + config['bzr.factory'].create_branch_on_repository (repo,'trunk') |
846 | + config['bzr.factory'].create_branch_on_repository (repo,'wiki') |
847 | + |
848 | return redirect(h.url(controller='admin/project', action='retrieve')) |
849 | |
850 | def retrieve(self): |
851 | @@ -88,7 +86,8 @@ |
852 | def update(self, id): |
853 | "Render project update form page." |
854 | |
855 | - return self.render('/admin/project-update.html', {'project': Project.get(id=id)[0]}) |
856 | + return self.render('/admin/project-update.html', |
857 | + {'project': Project.get(id=id)[0]}) |
858 | |
859 | def process_update(self, id): |
860 | "Process project update request." |
861 | |
862 | === added file 'sloecode/controllers/admin/wiki.py' |
863 | --- sloecode/controllers/admin/wiki.py 1970-01-01 00:00:00 +0000 |
864 | +++ sloecode/controllers/admin/wiki.py 2012-09-26 01:36:19 +0000 |
865 | @@ -0,0 +1,91 @@ |
866 | +# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- |
867 | +# |
868 | +# This program is free software: you can redistribute it and/or modify |
869 | +# it under the terms of the GNU General Public License as published by |
870 | +# the Free Software Foundation, either version 3 of the License, or |
871 | +# (at your option) any later version. |
872 | + |
873 | +# This program is distributed in the hope that it will be useful, |
874 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
875 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
876 | +# GNU General Public License for more details. |
877 | + |
878 | +# You should have received a copy of the GNU General Public License |
879 | +# along with this program. If not, see <http://www.gnu.org/licenses/>. |
880 | + |
881 | +# Copyright 2012 Sloecode Developers |
882 | + |
883 | + |
884 | +import urllib |
885 | +import formencode |
886 | +import formencode.htmlfill |
887 | +import sloecode.lib.helpers as h |
888 | + |
889 | +from pylons import request |
890 | +from pylons.controllers.util import redirect |
891 | +from repoze.what.plugins.pylonshq import ControllerProtector |
892 | +from sloecode.lib.predicates import has_site_role |
893 | +from sloecode.lib.base import BaseController |
894 | +from sloecode.model.site_role import PROJECT_ADMIN |
895 | +from sloecode.model.template import Template, TemplateSchema, get_template_names |
896 | +from sloecode.model.meta import Session |
897 | + |
898 | + |
899 | +@ControllerProtector(has_site_role(PROJECT_ADMIN)) |
900 | +class WikiController(BaseController): |
901 | + """Controller for wiki related operations.""" |
902 | + |
903 | + def edit_template(self, filename): |
904 | + """Edit wiki page templates and save wiki templates.""" |
905 | + |
906 | + template = Template.get(name=filename) |
907 | + existing_template = template[0] if template else None |
908 | + prefix = urllib.unquote(h.url.current()) |
909 | + prefix = prefix[1:-len("/+edit")] |
910 | + |
911 | + return self.render('admin/template-edit.html', |
912 | + {'template': existing_template, |
913 | + 'path': prefix}) |
914 | + |
915 | + def save_template(self, filename): |
916 | + """Save templates into the database.""" |
917 | + schema = TemplateSchema |
918 | + try: |
919 | + form_result = schema.to_python(request.params) |
920 | + except formencode.Invalid, e: |
921 | + errors = e.unpack_errors() |
922 | + return formencode.htmlfill.render(self.edit_template(filename), defaults=request.params, |
923 | + errors=errors) |
924 | + |
925 | + #If there is already a template in the database with this name then pull it |
926 | + #out and overwrite the values in it, otherwise create a new template. |
927 | + |
928 | + templates = Template.get(name=form_result['old_name']) |
929 | + new_template = templates[0] if templates else Template() |
930 | + new_template.name = form_result['name'] |
931 | + new_template.save_location = form_result['save_location'] |
932 | + new_template.description = form_result['description'] |
933 | + new_template.content = form_result['content'] |
934 | + |
935 | + #If no templates were found to begin with then we want to add the new template |
936 | + #to the DB, otherwise we are just overwriting an existing one. |
937 | + if templates == []: |
938 | + Session.add(new_template) |
939 | + Session.commit() |
940 | + return redirect(h.url(controller='admin/wiki', action='view_template', |
941 | + filename=form_result['name'])) |
942 | + |
943 | + def list_templates(self): |
944 | + """Return a list of all the templates stored in the database.""" |
945 | + template_names = get_template_names() |
946 | + return self.render('/admin/template-viewall.html', |
947 | + {'template_names': template_names}) |
948 | + |
949 | + def view_template(self, filename): |
950 | + """View an individual template.""" |
951 | + |
952 | + templates = Template.get(name=filename) |
953 | + template = templates[0] if templates else None |
954 | + return self.render('/admin/template-view.html', |
955 | + {'template' : template}) |
956 | + |
957 | |
958 | === modified file 'sloecode/controllers/project.py' |
959 | --- sloecode/controllers/project.py 2012-05-01 04:14:51 +0000 |
960 | +++ sloecode/controllers/project.py 2012-09-26 01:36:19 +0000 |
961 | @@ -14,24 +14,19 @@ |
962 | # along with this program. If not, see <http://www.gnu.org/licenses/>. |
963 | |
964 | # Copyright 2012 Sloecode Developers |
965 | - |
966 | -import logging |
967 | +import sloecode.lib.helpers as h |
968 | |
969 | from pylons import request, config |
970 | from pylons.controllers.util import redirect, abort |
971 | from repoze.what.plugins.pylonshq import ActionProtector |
972 | from repoze.what.predicates import Any |
973 | - |
974 | from sloecode.lib.base import BaseController |
975 | +from sloecode.lib.predicates import has_site_role, has_project_read_access, has_project_write_access |
976 | +from sloecode.model.membership import Membership |
977 | +from sloecode.model.meta import Session |
978 | +from sloecode.model.person import Person |
979 | from sloecode.model.project import Project |
980 | -from sloecode.model.person import Person |
981 | -from sloecode.model.membership import Membership |
982 | from sloecode.model.site_role import PROJECT_ADMIN |
983 | -from sloecode.model.meta import Session |
984 | -from sloecode.lib.predicates import has_site_role, has_project_read_access, has_project_write_access |
985 | -import sloecode.lib.helpers as h |
986 | - |
987 | -log = logging.getLogger(__name__) |
988 | |
989 | |
990 | class ProjectController(BaseController): |
991 | @@ -39,12 +34,12 @@ |
992 | model. |
993 | |
994 | This includes basic CRUD information. |
995 | + |
996 | """ |
997 | |
998 | @ActionProtector(Any(has_site_role(PROJECT_ADMIN), has_project_read_access())) |
999 | def index(self, project_name): |
1000 | - """Render project details page. |
1001 | - """ |
1002 | + """Render project details page.""" |
1003 | projects = Project.get(name=project_name) |
1004 | existing_project = projects[0] if projects else None |
1005 | |
1006 | @@ -59,6 +54,7 @@ |
1007 | # Grab the project repository object. This is actually an |
1008 | # adaptor that hides the bzrlib implementation. |
1009 | repo = config['bzr.factory'].get_repository_for_project(project_name) |
1010 | + |
1011 | return self.render('/project-details.html', |
1012 | {'project': existing_project, |
1013 | 'user_role': user_role, |
1014 | |
1015 | === added file 'sloecode/controllers/wiki.py' |
1016 | --- sloecode/controllers/wiki.py 1970-01-01 00:00:00 +0000 |
1017 | +++ sloecode/controllers/wiki.py 2012-09-26 01:36:19 +0000 |
1018 | @@ -0,0 +1,145 @@ |
1019 | +import logging |
1020 | +import sloecode.lib.helpers as h |
1021 | +import urllib |
1022 | + |
1023 | +from pylons import request, config |
1024 | +from pylons.controllers.util import abort |
1025 | +from repoze.what.plugins.pylonshq import ActionProtector |
1026 | +from repoze.what.predicates import Any |
1027 | +from sloecode.lib.base import BaseController |
1028 | +from sloecode.lib.predicates import has_site_role, has_project_write_access |
1029 | +from sloecode.model.project import Project |
1030 | +from sloecode.model.site_role import PROJECT_ADMIN |
1031 | +from sloecode.model.template import Template, get_template_names |
1032 | +from sloecode.wikkid_view_adapters import get_page_fragments |
1033 | +from wikkid.app import WikkidApp |
1034 | +from wikkid.user.bzr import create_bzr_user_from_author_string |
1035 | +from wikkid.filestore.bzr import BranchFileStore |
1036 | +from wikkid.context import ExecutionContext |
1037 | + |
1038 | + |
1039 | +log = logging.getLogger(__name__) |
1040 | + |
1041 | + |
1042 | +def _get_context(path): |
1043 | + """Returns an ExecutionContext with prefix as the script_name. |
1044 | + |
1045 | + Sets prefix to be the url minus the wiki path |
1046 | + |
1047 | + """ |
1048 | + prefix = urllib.unquote(h.url.current()) |
1049 | + if len(path) > 0: |
1050 | + prefix = prefix[:-(len(path) + 1)] |
1051 | + log.info("Prefix: '%s', current url: '%s'", prefix, h.url.current()) |
1052 | + return ExecutionContext(script_name=prefix, default_format="markdown") |
1053 | + |
1054 | + |
1055 | +def _change_home_crumb_name(crumbs): |
1056 | + """Change the title of the 'Home' crumb to 'Wiki Homepage'. |
1057 | + This works as it is always the first in the list. |
1058 | + |
1059 | + """ |
1060 | + changed_crumbs = [] |
1061 | + #Pull the crumb off the end and change it. |
1062 | + home_crumb = crumbs.next() |
1063 | + home_crumb.title = "Wiki Homepage" |
1064 | + changed_crumbs.append(home_crumb) |
1065 | + #Add the rest of the crumbs to the list. |
1066 | + for crumb in crumbs: |
1067 | + changed_crumbs.append(crumb) |
1068 | + return changed_crumbs |
1069 | + |
1070 | + |
1071 | +class WikiController(BaseController): |
1072 | + """Controller for non-administrative wiki actions.""" |
1073 | + def serve_wiki_page(self, path, branch, view_name=None): |
1074 | + """Returns the fragments from the determined Wikkid view adapter. |
1075 | + |
1076 | + Alternatively, the Wikkid view can be specified as a parameter. |
1077 | + |
1078 | + """ |
1079 | + context = _get_context(path) |
1080 | + #Create the WikkipApp and filestore |
1081 | + wikkid_filestore = BranchFileStore(branch.get_bzrlib_branch()) |
1082 | + app = WikkidApp(wikkid_filestore, execution_context=context) |
1083 | + |
1084 | + #Get the currently logged in user |
1085 | + environ = request.environ |
1086 | + user = environ['repoze.who.identity'].get('user') |
1087 | + #Make a fake Wikkid user from the currently logged in sloecode user |
1088 | + environ['wikkid.user'] = create_bzr_user_from_author_string("%s <%s>" % (user.name, user.email)) |
1089 | + |
1090 | + app_request, path = app.preprocess_environ(environ) |
1091 | + log.info("Path: " + path) |
1092 | + fragments = get_page_fragments(app, environ) |
1093 | + |
1094 | + #Go through the WikkidApp for static files of if view adapter can't |
1095 | + # be found (mostly used for binary/images) |
1096 | + if (path.startswith('/static/')) or (fragments is None): |
1097 | + return app(environ, self.start_response) |
1098 | + if fragments['breadcrumbs'] is not None: |
1099 | + fragments['breadcrumbs'] = _change_home_crumb_name(fragments['breadcrumbs']) |
1100 | + return fragments |
1101 | + |
1102 | + @ActionProtector(Any(has_site_role(PROJECT_ADMIN), has_project_write_access())) |
1103 | + def wiki(self, project_name, path=''): |
1104 | + """Render the wiki for the project. |
1105 | + |
1106 | + This includes everything that uses a Wikkid View. |
1107 | + |
1108 | + """ |
1109 | + projects = Project.get(name=project_name) |
1110 | + existing_project = projects[0] if projects else None |
1111 | + if existing_project: |
1112 | + repo = config['bzr.factory'].get_repository_for_project(project_name) |
1113 | + branch = repo.get_branch('wiki') |
1114 | + if branch is not None: |
1115 | + fragments = self.serve_wiki_page(path, branch) |
1116 | + |
1117 | + #fragments can sometimes return a WikkidApp response. |
1118 | + #We simply want to return this if this is the case |
1119 | + if isinstance(fragments, dict): |
1120 | + #Get template location from fragments['template'] |
1121 | + return self.render(fragments['template'], |
1122 | + {'fragments': fragments}) |
1123 | + return fragments |
1124 | + abort(404) |
1125 | + |
1126 | + @ActionProtector(Any(has_site_role(PROJECT_ADMIN), has_project_write_access())) |
1127 | + def new_file(self, project_name, postfix): |
1128 | + """Display dialogue for creating a new wiki file. |
1129 | + |
1130 | + postfix: The 'action' part of the url that matches this method's route. |
1131 | + |
1132 | + """ |
1133 | + #Construct the current sloecode+wikkid path |
1134 | + prefix = urllib.unquote(h.url.current()) |
1135 | + prefix = prefix[1:-len(postfix)] |
1136 | + log.info("Prefix: '%s', current url: '%s'", prefix, h.url.current()) |
1137 | + #Test that the project exists and has a branch called 'wiki' |
1138 | + projects = Project.get(name=project_name) |
1139 | + existing_project = projects[0] if projects else None |
1140 | + if existing_project: |
1141 | + repo = config['bzr.factory'].get_repository_for_project(project_name) |
1142 | + branch = repo.get_branch('wiki') |
1143 | + if branch is not None: |
1144 | + template_names = ['Please Select a Template'] |
1145 | + template_names.extend(get_template_names()) |
1146 | + return self.render('/wiki/newfile.html', |
1147 | + {'project': existing_project, |
1148 | + 'repo': repo, |
1149 | + 'path': prefix, |
1150 | + 'template_names' : template_names }) |
1151 | + abort(404) |
1152 | + |
1153 | + def load_template(self): |
1154 | + """Loads a template to the form.""" |
1155 | + try: |
1156 | + template_name = urllib.quote(request.params['template_name']) |
1157 | + except KeyError: |
1158 | + abort(406) |
1159 | + templates = Template.get(name=template_name) |
1160 | + template = templates[0] if templates else None |
1161 | + log.info(vars(template)) |
1162 | + return self.render('/wiki/load-template.html', |
1163 | + {'template': template}) |
1164 | |
1165 | === modified file 'sloecode/lib/base.py' |
1166 | --- sloecode/lib/base.py 2012-05-01 04:14:51 +0000 |
1167 | +++ sloecode/lib/base.py 2012-09-26 01:36:19 +0000 |
1168 | @@ -24,9 +24,11 @@ |
1169 | from pylons.templating import render_jinja2 as render |
1170 | from pylons import request |
1171 | |
1172 | +import sloecode.lib.helpers as h |
1173 | from sloecode.model.meta import Session |
1174 | |
1175 | |
1176 | + |
1177 | class BaseController(WSGIController): |
1178 | "Base class for all sloecode controllers." |
1179 | |
1180 | |
1181 | === modified file 'sloecode/lib/helpers.py' |
1182 | --- sloecode/lib/helpers.py 2012-05-01 04:14:51 +0000 |
1183 | +++ sloecode/lib/helpers.py 2012-09-26 01:36:19 +0000 |
1184 | @@ -29,6 +29,7 @@ |
1185 | from webhelpers.html.tags import stylesheet_link, javascript_link, ModelTags, hidden, select |
1186 | from webhelpers.html.tags import checkbox, image, textarea |
1187 | |
1188 | + |
1189 | # url allows us to generate URLs for specific controllers on disk, which |
1190 | # makes it easier to reorganise routes without having to touch template code: |
1191 | # Those of you who are used to url should use this in exactly the same way. |
1192 | @@ -46,9 +47,11 @@ |
1193 | # a simple link_to implementation that handles a confirm kwarg that prints |
1194 | # very simple javascript asking the user if they really want to continue. |
1195 | from webhelpers.html.tags import link_to as _link_to |
1196 | + |
1197 | def link_to(label, url, **kwargs): |
1198 | """A patched version of the link_to function that accepts a confirm |
1199 | parameter. |
1200 | + |
1201 | """ |
1202 | # only add JS if the user has not already put something in onclick handler |
1203 | if 'confirm' in kwargs and 'onclick' not in kwargs: |
1204 | |
1205 | === modified file 'sloecode/model/__init__.py' |
1206 | --- sloecode/model/__init__.py 2012-05-01 04:14:51 +0000 |
1207 | +++ sloecode/model/__init__.py 2012-09-26 01:36:19 +0000 |
1208 | @@ -29,6 +29,7 @@ |
1209 | from sloecode.model.project import Project |
1210 | from sloecode.model.site_role import SiteRole |
1211 | from sloecode.model.version import DatabaseVersion |
1212 | +from sloecode.model.template import Template |
1213 | |
1214 | logger = logging.getLogger(__name__) |
1215 | CURRENT_SCHEMA_VERSION=4 |
1216 | |
1217 | === modified file 'sloecode/model/meta.py' |
1218 | --- sloecode/model/meta.py 2012-05-01 04:14:51 +0000 |
1219 | +++ sloecode/model/meta.py 2012-09-26 01:36:19 +0000 |
1220 | @@ -40,6 +40,8 @@ |
1221 | |
1222 | # A simple mix-in class that contains several methods that wrap sqlalchemy |
1223 | # methods, making common operations a bit easier: |
1224 | + |
1225 | + |
1226 | class QueryMixin(object): |
1227 | """A mix-in class that provides easier query methods than the default |
1228 | SQLAlchemy ones. |
1229 | @@ -47,8 +49,14 @@ |
1230 | |
1231 | @classmethod |
1232 | def get(cls, **kwargs): |
1233 | - """Wrap the SQLAlchemy crap up in this function. Return a list of Person |
1234 | - objects that match the args passed in. |
1235 | + """Wrap the SQLAlchemy crap up in this function. |
1236 | + |
1237 | + Return a list of Person objects that match the args passed in. |
1238 | + |
1239 | """ |
1240 | return Session.query(cls).filter_by(**kwargs).all() |
1241 | |
1242 | + @classmethod |
1243 | + def get_one(cls, **kwargs): |
1244 | + """Return ONE object""" |
1245 | + return Session.query(cls).filter_by(**kwargs).first() |
1246 | |
1247 | === added file 'sloecode/model/template.py' |
1248 | --- sloecode/model/template.py 1970-01-01 00:00:00 +0000 |
1249 | +++ sloecode/model/template.py 2012-09-26 01:36:19 +0000 |
1250 | @@ -0,0 +1,72 @@ |
1251 | +# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- |
1252 | +# |
1253 | +# This program is free software: you can redistribute it and/or modify |
1254 | +# it under the terms of the GNU General Public License as published by |
1255 | +# the Free Software Foundation, either version 3 of the License, or |
1256 | +# (at your option) any later version. |
1257 | + |
1258 | +# This program is distributed in the hope that it will be useful, |
1259 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
1260 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
1261 | +# GNU General Public License for more details. |
1262 | + |
1263 | +# You should have received a copy of the GNU General Public License |
1264 | +# along with this program. If not, see <http://www.gnu.org/licenses/>. |
1265 | + |
1266 | +# Copyright 2012 Sloecode Developers |
1267 | + |
1268 | +"""Template model.""" |
1269 | +import formencode |
1270 | +import re |
1271 | + |
1272 | +from sloecode.model.meta import Base, QueryMixin |
1273 | +from sqlalchemy import Column |
1274 | +from sqlalchemy.types import Integer, Text |
1275 | + |
1276 | + |
1277 | +def get_template_names(): |
1278 | + templates = Template.get() |
1279 | + template_names = [] |
1280 | + for template in templates: |
1281 | + template_names.append(template.name) |
1282 | + return template_names |
1283 | + |
1284 | + |
1285 | +class Template(Base, QueryMixin): |
1286 | + """ A model for a page template in sloecode.""" |
1287 | + __tablename__ = "template" |
1288 | + |
1289 | + id = Column(Integer, primary_key=True) |
1290 | + name = Column(Text, unique=True) |
1291 | + |
1292 | + description = Column(Text) |
1293 | + save_location = Column(Text) |
1294 | + content = Column(Text) |
1295 | + |
1296 | + |
1297 | +class UniqueTemplate(formencode.FancyValidator): |
1298 | + """A simple formencode validator that checks Project names are unique.""" |
1299 | + |
1300 | + template_regex = re.compile(r'^[a-z0-9][a-z0-9_.-]{2,23}$') |
1301 | + |
1302 | + def _to_python(self, value, state): |
1303 | + """Validate form-data.""" |
1304 | + value = value.strip() |
1305 | + if not self.template_regex.match(value): |
1306 | + raise formencode.Invalid( |
1307 | + 'A template name must be lower case letters, numbers, or _-., and be 3-24 characters long.', |
1308 | + value, state) |
1309 | + return value |
1310 | + |
1311 | + |
1312 | +class TemplateSchema(formencode.Schema): |
1313 | + """A formencode schema for the Project object.""" |
1314 | + |
1315 | + allow_extra_fields = True |
1316 | + filter_extra_fields = True |
1317 | + |
1318 | + name = UniqueTemplate(not_empty=True) |
1319 | + old_name = formencode.validators.String(not_empty=False) |
1320 | + description = formencode.validators.String(not_empty=False) |
1321 | + save_location = formencode.validators.String(not_empty=True) |
1322 | + content = formencode.validators.String(not_empty=False) |
1323 | |
1324 | === added file 'sloecode/public/css/ico_file.gif' |
1325 | Binary files sloecode/public/css/ico_file.gif 1970-01-01 00:00:00 +0000 and sloecode/public/css/ico_file.gif 2012-09-26 01:36:19 +0000 differ |
1326 | === added file 'sloecode/public/css/ico_folder.gif' |
1327 | Binary files sloecode/public/css/ico_folder.gif 1970-01-01 00:00:00 +0000 and sloecode/public/css/ico_folder.gif 2012-09-26 01:36:19 +0000 differ |
1328 | === added file 'sloecode/public/css/ico_folder_up.gif' |
1329 | Binary files sloecode/public/css/ico_folder_up.gif 1970-01-01 00:00:00 +0000 and sloecode/public/css/ico_folder_up.gif 2012-09-26 01:36:19 +0000 differ |
1330 | === added directory 'sloecode/public/css/smoothness' |
1331 | === added directory 'sloecode/public/css/smoothness/images' |
1332 | === added file 'sloecode/public/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png' |
1333 | Binary files sloecode/public/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png 1970-01-01 00:00:00 +0000 and sloecode/public/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png 2012-09-26 01:36:19 +0000 differ |
1334 | === added file 'sloecode/public/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png' |
1335 | Binary files sloecode/public/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png 1970-01-01 00:00:00 +0000 and sloecode/public/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png 2012-09-26 01:36:19 +0000 differ |
1336 | === added file 'sloecode/public/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png' |
1337 | Binary files sloecode/public/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png 1970-01-01 00:00:00 +0000 and sloecode/public/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png 2012-09-26 01:36:19 +0000 differ |
1338 | === added file 'sloecode/public/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png' |
1339 | Binary files sloecode/public/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png 1970-01-01 00:00:00 +0000 and sloecode/public/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png 2012-09-26 01:36:19 +0000 differ |
1340 | === added file 'sloecode/public/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png' |
1341 | Binary files sloecode/public/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png 1970-01-01 00:00:00 +0000 and sloecode/public/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png 2012-09-26 01:36:19 +0000 differ |
1342 | === added file 'sloecode/public/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png' |
1343 | Binary files sloecode/public/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png 1970-01-01 00:00:00 +0000 and sloecode/public/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png 2012-09-26 01:36:19 +0000 differ |
1344 | === added file 'sloecode/public/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png' |
1345 | Binary files sloecode/public/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png 1970-01-01 00:00:00 +0000 and sloecode/public/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png 2012-09-26 01:36:19 +0000 differ |
1346 | === added file 'sloecode/public/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png' |
1347 | Binary files sloecode/public/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png 1970-01-01 00:00:00 +0000 and sloecode/public/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png 2012-09-26 01:36:19 +0000 differ |
1348 | === added file 'sloecode/public/css/smoothness/images/ui-icons_222222_256x240.png' |
1349 | Binary files sloecode/public/css/smoothness/images/ui-icons_222222_256x240.png 1970-01-01 00:00:00 +0000 and sloecode/public/css/smoothness/images/ui-icons_222222_256x240.png 2012-09-26 01:36:19 +0000 differ |
1350 | === added file 'sloecode/public/css/smoothness/images/ui-icons_2e83ff_256x240.png' |
1351 | Binary files sloecode/public/css/smoothness/images/ui-icons_2e83ff_256x240.png 1970-01-01 00:00:00 +0000 and sloecode/public/css/smoothness/images/ui-icons_2e83ff_256x240.png 2012-09-26 01:36:19 +0000 differ |
1352 | === added file 'sloecode/public/css/smoothness/images/ui-icons_454545_256x240.png' |
1353 | Binary files sloecode/public/css/smoothness/images/ui-icons_454545_256x240.png 1970-01-01 00:00:00 +0000 and sloecode/public/css/smoothness/images/ui-icons_454545_256x240.png 2012-09-26 01:36:19 +0000 differ |
1354 | === added file 'sloecode/public/css/smoothness/images/ui-icons_888888_256x240.png' |
1355 | Binary files sloecode/public/css/smoothness/images/ui-icons_888888_256x240.png 1970-01-01 00:00:00 +0000 and sloecode/public/css/smoothness/images/ui-icons_888888_256x240.png 2012-09-26 01:36:19 +0000 differ |
1356 | === added file 'sloecode/public/css/smoothness/images/ui-icons_cd0a0a_256x240.png' |
1357 | Binary files sloecode/public/css/smoothness/images/ui-icons_cd0a0a_256x240.png 1970-01-01 00:00:00 +0000 and sloecode/public/css/smoothness/images/ui-icons_cd0a0a_256x240.png 2012-09-26 01:36:19 +0000 differ |
1358 | === added file 'sloecode/public/css/smoothness/jquery-ui-1.8.23.custom.css' |
1359 | --- sloecode/public/css/smoothness/jquery-ui-1.8.23.custom.css 1970-01-01 00:00:00 +0000 |
1360 | +++ sloecode/public/css/smoothness/jquery-ui-1.8.23.custom.css 2012-09-26 01:36:19 +0000 |
1361 | @@ -0,0 +1,563 @@ |
1362 | +/*! |
1363 | + * jQuery UI CSS Framework 1.8.23 |
1364 | + * |
1365 | + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) |
1366 | + * Dual licensed under the MIT or GPL Version 2 licenses. |
1367 | + * http://jquery.org/license |
1368 | + * |
1369 | + * http://docs.jquery.com/UI/Theming/API |
1370 | + */ |
1371 | + |
1372 | +/* Layout helpers |
1373 | +----------------------------------*/ |
1374 | +.ui-helper-hidden { display: none; } |
1375 | +.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); } |
1376 | +.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } |
1377 | +.ui-helper-clearfix:before, .ui-helper-clearfix:after { content: ""; display: table; } |
1378 | +.ui-helper-clearfix:after { clear: both; } |
1379 | +.ui-helper-clearfix { zoom: 1; } |
1380 | +.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } |
1381 | + |
1382 | + |
1383 | +/* Interaction Cues |
1384 | +----------------------------------*/ |
1385 | +.ui-state-disabled { cursor: default !important; } |
1386 | + |
1387 | + |
1388 | +/* Icons |
1389 | +----------------------------------*/ |
1390 | + |
1391 | +/* states and images */ |
1392 | +.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } |
1393 | + |
1394 | + |
1395 | +/* Misc visuals |
1396 | +----------------------------------*/ |
1397 | + |
1398 | +/* Overlays */ |
1399 | +.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } |
1400 | + |
1401 | + |
1402 | +/*! |
1403 | + * jQuery UI CSS Framework 1.8.23 |
1404 | + * |
1405 | + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) |
1406 | + * Dual licensed under the MIT or GPL Version 2 licenses. |
1407 | + * http://jquery.org/license |
1408 | + * |
1409 | + * http://docs.jquery.com/UI/Theming/API |
1410 | + * |
1411 | + * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana,Arial,sans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=01_flat.png&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=02_glass.png&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=02_glass.png&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=02_glass.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px |
1412 | + */ |
1413 | + |
1414 | + |
1415 | +/* Component containers |
1416 | +----------------------------------*/ |
1417 | +.ui-widget { font-family: Verdana,Arial,sans-serif; font-size: 1.1em; } |
1418 | +.ui-widget .ui-widget { font-size: 1em; } |
1419 | +.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif; font-size: 1em; } |
1420 | +.ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; color: #222222; } |
1421 | +.ui-widget-content a { color: #222222; } |
1422 | +.ui-widget-header { border: 1px solid #aaaaaa; background: #cccccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x; color: #222222; font-weight: bold; } |
1423 | +.ui-widget-header a { color: #222222; } |
1424 | + |
1425 | +/* Interaction states |
1426 | +----------------------------------*/ |
1427 | +.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3; background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #555555; } |
1428 | +.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555; text-decoration: none; } |
1429 | +.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999; background: #dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; } |
1430 | +.ui-state-hover a, .ui-state-hover a:hover { color: #212121; text-decoration: none; } |
1431 | +.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; } |
1432 | +.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121; text-decoration: none; } |
1433 | +.ui-widget :active { outline: none; } |
1434 | + |
1435 | +/* Interaction Cues |
1436 | +----------------------------------*/ |
1437 | +.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fcefa1; background: #fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x; color: #363636; } |
1438 | +.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; } |
1439 | +.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; color: #cd0a0a; } |
1440 | +.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a; } |
1441 | +.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a; } |
1442 | +.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } |
1443 | +.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } |
1444 | +.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } |
1445 | + |
1446 | +/* Icons |
1447 | +----------------------------------*/ |
1448 | + |
1449 | +/* states and images */ |
1450 | +.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); } |
1451 | +.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); } |
1452 | +.ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); } |
1453 | +.ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png); } |
1454 | +.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); } |
1455 | +.ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); } |
1456 | +.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); } |
1457 | +.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); } |
1458 | + |
1459 | +/* positioning */ |
1460 | +.ui-icon-carat-1-n { background-position: 0 0; } |
1461 | +.ui-icon-carat-1-ne { background-position: -16px 0; } |
1462 | +.ui-icon-carat-1-e { background-position: -32px 0; } |
1463 | +.ui-icon-carat-1-se { background-position: -48px 0; } |
1464 | +.ui-icon-carat-1-s { background-position: -64px 0; } |
1465 | +.ui-icon-carat-1-sw { background-position: -80px 0; } |
1466 | +.ui-icon-carat-1-w { background-position: -96px 0; } |
1467 | +.ui-icon-carat-1-nw { background-position: -112px 0; } |
1468 | +.ui-icon-carat-2-n-s { background-position: -128px 0; } |
1469 | +.ui-icon-carat-2-e-w { background-position: -144px 0; } |
1470 | +.ui-icon-triangle-1-n { background-position: 0 -16px; } |
1471 | +.ui-icon-triangle-1-ne { background-position: -16px -16px; } |
1472 | +.ui-icon-triangle-1-e { background-position: -32px -16px; } |
1473 | +.ui-icon-triangle-1-se { background-position: -48px -16px; } |
1474 | +.ui-icon-triangle-1-s { background-position: -64px -16px; } |
1475 | +.ui-icon-triangle-1-sw { background-position: -80px -16px; } |
1476 | +.ui-icon-triangle-1-w { background-position: -96px -16px; } |
1477 | +.ui-icon-triangle-1-nw { background-position: -112px -16px; } |
1478 | +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } |
1479 | +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } |
1480 | +.ui-icon-arrow-1-n { background-position: 0 -32px; } |
1481 | +.ui-icon-arrow-1-ne { background-position: -16px -32px; } |
1482 | +.ui-icon-arrow-1-e { background-position: -32px -32px; } |
1483 | +.ui-icon-arrow-1-se { background-position: -48px -32px; } |
1484 | +.ui-icon-arrow-1-s { background-position: -64px -32px; } |
1485 | +.ui-icon-arrow-1-sw { background-position: -80px -32px; } |
1486 | +.ui-icon-arrow-1-w { background-position: -96px -32px; } |
1487 | +.ui-icon-arrow-1-nw { background-position: -112px -32px; } |
1488 | +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } |
1489 | +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } |
1490 | +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } |
1491 | +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } |
1492 | +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } |
1493 | +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } |
1494 | +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } |
1495 | +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } |
1496 | +.ui-icon-arrowthick-1-n { background-position: 0 -48px; } |
1497 | +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } |
1498 | +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } |
1499 | +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } |
1500 | +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } |
1501 | +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } |
1502 | +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } |
1503 | +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } |
1504 | +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } |
1505 | +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } |
1506 | +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } |
1507 | +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } |
1508 | +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } |
1509 | +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } |
1510 | +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } |
1511 | +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } |
1512 | +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } |
1513 | +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } |
1514 | +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } |
1515 | +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } |
1516 | +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } |
1517 | +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } |
1518 | +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } |
1519 | +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } |
1520 | +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } |
1521 | +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } |
1522 | +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } |
1523 | +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } |
1524 | +.ui-icon-arrow-4 { background-position: 0 -80px; } |
1525 | +.ui-icon-arrow-4-diag { background-position: -16px -80px; } |
1526 | +.ui-icon-extlink { background-position: -32px -80px; } |
1527 | +.ui-icon-newwin { background-position: -48px -80px; } |
1528 | +.ui-icon-refresh { background-position: -64px -80px; } |
1529 | +.ui-icon-shuffle { background-position: -80px -80px; } |
1530 | +.ui-icon-transfer-e-w { background-position: -96px -80px; } |
1531 | +.ui-icon-transferthick-e-w { background-position: -112px -80px; } |
1532 | +.ui-icon-folder-collapsed { background-position: 0 -96px; } |
1533 | +.ui-icon-folder-open { background-position: -16px -96px; } |
1534 | +.ui-icon-document { background-position: -32px -96px; } |
1535 | +.ui-icon-document-b { background-position: -48px -96px; } |
1536 | +.ui-icon-note { background-position: -64px -96px; } |
1537 | +.ui-icon-mail-closed { background-position: -80px -96px; } |
1538 | +.ui-icon-mail-open { background-position: -96px -96px; } |
1539 | +.ui-icon-suitcase { background-position: -112px -96px; } |
1540 | +.ui-icon-comment { background-position: -128px -96px; } |
1541 | +.ui-icon-person { background-position: -144px -96px; } |
1542 | +.ui-icon-print { background-position: -160px -96px; } |
1543 | +.ui-icon-trash { background-position: -176px -96px; } |
1544 | +.ui-icon-locked { background-position: -192px -96px; } |
1545 | +.ui-icon-unlocked { background-position: -208px -96px; } |
1546 | +.ui-icon-bookmark { background-position: -224px -96px; } |
1547 | +.ui-icon-tag { background-position: -240px -96px; } |
1548 | +.ui-icon-home { background-position: 0 -112px; } |
1549 | +.ui-icon-flag { background-position: -16px -112px; } |
1550 | +.ui-icon-calendar { background-position: -32px -112px; } |
1551 | +.ui-icon-cart { background-position: -48px -112px; } |
1552 | +.ui-icon-pencil { background-position: -64px -112px; } |
1553 | +.ui-icon-clock { background-position: -80px -112px; } |
1554 | +.ui-icon-disk { background-position: -96px -112px; } |
1555 | +.ui-icon-calculator { background-position: -112px -112px; } |
1556 | +.ui-icon-zoomin { background-position: -128px -112px; } |
1557 | +.ui-icon-zoomout { background-position: -144px -112px; } |
1558 | +.ui-icon-search { background-position: -160px -112px; } |
1559 | +.ui-icon-wrench { background-position: -176px -112px; } |
1560 | +.ui-icon-gear { background-position: -192px -112px; } |
1561 | +.ui-icon-heart { background-position: -208px -112px; } |
1562 | +.ui-icon-star { background-position: -224px -112px; } |
1563 | +.ui-icon-link { background-position: -240px -112px; } |
1564 | +.ui-icon-cancel { background-position: 0 -128px; } |
1565 | +.ui-icon-plus { background-position: -16px -128px; } |
1566 | +.ui-icon-plusthick { background-position: -32px -128px; } |
1567 | +.ui-icon-minus { background-position: -48px -128px; } |
1568 | +.ui-icon-minusthick { background-position: -64px -128px; } |
1569 | +.ui-icon-close { background-position: -80px -128px; } |
1570 | +.ui-icon-closethick { background-position: -96px -128px; } |
1571 | +.ui-icon-key { background-position: -112px -128px; } |
1572 | +.ui-icon-lightbulb { background-position: -128px -128px; } |
1573 | +.ui-icon-scissors { background-position: -144px -128px; } |
1574 | +.ui-icon-clipboard { background-position: -160px -128px; } |
1575 | +.ui-icon-copy { background-position: -176px -128px; } |
1576 | +.ui-icon-contact { background-position: -192px -128px; } |
1577 | +.ui-icon-image { background-position: -208px -128px; } |
1578 | +.ui-icon-video { background-position: -224px -128px; } |
1579 | +.ui-icon-script { background-position: -240px -128px; } |
1580 | +.ui-icon-alert { background-position: 0 -144px; } |
1581 | +.ui-icon-info { background-position: -16px -144px; } |
1582 | +.ui-icon-notice { background-position: -32px -144px; } |
1583 | +.ui-icon-help { background-position: -48px -144px; } |
1584 | +.ui-icon-check { background-position: -64px -144px; } |
1585 | +.ui-icon-bullet { background-position: -80px -144px; } |
1586 | +.ui-icon-radio-off { background-position: -96px -144px; } |
1587 | +.ui-icon-radio-on { background-position: -112px -144px; } |
1588 | +.ui-icon-pin-w { background-position: -128px -144px; } |
1589 | +.ui-icon-pin-s { background-position: -144px -144px; } |
1590 | +.ui-icon-play { background-position: 0 -160px; } |
1591 | +.ui-icon-pause { background-position: -16px -160px; } |
1592 | +.ui-icon-seek-next { background-position: -32px -160px; } |
1593 | +.ui-icon-seek-prev { background-position: -48px -160px; } |
1594 | +.ui-icon-seek-end { background-position: -64px -160px; } |
1595 | +.ui-icon-seek-start { background-position: -80px -160px; } |
1596 | +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ |
1597 | +.ui-icon-seek-first { background-position: -80px -160px; } |
1598 | +.ui-icon-stop { background-position: -96px -160px; } |
1599 | +.ui-icon-eject { background-position: -112px -160px; } |
1600 | +.ui-icon-volume-off { background-position: -128px -160px; } |
1601 | +.ui-icon-volume-on { background-position: -144px -160px; } |
1602 | +.ui-icon-power { background-position: 0 -176px; } |
1603 | +.ui-icon-signal-diag { background-position: -16px -176px; } |
1604 | +.ui-icon-signal { background-position: -32px -176px; } |
1605 | +.ui-icon-battery-0 { background-position: -48px -176px; } |
1606 | +.ui-icon-battery-1 { background-position: -64px -176px; } |
1607 | +.ui-icon-battery-2 { background-position: -80px -176px; } |
1608 | +.ui-icon-battery-3 { background-position: -96px -176px; } |
1609 | +.ui-icon-circle-plus { background-position: 0 -192px; } |
1610 | +.ui-icon-circle-minus { background-position: -16px -192px; } |
1611 | +.ui-icon-circle-close { background-position: -32px -192px; } |
1612 | +.ui-icon-circle-triangle-e { background-position: -48px -192px; } |
1613 | +.ui-icon-circle-triangle-s { background-position: -64px -192px; } |
1614 | +.ui-icon-circle-triangle-w { background-position: -80px -192px; } |
1615 | +.ui-icon-circle-triangle-n { background-position: -96px -192px; } |
1616 | +.ui-icon-circle-arrow-e { background-position: -112px -192px; } |
1617 | +.ui-icon-circle-arrow-s { background-position: -128px -192px; } |
1618 | +.ui-icon-circle-arrow-w { background-position: -144px -192px; } |
1619 | +.ui-icon-circle-arrow-n { background-position: -160px -192px; } |
1620 | +.ui-icon-circle-zoomin { background-position: -176px -192px; } |
1621 | +.ui-icon-circle-zoomout { background-position: -192px -192px; } |
1622 | +.ui-icon-circle-check { background-position: -208px -192px; } |
1623 | +.ui-icon-circlesmall-plus { background-position: 0 -208px; } |
1624 | +.ui-icon-circlesmall-minus { background-position: -16px -208px; } |
1625 | +.ui-icon-circlesmall-close { background-position: -32px -208px; } |
1626 | +.ui-icon-squaresmall-plus { background-position: -48px -208px; } |
1627 | +.ui-icon-squaresmall-minus { background-position: -64px -208px; } |
1628 | +.ui-icon-squaresmall-close { background-position: -80px -208px; } |
1629 | +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } |
1630 | +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } |
1631 | +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } |
1632 | +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } |
1633 | +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } |
1634 | +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } |
1635 | + |
1636 | + |
1637 | +/* Misc visuals |
1638 | +----------------------------------*/ |
1639 | + |
1640 | +/* Corner radius */ |
1641 | +.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -khtml-border-top-left-radius: 4px; border-top-left-radius: 4px; } |
1642 | +.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -khtml-border-top-right-radius: 4px; border-top-right-radius: 4px; } |
1643 | +.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -khtml-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; } |
1644 | +.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; -khtml-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } |
1645 | + |
1646 | +/* Overlays */ |
1647 | +.ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); } |
1648 | +.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -khtml-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/*! |
1649 | + * jQuery UI Resizable 1.8.23 |
1650 | + * |
1651 | + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) |
1652 | + * Dual licensed under the MIT or GPL Version 2 licenses. |
1653 | + * http://jquery.org/license |
1654 | + * |
1655 | + * http://docs.jquery.com/UI/Resizable#theming |
1656 | + */ |
1657 | +.ui-resizable { position: relative;} |
1658 | +.ui-resizable-handle { position: absolute;font-size: 0.1px; display: block; } |
1659 | +.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; } |
1660 | +.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; } |
1661 | +.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; } |
1662 | +.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; } |
1663 | +.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; } |
1664 | +.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; } |
1665 | +.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; } |
1666 | +.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; } |
1667 | +.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/*! |
1668 | + * jQuery UI Selectable 1.8.23 |
1669 | + * |
1670 | + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) |
1671 | + * Dual licensed under the MIT or GPL Version 2 licenses. |
1672 | + * http://jquery.org/license |
1673 | + * |
1674 | + * http://docs.jquery.com/UI/Selectable#theming |
1675 | + */ |
1676 | +.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; } |
1677 | +/*! |
1678 | + * jQuery UI Accordion 1.8.23 |
1679 | + * |
1680 | + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) |
1681 | + * Dual licensed under the MIT or GPL Version 2 licenses. |
1682 | + * http://jquery.org/license |
1683 | + * |
1684 | + * http://docs.jquery.com/UI/Accordion#theming |
1685 | + */ |
1686 | +/* IE/Win - Fix animation bug - #4615 */ |
1687 | +.ui-accordion { width: 100%; } |
1688 | +.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; } |
1689 | +.ui-accordion .ui-accordion-li-fix { display: inline; } |
1690 | +.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; } |
1691 | +.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; } |
1692 | +.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; } |
1693 | +.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; } |
1694 | +.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; } |
1695 | +.ui-accordion .ui-accordion-content-active { display: block; } |
1696 | +/*! |
1697 | + * jQuery UI Autocomplete 1.8.23 |
1698 | + * |
1699 | + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) |
1700 | + * Dual licensed under the MIT or GPL Version 2 licenses. |
1701 | + * http://jquery.org/license |
1702 | + * |
1703 | + * http://docs.jquery.com/UI/Autocomplete#theming |
1704 | + */ |
1705 | +.ui-autocomplete { position: absolute; cursor: default; } |
1706 | + |
1707 | +/* workarounds */ |
1708 | +* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */ |
1709 | + |
1710 | +/* |
1711 | + * jQuery UI Menu 1.8.23 |
1712 | + * |
1713 | + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) |
1714 | + * Dual licensed under the MIT or GPL Version 2 licenses. |
1715 | + * http://jquery.org/license |
1716 | + * |
1717 | + * http://docs.jquery.com/UI/Menu#theming |
1718 | + */ |
1719 | +.ui-menu { |
1720 | + list-style:none; |
1721 | + padding: 2px; |
1722 | + margin: 0; |
1723 | + display:block; |
1724 | + float: left; |
1725 | +} |
1726 | +.ui-menu .ui-menu { |
1727 | + margin-top: -3px; |
1728 | +} |
1729 | +.ui-menu .ui-menu-item { |
1730 | + margin:0; |
1731 | + padding: 0; |
1732 | + zoom: 1; |
1733 | + float: left; |
1734 | + clear: left; |
1735 | + width: 100%; |
1736 | +} |
1737 | +.ui-menu .ui-menu-item a { |
1738 | + text-decoration:none; |
1739 | + display:block; |
1740 | + padding:.2em .4em; |
1741 | + line-height:1.5; |
1742 | + zoom:1; |
1743 | +} |
1744 | +.ui-menu .ui-menu-item a.ui-state-hover, |
1745 | +.ui-menu .ui-menu-item a.ui-state-active { |
1746 | + font-weight: normal; |
1747 | + margin: -1px; |
1748 | +} |
1749 | +/*! |
1750 | + * jQuery UI Button 1.8.23 |
1751 | + * |
1752 | + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) |
1753 | + * Dual licensed under the MIT or GPL Version 2 licenses. |
1754 | + * http://jquery.org/license |
1755 | + * |
1756 | + * http://docs.jquery.com/UI/Button#theming |
1757 | + */ |
1758 | +.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */ |
1759 | +.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */ |
1760 | +button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */ |
1761 | +.ui-button-icons-only { width: 3.4em; } |
1762 | +button.ui-button-icons-only { width: 3.7em; } |
1763 | + |
1764 | +/*button text element */ |
1765 | +.ui-button .ui-button-text { display: block; line-height: 1.4; } |
1766 | +.ui-button-text-only .ui-button-text { padding: .4em 1em; } |
1767 | +.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; } |
1768 | +.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; } |
1769 | +.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; } |
1770 | +.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; } |
1771 | +/* no icon support for input elements, provide padding by default */ |
1772 | +input.ui-button { padding: .4em 1em; } |
1773 | + |
1774 | +/*button icon element(s) */ |
1775 | +.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; } |
1776 | +.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; } |
1777 | +.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; } |
1778 | +.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } |
1779 | +.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } |
1780 | + |
1781 | +/*button sets*/ |
1782 | +.ui-buttonset { margin-right: 7px; } |
1783 | +.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; } |
1784 | + |
1785 | +/* workarounds */ |
1786 | +button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */ |
1787 | +/*! |
1788 | + * jQuery UI Dialog 1.8.23 |
1789 | + * |
1790 | + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) |
1791 | + * Dual licensed under the MIT or GPL Version 2 licenses. |
1792 | + * http://jquery.org/license |
1793 | + * |
1794 | + * http://docs.jquery.com/UI/Dialog#theming |
1795 | + */ |
1796 | +.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; } |
1797 | +.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; } |
1798 | +.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; } |
1799 | +.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } |
1800 | +.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } |
1801 | +.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } |
1802 | +.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } |
1803 | +.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } |
1804 | +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; } |
1805 | +.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; } |
1806 | +.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } |
1807 | +.ui-draggable .ui-dialog-titlebar { cursor: move; } |
1808 | +/*! |
1809 | + * jQuery UI Slider 1.8.23 |
1810 | + * |
1811 | + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) |
1812 | + * Dual licensed under the MIT or GPL Version 2 licenses. |
1813 | + * http://jquery.org/license |
1814 | + * |
1815 | + * http://docs.jquery.com/UI/Slider#theming |
1816 | + */ |
1817 | +.ui-slider { position: relative; text-align: left; } |
1818 | +.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; } |
1819 | +.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; } |
1820 | + |
1821 | +.ui-slider-horizontal { height: .8em; } |
1822 | +.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } |
1823 | +.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } |
1824 | +.ui-slider-horizontal .ui-slider-range-min { left: 0; } |
1825 | +.ui-slider-horizontal .ui-slider-range-max { right: 0; } |
1826 | + |
1827 | +.ui-slider-vertical { width: .8em; height: 100px; } |
1828 | +.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } |
1829 | +.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } |
1830 | +.ui-slider-vertical .ui-slider-range-min { bottom: 0; } |
1831 | +.ui-slider-vertical .ui-slider-range-max { top: 0; }/*! |
1832 | + * jQuery UI Tabs 1.8.23 |
1833 | + * |
1834 | + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) |
1835 | + * Dual licensed under the MIT or GPL Version 2 licenses. |
1836 | + * http://jquery.org/license |
1837 | + * |
1838 | + * http://docs.jquery.com/UI/Tabs#theming |
1839 | + */ |
1840 | +.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ |
1841 | +.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; } |
1842 | +.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; } |
1843 | +.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; } |
1844 | +.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; } |
1845 | +.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; } |
1846 | +.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ |
1847 | +.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; } |
1848 | +.ui-tabs .ui-tabs-hide { display: none !important; } |
1849 | +/*! |
1850 | + * jQuery UI Datepicker 1.8.23 |
1851 | + * |
1852 | + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) |
1853 | + * Dual licensed under the MIT or GPL Version 2 licenses. |
1854 | + * http://jquery.org/license |
1855 | + * |
1856 | + * http://docs.jquery.com/UI/Datepicker#theming |
1857 | + */ |
1858 | +.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; } |
1859 | +.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } |
1860 | +.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } |
1861 | +.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } |
1862 | +.ui-datepicker .ui-datepicker-prev { left:2px; } |
1863 | +.ui-datepicker .ui-datepicker-next { right:2px; } |
1864 | +.ui-datepicker .ui-datepicker-prev-hover { left:1px; } |
1865 | +.ui-datepicker .ui-datepicker-next-hover { right:1px; } |
1866 | +.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } |
1867 | +.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } |
1868 | +.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; } |
1869 | +.ui-datepicker select.ui-datepicker-month-year {width: 100%;} |
1870 | +.ui-datepicker select.ui-datepicker-month, |
1871 | +.ui-datepicker select.ui-datepicker-year { width: 49%;} |
1872 | +.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } |
1873 | +.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } |
1874 | +.ui-datepicker td { border: 0; padding: 1px; } |
1875 | +.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } |
1876 | +.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } |
1877 | +.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } |
1878 | +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } |
1879 | + |
1880 | +/* with multiple calendars */ |
1881 | +.ui-datepicker.ui-datepicker-multi { width:auto; } |
1882 | +.ui-datepicker-multi .ui-datepicker-group { float:left; } |
1883 | +.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } |
1884 | +.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } |
1885 | +.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } |
1886 | +.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } |
1887 | +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } |
1888 | +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } |
1889 | +.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } |
1890 | +.ui-datepicker-row-break { clear:both; width:100%; font-size:0em; } |
1891 | + |
1892 | +/* RTL support */ |
1893 | +.ui-datepicker-rtl { direction: rtl; } |
1894 | +.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } |
1895 | +.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } |
1896 | +.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } |
1897 | +.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } |
1898 | +.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } |
1899 | +.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } |
1900 | +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } |
1901 | +.ui-datepicker-rtl .ui-datepicker-group { float:right; } |
1902 | +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } |
1903 | +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } |
1904 | + |
1905 | +/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ |
1906 | +.ui-datepicker-cover { |
1907 | + position: absolute; /*must have*/ |
1908 | + z-index: -1; /*must have*/ |
1909 | + filter: mask(); /*must have*/ |
1910 | + top: -4px; /*must have*/ |
1911 | + left: -4px; /*must have*/ |
1912 | + width: 200px; /*must have*/ |
1913 | + height: 200px; /*must have*/ |
1914 | +}/*! |
1915 | + * jQuery UI Progressbar 1.8.23 |
1916 | + * |
1917 | + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) |
1918 | + * Dual licensed under the MIT or GPL Version 2 licenses. |
1919 | + * http://jquery.org/license |
1920 | + * |
1921 | + * http://docs.jquery.com/UI/Progressbar#theming |
1922 | + */ |
1923 | +.ui-progressbar { height:2em; text-align: left; overflow: hidden; } |
1924 | +.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; } |
1925 | \ No newline at end of file |
1926 | |
1927 | === added file 'sloecode/public/css/wiki.css' |
1928 | --- sloecode/public/css/wiki.css 1970-01-01 00:00:00 +0000 |
1929 | +++ sloecode/public/css/wiki.css 2012-09-26 01:36:19 +0000 |
1930 | @@ -0,0 +1,239 @@ |
1931 | +.wikkid_wrapper { |
1932 | + padding: 5px; |
1933 | + border: solid 1px black; |
1934 | +} |
1935 | + |
1936 | +.edit-content textarea { |
1937 | + font-family: courier; |
1938 | + width: 100%; |
1939 | + height: auto; |
1940 | +} |
1941 | + |
1942 | +#content { |
1943 | + margin-top: 5px; |
1944 | +} |
1945 | + |
1946 | +.wiki_content { |
1947 | + border: solid 1px #172961; |
1948 | + padding: 10px; |
1949 | +} |
1950 | +.wiki_actions_wrapper { |
1951 | + border-right: solid 1px #CCCCCC; |
1952 | + border-left: solid 1px #CCCCCC; |
1953 | +} |
1954 | +.wiki_actions_wrapper a { |
1955 | + color: inherit; |
1956 | + text-decoration: inherit; |
1957 | +} |
1958 | +.wiki_actions_wrapper li { |
1959 | + background: rgb(255,255,255); /* Old browsers */ |
1960 | + background: -moz-linear-gradient(top, rgba(255,255,255,1) 49%, rgba(200,200,200,1) 100%); /* FF3.6+ */ |
1961 | + background: -webkit-gradient(linear, left top, left bottom, color-stop(49%,rgba(255,255,255,1)), color-stop(100%,rgba(200,200,200,1))); /* Chrome,Safari4+ */ |
1962 | + background: -webkit-linear-gradient(top, rgba(255,255,255,1) 49%,rgba(200,200,200,1) 100%); /* Chrome10+,Safari5.1+ */ |
1963 | + background: -o-linear-gradient(top, rgba(255,255,255,1) 49%,rgba(200,200,200,1) 100%); /* Opera 11.10+ */ |
1964 | + background: -ms-linear-gradient(top, rgba(255,255,255,1) 49%,rgba(200,200,200,1) 100%); /* IE10+ */ |
1965 | + background: linear-gradient(to bottom, rgba(255,255,255,1) 49%,rgba(200,200,200,1) 100%); /* W3C */ |
1966 | + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#c8c8c8',GradientType=0 ); /* IE6-9 */ |
1967 | + z-index: 499; |
1968 | +} |
1969 | +.wiki_actions_wrapper li:hover { |
1970 | + background: rgb(255,255,255); /* Old browsers */ |
1971 | + background: -moz-linear-gradient(top, rgba(255,255,255,1) 0%, rgba(189,217,255,1) 100%); /* FF3.6+ */ |
1972 | + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,1)), color-stop(100%,rgba(189,217,255,1))); /* Chrome,Safari4+ */ |
1973 | + background: -webkit-linear-gradient(top, rgba(255,255,255,1) 0%,rgba(189,217,255,1) 100%); /* Chrome10+,Safari5.1+ */ |
1974 | + background: -o-linear-gradient(top, rgba(255,255,255,1) 0%,rgba(189,217,255,1) 100%); /* Opera 11.10+ */ |
1975 | + background: -ms-linear-gradient(top, rgba(255,255,255,1) 0%,rgba(189,217,255,1) 100%); /* IE10+ */ |
1976 | + background: linear-gradient(to bottom, rgba(255,255,255,1) 0%,rgba(189,217,255,1) 100%); /* W3C */ |
1977 | + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#bdd9ff',GradientType=0 ); /* IE6-9 */ |
1978 | + z-index: 499; |
1979 | +} |
1980 | +.wiki_action_button_wrapper, .wiki_action_button_wrapper li { |
1981 | + list-style: none; |
1982 | + float: right; |
1983 | + margin: 0px !important; |
1984 | +} |
1985 | +.wiki_action_button { |
1986 | + float: right; |
1987 | + padding: 5px; |
1988 | + border-left: solid 1px #CCCCCC; |
1989 | +} |
1990 | +.wiki_breadcrumbs { |
1991 | + border-right: solid 1px #CCCCCC; |
1992 | +} |
1993 | +.wiki_breadcrumbs, .wiki_breadcrumbs li { |
1994 | + list-style: none; |
1995 | + float: left; |
1996 | + margin: 0px !important; |
1997 | +} |
1998 | +.wiki_crumb { |
1999 | + list-style: none; |
2000 | + float: left; |
2001 | + padding: 5px; |
2002 | + padding-left: 10px !important; |
2003 | + padding-right: 10px !important; |
2004 | + margin: 0px !important; |
2005 | +} |
2006 | +.wiki_breadcrumbs li:first-child a{ |
2007 | + background-image: none; |
2008 | +} |
2009 | +.wiki_breadcrumbs li a{ |
2010 | + background-image: url('/yui/3.3.0/build/node-menunav/assets/skins/sam/vertical-menu-submenu-indicator.png'); |
2011 | + background-repeat: no-repeat; |
2012 | + background-position: 0; |
2013 | + z-index: 500; |
2014 | +} |
2015 | +ul.edit-toolbar-buttons { |
2016 | + padding: 0; |
2017 | + margin: 0; |
2018 | + margin-bottom: -1px; |
2019 | +} |
2020 | +.edit-toolbar-buttons, .edit-toolbar-buttons li { |
2021 | + list-style: none; |
2022 | + float: left; |
2023 | +} |
2024 | +.edit-toolbar-buttons li { |
2025 | + text-align: center; |
2026 | + width: 23px; |
2027 | + font-family: courier; |
2028 | + font-size: 1.4em; |
2029 | + margin-right: 2px; |
2030 | + border: solid 1px; |
2031 | +} |
2032 | +.edit-toolbar-buttons li:hover { |
2033 | + background-color: #DDDDDD; |
2034 | +} |
2035 | +.edit-toolbar-buttons li a { |
2036 | + color: inherit; |
2037 | + text-decoration: inherit; |
2038 | + cursor: default; |
2039 | + display: block; |
2040 | +} |
2041 | +.field-helper { |
2042 | + color: grey; |
2043 | +} |
2044 | +.clear { |
2045 | + clear: both; |
2046 | +} |
2047 | + |
2048 | + |
2049 | +/*Stuff from Wikkid*/ |
2050 | + |
2051 | +.highlight .hll { background-color: #ffffcc } |
2052 | +.highlight { background: #f8f8f8; } |
2053 | +.highlight .c { color: #408080; font-style: italic } /* Comment */ |
2054 | +.highlight .err { border: 1px solid #FF0000 } /* Error */ |
2055 | +.highlight .k { color: #008000; font-weight: bold } /* Keyword */ |
2056 | +.highlight .o { color: #666666 } /* Operator */ |
2057 | +.highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */ |
2058 | +.highlight .cp { color: #BC7A00 } /* Comment.Preproc */ |
2059 | +.highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */ |
2060 | +.highlight .cs { color: #408080; font-style: italic } /* Comment.Special */ |
2061 | +.highlight .gd { color: #A00000 } /* Generic.Deleted */ |
2062 | +.highlight .ge { font-style: italic } /* Generic.Emph */ |
2063 | +.highlight .gr { color: #FF0000 } /* Generic.Error */ |
2064 | +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ |
2065 | +.highlight .gi { color: #00A000 } /* Generic.Inserted */ |
2066 | +.highlight .go { color: #808080 } /* Generic.Output */ |
2067 | +.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */ |
2068 | +.highlight .gs { font-weight: bold } /* Generic.Strong */ |
2069 | +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ |
2070 | +.highlight .gt { color: #0040D0 } /* Generic.Traceback */ |
2071 | +.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */ |
2072 | +.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */ |
2073 | +.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */ |
2074 | +.highlight .kp { color: #008000 } /* Keyword.Pseudo */ |
2075 | +.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */ |
2076 | +.highlight .kt { color: #B00040 } /* Keyword.Type */ |
2077 | +.highlight .m { color: #666666 } /* Literal.Number */ |
2078 | +.highlight .s { color: #BA2121 } /* Literal.String */ |
2079 | +.highlight .na { color: #7D9029 } /* Name.Attribute */ |
2080 | +.highlight .nb { color: #008000 } /* Name.Builtin */ |
2081 | +.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */ |
2082 | +.highlight .no { color: #880000 } /* Name.Constant */ |
2083 | +.highlight .nd { color: #AA22FF } /* Name.Decorator */ |
2084 | +.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */ |
2085 | +.highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */ |
2086 | +.highlight .nf { color: #0000FF } /* Name.Function */ |
2087 | +.highlight .nl { color: #A0A000 } /* Name.Label */ |
2088 | +.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */ |
2089 | +.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */ |
2090 | +.highlight .nv { color: #19177C } /* Name.Variable */ |
2091 | +.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */ |
2092 | +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ |
2093 | +.highlight .mf { color: #666666 } /* Literal.Number.Float */ |
2094 | +.highlight .mh { color: #666666 } /* Literal.Number.Hex */ |
2095 | +.highlight .mi { color: #666666 } /* Literal.Number.Integer */ |
2096 | +.highlight .mo { color: #666666 } /* Literal.Number.Oct */ |
2097 | +.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */ |
2098 | +.highlight .sc { color: #BA2121 } /* Literal.String.Char */ |
2099 | +.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */ |
2100 | +.highlight .s2 { color: #BA2121 } /* Literal.String.Double */ |
2101 | +.highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */ |
2102 | +.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */ |
2103 | +.highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */ |
2104 | +.highlight .sx { color: #008000 } /* Literal.String.Other */ |
2105 | +.highlight .sr { color: #BB6688 } /* Literal.String.Regex */ |
2106 | +.highlight .s1 { color: #BA2121 } /* Literal.String.Single */ |
2107 | +.highlight .ss { color: #19177C } /* Literal.String.Symbol */ |
2108 | +.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */ |
2109 | +.highlight .vc { color: #19177C } /* Name.Variable.Class */ |
2110 | +.highlight .vg { color: #19177C } /* Name.Variable.Global */ |
2111 | +.highlight .vi { color: #19177C } /* Name.Variable.Instance */ |
2112 | +.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */ |
2113 | + |
2114 | +.dir-listing { |
2115 | + width: 100%; |
2116 | +} |
2117 | + |
2118 | +.dir-listing .even { |
2119 | + background: #e0e0e0; |
2120 | +} |
2121 | + |
2122 | +.dir-listing .odd { |
2123 | + background: #efefef; |
2124 | +} |
2125 | + |
2126 | +.dir-listing a { |
2127 | + padding: 2px 0px 2px 20px; |
2128 | + background-repeat: no-repeat; |
2129 | + background-position: 2px center; |
2130 | +} |
2131 | +.dir-listing .up { |
2132 | + background-image: url("ico_folder_up.gif"); |
2133 | +} |
2134 | + |
2135 | +.dir-listing .directory { |
2136 | + background-image: url("ico_folder.gif"); |
2137 | +} |
2138 | + |
2139 | +.dir-listing .file { |
2140 | + background-image: url("ico_file.gif"); |
2141 | + background-position: 4px center; |
2142 | +} |
2143 | + |
2144 | +.wikkid h1, .wikkid h2, .wikkid h3, .wikkid h4, .wikkid h5, .wikkid h6 {color:#242c38;} |
2145 | +.wikkid h1 { font-size: 1.8em; } |
2146 | +.wikkid h2, .wikkid div.section h1 { font-size: 1.5em; } |
2147 | +.wikkid h3, .wikkid div.section div.section h1 { font-size: 1.4em; } |
2148 | +.wikkid h4 { font-size: 1.3em; } |
2149 | +.wikkid h5 { font-size: 1.2em; } |
2150 | +.wikkid h6 { font-size: 1.1em; } |
2151 | +.wikkid p { |
2152 | + font-size: 1em; |
2153 | + margin:0 0 10px; |
2154 | + line-height: 1.4em; |
2155 | +} |
2156 | +.wikkid p.last-edit { |
2157 | + font-size: 0.6em; |
2158 | + margin-left: 1em; |
2159 | +} |
2160 | +.wikkid ul, .wikkid ol, .wikkid dl { |
2161 | + list-style-position:inside; |
2162 | + margin:15px; |
2163 | +} |
2164 | +.wikkid ul ul, .wikkid ul ol, .wikkid ul dl, .wikkid ol ol, .wikkid ol ul, .wikkid ol dl, .wikkid dl dl, .wikkid dl ol, .wikkid dl ul { |
2165 | + margin:0 0 0 15px; |
2166 | +} |
2167 | +.wikkid li { |
2168 | + margin:0 0 3px; |
2169 | +} |
2170 | |
2171 | === added file 'sloecode/public/js/jquery-ui-1.8.23.custom.min.js' |
2172 | --- sloecode/public/js/jquery-ui-1.8.23.custom.min.js 1970-01-01 00:00:00 +0000 |
2173 | +++ sloecode/public/js/jquery-ui-1.8.23.custom.min.js 2012-09-26 01:36:19 +0000 |
2174 | @@ -0,0 +1,69 @@ |
2175 | +/*! jQuery UI - v1.8.23 - 2012-08-15 |
2176 | +* https://github.com/jquery/jquery-ui |
2177 | +* Includes: jquery.ui.core.js |
2178 | +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ |
2179 | +(function(a,b){function c(b,c){var e=b.nodeName.toLowerCase();if("area"===e){var f=b.parentNode,g=f.name,h;return!b.href||!g||f.nodeName.toLowerCase()!=="map"?!1:(h=a("img[usemap=#"+g+"]")[0],!!h&&d(h))}return(/input|select|textarea|button|object/.test(e)?!b.disabled:"a"==e?b.href||c:c)&&d(b)}function d(b){return!a(b).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.ui=a.ui||{};if(a.ui.version)return;a.extend(a.ui,{version:"1.8.23",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}}),a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(b,c){return typeof b=="number"?this.each(function(){var d=this;setTimeout(function(){a(d).focus(),c&&c.call(d)},b)}):this._focus.apply(this,arguments)},scrollParent:function(){var b;return a.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?b=this.parents().filter(function(){return/(relative|absolute|fixed)/.test(a.curCSS(this,"position",1))&&/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0):b=this.parents().filter(function(){return/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0),/fixed/.test(this.css("position"))||!b.length?a(document):b},zIndex:function(c){if(c!==b)return this.css("zIndex",c);if(this.length){var d=a(this[0]),e,f;while(d.length&&d[0]!==document){e=d.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){f=parseInt(d.css("zIndex"),10);if(!isNaN(f)&&f!==0)return f}d=d.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),a("<a>").outerWidth(1).jquery||a.each(["Width","Height"],function(c,d){function h(b,c,d,f){return a.each(e,function(){c-=parseFloat(a.curCSS(b,"padding"+this,!0))||0,d&&(c-=parseFloat(a.curCSS(b,"border"+this+"Width",!0))||0),f&&(c-=parseFloat(a.curCSS(b,"margin"+this,!0))||0)}),c}var e=d==="Width"?["Left","Right"]:["Top","Bottom"],f=d.toLowerCase(),g={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};a.fn["inner"+d]=function(c){return c===b?g["inner"+d].call(this):this.each(function(){a(this).css(f,h(this,c)+"px")})},a.fn["outer"+d]=function(b,c){return typeof b!="number"?g["outer"+d].call(this,b):this.each(function(){a(this).css(f,h(this,b,!0,c)+"px")})}}),a.extend(a.expr[":"],{data:a.expr.createPseudo?a.expr.createPseudo(function(b){return function(c){return!!a.data(c,b)}}):function(b,c,d){return!!a.data(b,d[3])},focusable:function(b){return c(b,!isNaN(a.attr(b,"tabindex")))},tabbable:function(b){var d=a.attr(b,"tabindex"),e=isNaN(d);return(e||d>=0)&&c(b,!e)}}),a(function(){var b=document.body,c=b.appendChild(c=document.createElement("div"));c.offsetHeight,a.extend(c.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0}),a.support.minHeight=c.offsetHeight===100,a.support.selectstart="onselectstart"in c,b.removeChild(c).style.display="none"}),a.curCSS||(a.curCSS=a.css),a.extend(a.ui,{plugin:{add:function(b,c,d){var e=a.ui[b].prototype;for(var f in d)e.plugins[f]=e.plugins[f]||[],e.plugins[f].push([c,d[f]])},call:function(a,b,c){var d=a.plugins[b];if(!d||!a.element[0].parentNode)return;for(var e=0;e<d.length;e++)a.options[d[e][0]]&&d[e][1].apply(a.element,c)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(b,c){if(a(b).css("overflow")==="hidden")return!1;var d=c&&c==="left"?"scrollLeft":"scrollTop",e=!1;return b[d]>0?!0:(b[d]=1,e=b[d]>0,b[d]=0,e)},isOverAxis:function(a,b,c){return a>b&&a<b+c},isOver:function(b,c,d,e,f,g){return a.ui.isOverAxis(b,d,f)&&a.ui.isOverAxis(c,e,g)}})})(jQuery);;/*! jQuery UI - v1.8.23 - 2012-08-15 |
2180 | +* https://github.com/jquery/jquery-ui |
2181 | +* Includes: jquery.ui.widget.js |
2182 | +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ |
2183 | +(function(a,b){if(a.cleanData){var c=a.cleanData;a.cleanData=function(b){for(var d=0,e;(e=b[d])!=null;d++)try{a(e).triggerHandler("remove")}catch(f){}c(b)}}else{var d=a.fn.remove;a.fn.remove=function(b,c){return this.each(function(){return c||(!b||a.filter(b,[this]).length)&&a("*",this).add([this]).each(function(){try{a(this).triggerHandler("remove")}catch(b){}}),d.call(a(this),b,c)})}}a.widget=function(b,c,d){var e=b.split(".")[0],f;b=b.split(".")[1],f=e+"-"+b,d||(d=c,c=a.Widget),a.expr[":"][f]=function(c){return!!a.data(c,b)},a[e]=a[e]||{},a[e][b]=function(a,b){arguments.length&&this._createWidget(a,b)};var g=new c;g.options=a.extend(!0,{},g.options),a[e][b].prototype=a.extend(!0,g,{namespace:e,widgetName:b,widgetEventPrefix:a[e][b].prototype.widgetEventPrefix||b,widgetBaseClass:f},d),a.widget.bridge(b,a[e][b])},a.widget.bridge=function(c,d){a.fn[c]=function(e){var f=typeof e=="string",g=Array.prototype.slice.call(arguments,1),h=this;return e=!f&&g.length?a.extend.apply(null,[!0,e].concat(g)):e,f&&e.charAt(0)==="_"?h:(f?this.each(function(){var d=a.data(this,c),f=d&&a.isFunction(d[e])?d[e].apply(d,g):d;if(f!==d&&f!==b)return h=f,!1}):this.each(function(){var b=a.data(this,c);b?b.option(e||{})._init():a.data(this,c,new d(e,this))}),h)}},a.Widget=function(a,b){arguments.length&&this._createWidget(a,b)},a.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:!1},_createWidget:function(b,c){a.data(c,this.widgetName,this),this.element=a(c),this.options=a.extend(!0,{},this.options,this._getCreateOptions(),b);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()}),this._create(),this._trigger("create"),this._init()},_getCreateOptions:function(){return a.metadata&&a.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName),this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled "+"ui-state-disabled")},widget:function(){return this.element},option:function(c,d){var e=c;if(arguments.length===0)return a.extend({},this.options);if(typeof c=="string"){if(d===b)return this.options[c];e={},e[c]=d}return this._setOptions(e),this},_setOptions:function(b){var c=this;return a.each(b,function(a,b){c._setOption(a,b)}),this},_setOption:function(a,b){return this.options[a]=b,a==="disabled"&&this.widget()[b?"addClass":"removeClass"](this.widgetBaseClass+"-disabled"+" "+"ui-state-disabled").attr("aria-disabled",b),this},enable:function(){return this._setOption("disabled",!1)},disable:function(){return this._setOption("disabled",!0)},_trigger:function(b,c,d){var e,f,g=this.options[b];d=d||{},c=a.Event(c),c.type=(b===this.widgetEventPrefix?b:this.widgetEventPrefix+b).toLowerCase(),c.target=this.element[0],f=c.originalEvent;if(f)for(e in f)e in c||(c[e]=f[e]);return this.element.trigger(c,d),!(a.isFunction(g)&&g.call(this.element[0],c,d)===!1||c.isDefaultPrevented())}}})(jQuery);;/*! jQuery UI - v1.8.23 - 2012-08-15 |
2184 | +* https://github.com/jquery/jquery-ui |
2185 | +* Includes: jquery.ui.mouse.js |
2186 | +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ |
2187 | +(function(a,b){var c=!1;a(document).mouseup(function(a){c=!1}),a.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var b=this;this.element.bind("mousedown."+this.widgetName,function(a){return b._mouseDown(a)}).bind("click."+this.widgetName,function(c){if(!0===a.data(c.target,b.widgetName+".preventClickEvent"))return a.removeData(c.target,b.widgetName+".preventClickEvent"),c.stopImmediatePropagation(),!1}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName),this._mouseMoveDelegate&&a(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(b){if(c)return;this._mouseStarted&&this._mouseUp(b),this._mouseDownEvent=b;var d=this,e=b.which==1,f=typeof this.options.cancel=="string"&&b.target.nodeName?a(b.target).closest(this.options.cancel).length:!1;if(!e||f||!this._mouseCapture(b))return!0;this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){d.mouseDelayMet=!0},this.options.delay));if(this._mouseDistanceMet(b)&&this._mouseDelayMet(b)){this._mouseStarted=this._mouseStart(b)!==!1;if(!this._mouseStarted)return b.preventDefault(),!0}return!0===a.data(b.target,this.widgetName+".preventClickEvent")&&a.removeData(b.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(a){return d._mouseMove(a)},this._mouseUpDelegate=function(a){return d._mouseUp(a)},a(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),b.preventDefault(),c=!0,!0},_mouseMove:function(b){return!a.browser.msie||document.documentMode>=9||!!b.button?this._mouseStarted?(this._mouseDrag(b),b.preventDefault()):(this._mouseDistanceMet(b)&&this._mouseDelayMet(b)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,b)!==!1,this._mouseStarted?this._mouseDrag(b):this._mouseUp(b)),!this._mouseStarted):this._mouseUp(b)},_mouseUp:function(b){return a(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,b.target==this._mouseDownEvent.target&&a.data(b.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(b)),!1},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(a){return this.mouseDelayMet},_mouseStart:function(a){},_mouseDrag:function(a){},_mouseStop:function(a){},_mouseCapture:function(a){return!0}})})(jQuery);;/*! jQuery UI - v1.8.23 - 2012-08-15 |
2188 | +* https://github.com/jquery/jquery-ui |
2189 | +* Includes: jquery.ui.position.js |
2190 | +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ |
2191 | +(function(a,b){a.ui=a.ui||{};var c=/left|center|right/,d=/top|center|bottom/,e="center",f={},g=a.fn.position,h=a.fn.offset;a.fn.position=function(b){if(!b||!b.of)return g.apply(this,arguments);b=a.extend({},b);var h=a(b.of),i=h[0],j=(b.collision||"flip").split(" "),k=b.offset?b.offset.split(" "):[0,0],l,m,n;return i.nodeType===9?(l=h.width(),m=h.height(),n={top:0,left:0}):i.setTimeout?(l=h.width(),m=h.height(),n={top:h.scrollTop(),left:h.scrollLeft()}):i.preventDefault?(b.at="left top",l=m=0,n={top:b.of.pageY,left:b.of.pageX}):(l=h.outerWidth(),m=h.outerHeight(),n=h.offset()),a.each(["my","at"],function(){var a=(b[this]||"").split(" ");a.length===1&&(a=c.test(a[0])?a.concat([e]):d.test(a[0])?[e].concat(a):[e,e]),a[0]=c.test(a[0])?a[0]:e,a[1]=d.test(a[1])?a[1]:e,b[this]=a}),j.length===1&&(j[1]=j[0]),k[0]=parseInt(k[0],10)||0,k.length===1&&(k[1]=k[0]),k[1]=parseInt(k[1],10)||0,b.at[0]==="right"?n.left+=l:b.at[0]===e&&(n.left+=l/2),b.at[1]==="bottom"?n.top+=m:b.at[1]===e&&(n.top+=m/2),n.left+=k[0],n.top+=k[1],this.each(function(){var c=a(this),d=c.outerWidth(),g=c.outerHeight(),h=parseInt(a.curCSS(this,"marginLeft",!0))||0,i=parseInt(a.curCSS(this,"marginTop",!0))||0,o=d+h+(parseInt(a.curCSS(this,"marginRight",!0))||0),p=g+i+(parseInt(a.curCSS(this,"marginBottom",!0))||0),q=a.extend({},n),r;b.my[0]==="right"?q.left-=d:b.my[0]===e&&(q.left-=d/2),b.my[1]==="bottom"?q.top-=g:b.my[1]===e&&(q.top-=g/2),f.fractions||(q.left=Math.round(q.left),q.top=Math.round(q.top)),r={left:q.left-h,top:q.top-i},a.each(["left","top"],function(c,e){a.ui.position[j[c]]&&a.ui.position[j[c]][e](q,{targetWidth:l,targetHeight:m,elemWidth:d,elemHeight:g,collisionPosition:r,collisionWidth:o,collisionHeight:p,offset:k,my:b.my,at:b.at})}),a.fn.bgiframe&&c.bgiframe(),c.offset(a.extend(q,{using:b.using}))})},a.ui.position={fit:{left:function(b,c){var d=a(window),e=c.collisionPosition.left+c.collisionWidth-d.width()-d.scrollLeft();b.left=e>0?b.left-e:Math.max(b.left-c.collisionPosition.left,b.left)},top:function(b,c){var d=a(window),e=c.collisionPosition.top+c.collisionHeight-d.height()-d.scrollTop();b.top=e>0?b.top-e:Math.max(b.top-c.collisionPosition.top,b.top)}},flip:{left:function(b,c){if(c.at[0]===e)return;var d=a(window),f=c.collisionPosition.left+c.collisionWidth-d.width()-d.scrollLeft(),g=c.my[0]==="left"?-c.elemWidth:c.my[0]==="right"?c.elemWidth:0,h=c.at[0]==="left"?c.targetWidth:-c.targetWidth,i=-2*c.offset[0];b.left+=c.collisionPosition.left<0?g+h+i:f>0?g+h+i:0},top:function(b,c){if(c.at[1]===e)return;var d=a(window),f=c.collisionPosition.top+c.collisionHeight-d.height()-d.scrollTop(),g=c.my[1]==="top"?-c.elemHeight:c.my[1]==="bottom"?c.elemHeight:0,h=c.at[1]==="top"?c.targetHeight:-c.targetHeight,i=-2*c.offset[1];b.top+=c.collisionPosition.top<0?g+h+i:f>0?g+h+i:0}}},a.offset.setOffset||(a.offset.setOffset=function(b,c){/static/.test(a.curCSS(b,"position"))&&(b.style.position="relative");var d=a(b),e=d.offset(),f=parseInt(a.curCSS(b,"top",!0),10)||0,g=parseInt(a.curCSS(b,"left",!0),10)||0,h={top:c.top-e.top+f,left:c.left-e.left+g};"using"in c?c.using.call(b,h):d.css(h)},a.fn.offset=function(b){var c=this[0];return!c||!c.ownerDocument?null:b?a.isFunction(b)?this.each(function(c){a(this).offset(b.call(this,c,a(this).offset()))}):this.each(function(){a.offset.setOffset(this,b)}):h.call(this)}),a.curCSS||(a.curCSS=a.css),function(){var b=document.getElementsByTagName("body")[0],c=document.createElement("div"),d,e,g,h,i;d=document.createElement(b?"div":"body"),g={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},b&&a.extend(g,{position:"absolute",left:"-1000px",top:"-1000px"});for(var j in g)d.style[j]=g[j];d.appendChild(c),e=b||document.documentElement,e.insertBefore(d,e.firstChild),c.style.cssText="position: absolute; left: 10.7432222px; top: 10.432325px; height: 30px; width: 201px;",h=a(c).offset(function(a,b){return b}).offset(),d.innerHTML="",e.removeChild(d),i=h.top+h.left+(b?2e3:0),f.fractions=i>21&&i<22}()})(jQuery);;/*! jQuery UI - v1.8.23 - 2012-08-15 |
2192 | +* https://github.com/jquery/jquery-ui |
2193 | +* Includes: jquery.ui.draggable.js |
2194 | +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ |
2195 | +(function(a,b){a.widget("ui.draggable",a.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1},_create:function(){this.options.helper=="original"&&!/^(?:r|a|f)/.test(this.element.css("position"))&&(this.element[0].style.position="relative"),this.options.addClasses&&this.element.addClass("ui-draggable"),this.options.disabled&&this.element.addClass("ui-draggable-disabled"),this._mouseInit()},destroy:function(){if(!this.element.data("draggable"))return;return this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"),this._mouseDestroy(),this},_mouseCapture:function(b){var c=this.options;return this.helper||c.disabled||a(b.target).is(".ui-resizable-handle")?!1:(this.handle=this._getHandle(b),this.handle?(c.iframeFix&&a(c.iframeFix===!0?"iframe":c.iframeFix).each(function(){a('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1e3}).css(a(this).offset()).appendTo("body")}),!0):!1)},_mouseStart:function(b){var c=this.options;return this.helper=this._createHelper(b),this.helper.addClass("ui-draggable-dragging"),this._cacheHelperProportions(),a.ui.ddmanager&&(a.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(),this.offset=this.positionAbs=this.element.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},a.extend(this.offset,{click:{left:b.pageX-this.offset.left,top:b.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.originalPosition=this.position=this._generatePosition(b),this.originalPageX=b.pageX,this.originalPageY=b.pageY,c.cursorAt&&this._adjustOffsetFromHelper(c.cursorAt),c.containment&&this._setContainment(),this._trigger("start",b)===!1?(this._clear(),!1):(this._cacheHelperProportions(),a.ui.ddmanager&&!c.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,b),this._mouseDrag(b,!0),a.ui.ddmanager&&a.ui.ddmanager.dragStart(this,b),!0)},_mouseDrag:function(b,c){this.position=this._generatePosition(b),this.positionAbs=this._convertPositionTo("absolute");if(!c){var d=this._uiHash();if(this._trigger("drag",b,d)===!1)return this._mouseUp({}),!1;this.position=d.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";return a.ui.ddmanager&&a.ui.ddmanager.drag(this,b),!1},_mouseStop:function(b){var c=!1;a.ui.ddmanager&&!this.options.dropBehaviour&&(c=a.ui.ddmanager.drop(this,b)),this.dropped&&(c=this.dropped,this.dropped=!1);var d=this.element[0],e=!1;while(d&&(d=d.parentNode))d==document&&(e=!0);if(!e&&this.options.helper==="original")return!1;if(this.options.revert=="invalid"&&!c||this.options.revert=="valid"&&c||this.options.revert===!0||a.isFunction(this.options.revert)&&this.options.revert.call(this.element,c)){var f=this;a(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){f._trigger("stop",b)!==!1&&f._clear()})}else this._trigger("stop",b)!==!1&&this._clear();return!1},_mouseUp:function(b){return this.options.iframeFix===!0&&a("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)}),a.ui.ddmanager&&a.ui.ddmanager.dragStop(this,b),a.ui.mouse.prototype._mouseUp.call(this,b)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear(),this},_getHandle:function(b){var c=!this.options.handle||!a(this.options.handle,this.element).length?!0:!1;return a(this.options.handle,this.element).find("*").andSelf().each(function(){this==b.target&&(c=!0)}),c},_createHelper:function(b){var c=this.options,d=a.isFunction(c.helper)?a(c.helper.apply(this.element[0],[b])):c.helper=="clone"?this.element.clone().removeAttr("id"):this.element;return d.parents("body").length||d.appendTo(c.appendTo=="parent"?this.element[0].parentNode:c.appendTo),d[0]!=this.element[0]&&!/(fixed|absolute)/.test(d.css("position"))&&d.css("position","absolute"),d},_adjustOffsetFromHelper:function(b){typeof b=="string"&&(b=b.split(" ")),a.isArray(b)&&(b={left:+b[0],top:+b[1]||0}),"left"in b&&(this.offset.click.left=b.left+this.margins.left),"right"in b&&(this.offset.click.left=this.helperProportions.width-b.right+this.margins.left),"top"in b&&(this.offset.click.top=b.top+this.margins.top),"bottom"in b&&(this.offset.click.top=this.helperProportions.height-b.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var b=this.offsetParent.offset();this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])&&(b.left+=this.scrollParent.scrollLeft(),b.top+=this.scrollParent.scrollTop());if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)b={top:0,left:0};return{top:b.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:b.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.element.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var b=this.options;b.containment=="parent"&&(b.containment=this.helper[0].parentNode);if(b.containment=="document"||b.containment=="window")this.containment=[b.containment=="document"?0:a(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,b.containment=="document"?0:a(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,(b.containment=="document"?0:a(window).scrollLeft())+a(b.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(b.containment=="document"?0:a(window).scrollTop())+(a(b.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(b.containment)&&b.containment.constructor!=Array){var c=a(b.containment),d=c[0];if(!d)return;var e=c.offset(),f=a(d).css("overflow")!="hidden";this.containment=[(parseInt(a(d).css("borderLeftWidth"),10)||0)+(parseInt(a(d).css("paddingLeft"),10)||0),(parseInt(a(d).css("borderTopWidth"),10)||0)+(parseInt(a(d).css("paddingTop"),10)||0),(f?Math.max(d.scrollWidth,d.offsetWidth):d.offsetWidth)-(parseInt(a(d).css("borderLeftWidth"),10)||0)-(parseInt(a(d).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(f?Math.max(d.scrollHeight,d.offsetHeight):d.offsetHeight)-(parseInt(a(d).css("borderTopWidth"),10)||0)-(parseInt(a(d).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relative_container=c}else b.containment.constructor==Array&&(this.containment=b.containment)},_convertPositionTo:function(b,c){c||(c=this.position);var d=b=="absolute"?1:-1,e=this.options,f=this.cssPosition=="absolute"&&(this.scrollParent[0]==document||!a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,g=/(html|body)/i.test(f[0].tagName);return{top:c.top+this.offset.relative.top*d+this.offset.parent.top*d-(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():g?0:f.scrollTop())*d),left:c.left+this.offset.relative.left*d+this.offset.parent.left*d-(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():g?0:f.scrollLeft())*d)}},_generatePosition:function(b){var c=this.options,d=this.cssPosition=="absolute"&&(this.scrollParent[0]==document||!a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(d[0].tagName),f=b.pageX,g=b.pageY;if(this.originalPosition){var h;if(this.containment){if(this.relative_container){var i=this.relative_container.offset();h=[this.containment[0]+i.left,this.containment[1]+i.top,this.containment[2]+i.left,this.containment[3]+i.top]}else h=this.containment;b.pageX-this.offset.click.left<h[0]&&(f=h[0]+this.offset.click.left),b.pageY-this.offset.click.top<h[1]&&(g=h[1]+this.offset.click.top),b.pageX-this.offset.click.left>h[2]&&(f=h[2]+this.offset.click.left),b.pageY-this.offset.click.top>h[3]&&(g=h[3]+this.offset.click.top)}if(c.grid){var j=c.grid[1]?this.originalPageY+Math.round((g-this.originalPageY)/c.grid[1])*c.grid[1]:this.originalPageY;g=h?j-this.offset.click.top<h[1]||j-this.offset.click.top>h[3]?j-this.offset.click.top<h[1]?j+c.grid[1]:j-c.grid[1]:j:j;var k=c.grid[0]?this.originalPageX+Math.round((f-this.originalPageX)/c.grid[0])*c.grid[0]:this.originalPageX;f=h?k-this.offset.click.left<h[0]||k-this.offset.click.left>h[2]?k-this.offset.click.left<h[0]?k+c.grid[0]:k-c.grid[0]:k:k}}return{top:g-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:d.scrollTop()),left:f-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():e?0:d.scrollLeft())}},_clear:function(){this.helper.removeClass("ui-draggable-dragging"),this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval&&this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1},_trigger:function(b,c,d){return d=d||this._uiHash(),a.ui.plugin.call(this,b,[c,d]),b=="drag"&&(this.positionAbs=this._convertPositionTo("absolute")),a.Widget.prototype._trigger.call(this,b,c,d)},plugins:{},_uiHash:function(a){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),a.extend(a.ui.draggable,{version:"1.8.23"}),a.ui.plugin.add("draggable","connectToSortable",{start:function(b,c){var d=a(this).data("draggable"),e=d.options,f=a.extend({},c,{item:d.element});d.sortables=[],a(e.connectToSortable).each(function(){var c=a.data(this,"sortable");c&&!c.options.disabled&&(d.sortables.push({instance:c,shouldRevert:c.options.revert}),c.refreshPositions(),c._trigger("activate",b,f))})},stop:function(b,c){var d=a(this).data("draggable"),e=a.extend({},c,{item:d.element});a.each(d.sortables,function(){this.instance.isOver?(this.instance.isOver=0,d.cancelHelperRemoval=!0,this.instance.cancelHelperRemoval=!1,this.shouldRevert&&(this.instance.options.revert=!0),this.instance._mouseStop(b),this.instance.options.helper=this.instance.options._helper,d.options.helper=="original"&&this.instance.currentItem.css({top:"auto",left:"auto"})):(this.instance.cancelHelperRemoval=!1,this.instance._trigger("deactivate",b,e))})},drag:function(b,c){var d=a(this).data("draggable"),e=this,f=function(b){var c=this.offset.click.top,d=this.offset.click.left,e=this.positionAbs.top,f=this.positionAbs.left,g=b.height,h=b.width,i=b.top,j=b.left;return a.ui.isOver(e+c,f+d,i,j,g,h)};a.each(d.sortables,function(f){this.instance.positionAbs=d.positionAbs,this.instance.helperProportions=d.helperProportions,this.instance.offset.click=d.offset.click,this.instance._intersectsWith(this.instance.containerCache)?(this.instance.isOver||(this.instance.isOver=1,this.instance.currentItem=a(e).clone().removeAttr("id").appendTo(this.instance.element).data("sortable-item",!0),this.instance.options._helper=this.instance.options.helper,this.instance.options.helper=function(){return c.helper[0]},b.target=this.instance.currentItem[0],this.instance._mouseCapture(b,!0),this.instance._mouseStart(b,!0,!0),this.instance.offset.click.top=d.offset.click.top,this.instance.offset.click.left=d.offset.click.left,this.instance.offset.parent.left-=d.offset.parent.left-this.instance.offset.parent.left,this.instance.offset.parent.top-=d.offset.parent.top-this.instance.offset.parent.top,d._trigger("toSortable",b),d.dropped=this.instance.element,d.currentItem=d.element,this.instance.fromOutside=d),this.instance.currentItem&&this.instance._mouseDrag(b)):this.instance.isOver&&(this.instance.isOver=0,this.instance.cancelHelperRemoval=!0,this.instance.options.revert=!1,this.instance._trigger("out",b,this.instance._uiHash(this.instance)),this.instance._mouseStop(b,!0),this.instance.options.helper=this.instance.options._helper,this.instance.currentItem.remove(),this.instance.placeholder&&this.instance.placeholder.remove(),d._trigger("fromSortable",b),d.dropped=!1)})}}),a.ui.plugin.add("draggable","cursor",{start:function(b,c){var d=a("body"),e=a(this).data("draggable").options;d.css("cursor")&&(e._cursor=d.css("cursor")),d.css("cursor",e.cursor)},stop:function(b,c){var d=a(this).data("draggable").options;d._cursor&&a("body").css("cursor",d._cursor)}}),a.ui.plugin.add("draggable","opacity",{start:function(b,c){var d=a(c.helper),e=a(this).data("draggable").options;d.css("opacity")&&(e._opacity=d.css("opacity")),d.css("opacity",e.opacity)},stop:function(b,c){var d=a(this).data("draggable").options;d._opacity&&a(c.helper).css("opacity",d._opacity)}}),a.ui.plugin.add("draggable","scroll",{start:function(b,c){var d=a(this).data("draggable");d.scrollParent[0]!=document&&d.scrollParent[0].tagName!="HTML"&&(d.overflowOffset=d.scrollParent.offset())},drag:function(b,c){var d=a(this).data("draggable"),e=d.options,f=!1;if(d.scrollParent[0]!=document&&d.scrollParent[0].tagName!="HTML"){if(!e.axis||e.axis!="x")d.overflowOffset.top+d.scrollParent[0].offsetHeight-b.pageY<e.scrollSensitivity?d.scrollParent[0].scrollTop=f=d.scrollParent[0].scrollTop+e.scrollSpeed:b.pageY-d.overflowOffset.top<e.scrollSensitivity&&(d.scrollParent[0].scrollTop=f=d.scrollParent[0].scrollTop-e.scrollSpeed);if(!e.axis||e.axis!="y")d.overflowOffset.left+d.scrollParent[0].offsetWidth-b.pageX<e.scrollSensitivity?d.scrollParent[0].scrollLeft=f=d.scrollParent[0].scrollLeft+e.scrollSpeed:b.pageX-d.overflowOffset.left<e.scrollSensitivity&&(d.scrollParent[0].scrollLeft=f=d.scrollParent[0].scrollLeft-e.scrollSpeed)}else{if(!e.axis||e.axis!="x")b.pageY-a(document).scrollTop()<e.scrollSensitivity?f=a(document).scrollTop(a(document).scrollTop()-e.scrollSpeed):a(window).height()-(b.pageY-a(document).scrollTop())<e.scrollSensitivity&&(f=a(document).scrollTop(a(document).scrollTop()+e.scrollSpeed));if(!e.axis||e.axis!="y")b.pageX-a(document).scrollLeft()<e.scrollSensitivity?f=a(document).scrollLeft(a(document).scrollLeft()-e.scrollSpeed):a(window).width()-(b.pageX-a(document).scrollLeft())<e.scrollSensitivity&&(f=a(document).scrollLeft(a(document).scrollLeft()+e.scrollSpeed))}f!==!1&&a.ui.ddmanager&&!e.dropBehaviour&&a.ui.ddmanager.prepareOffsets(d,b)}}),a.ui.plugin.add("draggable","snap",{start:function(b,c){var d=a(this).data("draggable"),e=d.options;d.snapElements=[],a(e.snap.constructor!=String?e.snap.items||":data(draggable)":e.snap).each(function(){var b=a(this),c=b.offset();this!=d.element[0]&&d.snapElements.push({item:this,width:b.outerWidth(),height:b.outerHeight(),top:c.top,left:c.left})})},drag:function(b,c){var d=a(this).data("draggable"),e=d.options,f=e.snapTolerance,g=c.offset.left,h=g+d.helperProportions.width,i=c.offset.top,j=i+d.helperProportions.height;for(var k=d.snapElements.length-1;k>=0;k--){var l=d.snapElements[k].left,m=l+d.snapElements[k].width,n=d.snapElements[k].top,o=n+d.snapElements[k].height;if(!(l-f<g&&g<m+f&&n-f<i&&i<o+f||l-f<g&&g<m+f&&n-f<j&&j<o+f||l-f<h&&h<m+f&&n-f<i&&i<o+f||l-f<h&&h<m+f&&n-f<j&&j<o+f)){d.snapElements[k].snapping&&d.options.snap.release&&d.options.snap.release.call(d.element,b,a.extend(d._uiHash(),{snapItem:d.snapElements[k].item})),d.snapElements[k].snapping=!1;continue}if(e.snapMode!="inner"){var p=Math.abs(n-j)<=f,q=Math.abs(o-i)<=f,r=Math.abs(l-h)<=f,s=Math.abs(m-g)<=f;p&&(c.position.top=d._convertPositionTo("relative",{top:n-d.helperProportions.height,left:0}).top-d.margins.top),q&&(c.position.top=d._convertPositionTo("relative",{top:o,left:0}).top-d.margins.top),r&&(c.position.left=d._convertPositionTo("relative",{top:0,left:l-d.helperProportions.width}).left-d.margins.left),s&&(c.position.left=d._convertPositionTo("relative",{top:0,left:m}).left-d.margins.left)}var t=p||q||r||s;if(e.snapMode!="outer"){var p=Math.abs(n-i)<=f,q=Math.abs(o-j)<=f,r=Math.abs(l-g)<=f,s=Math.abs(m-h)<=f;p&&(c.position.top=d._convertPositionTo("relative",{top:n,left:0}).top-d.margins.top),q&&(c.position.top=d._convertPositionTo("relative",{top:o-d.helperProportions.height,left:0}).top-d.margins.top),r&&(c.position.left=d._convertPositionTo("relative",{top:0,left:l}).left-d.margins.left),s&&(c.position.left=d._convertPositionTo("relative",{top:0,left:m-d.helperProportions.width}).left-d.margins.left)}!d.snapElements[k].snapping&&(p||q||r||s||t)&&d.options.snap.snap&&d.options.snap.snap.call(d.element,b,a.extend(d._uiHash(),{snapItem:d.snapElements[k].item})),d.snapElements[k].snapping=p||q||r||s||t}}}),a.ui.plugin.add("draggable","stack",{start:function(b,c){var d=a(this).data("draggable").options,e=a.makeArray(a(d.stack)).sort(function(b,c){return(parseInt(a(b).css("zIndex"),10)||0)-(parseInt(a(c).css("zIndex"),10)||0)});if(!e.length)return;var f=parseInt(e[0].style.zIndex)||0;a(e).each(function(a){this.style.zIndex=f+a}),this[0].style.zIndex=f+e.length}}),a.ui.plugin.add("draggable","zIndex",{start:function(b,c){var d=a(c.helper),e=a(this).data("draggable").options;d.css("zIndex")&&(e._zIndex=d.css("zIndex")),d.css("zIndex",e.zIndex)},stop:function(b,c){var d=a(this).data("draggable").options;d._zIndex&&a(c.helper).css("zIndex",d._zIndex)}})})(jQuery);;/*! jQuery UI - v1.8.23 - 2012-08-15 |
2196 | +* https://github.com/jquery/jquery-ui |
2197 | +* Includes: jquery.ui.droppable.js |
2198 | +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ |
2199 | +(function(a,b){a.widget("ui.droppable",{widgetEventPrefix:"drop",options:{accept:"*",activeClass:!1,addClasses:!0,greedy:!1,hoverClass:!1,scope:"default",tolerance:"intersect"},_create:function(){var b=this.options,c=b.accept;this.isover=0,this.isout=1,this.accept=a.isFunction(c)?c:function(a){return a.is(c)},this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight},a.ui.ddmanager.droppables[b.scope]=a.ui.ddmanager.droppables[b.scope]||[],a.ui.ddmanager.droppables[b.scope].push(this),b.addClasses&&this.element.addClass("ui-droppable")},destroy:function(){var b=a.ui.ddmanager.droppables[this.options.scope];for(var c=0;c<b.length;c++)b[c]==this&&b.splice(c,1);return this.element.removeClass("ui-droppable ui-droppable-disabled").removeData("droppable").unbind(".droppable"),this},_setOption:function(b,c){b=="accept"&&(this.accept=a.isFunction(c)?c:function(a){return a.is(c)}),a.Widget.prototype._setOption.apply(this,arguments)},_activate:function(b){var c=a.ui.ddmanager.current;this.options.activeClass&&this.element.addClass(this.options.activeClass),c&&this._trigger("activate",b,this.ui(c))},_deactivate:function(b){var c=a.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass),c&&this._trigger("deactivate",b,this.ui(c))},_over:function(b){var c=a.ui.ddmanager.current;if(!c||(c.currentItem||c.element)[0]==this.element[0])return;this.accept.call(this.element[0],c.currentItem||c.element)&&(this.options.hoverClass&&this.element.addClass(this.options.hoverClass),this._trigger("over",b,this.ui(c)))},_out:function(b){var c=a.ui.ddmanager.current;if(!c||(c.currentItem||c.element)[0]==this.element[0])return;this.accept.call(this.element[0],c.currentItem||c.element)&&(this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("out",b,this.ui(c)))},_drop:function(b,c){var d=c||a.ui.ddmanager.current;if(!d||(d.currentItem||d.element)[0]==this.element[0])return!1;var e=!1;return this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function(){var b=a.data(this,"droppable");if(b.options.greedy&&!b.options.disabled&&b.options.scope==d.options.scope&&b.accept.call(b.element[0],d.currentItem||d.element)&&a.ui.intersect(d,a.extend(b,{offset:b.element.offset()}),b.options.tolerance))return e=!0,!1}),e?!1:this.accept.call(this.element[0],d.currentItem||d.element)?(this.options.activeClass&&this.element.removeClass(this.options.activeClass),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("drop",b,this.ui(d)),this.element):!1},ui:function(a){return{draggable:a.currentItem||a.element,helper:a.helper,position:a.position,offset:a.positionAbs}}}),a.extend(a.ui.droppable,{version:"1.8.23"}),a.ui.intersect=function(b,c,d){if(!c.offset)return!1;var e=(b.positionAbs||b.position.absolute).left,f=e+b.helperProportions.width,g=(b.positionAbs||b.position.absolute).top,h=g+b.helperProportions.height,i=c.offset.left,j=i+c.proportions.width,k=c.offset.top,l=k+c.proportions.height;switch(d){case"fit":return i<=e&&f<=j&&k<=g&&h<=l;case"intersect":return i<e+b.helperProportions.width/2&&f-b.helperProportions.width/2<j&&k<g+b.helperProportions.height/2&&h-b.helperProportions.height/2<l;case"pointer":var m=(b.positionAbs||b.position.absolute).left+(b.clickOffset||b.offset.click).left,n=(b.positionAbs||b.position.absolute).top+(b.clickOffset||b.offset.click).top,o=a.ui.isOver(n,m,k,i,c.proportions.height,c.proportions.width);return o;case"touch":return(g>=k&&g<=l||h>=k&&h<=l||g<k&&h>l)&&(e>=i&&e<=j||f>=i&&f<=j||e<i&&f>j);default:return!1}},a.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(b,c){var d=a.ui.ddmanager.droppables[b.options.scope]||[],e=c?c.type:null,f=(b.currentItem||b.element).find(":data(droppable)").andSelf();g:for(var h=0;h<d.length;h++){if(d[h].options.disabled||b&&!d[h].accept.call(d[h].element[0],b.currentItem||b.element))continue;for(var i=0;i<f.length;i++)if(f[i]==d[h].element[0]){d[h].proportions.height=0;continue g}d[h].visible=d[h].element.css("display")!="none";if(!d[h].visible)continue;e=="mousedown"&&d[h]._activate.call(d[h],c),d[h].offset=d[h].element.offset(),d[h].proportions={width:d[h].element[0].offsetWidth,height:d[h].element[0].offsetHeight}}},drop:function(b,c){var d=!1;return a.each(a.ui.ddmanager.droppables[b.options.scope]||[],function(){if(!this.options)return;!this.options.disabled&&this.visible&&a.ui.intersect(b,this,this.options.tolerance)&&(d=this._drop.call(this,c)||d),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],b.currentItem||b.element)&&(this.isout=1,this.isover=0,this._deactivate.call(this,c))}),d},dragStart:function(b,c){b.element.parents(":not(body,html)").bind("scroll.droppable",function(){b.options.refreshPositions||a.ui.ddmanager.prepareOffsets(b,c)})},drag:function(b,c){b.options.refreshPositions&&a.ui.ddmanager.prepareOffsets(b,c),a.each(a.ui.ddmanager.droppables[b.options.scope]||[],function(){if(this.options.disabled||this.greedyChild||!this.visible)return;var d=a.ui.intersect(b,this,this.options.tolerance),e=!d&&this.isover==1?"isout":d&&this.isover==0?"isover":null;if(!e)return;var f;if(this.options.greedy){var g=this.element.parents(":data(droppable):eq(0)");g.length&&(f=a.data(g[0],"droppable"),f.greedyChild=e=="isover"?1:0)}f&&e=="isover"&&(f.isover=0,f.isout=1,f._out.call(f,c)),this[e]=1,this[e=="isout"?"isover":"isout"]=0,this[e=="isover"?"_over":"_out"].call(this,c),f&&e=="isout"&&(f.isout=0,f.isover=1,f._over.call(f,c))})},dragStop:function(b,c){b.element.parents(":not(body,html)").unbind("scroll.droppable"),b.options.refreshPositions||a.ui.ddmanager.prepareOffsets(b,c)}}})(jQuery);;/*! jQuery UI - v1.8.23 - 2012-08-15 |
2200 | +* https://github.com/jquery/jquery-ui |
2201 | +* Includes: jquery.ui.resizable.js |
2202 | +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ |
2203 | +(function(a,b){a.widget("ui.resizable",a.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1e3},_create:function(){var b=this,c=this.options;this.element.addClass("ui-resizable"),a.extend(this,{_aspectRatio:!!c.aspectRatio,aspectRatio:c.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:c.helper||c.ghost||c.animate?c.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)&&(this.element.wrap(a('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("resizable",this.element.data("resizable")),this.elementIsWrapper=!0,this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")}),this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0}),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css({margin:this.originalElement.css("margin")}),this._proportionallyResize()),this.handles=c.handles||(a(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se");if(this.handles.constructor==String){this.handles=="all"&&(this.handles="n,e,s,w,se,sw,ne,nw");var d=this.handles.split(",");this.handles={};for(var e=0;e<d.length;e++){var f=a.trim(d[e]),g="ui-resizable-"+f,h=a('<div class="ui-resizable-handle '+g+'"></div>');h.css({zIndex:c.zIndex}),"se"==f&&h.addClass("ui-icon ui-icon-gripsmall-diagonal-se"),this.handles[f]=".ui-resizable-"+f,this.element.append(h)}}this._renderAxis=function(b){b=b||this.element;for(var c in this.handles){this.handles[c].constructor==String&&(this.handles[c]=a(this.handles[c],this.element).show());if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var d=a(this.handles[c],this.element),e=0;e=/sw|ne|nw|se|n|s/.test(c)?d.outerHeight():d.outerWidth();var f=["padding",/ne|nw|n/.test(c)?"Top":/se|sw|s/.test(c)?"Bottom":/^e$/.test(c)?"Right":"Left"].join("");b.css(f,e),this._proportionallyResize()}if(!a(this.handles[c]).length)continue}},this._renderAxis(this.element),this._handles=a(".ui-resizable-handle",this.element).disableSelection(),this._handles.mouseover(function(){if(!b.resizing){if(this.className)var a=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);b.axis=a&&a[1]?a[1]:"se"}}),c.autoHide&&(this._handles.hide(),a(this.element).addClass("ui-resizable-autohide").hover(function(){if(c.disabled)return;a(this).removeClass("ui-resizable-autohide"),b._handles.show()},function(){if(c.disabled)return;b.resizing||(a(this).addClass("ui-resizable-autohide"),b._handles.hide())})),this._mouseInit()},destroy:function(){this._mouseDestroy();var b=function(b){a(b).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){b(this.element);var c=this.element;c.after(this.originalElement.css({position:c.css("position"),width:c.outerWidth(),height:c.outerHeight(),top:c.css("top"),left:c.css("left")})).remove()}return this.originalElement.css("resize",this.originalResizeStyle),b(this.originalElement),this},_mouseCapture:function(b){var c=!1;for(var d in this.handles)a(this.handles[d])[0]==b.target&&(c=!0);return!this.options.disabled&&c},_mouseStart:function(b){var d=this.options,e=this.element.position(),f=this.element;this.resizing=!0,this.documentScroll={top:a(document).scrollTop(),left:a(document).scrollLeft()},(f.is(".ui-draggable")||/absolute/.test(f.css("position")))&&f.css({position:"absolute",top:e.top,left:e.left}),this._renderProxy();var g=c(this.helper.css("left")),h=c(this.helper.css("top"));d.containment&&(g+=a(d.containment).scrollLeft()||0,h+=a(d.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:g,top:h},this.size=this._helper?{width:f.outerWidth(),height:f.outerHeight()}:{width:f.width(),height:f.height()},this.originalSize=this._helper?{width:f.outerWidth(),height:f.outerHeight()}:{width:f.width(),height:f.height()},this.originalPosition={left:g,top:h},this.sizeDiff={width:f.outerWidth()-f.width(),height:f.outerHeight()-f.height()},this.originalMousePosition={left:b.pageX,top:b.pageY},this.aspectRatio=typeof d.aspectRatio=="number"?d.aspectRatio:this.originalSize.width/this.originalSize.height||1;var i=a(".ui-resizable-"+this.axis).css("cursor");return a("body").css("cursor",i=="auto"?this.axis+"-resize":i),f.addClass("ui-resizable-resizing"),this._propagate("start",b),!0},_mouseDrag:function(b){var c=this.helper,d=this.options,e={},f=this,g=this.originalMousePosition,h=this.axis,i=b.pageX-g.left||0,j=b.pageY-g.top||0,k=this._change[h];if(!k)return!1;var l=k.apply(this,[b,i,j]),m=a.browser.msie&&a.browser.version<7,n=this.sizeDiff;this._updateVirtualBoundaries(b.shiftKey);if(this._aspectRatio||b.shiftKey)l=this._updateRatio(l,b);return l=this._respectSize(l,b),this._propagate("resize",b),c.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"}),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),this._updateCache(l),this._trigger("resize",b,this.ui()),!1},_mouseStop:function(b){this.resizing=!1;var c=this.options,d=this;if(this._helper){var e=this._proportionallyResizeElements,f=e.length&&/textarea/i.test(e[0].nodeName),g=f&&a.ui.hasScroll(e[0],"left")?0:d.sizeDiff.height,h=f?0:d.sizeDiff.width,i={width:d.helper.width()-h,height:d.helper.height()-g},j=parseInt(d.element.css("left"),10)+(d.position.left-d.originalPosition.left)||null,k=parseInt(d.element.css("top"),10)+(d.position.top-d.originalPosition.top)||null;c.animate||this.element.css(a.extend(i,{top:k,left:j})),d.helper.height(d.size.height),d.helper.width(d.size.width),this._helper&&!c.animate&&this._proportionallyResize()}return a("body").css("cursor","auto"),this.element.removeClass("ui-resizable-resizing"),this._propagate("stop",b),this._helper&&this.helper.remove(),!1},_updateVirtualBoundaries:function(a){var b=this.options,c,e,f,g,h;h={minWidth:d(b.minWidth)?b.minWidth:0,maxWidth:d(b.maxWidth)?b.maxWidth:Infinity,minHeight:d(b.minHeight)?b.minHeight:0,maxHeight:d(b.maxHeight)?b.maxHeight:Infinity};if(this._aspectRatio||a)c=h.minHeight*this.aspectRatio,f=h.minWidth/this.aspectRatio,e=h.maxHeight*this.aspectRatio,g=h.maxWidth/this.aspectRatio,c>h.minWidth&&(h.minWidth=c),f>h.minHeight&&(h.minHeight=f),e<h.maxWidth&&(h.maxWidth=e),g<h.maxHeight&&(h.maxHeight=g);this._vBoundaries=h},_updateCache:function(a){var b=this.options;this.offset=this.helper.offset(),d(a.left)&&(this.position.left=a.left),d(a.top)&&(this.position.top=a.top),d(a.height)&&(this.size.height=a.height),d(a.width)&&(this.size.width=a.width)},_updateRatio:function(a,b){var c=this.options,e=this.position,f=this.size,g=this.axis;return d(a.height)?a.width=a.height*this.aspectRatio:d(a.width)&&(a.height=a.width/this.aspectRatio),g=="sw"&&(a.left=e.left+(f.width-a.width),a.top=null),g=="nw"&&(a.top=e.top+(f.height-a.height),a.left=e.left+(f.width-a.width)),a},_respectSize:function(a,b){var c=this.helper,e=this._vBoundaries,f=this._aspectRatio||b.shiftKey,g=this.axis,h=d(a.width)&&e.maxWidth&&e.maxWidth<a.width,i=d(a.height)&&e.maxHeight&&e.maxHeight<a.height,j=d(a.width)&&e.minWidth&&e.minWidth>a.width,k=d(a.height)&&e.minHeight&&e.minHeight>a.height;j&&(a.width=e.minWidth),k&&(a.height=e.minHeight),h&&(a.width=e.maxWidth),i&&(a.height=e.maxHeight);var l=this.originalPosition.left+this.originalSize.width,m=this.position.top+this.size.height,n=/sw|nw|w/.test(g),o=/nw|ne|n/.test(g);j&&n&&(a.left=l-e.minWidth),h&&n&&(a.left=l-e.maxWidth),k&&o&&(a.top=m-e.minHeight),i&&o&&(a.top=m-e.maxHeight);var p=!a.width&&!a.height;return p&&!a.left&&a.top?a.top=null:p&&!a.top&&a.left&&(a.left=null),a},_proportionallyResize:function(){var b=this.options;if(!this._proportionallyResizeElements.length)return;var c=this.helper||this.element;for(var d=0;d<this._proportionallyResizeElements.length;d++){var e=this._proportionallyResizeElements[d];if(!this.borderDif){var f=[e.css("borderTopWidth"),e.css("borderRightWidth"),e.css("borderBottomWidth"),e.css("borderLeftWidth")],g=[e.css("paddingTop"),e.css("paddingRight"),e.css("paddingBottom"),e.css("paddingLeft")];this.borderDif=a.map(f,function(a,b){var c=parseInt(a,10)||0,d=parseInt(g[b],10)||0;return c+d})}if(!a.browser.msie||!a(c).is(":hidden")&&!a(c).parents(":hidden").length)e.css({height:c.height()-this.borderDif[0]-this.borderDif[2]||0,width:c.width()-this.borderDif[1]-this.borderDif[3]||0});else continue}},_renderProxy:function(){var b=this.element,c=this.options;this.elementOffset=b.offset();if(this._helper){this.helper=this.helper||a('<div style="overflow:hidden;"></div>');var d=a.browser.msie&&a.browser.version<7,e=d?1:0,f=d?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+f,height:this.element.outerHeight()+f,position:"absolute",left:this.elementOffset.left-e+"px",top:this.elementOffset.top-e+"px",zIndex:++c.zIndex}),this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(a,b,c){return{width:this.originalSize.width+b}},w:function(a,b,c){var d=this.options,e=this.originalSize,f=this.originalPosition;return{left:f.left+b,width:e.width-b}},n:function(a,b,c){var d=this.options,e=this.originalSize,f=this.originalPosition;return{top:f.top+c,height:e.height-c}},s:function(a,b,c){return{height:this.originalSize.height+c}},se:function(b,c,d){return a.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[b,c,d]))},sw:function(b,c,d){return a.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[b,c,d]))},ne:function(b,c,d){return a.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[b,c,d]))},nw:function(b,c,d){return a.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[b,c,d]))}},_propagate:function(b,c){a.ui.plugin.call(this,b,[c,this.ui()]),b!="resize"&&this._trigger(b,c,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),a.extend(a.ui.resizable,{version:"1.8.23"}),a.ui.plugin.add("resizable","alsoResize",{start:function(b,c){var d=a(this).data("resizable"),e=d.options,f=function(b){a(b).each(function(){var b=a(this);b.data("resizable-alsoresize",{width:parseInt(b.width(),10),height:parseInt(b.height(),10),left:parseInt(b.css("left"),10),top:parseInt(b.css("top"),10)})})};typeof e.alsoResize=="object"&&!e.alsoResize.parentNode?e.alsoResize.length?(e.alsoResize=e.alsoResize[0],f(e.alsoResize)):a.each(e.alsoResize,function(a){f(a)}):f(e.alsoResize)},resize:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.originalSize,g=d.originalPosition,h={height:d.size.height-f.height||0,width:d.size.width-f.width||0,top:d.position.top-g.top||0,left:d.position.left-g.left||0},i=function(b,d){a(b).each(function(){var b=a(this),e=a(this).data("resizable-alsoresize"),f={},g=d&&d.length?d:b.parents(c.originalElement[0]).length?["width","height"]:["width","height","top","left"];a.each(g,function(a,b){var c=(e[b]||0)+(h[b]||0);c&&c>=0&&(f[b]=c||null)}),b.css(f)})};typeof e.alsoResize=="object"&&!e.alsoResize.nodeType?a.each(e.alsoResize,function(a,b){i(a,b)}):i(e.alsoResize)},stop:function(b,c){a(this).removeData("resizable-alsoresize")}}),a.ui.plugin.add("resizable","animate",{stop:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d._proportionallyResizeElements,g=f.length&&/textarea/i.test(f[0].nodeName),h=g&&a.ui.hasScroll(f[0],"left")?0:d.sizeDiff.height,i=g?0:d.sizeDiff.width,j={width:d.size.width-i,height:d.size.height-h},k=parseInt(d.element.css("left"),10)+(d.position.left-d.originalPosition.left)||null,l=parseInt(d.element.css("top"),10)+(d.position.top-d.originalPosition.top)||null;d.element.animate(a.extend(j,l&&k?{top:l,left:k}:{}),{duration:e.animateDuration,easing:e.animateEasing,step:function(){var c={width:parseInt(d.element.css("width"),10),height:parseInt(d.element.css("height"),10),top:parseInt(d.element.css("top"),10),left:parseInt(d.element.css("left"),10)};f&&f.length&&a(f[0]).css({width:c.width,height:c.height}),d._updateCache(c),d._propagate("resize",b)}})}}),a.ui.plugin.add("resizable","containment",{start:function(b,d){var e=a(this).data("resizable"),f=e.options,g=e.element,h=f.containment,i=h instanceof a?h.get(0):/parent/.test(h)?g.parent().get(0):h;if(!i)return;e.containerElement=a(i);if(/document/.test(h)||h==document)e.containerOffset={left:0,top:0},e.containerPosition={left:0,top:0},e.parentData={element:a(document),left:0,top:0,width:a(document).width(),height:a(document).height()||document.body.parentNode.scrollHeight};else{var j=a(i),k=[];a(["Top","Right","Left","Bottom"]).each(function(a,b){k[a]=c(j.css("padding"+b))}),e.containerOffset=j.offset(),e.containerPosition=j.position(),e.containerSize={height:j.innerHeight()-k[3],width:j.innerWidth()-k[1]};var l=e.containerOffset,m=e.containerSize.height,n=e.containerSize.width,o=a.ui.hasScroll(i,"left")?i.scrollWidth:n,p=a.ui.hasScroll(i)?i.scrollHeight:m;e.parentData={element:i,left:l.left,top:l.top,width:o,height:p}}},resize:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.containerSize,g=d.containerOffset,h=d.size,i=d.position,j=d._aspectRatio||b.shiftKey,k={top:0,left:0},l=d.containerElement;l[0]!=document&&/static/.test(l.css("position"))&&(k=g),i.left<(d._helper?g.left:0)&&(d.size.width=d.size.width+(d._helper?d.position.left-g.left:d.position.left-k.left),j&&(d.size.height=d.size.width/d.aspectRatio),d.position.left=e.helper?g.left:0),i.top<(d._helper?g.top:0)&&(d.size.height=d.size.height+(d._helper?d.position.top-g.top:d.position.top),j&&(d.size.width=d.size.height*d.aspectRatio),d.position.top=d._helper?g.top:0),d.offset.left=d.parentData.left+d.position.left,d.offset.top=d.parentData.top+d.position.top;var m=Math.abs((d._helper?d.offset.left-k.left:d.offset.left-k.left)+d.sizeDiff.width),n=Math.abs((d._helper?d.offset.top-k.top:d.offset.top-g.top)+d.sizeDiff.height),o=d.containerElement.get(0)==d.element.parent().get(0),p=/relative|absolute/.test(d.containerElement.css("position"));o&&p&&(m-=d.parentData.left),m+d.size.width>=d.parentData.width&&(d.size.width=d.parentData.width-m,j&&(d.size.height=d.size.width/d.aspectRatio)),n+d.size.height>=d.parentData.height&&(d.size.height=d.parentData.height-n,j&&(d.size.width=d.size.height*d.aspectRatio))},stop:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.position,g=d.containerOffset,h=d.containerPosition,i=d.containerElement,j=a(d.helper),k=j.offset(),l=j.outerWidth()-d.sizeDiff.width,m=j.outerHeight()-d.sizeDiff.height;d._helper&&!e.animate&&/relative/.test(i.css("position"))&&a(this).css({left:k.left-h.left-g.left,width:l,height:m}),d._helper&&!e.animate&&/static/.test(i.css("position"))&&a(this).css({left:k.left-h.left-g.left,width:l,height:m})}}),a.ui.plugin.add("resizable","ghost",{start:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.size;d.ghost=d.originalElement.clone(),d.ghost.css({opacity:.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof e.ghost=="string"?e.ghost:""),d.ghost.appendTo(d.helper)},resize:function(b,c){var d=a(this).data("resizable"),e=d.options;d.ghost&&d.ghost.css({position:"relative",height:d.size.height,width:d.size.width})},stop:function(b,c){var d=a(this).data("resizable"),e=d.options;d.ghost&&d.helper&&d.helper.get(0).removeChild(d.ghost.get(0))}}),a.ui.plugin.add("resizable","grid",{resize:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.size,g=d.originalSize,h=d.originalPosition,i=d.axis,j=e._aspectRatio||b.shiftKey;e.grid=typeof e.grid=="number"?[e.grid,e.grid]:e.grid;var k=Math.round((f.width-g.width)/(e.grid[0]||1))*(e.grid[0]||1),l=Math.round((f.height-g.height)/(e.grid[1]||1))*(e.grid[1]||1);/^(se|s|e)$/.test(i)?(d.size.width=g.width+k,d.size.height=g.height+l):/^(ne)$/.test(i)?(d.size.width=g.width+k,d.size.height=g.height+l,d.position.top=h.top-l):/^(sw)$/.test(i)?(d.size.width=g.width+k,d.size.height=g.height+l,d.position.left=h.left-k):(d.size.width=g.width+k,d.size.height=g.height+l,d.position.top=h.top-l,d.position.left=h.left-k)}});var c=function(a){return parseInt(a,10)||0},d=function(a){return!isNaN(parseInt(a,10))}})(jQuery);;/*! jQuery UI - v1.8.23 - 2012-08-15 |
2204 | +* https://github.com/jquery/jquery-ui |
2205 | +* Includes: jquery.ui.selectable.js |
2206 | +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ |
2207 | +(function(a,b){a.widget("ui.selectable",a.ui.mouse,{options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch"},_create:function(){var b=this;this.element.addClass("ui-selectable"),this.dragged=!1;var c;this.refresh=function(){c=a(b.options.filter,b.element[0]),c.addClass("ui-selectee"),c.each(function(){var b=a(this),c=b.offset();a.data(this,"selectable-item",{element:this,$element:b,left:c.left,top:c.top,right:c.left+b.outerWidth(),bottom:c.top+b.outerHeight(),startselected:!1,selected:b.hasClass("ui-selected"),selecting:b.hasClass("ui-selecting"),unselecting:b.hasClass("ui-unselecting")})})},this.refresh(),this.selectees=c.addClass("ui-selectee"),this._mouseInit(),this.helper=a("<div class='ui-selectable-helper'></div>")},destroy:function(){return this.selectees.removeClass("ui-selectee").removeData("selectable-item"),this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable"),this._mouseDestroy(),this},_mouseStart:function(b){var c=this;this.opos=[b.pageX,b.pageY];if(this.options.disabled)return;var d=this.options;this.selectees=a(d.filter,this.element[0]),this._trigger("start",b),a(d.appendTo).append(this.helper),this.helper.css({left:b.clientX,top:b.clientY,width:0,height:0}),d.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var d=a.data(this,"selectable-item");d.startselected=!0,!b.metaKey&&!b.ctrlKey&&(d.$element.removeClass("ui-selected"),d.selected=!1,d.$element.addClass("ui-unselecting"),d.unselecting=!0,c._trigger("unselecting",b,{unselecting:d.element}))}),a(b.target).parents().andSelf().each(function(){var d=a.data(this,"selectable-item");if(d){var e=!b.metaKey&&!b.ctrlKey||!d.$element.hasClass("ui-selected");return d.$element.removeClass(e?"ui-unselecting":"ui-selected").addClass(e?"ui-selecting":"ui-unselecting"),d.unselecting=!e,d.selecting=e,d.selected=e,e?c._trigger("selecting",b,{selecting:d.element}):c._trigger("unselecting",b,{unselecting:d.element}),!1}})},_mouseDrag:function(b){var c=this;this.dragged=!0;if(this.options.disabled)return;var d=this.options,e=this.opos[0],f=this.opos[1],g=b.pageX,h=b.pageY;if(e>g){var i=g;g=e,e=i}if(f>h){var i=h;h=f,f=i}return this.helper.css({left:e,top:f,width:g-e,height:h-f}),this.selectees.each(function(){var i=a.data(this,"selectable-item");if(!i||i.element==c.element[0])return;var j=!1;d.tolerance=="touch"?j=!(i.left>g||i.right<e||i.top>h||i.bottom<f):d.tolerance=="fit"&&(j=i.left>e&&i.right<g&&i.top>f&&i.bottom<h),j?(i.selected&&(i.$element.removeClass("ui-selected"),i.selected=!1),i.unselecting&&(i.$element.removeClass("ui-unselecting"),i.unselecting=!1),i.selecting||(i.$element.addClass("ui-selecting"),i.selecting=!0,c._trigger("selecting",b,{selecting:i.element}))):(i.selecting&&((b.metaKey||b.ctrlKey)&&i.startselected?(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.$element.addClass("ui-selected"),i.selected=!0):(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.startselected&&(i.$element.addClass("ui-unselecting"),i.unselecting=!0),c._trigger("unselecting",b,{unselecting:i.element}))),i.selected&&!b.metaKey&&!b.ctrlKey&&!i.startselected&&(i.$element.removeClass("ui-selected"),i.selected=!1,i.$element.addClass("ui-unselecting"),i.unselecting=!0,c._trigger("unselecting",b,{unselecting:i.element})))}),!1},_mouseStop:function(b){var c=this;this.dragged=!1;var d=this.options;return a(".ui-unselecting",this.element[0]).each(function(){var d=a.data(this,"selectable-item");d.$element.removeClass("ui-unselecting"),d.unselecting=!1,d.startselected=!1,c._trigger("unselected",b,{unselected:d.element})}),a(".ui-selecting",this.element[0]).each(function(){var d=a.data(this,"selectable-item");d.$element.removeClass("ui-selecting").addClass("ui-selected"),d.selecting=!1,d.selected=!0,d.startselected=!0,c._trigger("selected",b,{selected:d.element})}),this._trigger("stop",b),this.helper.remove(),!1}}),a.extend(a.ui.selectable,{version:"1.8.23"})})(jQuery);;/*! jQuery UI - v1.8.23 - 2012-08-15 |
2208 | +* https://github.com/jquery/jquery-ui |
2209 | +* Includes: jquery.ui.sortable.js |
2210 | +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ |
2211 | +(function(a,b){a.widget("ui.sortable",a.ui.mouse,{widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3},_create:function(){var a=this.options;this.containerCache={},this.element.addClass("ui-sortable"),this.refresh(),this.floating=this.items.length?a.axis==="x"||/left|right/.test(this.items[0].item.css("float"))||/inline|table-cell/.test(this.items[0].item.css("display")):!1,this.offset=this.element.offset(),this._mouseInit(),this.ready=!0},destroy:function(){a.Widget.prototype.destroy.call(this),this.element.removeClass("ui-sortable ui-sortable-disabled"),this._mouseDestroy();for(var b=this.items.length-1;b>=0;b--)this.items[b].item.removeData(this.widgetName+"-item");return this},_setOption:function(b,c){b==="disabled"?(this.options[b]=c,this.widget()[c?"addClass":"removeClass"]("ui-sortable-disabled")):a.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(b,c){var d=this;if(this.reverting)return!1;if(this.options.disabled||this.options.type=="static")return!1;this._refreshItems(b);var e=null,f=this,g=a(b.target).parents().each(function(){if(a.data(this,d.widgetName+"-item")==f)return e=a(this),!1});a.data(b.target,d.widgetName+"-item")==f&&(e=a(b.target));if(!e)return!1;if(this.options.handle&&!c){var h=!1;a(this.options.handle,e).find("*").andSelf().each(function(){this==b.target&&(h=!0)});if(!h)return!1}return this.currentItem=e,this._removeCurrentsFromItems(),!0},_mouseStart:function(b,c,d){var e=this.options,f=this;this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(b),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},a.extend(this.offset,{click:{left:b.pageX-this.offset.left,top:b.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),this.originalPosition=this._generatePosition(b),this.originalPageX=b.pageX,this.originalPageY=b.pageY,e.cursorAt&&this._adjustOffsetFromHelper(e.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!=this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),e.containment&&this._setContainment(),e.cursor&&(a("body").css("cursor")&&(this._storedCursor=a("body").css("cursor")),a("body").css("cursor",e.cursor)),e.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",e.opacity)),e.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",e.zIndex)),this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",b,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions();if(!d)for(var g=this.containers.length-1;g>=0;g--)this.containers[g]._trigger("activate",b,f._uiHash(this));return a.ui.ddmanager&&(a.ui.ddmanager.current=this),a.ui.ddmanager&&!e.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,b),this.dragging=!0,this.helper.addClass("ui-sortable-helper"),this._mouseDrag(b),!0},_mouseDrag:function(b){this.position=this._generatePosition(b),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs);if(this.options.scroll){var c=this.options,d=!1;this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-b.pageY<c.scrollSensitivity?this.scrollParent[0].scrollTop=d=this.scrollParent[0].scrollTop+c.scrollSpeed:b.pageY-this.overflowOffset.top<c.scrollSensitivity&&(this.scrollParent[0].scrollTop=d=this.scrollParent[0].scrollTop-c.scrollSpeed),this.overflowOffset.left+this.scrollParent[0].offsetWidth-b.pageX<c.scrollSensitivity?this.scrollParent[0].scrollLeft=d=this.scrollParent[0].scrollLeft+c.scrollSpeed:b.pageX-this.overflowOffset.left<c.scrollSensitivity&&(this.scrollParent[0].scrollLeft=d=this.scrollParent[0].scrollLeft-c.scrollSpeed)):(b.pageY-a(document).scrollTop()<c.scrollSensitivity?d=a(document).scrollTop(a(document).scrollTop()-c.scrollSpeed):a(window).height()-(b.pageY-a(document).scrollTop())<c.scrollSensitivity&&(d=a(document).scrollTop(a(document).scrollTop()+c.scrollSpeed)),b.pageX-a(document).scrollLeft()<c.scrollSensitivity?d=a(document).scrollLeft(a(document).scrollLeft()-c.scrollSpeed):a(window).width()-(b.pageX-a(document).scrollLeft())<c.scrollSensitivity&&(d=a(document).scrollLeft(a(document).scrollLeft()+c.scrollSpeed))),d!==!1&&a.ui.ddmanager&&!c.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,b)}this.positionAbs=this._convertPositionTo("absolute");if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";for(var e=this.items.length-1;e>=0;e--){var f=this.items[e],g=f.item[0],h=this._intersectsWithPointer(f);if(!h)continue;if(g!=this.currentItem[0]&&this.placeholder[h==1?"next":"prev"]()[0]!=g&&!a.ui.contains(this.placeholder[0],g)&&(this.options.type=="semi-dynamic"?!a.ui.contains(this.element[0],g):!0)){this.direction=h==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(f))this._rearrange(b,f);else break;this._trigger("change",b,this._uiHash());break}}return this._contactContainers(b),a.ui.ddmanager&&a.ui.ddmanager.drag(this,b),this._trigger("sort",b,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(b,c){if(!b)return;a.ui.ddmanager&&!this.options.dropBehaviour&&a.ui.ddmanager.drop(this,b);if(this.options.revert){var d=this,e=d.placeholder.offset();d.reverting=!0,a(this.helper).animate({left:e.left-this.offset.parent.left-d.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:e.top-this.offset.parent.top-d.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){d._clear(b)})}else this._clear(b,c);return!1},cancel:function(){var b=this;if(this.dragging){this._mouseUp({target:null}),this.options.helper=="original"?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var c=this.containers.length-1;c>=0;c--)this.containers[c]._trigger("deactivate",null,b._uiHash(this)),this.containers[c].containerCache.over&&(this.containers[c]._trigger("out",null,b._uiHash(this)),this.containers[c].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.options.helper!="original"&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),a.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?a(this.domPosition.prev).after(this.currentItem):a(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(b){var c=this._getItemsAsjQuery(b&&b.connected),d=[];return b=b||{},a(c).each(function(){var c=(a(b.item||this).attr(b.attribute||"id")||"").match(b.expression||/(.+)[-=_](.+)/);c&&d.push((b.key||c[1]+"[]")+"="+(b.key&&b.expression?c[1]:c[2]))}),!d.length&&b.key&&d.push(b.key+"="),d.join("&")},toArray:function(b){var c=this._getItemsAsjQuery(b&&b.connected),d=[];return b=b||{},c.each(function(){d.push(a(b.item||this).attr(b.attribute||"id")||"")}),d},_intersectsWith:function(a){var b=this.positionAbs.left,c=b+this.helperProportions.width,d=this.positionAbs.top,e=d+this.helperProportions.height,f=a.left,g=f+a.width,h=a.top,i=h+a.height,j=this.offset.click.top,k=this.offset.click.left,l=d+j>h&&d+j<i&&b+k>f&&b+k<g;return this.options.tolerance=="pointer"||this.options.forcePointerForContainers||this.options.tolerance!="pointer"&&this.helperProportions[this.floating?"width":"height"]>a[this.floating?"width":"height"]?l:f<b+this.helperProportions.width/2&&c-this.helperProportions.width/2<g&&h<d+this.helperProportions.height/2&&e-this.helperProportions.height/2<i},_intersectsWithPointer:function(b){var c=this.options.axis==="x"||a.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,b.top,b.height),d=this.options.axis==="y"||a.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,b.left,b.width),e=c&&d,f=this._getDragVerticalDirection(),g=this._getDragHorizontalDirection();return e?this.floating?g&&g=="right"||f=="down"?2:1:f&&(f=="down"?2:1):!1},_intersectsWithSides:function(b){var c=a.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,b.top+b.height/2,b.height),d=a.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,b.left+b.width/2,b.width),e=this._getDragVerticalDirection(),f=this._getDragHorizontalDirection();return this.floating&&f?f=="right"&&d||f=="left"&&!d:e&&(e=="down"&&c||e=="up"&&!c)},_getDragVerticalDirection:function(){var a=this.positionAbs.top-this.lastPositionAbs.top;return a!=0&&(a>0?"down":"up")},_getDragHorizontalDirection:function(){var a=this.positionAbs.left-this.lastPositionAbs.left;return a!=0&&(a>0?"right":"left")},refresh:function(a){return this._refreshItems(a),this.refreshPositions(),this},_connectWith:function(){var a=this.options;return a.connectWith.constructor==String?[a.connectWith]:a.connectWith},_getItemsAsjQuery:function(b){var c=this,d=[],e=[],f=this._connectWith();if(f&&b)for(var g=f.length-1;g>=0;g--){var h=a(f[g]);for(var i=h.length-1;i>=0;i--){var j=a.data(h[i],this.widgetName);j&&j!=this&&!j.options.disabled&&e.push([a.isFunction(j.options.items)?j.options.items.call(j.element):a(j.options.items,j.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),j])}}e.push([a.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):a(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]);for(var g=e.length-1;g>=0;g--)e[g][0].each(function(){d.push(this)});return a(d)},_removeCurrentsFromItems:function(){var a=this.currentItem.find(":data("+this.widgetName+"-item)");for(var b=0;b<this.items.length;b++)for(var c=0;c<a.length;c++)a[c]==this.items[b].item[0]&&this.items.splice(b,1)},_refreshItems:function(b){this.items=[],this.containers=[this];var c=this.items,d=this,e=[[a.isFunction(this.options.items)?this.options.items.call(this.element[0],b,{item:this.currentItem}):a(this.options.items,this.element),this]],f=this._connectWith();if(f&&this.ready)for(var g=f.length-1;g>=0;g--){var h=a(f[g]);for(var i=h.length-1;i>=0;i--){var j=a.data(h[i],this.widgetName);j&&j!=this&&!j.options.disabled&&(e.push([a.isFunction(j.options.items)?j.options.items.call(j.element[0],b,{item:this.currentItem}):a(j.options.items,j.element),j]),this.containers.push(j))}}for(var g=e.length-1;g>=0;g--){var k=e[g][1],l=e[g][0];for(var i=0,m=l.length;i<m;i++){var n=a(l[i]);n.data(this.widgetName+"-item",k),c.push({item:n,instance:k,width:0,height:0,left:0,top:0})}}},refreshPositions:function(b){this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());for(var c=this.items.length-1;c>=0;c--){var d=this.items[c];if(d.instance!=this.currentContainer&&this.currentContainer&&d.item[0]!=this.currentItem[0])continue;var e=this.options.toleranceElement?a(this.options.toleranceElement,d.item):d.item;b||(d.width=e.outerWidth(),d.height=e.outerHeight());var f=e.offset();d.left=f.left,d.top=f.top}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(var c=this.containers.length-1;c>=0;c--){var f=this.containers[c].element.offset();this.containers[c].containerCache.left=f.left,this.containers[c].containerCache.top=f.top,this.containers[c].containerCache.width=this.containers[c].element.outerWidth(),this.containers[c].containerCache.height=this.containers[c].element.outerHeight()}return this},_createPlaceholder:function(b){var c=b||this,d=c.options;if(!d.placeholder||d.placeholder.constructor==String){var e=d.placeholder;d.placeholder={element:function(){var b=a(document.createElement(c.currentItem[0].nodeName)).addClass(e||c.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];return e||(b.style.visibility="hidden"),b},update:function(a,b){if(e&&!d.forcePlaceholderSize)return;b.height()||b.height(c.currentItem.innerHeight()-parseInt(c.currentItem.css("paddingTop")||0,10)-parseInt(c.currentItem.css("paddingBottom")||0,10)),b.width()||b.width(c.currentItem.innerWidth()-parseInt(c.currentItem.css("paddingLeft")||0,10)-parseInt(c.currentItem.css("paddingRight")||0,10))}}}c.placeholder=a(d.placeholder.element.call(c.element,c.currentItem)),c.currentItem.after(c.placeholder),d.placeholder.update(c,c.placeholder)},_contactContainers:function(b){var c=null,d=null;for(var e=this.containers.length-1;e>=0;e--){if(a.ui.contains(this.currentItem[0],this.containers[e].element[0]))continue;if(this._intersectsWith(this.containers[e].containerCache)){if(c&&a.ui.contains(this.containers[e].element[0],c.element[0]))continue;c=this.containers[e],d=e}else this.containers[e].containerCache.over&&(this.containers[e]._trigger("out",b,this._uiHash(this)),this.containers[e].containerCache.over=0)}if(!c)return;if(this.containers.length===1)this.containers[d]._trigger("over",b,this._uiHash(this)),this.containers[d].containerCache.over=1;else if(this.currentContainer!=this.containers[d]){var f=1e4,g=null,h=this.positionAbs[this.containers[d].floating?"left":"top"];for(var i=this.items.length-1;i>=0;i--){if(!a.ui.contains(this.containers[d].element[0],this.items[i].item[0]))continue;var j=this.containers[d].floating?this.items[i].item.offset().left:this.items[i].item.offset().top;Math.abs(j-h)<f&&(f=Math.abs(j-h),g=this.items[i],this.direction=j-h>0?"down":"up")}if(!g&&!this.options.dropOnEmpty)return;this.currentContainer=this.containers[d],g?this._rearrange(b,g,null,!0):this._rearrange(b,null,this.containers[d].element,!0),this._trigger("change",b,this._uiHash()),this.containers[d]._trigger("change",b,this._uiHash(this)),this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[d]._trigger("over",b,this._uiHash(this)),this.containers[d].containerCache.over=1}},_createHelper:function(b){var c=this.options,d=a.isFunction(c.helper)?a(c.helper.apply(this.element[0],[b,this.currentItem])):c.helper=="clone"?this.currentItem.clone():this.currentItem;return d.parents("body").length||a(c.appendTo!="parent"?c.appendTo:this.currentItem[0].parentNode)[0].appendChild(d[0]),d[0]==this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),(d[0].style.width==""||c.forceHelperSize)&&d.width(this.currentItem.width()),(d[0].style.height==""||c.forceHelperSize)&&d.height(this.currentItem.height()),d},_adjustOffsetFromHelper:function(b){typeof b=="string"&&(b=b.split(" ")),a.isArray(b)&&(b={left:+b[0],top:+b[1]||0}),"left"in b&&(this.offset.click.left=b.left+this.margins.left),"right"in b&&(this.offset.click.left=this.helperProportions.width-b.right+this.margins.left),"top"in b&&(this.offset.click.top=b.top+this.margins.top),"bottom"in b&&(this.offset.click.top=this.helperProportions.height-b.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var b=this.offsetParent.offset();this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])&&(b.left+=this.scrollParent.scrollLeft(),b.top+=this.scrollParent.scrollTop());if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)b={top:0,left:0};return{top:b.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:b.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.currentItem.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var b=this.options;b.containment=="parent"&&(b.containment=this.helper[0].parentNode);if(b.containment=="document"||b.containment=="window")this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,a(b.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a(b.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(b.containment)){var c=a(b.containment)[0],d=a(b.containment).offset(),e=a(c).css("overflow")!="hidden";this.containment=[d.left+(parseInt(a(c).css("borderLeftWidth"),10)||0)+(parseInt(a(c).css("paddingLeft"),10)||0)-this.margins.left,d.top+(parseInt(a(c).css("borderTopWidth"),10)||0)+(parseInt(a(c).css("paddingTop"),10)||0)-this.margins.top,d.left+(e?Math.max(c.scrollWidth,c.offsetWidth):c.offsetWidth)-(parseInt(a(c).css("borderLeftWidth"),10)||0)-(parseInt(a(c).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,d.top+(e?Math.max(c.scrollHeight,c.offsetHeight):c.offsetHeight)-(parseInt(a(c).css("borderTopWidth"),10)||0)-(parseInt(a(c).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}},_convertPositionTo:function(b,c){c||(c=this.position);var d=b=="absolute"?1:-1,e=this.options,f=this.cssPosition=="absolute"&&(this.scrollParent[0]==document||!a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,g=/(html|body)/i.test(f[0].tagName);return{top:c.top+this.offset.relative.top*d+this.offset.parent.top*d-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():g?0:f.scrollTop())*d),left:c.left+this.offset.relative.left*d+this.offset.parent.left*d-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():g?0:f.scrollLeft())*d)}},_generatePosition:function(b){var c=this.options,d=this.cssPosition=="absolute"&&(this.scrollParent[0]==document||!a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(d[0].tagName);this.cssPosition=="relative"&&(this.scrollParent[0]==document||this.scrollParent[0]==this.offsetParent[0])&&(this.offset.relative=this._getRelativeOffset());var f=b.pageX,g=b.pageY;if(this.originalPosition){this.containment&&(b.pageX-this.offset.click.left<this.containment[0]&&(f=this.containment[0]+this.offset.click.left),b.pageY-this.offset.click.top<this.containment[1]&&(g=this.containment[1]+this.offset.click.top),b.pageX-this.offset.click.left>this.containment[2]&&(f=this.containment[2]+this.offset.click.left),b.pageY-this.offset.click.top>this.containment[3]&&(g=this.containment[3]+this.offset.click.top));if(c.grid){var h=this.originalPageY+Math.round((g-this.originalPageY)/c.grid[1])*c.grid[1];g=this.containment?h-this.offset.click.top<this.containment[1]||h-this.offset.click.top>this.containment[3]?h-this.offset.click.top<this.containment[1]?h+c.grid[1]:h-c.grid[1]:h:h;var i=this.originalPageX+Math.round((f-this.originalPageX)/c.grid[0])*c.grid[0];f=this.containment?i-this.offset.click.left<this.containment[0]||i-this.offset.click.left>this.containment[2]?i-this.offset.click.left<this.containment[0]?i+c.grid[0]:i-c.grid[0]:i:i}}return{top:g-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(a.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:d.scrollTop()),left:f-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(a.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():e?0:d.scrollLeft())}},_rearrange:function(a,b,c,d){c?c[0].appendChild(this.placeholder[0]):b.item[0].parentNode.insertBefore(this.placeholder[0],this.direction=="down"?b.item[0]:b.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var e=this,f=this.counter;window.setTimeout(function(){f==e.counter&&e.refreshPositions(!d)},0)},_clear:function(b,c){this.reverting=!1;var d=[],e=this;!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null;if(this.helper[0]==this.currentItem[0]){for(var f in this._storedCSS)if(this._storedCSS[f]=="auto"||this._storedCSS[f]=="static")this._storedCSS[f]="";this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();this.fromOutside&&!c&&d.push(function(a){this._trigger("receive",a,this._uiHash(this.fromOutside))}),(this.fromOutside||this.domPosition.prev!=this.currentItem.prev().not(".ui-sortable-helper")[0]||this.domPosition.parent!=this.currentItem.parent()[0])&&!c&&d.push(function(a){this._trigger("update",a,this._uiHash())});if(!a.ui.contains(this.element[0],this.currentItem[0])){c||d.push(function(a){this._trigger("remove",a,this._uiHash())});for(var f=this.containers.length-1;f>=0;f--)a.ui.contains(this.containers[f].element[0],this.currentItem[0])&&!c&&(d.push(function(a){return function(b){a._trigger("receive",b,this._uiHash(this))}}.call(this,this.containers[f])),d.push(function(a){return function(b){a._trigger("update",b,this._uiHash(this))}}.call(this,this.containers[f])))}for(var f=this.containers.length-1;f>=0;f--)c||d.push(function(a){return function(b){a._trigger("deactivate",b,this._uiHash(this))}}.call(this,this.containers[f])),this.containers[f].containerCache.over&&(d.push(function(a){return function(b){a._trigger("out",b,this._uiHash(this))}}.call(this,this.containers[f])),this.containers[f].containerCache.over=0);this._storedCursor&&a("body").css("cursor",this._storedCursor),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex),this.dragging=!1;if(this.cancelHelperRemoval){if(!c){this._trigger("beforeStop",b,this._uiHash());for(var f=0;f<d.length;f++)d[f].call(this,b);this._trigger("stop",b,this._uiHash())}return this.fromOutside=!1,!1}c||this._trigger("beforeStop",b,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.helper[0]!=this.currentItem[0]&&this.helper.remove(),this.helper=null;if(!c){for(var f=0;f<d.length;f++)d[f].call(this,b);this._trigger("stop",b,this._uiHash())}return this.fromOutside=!1,!0},_trigger:function(){a.Widget.prototype._trigger.apply(this,arguments)===!1&&this.cancel()},_uiHash:function(b){var c=b||this;return{helper:c.helper,placeholder:c.placeholder||a([]),position:c.position,originalPosition:c.originalPosition,offset:c.positionAbs,item:c.currentItem,sender:b?b.element:null}}}),a.extend(a.ui.sortable,{version:"1.8.23"})})(jQuery);;/*! jQuery UI - v1.8.23 - 2012-08-15 |
2212 | +* https://github.com/jquery/jquery-ui |
2213 | +* Includes: jquery.ui.accordion.js |
2214 | +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ |
2215 | +(function(a,b){a.widget("ui.accordion",{options:{active:0,animated:"slide",autoHeight:!0,clearStyle:!1,collapsible:!1,event:"click",fillSpace:!1,header:"> li > :first-child,> :not(li):even",icons:{header:"ui-icon-triangle-1-e",headerSelected:"ui-icon-triangle-1-s"},navigation:!1,navigationFilter:function(){return this.href.toLowerCase()===location.href.toLowerCase()}},_create:function(){var b=this,c=b.options;b.running=0,b.element.addClass("ui-accordion ui-widget ui-helper-reset").children("li").addClass("ui-accordion-li-fix"),b.headers=b.element.find(c.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){if(c.disabled)return;a(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){if(c.disabled)return;a(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){if(c.disabled)return;a(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){if(c.disabled)return;a(this).removeClass("ui-state-focus")}),b.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom");if(c.navigation){var d=b.element.find("a").filter(c.navigationFilter).eq(0);if(d.length){var e=d.closest(".ui-accordion-header");e.length?b.active=e:b.active=d.closest(".ui-accordion-content").prev()}}b.active=b._findActive(b.active||c.active).addClass("ui-state-default ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top"),b.active.next().addClass("ui-accordion-content-active"),b._createIcons(),b.resize(),b.element.attr("role","tablist"),b.headers.attr("role","tab").bind("keydown.accordion",function(a){return b._keydown(a)}).next().attr("role","tabpanel"),b.headers.not(b.active||"").attr({"aria-expanded":"false","aria-selected":"false",tabIndex:-1}).next().hide(),b.active.length?b.active.attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}):b.headers.eq(0).attr("tabIndex",0),a.browser.safari||b.headers.find("a").attr("tabIndex",-1),c.event&&b.headers.bind(c.event.split(" ").join(".accordion ")+".accordion",function(a){b._clickHandler.call(b,a,this),a.preventDefault()})},_createIcons:function(){var b=this.options;b.icons&&(a("<span></span>").addClass("ui-icon "+b.icons.header).prependTo(this.headers),this.active.children(".ui-icon").toggleClass(b.icons.header).toggleClass(b.icons.headerSelected),this.element.addClass("ui-accordion-icons"))},_destroyIcons:function(){this.headers.children(".ui-icon").remove(),this.element.removeClass("ui-accordion-icons")},destroy:function(){var b=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role"),this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("tabIndex"),this.headers.find("a").removeAttr("tabIndex"),this._destroyIcons();var c=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled");return(b.autoHeight||b.fillHeight)&&c.css("height",""),a.Widget.prototype.destroy.call(this)},_setOption:function(b,c){a.Widget.prototype._setOption.apply(this,arguments),b=="active"&&this.activate(c),b=="icons"&&(this._destroyIcons(),c&&this._createIcons()),b=="disabled"&&this.headers.add(this.headers.next())[c?"addClass":"removeClass"]("ui-accordion-disabled ui-state-disabled")},_keydown:function(b){if(this.options.disabled||b.altKey||b.ctrlKey)return;var c=a.ui.keyCode,d=this.headers.length,e=this.headers.index(b.target),f=!1;switch(b.keyCode){case c.RIGHT:case c.DOWN:f=this.headers[(e+1)%d];break;case c.LEFT:case c.UP:f=this.headers[(e-1+d)%d];break;case c.SPACE:case c.ENTER:this._clickHandler({target:b.target},b.target),b.preventDefault()}return f?(a(b.target).attr("tabIndex",-1),a(f).attr("tabIndex",0),f.focus(),!1):!0},resize:function(){var b=this.options,c;if(b.fillSpace){if(a.browser.msie){var d=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}c=this.element.parent().height(),a.browser.msie&&this.element.parent().css("overflow",d),this.headers.each(function(){c-=a(this).outerHeight(!0)}),this.headers.next().each(function(){a(this).height(Math.max(0,c-a(this).innerHeight()+a(this).height()))}).css("overflow","auto")}else b.autoHeight&&(c=0,this.headers.next().each(function(){c=Math.max(c,a(this).height("").height())}).height(c));return this},activate:function(a){this.options.active=a;var b=this._findActive(a)[0];return this._clickHandler({target:b},b),this},_findActive:function(b){return b?typeof b=="number"?this.headers.filter(":eq("+b+")"):this.headers.not(this.headers.not(b)):b===!1?a([]):this.headers.filter(":eq(0)")},_clickHandler:function(b,c){var d=this.options;if(d.disabled)return;if(!b.target){if(!d.collapsible)return;this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header),this.active.next().addClass("ui-accordion-content-active");var e=this.active.next(),f={options:d,newHeader:a([]),oldHeader:d.active,newContent:a([]),oldContent:e},g=this.active=a([]);this._toggle(g,e,f);return}var h=a(b.currentTarget||c),i=h[0]===this.active[0];d.active=d.collapsible&&i?!1:this.headers.index(h);if(this.running||!d.collapsible&&i)return;var j=this.active,g=h.next(),e=this.active.next(),f={options:d,newHeader:i&&d.collapsible?a([]):h,oldHeader:this.active,newContent:i&&d.collapsible?a([]):g,oldContent:e},k=this.headers.index(this.active[0])>this.headers.index(h[0]);this.active=i?a([]):h,this._toggle(g,e,f,i,k),j.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header),i||(h.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").children(".ui-icon").removeClass(d.icons.header).addClass(d.icons.headerSelected),h.next().addClass("ui-accordion-content-active"));return},_toggle:function(b,c,d,e,f){var g=this,h=g.options;g.toShow=b,g.toHide=c,g.data=d;var i=function(){if(!g)return;return g._completed.apply(g,arguments)};g._trigger("changestart",null,g.data),g.running=c.size()===0?b.size():c.size();if(h.animated){var j={};h.collapsible&&e?j={toShow:a([]),toHide:c,complete:i,down:f,autoHeight:h.autoHeight||h.fillSpace}:j={toShow:b,toHide:c,complete:i,down:f,autoHeight:h.autoHeight||h.fillSpace},h.proxied||(h.proxied=h.animated),h.proxiedDuration||(h.proxiedDuration=h.duration),h.animated=a.isFunction(h.proxied)?h.proxied(j):h.proxied,h.duration=a.isFunction(h.proxiedDuration)?h.proxiedDuration(j):h.proxiedDuration;var k=a.ui.accordion.animations,l=h.duration,m=h.animated;m&&!k[m]&&!a.easing[m]&&(m="slide"),k[m]||(k[m]=function(a){this.slide(a,{easing:m,duration:l||700})}),k[m](j)}else h.collapsible&&e?b.toggle():(c.hide(),b.show()),i(!0);c.prev().attr({"aria-expanded":"false","aria-selected":"false",tabIndex:-1}).blur(),b.prev().attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}).focus()},_completed:function(a){this.running=a?0:--this.running;if(this.running)return;this.options.clearStyle&&this.toShow.add(this.toHide).css({height:"",overflow:""}),this.toHide.removeClass("ui-accordion-content-active"),this.toHide.length&&(this.toHide.parent()[0].className=this.toHide.parent()[0].className),this._trigger("change",null,this.data)}}),a.extend(a.ui.accordion,{version:"1.8.23",animations:{slide:function(b,c){b=a.extend({easing:"swing",duration:300},b,c);if(!b.toHide.size()){b.toShow.animate({height:"show",paddingTop:"show",paddingBottom:"show"},b);return}if(!b.toShow.size()){b.toHide.animate({height:"hide",paddingTop:"hide",paddingBottom:"hide"},b);return}var d=b.toShow.css("overflow"),e=0,f={},g={},h=["height","paddingTop","paddingBottom"],i,j=b.toShow;i=j[0].style.width,j.width(j.parent().width()-parseFloat(j.css("paddingLeft"))-parseFloat(j.css("paddingRight"))-(parseFloat(j.css("borderLeftWidth"))||0)-(parseFloat(j.css("borderRightWidth"))||0)),a.each(h,function(c,d){g[d]="hide";var e=(""+a.css(b.toShow[0],d)).match(/^([\d+-.]+)(.*)$/);f[d]={value:e[1],unit:e[2]||"px"}}),b.toShow.css({height:0,overflow:"hidden"}).show(),b.toHide.filter(":hidden").each(b.complete).end().filter(":visible").animate(g,{step:function(a,c){c.prop=="height"&&(e=c.end-c.start===0?0:(c.now-c.start)/(c.end-c.start)),b.toShow[0].style[c.prop]=e*f[c.prop].value+f[c.prop].unit},duration:b.duration,easing:b.easing,complete:function(){b.autoHeight||b.toShow.css("height",""),b.toShow.css({width:i,overflow:d}),b.complete()}})},bounceslide:function(a){this.slide(a,{easing:a.down?"easeOutBounce":"swing",duration:a.down?1e3:200})}}})})(jQuery);;/*! jQuery UI - v1.8.23 - 2012-08-15 |
2216 | +* https://github.com/jquery/jquery-ui |
2217 | +* Includes: jquery.ui.autocomplete.js |
2218 | +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ |
2219 | +(function(a,b){var c=0;a.widget("ui.autocomplete",{options:{appendTo:"body",autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null},pending:0,_create:function(){var b=this,c=this.element[0].ownerDocument,d;this.isMultiLine=this.element.is("textarea"),this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(c){if(b.options.disabled||b.element.propAttr("readOnly"))return;d=!1;var e=a.ui.keyCode;switch(c.keyCode){case e.PAGE_UP:b._move("previousPage",c);break;case e.PAGE_DOWN:b._move("nextPage",c);break;case e.UP:b._keyEvent("previous",c);break;case e.DOWN:b._keyEvent("next",c);break;case e.ENTER:case e.NUMPAD_ENTER:b.menu.active&&(d=!0,c.preventDefault());case e.TAB:if(!b.menu.active)return;b.menu.select(c);break;case e.ESCAPE:b.element.val(b.term),b.close(c);break;default:clearTimeout(b.searching),b.searching=setTimeout(function(){b.term!=b.element.val()&&(b.selectedItem=null,b.search(null,c))},b.options.delay)}}).bind("keypress.autocomplete",function(a){d&&(d=!1,a.preventDefault())}).bind("focus.autocomplete",function(){if(b.options.disabled)return;b.selectedItem=null,b.previous=b.element.val()}).bind("blur.autocomplete",function(a){if(b.options.disabled)return;clearTimeout(b.searching),b.closing=setTimeout(function(){b.close(a),b._change(a)},150)}),this._initSource(),this.menu=a("<ul></ul>").addClass("ui-autocomplete").appendTo(a(this.options.appendTo||"body",c)[0]).mousedown(function(c){var d=b.menu.element[0];a(c.target).closest(".ui-menu-item").length||setTimeout(function(){a(document).one("mousedown",function(c){c.target!==b.element[0]&&c.target!==d&&!a.ui.contains(d,c.target)&&b.close()})},1),setTimeout(function(){clearTimeout(b.closing)},13)}).menu({focus:function(a,c){var d=c.item.data("item.autocomplete");!1!==b._trigger("focus",a,{item:d})&&/^key/.test(a.originalEvent.type)&&b.element.val(d.value)},selected:function(a,d){var e=d.item.data("item.autocomplete"),f=b.previous;b.element[0]!==c.activeElement&&(b.element.focus(),b.previous=f,setTimeout(function(){b.previous=f,b.selectedItem=e},1)),!1!==b._trigger("select",a,{item:e})&&b.element.val(e.value),b.term=b.element.val(),b.close(a),b.selectedItem=e},blur:function(a,c){b.menu.element.is(":visible")&&b.element.val()!==b.term&&b.element.val(b.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu"),a.fn.bgiframe&&this.menu.element.bgiframe(),b.beforeunloadHandler=function(){b.element.removeAttr("autocomplete")},a(window).bind("beforeunload",b.beforeunloadHandler)},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup"),this.menu.element.remove(),a(window).unbind("beforeunload",this.beforeunloadHandler),a.Widget.prototype.destroy.call(this)},_setOption:function(b,c){a.Widget.prototype._setOption.apply(this,arguments),b==="source"&&this._initSource(),b==="appendTo"&&this.menu.element.appendTo(a(c||"body",this.element[0].ownerDocument)[0]),b==="disabled"&&c&&this.xhr&&this.xhr.abort()},_initSource:function(){var b=this,c,d;a.isArray(this.options.source)?(c=this.options.source,this.source=function(b,d){d(a.ui.autocomplete.filter(c,b.term))}):typeof this.options.source=="string"?(d=this.options.source,this.source=function(c,e){b.xhr&&b.xhr.abort(),b.xhr=a.ajax({url:d,data:c,dataType:"json",success:function(a,b){e(a)},error:function(){e([])}})}):this.source=this.options.source},search:function(a,b){a=a!=null?a:this.element.val(),this.term=this.element.val();if(a.length<this.options.minLength)return this.close(b);clearTimeout(this.closing);if(this._trigger("search",b)===!1)return;return this._search(a)},_search:function(a){this.pending++,this.element.addClass("ui-autocomplete-loading"),this.source({term:a},this._response())},_response:function(){var a=this,b=++c;return function(d){b===c&&a.__response(d),a.pending--,a.pending||a.element.removeClass("ui-autocomplete-loading")}},__response:function(a){!this.options.disabled&&a&&a.length?(a=this._normalize(a),this._suggest(a),this._trigger("open")):this.close()},close:function(a){clearTimeout(this.closing),this.menu.element.is(":visible")&&(this.menu.element.hide(),this.menu.deactivate(),this._trigger("close",a))},_change:function(a){this.previous!==this.element.val()&&this._trigger("change",a,{item:this.selectedItem})},_normalize:function(b){return b.length&&b[0].label&&b[0].value?b:a.map(b,function(b){return typeof b=="string"?{label:b,value:b}:a.extend({label:b.label||b.value,value:b.value||b.label},b)})},_suggest:function(b){var c=this.menu.element.empty().zIndex(this.element.zIndex()+1);this._renderMenu(c,b),this.menu.deactivate(),this.menu.refresh(),c.show(),this._resizeMenu(),c.position(a.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next(new a.Event("mouseover"))},_resizeMenu:function(){var a=this.menu.element;a.outerWidth(Math.max(a.width("").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(b,c){var d=this;a.each(c,function(a,c){d._renderItem(b,c)})},_renderItem:function(b,c){return a("<li></li>").data("item.autocomplete",c).append(a("<a></a>").text(c.label)).appendTo(b)},_move:function(a,b){if(!this.menu.element.is(":visible")){this.search(null,b);return}if(this.menu.first()&&/^previous/.test(a)||this.menu.last()&&/^next/.test(a)){this.element.val(this.term),this.menu.deactivate();return}this.menu[a](b)},widget:function(){return this.menu.element},_keyEvent:function(a,b){if(!this.isMultiLine||this.menu.element.is(":visible"))this._move(a,b),b.preventDefault()}}),a.extend(a.ui.autocomplete,{escapeRegex:function(a){return a.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")},filter:function(b,c){var d=new RegExp(a.ui.autocomplete.escapeRegex(c),"i");return a.grep(b,function(a){return d.test(a.label||a.value||a)})}})})(jQuery),function(a){a.widget("ui.menu",{_create:function(){var b=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(c){if(!a(c.target).closest(".ui-menu-item a").length)return;c.preventDefault(),b.select(c)}),this.refresh()},refresh:function(){var b=this,c=this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem");c.children("a").addClass("ui-corner-all").attr("tabindex",-1).mouseenter(function(c){b.activate(c,a(this).parent())}).mouseleave(function(){b.deactivate()})},activate:function(a,b){this.deactivate();if(this.hasScroll()){var c=b.offset().top-this.element.offset().top,d=this.element.scrollTop(),e=this.element.height();c<0?this.element.scrollTop(d+c):c>=e&&this.element.scrollTop(d+c-e+b.height())}this.active=b.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end(),this._trigger("focus",a,{item:b})},deactivate:function(){if(!this.active)return;this.active.children("a").removeClass("ui-state-hover").removeAttr("id"),this._trigger("blur"),this.active=null},next:function(a){this.move("next",".ui-menu-item:first",a)},previous:function(a){this.move("prev",".ui-menu-item:last",a)},first:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},last:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},move:function(a,b,c){if(!this.active){this.activate(c,this.element.children(b));return}var d=this.active[a+"All"](".ui-menu-item").eq(0);d.length?this.activate(c,d):this.activate(c,this.element.children(b))},nextPage:function(b){if(this.hasScroll()){if(!this.active||this.last()){this.activate(b,this.element.children(".ui-menu-item:first"));return}var c=this.active.offset().top,d=this.element.height(),e=this.element.children(".ui-menu-item").filter(function(){var b=a(this).offset().top-c-d+a(this).height();return b<10&&b>-10});e.length||(e=this.element.children(".ui-menu-item:last")),this.activate(b,e)}else this.activate(b,this.element.children(".ui-menu-item").filter(!this.active||this.last()?":first":":last"))},previousPage:function(b){if(this.hasScroll()){if(!this.active||this.first()){this.activate(b,this.element.children(".ui-menu-item:last"));return}var c=this.active.offset().top,d=this.element.height(),e=this.element.children(".ui-menu-item").filter(function(){var b=a(this).offset().top-c+d-a(this).height();return b<10&&b>-10});e.length||(e=this.element.children(".ui-menu-item:first")),this.activate(b,e)}else this.activate(b,this.element.children(".ui-menu-item").filter(!this.active||this.first()?":last":":first"))},hasScroll:function(){return this.element.height()<this.element[a.fn.prop?"prop":"attr"]("scrollHeight")},select:function(a){this._trigger("selected",a,{item:this.active})}})}(jQuery);;/*! jQuery UI - v1.8.23 - 2012-08-15 |
2220 | +* https://github.com/jquery/jquery-ui |
2221 | +* Includes: jquery.ui.button.js |
2222 | +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ |
2223 | +(function(a,b){var c,d,e,f,g="ui-button ui-widget ui-state-default ui-corner-all",h="ui-state-hover ui-state-active ",i="ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",j=function(){var b=a(this).find(":ui-button");setTimeout(function(){b.button("refresh")},1)},k=function(b){var c=b.name,d=b.form,e=a([]);return c&&(d?e=a(d).find("[name='"+c+"']"):e=a("[name='"+c+"']",b.ownerDocument).filter(function(){return!this.form})),e};a.widget("ui.button",{options:{disabled:null,text:!0,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset.button").bind("reset.button",j),typeof this.options.disabled!="boolean"?this.options.disabled=!!this.element.propAttr("disabled"):this.element.propAttr("disabled",this.options.disabled),this._determineButtonType(),this.hasTitle=!!this.buttonElement.attr("title");var b=this,h=this.options,i=this.type==="checkbox"||this.type==="radio",l="ui-state-hover"+(i?"":" ui-state-active"),m="ui-state-focus";h.label===null&&(h.label=this.buttonElement.html()),this.buttonElement.addClass(g).attr("role","button").bind("mouseenter.button",function(){if(h.disabled)return;a(this).addClass("ui-state-hover"),this===c&&a(this).addClass("ui-state-active")}).bind("mouseleave.button",function(){if(h.disabled)return;a(this).removeClass(l)}).bind("click.button",function(a){h.disabled&&(a.preventDefault(),a.stopImmediatePropagation())}),this.element.bind("focus.button",function(){b.buttonElement.addClass(m)}).bind("blur.button",function(){b.buttonElement.removeClass(m)}),i&&(this.element.bind("change.button",function(){if(f)return;b.refresh()}),this.buttonElement.bind("mousedown.button",function(a){if(h.disabled)return;f=!1,d=a.pageX,e=a.pageY}).bind("mouseup.button",function(a){if(h.disabled)return;if(d!==a.pageX||e!==a.pageY)f=!0})),this.type==="checkbox"?this.buttonElement.bind("click.button",function(){if(h.disabled||f)return!1;a(this).toggleClass("ui-state-active"),b.buttonElement.attr("aria-pressed",b.element[0].checked)}):this.type==="radio"?this.buttonElement.bind("click.button",function(){if(h.disabled||f)return!1;a(this).addClass("ui-state-active"),b.buttonElement.attr("aria-pressed","true");var c=b.element[0];k(c).not(c).map(function(){return a(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed","false")}):(this.buttonElement.bind("mousedown.button",function(){if(h.disabled)return!1;a(this).addClass("ui-state-active"),c=this,a(document).one("mouseup",function(){c=null})}).bind("mouseup.button",function(){if(h.disabled)return!1;a(this).removeClass("ui-state-active")}).bind("keydown.button",function(b){if(h.disabled)return!1;(b.keyCode==a.ui.keyCode.SPACE||b.keyCode==a.ui.keyCode.ENTER)&&a(this).addClass("ui-state-active")}).bind("keyup.button",function(){a(this).removeClass("ui-state-active")}),this.buttonElement.is("a")&&this.buttonElement.keyup(function(b){b.keyCode===a.ui.keyCode.SPACE&&a(this).click()})),this._setOption("disabled",h.disabled),this._resetButton()},_determineButtonType:function(){this.element.is(":checkbox")?this.type="checkbox":this.element.is(":radio")?this.type="radio":this.element.is("input")?this.type="input":this.type="button";if(this.type==="checkbox"||this.type==="radio"){var a=this.element.parents().filter(":last"),b="label[for='"+this.element.attr("id")+"']";this.buttonElement=a.find(b),this.buttonElement.length||(a=a.length?a.siblings():this.element.siblings(),this.buttonElement=a.filter(b),this.buttonElement.length||(this.buttonElement=a.find(b))),this.element.addClass("ui-helper-hidden-accessible");var c=this.element.is(":checked");c&&this.buttonElement.addClass("ui-state-active"),this.buttonElement.attr("aria-pressed",c)}else this.buttonElement=this.element},widget:function(){return this.buttonElement},destroy:function(){this.element.removeClass("ui-helper-hidden-accessible"),this.buttonElement.removeClass(g+" "+h+" "+i).removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html()),this.hasTitle||this.buttonElement.removeAttr("title"),a.Widget.prototype.destroy.call(this)},_setOption:function(b,c){a.Widget.prototype._setOption.apply(this,arguments);if(b==="disabled"){c?this.element.propAttr("disabled",!0):this.element.propAttr("disabled",!1);return}this._resetButton()},refresh:function(){var b=this.element.is(":disabled");b!==this.options.disabled&&this._setOption("disabled",b),this.type==="radio"?k(this.element[0]).each(function(){a(this).is(":checked")?a(this).button("widget").addClass("ui-state-active").attr("aria-pressed","true"):a(this).button("widget").removeClass("ui-state-active").attr("aria-pressed","false")}):this.type==="checkbox"&&(this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed","true"):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed","false"))},_resetButton:function(){if(this.type==="input"){this.options.label&&this.element.val(this.options.label);return}var b=this.buttonElement.removeClass(i),c=a("<span></span>",this.element[0].ownerDocument).addClass("ui-button-text").html(this.options.label).appendTo(b.empty()).text(),d=this.options.icons,e=d.primary&&d.secondary,f=[];d.primary||d.secondary?(this.options.text&&f.push("ui-button-text-icon"+(e?"s":d.primary?"-primary":"-secondary")),d.primary&&b.prepend("<span class='ui-button-icon-primary ui-icon "+d.primary+"'></span>"),d.secondary&&b.append("<span class='ui-button-icon-secondary ui-icon "+d.secondary+"'></span>"),this.options.text||(f.push(e?"ui-button-icons-only":"ui-button-icon-only"),this.hasTitle||b.attr("title",c))):f.push("ui-button-text-only"),b.addClass(f.join(" "))}}),a.widget("ui.buttonset",{options:{items:":button, :submit, :reset, :checkbox, :radio, a, :data(button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(b,c){b==="disabled"&&this.buttons.button("option",b,c),a.Widget.prototype._setOption.apply(this,arguments)},refresh:function(){var b=this.element.css("direction")==="rtl";this.buttons=this.element.find(this.options.items).filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(b?"ui-corner-right":"ui-corner-left").end().filter(":last").addClass(b?"ui-corner-left":"ui-corner-right").end().end()},destroy:function(){this.element.removeClass("ui-buttonset"),this.buttons.map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy"),a.Widget.prototype.destroy.call(this)}})})(jQuery);;/*! jQuery UI - v1.8.23 - 2012-08-15 |
2224 | +* https://github.com/jquery/jquery-ui |
2225 | +* Includes: jquery.ui.dialog.js |
2226 | +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ |
2227 | +(function(a,b){var c="ui-dialog ui-widget ui-widget-content ui-corner-all ",d={buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},e={maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0};a.widget("ui.dialog",{options:{autoOpen:!0,buttons:{},closeOnEscape:!0,closeText:"close",dialogClass:"",draggable:!0,hide:null,height:"auto",maxHeight:!1,maxWidth:!1,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",collision:"fit",using:function(b){var c=a(this).css(b).offset().top;c<0&&a(this).css("top",b.top-c)}},resizable:!0,show:null,stack:!0,title:"",width:300,zIndex:1e3},_create:function(){this.originalTitle=this.element.attr("title"),typeof this.originalTitle!="string"&&(this.originalTitle=""),this.options.title=this.options.title||this.originalTitle;var b=this,d=b.options,e=d.title||" ",f=a.ui.dialog.getTitleId(b.element),g=(b.uiDialog=a("<div></div>")).appendTo(document.body).hide().addClass(c+d.dialogClass).css({zIndex:d.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(c){d.closeOnEscape&&!c.isDefaultPrevented()&&c.keyCode&&c.keyCode===a.ui.keyCode.ESCAPE&&(b.close(c),c.preventDefault())}).attr({role:"dialog","aria-labelledby":f}).mousedown(function(a){b.moveToTop(!1,a)}),h=b.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(g),i=(b.uiDialogTitlebar=a("<div></div>")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(g),j=a('<a href="#"></a>').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){j.addClass("ui-state-hover")},function(){j.removeClass("ui-state-hover")}).focus(function(){j.addClass("ui-state-focus")}).blur(function(){j.removeClass("ui-state-focus")}).click(function(a){return b.close(a),!1}).appendTo(i),k=(b.uiDialogTitlebarCloseText=a("<span></span>")).addClass("ui-icon ui-icon-closethick").text(d.closeText).appendTo(j),l=a("<span></span>").addClass("ui-dialog-title").attr("id",f).html(e).prependTo(i);a.isFunction(d.beforeclose)&&!a.isFunction(d.beforeClose)&&(d.beforeClose=d.beforeclose),i.find("*").add(i).disableSelection(),d.draggable&&a.fn.draggable&&b._makeDraggable(),d.resizable&&a.fn.resizable&&b._makeResizable(),b._createButtons(d.buttons),b._isOpen=!1,a.fn.bgiframe&&g.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var a=this;return a.overlay&&a.overlay.destroy(),a.uiDialog.hide(),a.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body"),a.uiDialog.remove(),a.originalTitle&&a.element.attr("title",a.originalTitle),a},widget:function(){return this.uiDialog},close:function(b){var c=this,d,e;if(!1===c._trigger("beforeClose",b))return;return c.overlay&&c.overlay.destroy(),c.uiDialog.unbind("keypress.ui-dialog"),c._isOpen=!1,c.options.hide?c.uiDialog.hide(c.options.hide,function(){c._trigger("close",b)}):(c.uiDialog.hide(),c._trigger("close",b)),a.ui.dialog.overlay.resize(),c.options.modal&&(d=0,a(".ui-dialog").each(function(){this!==c.uiDialog[0]&&(e=a(this).css("z-index"),isNaN(e)||(d=Math.max(d,e)))}),a.ui.dialog.maxZ=d),c},isOpen:function(){return this._isOpen},moveToTop:function(b,c){var d=this,e=d.options,f;return e.modal&&!b||!e.stack&&!e.modal?d._trigger("focus",c):(e.zIndex>a.ui.dialog.maxZ&&(a.ui.dialog.maxZ=e.zIndex),d.overlay&&(a.ui.dialog.maxZ+=1,d.overlay.$el.css("z-index",a.ui.dialog.overlay.maxZ=a.ui.dialog.maxZ)),f={scrollTop:d.element.scrollTop(),scrollLeft:d.element.scrollLeft()},a.ui.dialog.maxZ+=1,d.uiDialog.css("z-index",a.ui.dialog.maxZ),d.element.attr(f),d._trigger("focus",c),d)},open:function(){if(this._isOpen)return;var b=this,c=b.options,d=b.uiDialog;return b.overlay=c.modal?new a.ui.dialog.overlay(b):null,b._size(),b._position(c.position),d.show(c.show),b.moveToTop(!0),c.modal&&d.bind("keydown.ui-dialog",function(b){if(b.keyCode!==a.ui.keyCode.TAB)return;var c=a(":tabbable",this),d=c.filter(":first"),e=c.filter(":last");if(b.target===e[0]&&!b.shiftKey)return d.focus(1),!1;if(b.target===d[0]&&b.shiftKey)return e.focus(1),!1}),a(b.element.find(":tabbable").get().concat(d.find(".ui-dialog-buttonpane :tabbable").get().concat(d.get()))).eq(0).focus(),b._isOpen=!0,b._trigger("open"),b},_createButtons:function(b){var c=this,d=!1,e=a("<div></div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),f=a("<div></div>").addClass("ui-dialog-buttonset").appendTo(e);c.uiDialog.find(".ui-dialog-buttonpane").remove(),typeof b=="object"&&b!==null&&a.each(b,function(){return!(d=!0)}),d&&(a.each(b,function(b,d){d=a.isFunction(d)?{click:d,text:b}:d;var e=a('<button type="button"></button>').click(function(){d.click.apply(c.element[0],arguments)}).appendTo(f);a.each(d,function(a,b){if(a==="click")return;a in e?e[a](b):e.attr(a,b)}),a.fn.button&&e.button()}),e.appendTo(c.uiDialog))},_makeDraggable:function(){function f(a){return{position:a.position,offset:a.offset}}var b=this,c=b.options,d=a(document),e;b.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(d,g){e=c.height==="auto"?"auto":a(this).height(),a(this).height(a(this).height()).addClass("ui-dialog-dragging"),b._trigger("dragStart",d,f(g))},drag:function(a,c){b._trigger("drag",a,f(c))},stop:function(g,h){c.position=[h.position.left-d.scrollLeft(),h.position.top-d.scrollTop()],a(this).removeClass("ui-dialog-dragging").height(e),b._trigger("dragStop",g,f(h)),a.ui.dialog.overlay.resize()}})},_makeResizable:function(c){function h(a){return{originalPosition:a.originalPosition,originalSize:a.originalSize,position:a.position,size:a.size}}c=c===b?this.options.resizable:c;var d=this,e=d.options,f=d.uiDialog.css("position"),g=typeof c=="string"?c:"n,e,s,w,se,sw,ne,nw";d.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:d.element,maxWidth:e.maxWidth,maxHeight:e.maxHeight,minWidth:e.minWidth,minHeight:d._minHeight(),handles:g,start:function(b,c){a(this).addClass("ui-dialog-resizing"),d._trigger("resizeStart",b,h(c))},resize:function(a,b){d._trigger("resize",a,h(b))},stop:function(b,c){a(this).removeClass("ui-dialog-resizing"),e.height=a(this).height(),e.width=a(this).width(),d._trigger("resizeStop",b,h(c)),a.ui.dialog.overlay.resize()}}).css("position",f).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var a=this.options;return a.height==="auto"?a.minHeight:Math.min(a.minHeight,a.height)},_position:function(b){var c=[],d=[0,0],e;if(b){if(typeof b=="string"||typeof b=="object"&&"0"in b)c=b.split?b.split(" "):[b[0],b[1]],c.length===1&&(c[1]=c[0]),a.each(["left","top"],function(a,b){+c[a]===c[a]&&(d[a]=c[a],c[a]=b)}),b={my:c.join(" "),at:c.join(" "),offset:d.join(" ")};b=a.extend({},a.ui.dialog.prototype.options.position,b)}else b=a.ui.dialog.prototype.options.position;e=this.uiDialog.is(":visible"),e||this.uiDialog.show(),this.uiDialog.css({top:0,left:0}).position(a.extend({of:window},b)),e||this.uiDialog.hide()},_setOptions:function(b){var c=this,f={},g=!1;a.each(b,function(a,b){c._setOption(a,b),a in d&&(g=!0),a in e&&(f[a]=b)}),g&&this._size(),this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option",f)},_setOption:function(b,d){var e=this,f=e.uiDialog;switch(b){case"beforeclose":b="beforeClose";break;case"buttons":e._createButtons(d);break;case"closeText":e.uiDialogTitlebarCloseText.text(""+d);break;case"dialogClass":f.removeClass(e.options.dialogClass).addClass(c+d);break;case"disabled":d?f.addClass("ui-dialog-disabled"):f.removeClass("ui-dialog-disabled");break;case"draggable":var g=f.is(":data(draggable)");g&&!d&&f.draggable("destroy"),!g&&d&&e._makeDraggable();break;case"position":e._position(d);break;case"resizable":var h=f.is(":data(resizable)");h&&!d&&f.resizable("destroy"),h&&typeof d=="string"&&f.resizable("option","handles",d),!h&&d!==!1&&e._makeResizable(d);break;case"title":a(".ui-dialog-title",e.uiDialogTitlebar).html(""+(d||" "))}a.Widget.prototype._setOption.apply(e,arguments)},_size:function(){var b=this.options,c,d,e=this.uiDialog.is(":visible");this.element.show().css({width:"auto",minHeight:0,height:0}),b.minWidth>b.width&&(b.width=b.minWidth),c=this.uiDialog.css({height:"auto",width:b.width}).height(),d=Math.max(0,b.minHeight-c);if(b.height==="auto")if(a.support.minHeight)this.element.css({minHeight:d,height:"auto"});else{this.uiDialog.show();var f=this.element.css("height","auto").height();e||this.uiDialog.hide(),this.element.height(Math.max(f,d))}else this.element.height(Math.max(b.height-c,0));this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())}}),a.extend(a.ui.dialog,{version:"1.8.23",uuid:0,maxZ:0,getTitleId:function(a){var b=a.attr("id");return b||(this.uuid+=1,b=this.uuid),"ui-dialog-title-"+b},overlay:function(b){this.$el=a.ui.dialog.overlay.create(b)}}),a.extend(a.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:a.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(a){return a+".dialog-overlay"}).join(" "),create:function(b){this.instances.length===0&&(setTimeout(function(){a.ui.dialog.overlay.instances.length&&a(document).bind(a.ui.dialog.overlay.events,function(b){if(a(b.target).zIndex()<a.ui.dialog.overlay.maxZ)return!1})},1),a(document).bind("keydown.dialog-overlay",function(c){b.options.closeOnEscape&&!c.isDefaultPrevented()&&c.keyCode&&c.keyCode===a.ui.keyCode.ESCAPE&&(b.close(c),c.preventDefault())}),a(window).bind("resize.dialog-overlay",a.ui.dialog.overlay.resize));var c=(this.oldInstances.pop()||a("<div></div>").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(),height:this.height()});return a.fn.bgiframe&&c.bgiframe(),this.instances.push(c),c},destroy:function(b){var c=a.inArray(b,this.instances);c!=-1&&this.oldInstances.push(this.instances.splice(c,1)[0]),this.instances.length===0&&a([document,window]).unbind(".dialog-overlay"),b.remove();var d=0;a.each(this.instances,function(){d=Math.max(d,this.css("z-index"))}),this.maxZ=d},height:function(){var b,c;return a.browser.msie&&a.browser.version<7?(b=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight),c=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight),b<c?a(window).height()+"px":b+"px"):a(document).height()+"px"},width:function(){var b,c;return a.browser.msie?(b=Math.max(document.documentElement.scrollWidth,document.body.scrollWidth),c=Math.max(document.documentElement.offsetWidth,document.body.offsetWidth),b<c?a(window).width()+"px":b+"px"):a(document).width()+"px"},resize:function(){var b=a([]);a.each(a.ui.dialog.overlay.instances,function(){b=b.add(this)}),b.css({width:0,height:0}).css({width:a.ui.dialog.overlay.width(),height:a.ui.dialog.overlay.height()})}}),a.extend(a.ui.dialog.overlay.prototype,{destroy:function(){a.ui.dialog.overlay.destroy(this.$el)}})})(jQuery);;/*! jQuery UI - v1.8.23 - 2012-08-15 |
2228 | +* https://github.com/jquery/jquery-ui |
2229 | +* Includes: jquery.ui.slider.js |
2230 | +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ |
2231 | +(function(a,b){var c=5;a.widget("ui.slider",a.ui.mouse,{widgetEventPrefix:"slide",options:{animate:!1,distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null},_create:function(){var b=this,d=this.options,e=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),f="<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>",g=d.values&&d.values.length||1,h=[];this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget"+" ui-widget-content"+" ui-corner-all"+(d.disabled?" ui-slider-disabled ui-disabled":"")),this.range=a([]),d.range&&(d.range===!0&&(d.values||(d.values=[this._valueMin(),this._valueMin()]),d.values.length&&d.values.length!==2&&(d.values=[d.values[0],d.values[0]])),this.range=a("<div></div>").appendTo(this.element).addClass("ui-slider-range ui-widget-header"+(d.range==="min"||d.range==="max"?" ui-slider-range-"+d.range:"")));for(var i=e.length;i<g;i+=1)h.push(f);this.handles=e.add(a(h.join("")).appendTo(b.element)),this.handle=this.handles.eq(0),this.handles.add(this.range).filter("a").click(function(a){a.preventDefault()}).hover(function(){d.disabled||a(this).addClass("ui-state-hover")},function(){a(this).removeClass("ui-state-hover")}).focus(function(){d.disabled?a(this).blur():(a(".ui-slider .ui-state-focus").removeClass("ui-state-focus"),a(this).addClass("ui-state-focus"))}).blur(function(){a(this).removeClass("ui-state-focus")}),this.handles.each(function(b){a(this).data("index.ui-slider-handle",b)}),this.handles.keydown(function(d){var e=a(this).data("index.ui-slider-handle"),f,g,h,i;if(b.options.disabled)return;switch(d.keyCode){case a.ui.keyCode.HOME:case a.ui.keyCode.END:case a.ui.keyCode.PAGE_UP:case a.ui.keyCode.PAGE_DOWN:case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:d.preventDefault();if(!b._keySliding){b._keySliding=!0,a(this).addClass("ui-state-active"),f=b._start(d,e);if(f===!1)return}}i=b.options.step,b.options.values&&b.options.values.length?g=h=b.values(e):g=h=b.value();switch(d.keyCode){case a.ui.keyCode.HOME:h=b._valueMin();break;case a.ui.keyCode.END:h=b._valueMax();break;case a.ui.keyCode.PAGE_UP:h=b._trimAlignValue(g+(b._valueMax()-b._valueMin())/c);break;case a.ui.keyCode.PAGE_DOWN:h=b._trimAlignValue(g-(b._valueMax()-b._valueMin())/c);break;case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:if(g===b._valueMax())return;h=b._trimAlignValue(g+i);break;case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:if(g===b._valueMin())return;h=b._trimAlignValue(g-i)}b._slide(d,e,h)}).keyup(function(c){var d=a(this).data("index.ui-slider-handle");b._keySliding&&(b._keySliding=!1,b._stop(c,d),b._change(c,d),a(this).removeClass("ui-state-active"))}),this._refreshValue(),this._animateOff=!1},destroy:function(){return this.handles.remove(),this.range.remove(),this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider"),this._mouseDestroy(),this},_mouseCapture:function(b){var c=this.options,d,e,f,g,h,i,j,k,l;return c.disabled?!1:(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),d={x:b.pageX,y:b.pageY},e=this._normValueFromMouse(d),f=this._valueMax()-this._valueMin()+1,h=this,this.handles.each(function(b){var c=Math.abs(e-h.values(b));f>c&&(f=c,g=a(this),i=b)}),c.range===!0&&this.values(1)===c.min&&(i+=1,g=a(this.handles[i])),j=this._start(b,i),j===!1?!1:(this._mouseSliding=!0,h._handleIndex=i,g.addClass("ui-state-active").focus(),k=g.offset(),l=!a(b.target).parents().andSelf().is(".ui-slider-handle"),this._clickOffset=l?{left:0,top:0}:{left:b.pageX-k.left-g.width()/2,top:b.pageY-k.top-g.height()/2-(parseInt(g.css("borderTopWidth"),10)||0)-(parseInt(g.css("borderBottomWidth"),10)||0)+(parseInt(g.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(b,i,e),this._animateOff=!0,!0))},_mouseStart:function(a){return!0},_mouseDrag:function(a){var b={x:a.pageX,y:a.pageY},c=this._normValueFromMouse(b);return this._slide(a,this._handleIndex,c),!1},_mouseStop:function(a){return this.handles.removeClass("ui-state-active"),this._mouseSliding=!1,this._stop(a,this._handleIndex),this._change(a,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(a){var b,c,d,e,f;return this.orientation==="horizontal"?(b=this.elementSize.width,c=a.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(b=this.elementSize.height,c=a.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),d=c/b,d>1&&(d=1),d<0&&(d=0),this.orientation==="vertical"&&(d=1-d),e=this._valueMax()-this._valueMin(),f=this._valueMin()+d*e,this._trimAlignValue(f)},_start:function(a,b){var c={handle:this.handles[b],value:this.value()};return this.options.values&&this.options.values.length&&(c.value=this.values(b),c.values=this.values()),this._trigger("start",a,c)},_slide:function(a,b,c){var d,e,f;this.options.values&&this.options.values.length?(d=this.values(b?0:1),this.options.values.length===2&&this.options.range===!0&&(b===0&&c>d||b===1&&c<d)&&(c=d),c!==this.values(b)&&(e=this.values(),e[b]=c,f=this._trigger("slide",a,{handle:this.handles[b],value:c,values:e}),d=this.values(b?0:1),f!==!1&&this.values(b,c,!0))):c!==this.value()&&(f=this._trigger("slide",a,{handle:this.handles[b],value:c}),f!==!1&&this.value(c))},_stop:function(a,b){var c={handle:this.handles[b],value:this.value()};this.options.values&&this.options.values.length&&(c.value=this.values(b),c.values=this.values()),this._trigger("stop",a,c)},_change:function(a,b){if(!this._keySliding&&!this._mouseSliding){var c={handle:this.handles[b],value:this.value()};this.options.values&&this.options.values.length&&(c.value=this.values(b),c.values=this.values()),this._trigger("change",a,c)}},value:function(a){if(arguments.length){this.options.value=this._trimAlignValue(a),this._refreshValue(),this._change(null,0);return}return this._value()},values:function(b,c){var d,e,f;if(arguments.length>1){this.options.values[b]=this._trimAlignValue(c),this._refreshValue(),this._change(null,b);return}if(!arguments.length)return this._values();if(!a.isArray(arguments[0]))return this.options.values&&this.options.values.length?this._values(b):this.value();d=this.options.values,e=arguments[0];for(f=0;f<d.length;f+=1)d[f]=this._trimAlignValue(e[f]),this._change(null,f);this._refreshValue()},_setOption:function(b,c){var d,e=0;a.isArray(this.options.values)&&(e=this.options.values.length),a.Widget.prototype._setOption.apply(this,arguments);switch(b){case"disabled":c?(this.handles.filter(".ui-state-focus").blur(),this.handles.removeClass("ui-state-hover"),this.handles.propAttr("disabled",!0),this.element.addClass("ui-disabled")):(this.handles.propAttr("disabled",!1),this.element.removeClass("ui-disabled"));break;case"orientation":this._detectOrientation(),this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation),this._refreshValue();break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":this._animateOff=!0,this._refreshValue();for(d=0;d<e;d+=1)this._change(null,d);this._animateOff=!1}},_value:function(){var a=this.options.value;return a=this._trimAlignValue(a),a},_values:function(a){var b,c,d;if(arguments.length)return b=this.options.values[a],b=this._trimAlignValue(b),b;c=this.options.values.slice();for(d=0;d<c.length;d+=1)c[d]=this._trimAlignValue(c[d]);return c},_trimAlignValue:function(a){if(a<=this._valueMin())return this._valueMin();if(a>=this._valueMax())return this._valueMax();var b=this.options.step>0?this.options.step:1,c=(a-this._valueMin())%b,d=a-c;return Math.abs(c)*2>=b&&(d+=c>0?b:-b),parseFloat(d.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var b=this.options.range,c=this.options,d=this,e=this._animateOff?!1:c.animate,f,g={},h,i,j,k;this.options.values&&this.options.values.length?this.handles.each(function(b,i){f=(d.values(b)-d._valueMin())/(d._valueMax()-d._valueMin())*100,g[d.orientation==="horizontal"?"left":"bottom"]=f+"%",a(this).stop(1,1)[e?"animate":"css"](g,c.animate),d.options.range===!0&&(d.orientation==="horizontal"?(b===0&&d.range.stop(1,1)[e?"animate":"css"]({left:f+"%"},c.animate),b===1&&d.range[e?"animate":"css"]({width:f-h+"%"},{queue:!1,duration:c.animate})):(b===0&&d.range.stop(1,1)[e?"animate":"css"]({bottom:f+"%"},c.animate),b===1&&d.range[e?"animate":"css"]({height:f-h+"%"},{queue:!1,duration:c.animate}))),h=f}):(i=this.value(),j=this._valueMin(),k=this._valueMax(),f=k!==j?(i-j)/(k-j)*100:0,g[d.orientation==="horizontal"?"left":"bottom"]=f+"%",this.handle.stop(1,1)[e?"animate":"css"](g,c.animate),b==="min"&&this.orientation==="horizontal"&&this.range.stop(1,1)[e?"animate":"css"]({width:f+"%"},c.animate),b==="max"&&this.orientation==="horizontal"&&this.range[e?"animate":"css"]({width:100-f+"%"},{queue:!1,duration:c.animate}),b==="min"&&this.orientation==="vertical"&&this.range.stop(1,1)[e?"animate":"css"]({height:f+"%"},c.animate),b==="max"&&this.orientation==="vertical"&&this.range[e?"animate":"css"]({height:100-f+"%"},{queue:!1,duration:c.animate}))}}),a.extend(a.ui.slider,{version:"1.8.23"})})(jQuery);;/*! jQuery UI - v1.8.23 - 2012-08-15 |
2232 | +* https://github.com/jquery/jquery-ui |
2233 | +* Includes: jquery.ui.tabs.js |
2234 | +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ |
2235 | +(function(a,b){function e(){return++c}function f(){return++d}var c=0,d=0;a.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:!1,cookie:null,collapsible:!1,disable:null,disabled:[],enable:null,event:"click",fx:null,idPrefix:"ui-tabs-",load:null,panelTemplate:"<div></div>",remove:null,select:null,show:null,spinner:"<em>Loading…</em>",tabTemplate:"<li><a href='#{href}'><span>#{label}</span></a></li>"},_create:function(){this._tabify(!0)},_setOption:function(a,b){if(a=="selected"){if(this.options.collapsible&&b==this.options.selected)return;this.select(b)}else this.options[a]=b,this._tabify()},_tabId:function(a){return a.title&&a.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF-]/g,"")||this.options.idPrefix+e()},_sanitizeSelector:function(a){return a.replace(/:/g,"\\:")},_cookie:function(){var b=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+f());return a.cookie.apply(null,[b].concat(a.makeArray(arguments)))},_ui:function(a,b){return{tab:a,panel:b,index:this.anchors.index(a)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var b=a(this);b.html(b.data("label.tabs")).removeData("label.tabs")})},_tabify:function(c){function m(b,c){b.css("display",""),!a.support.opacity&&c.opacity&&b[0].style.removeAttribute("filter")}var d=this,e=this.options,f=/^#.+/;this.list=this.element.find("ol,ul").eq(0),this.lis=a(" > li:has(a[href])",this.list),this.anchors=this.lis.map(function(){return a("a",this)[0]}),this.panels=a([]),this.anchors.each(function(b,c){var g=a(c).attr("href"),h=g.split("#")[0],i;h&&(h===location.toString().split("#")[0]||(i=a("base")[0])&&h===i.href)&&(g=c.hash,c.href=g);if(f.test(g))d.panels=d.panels.add(d.element.find(d._sanitizeSelector(g)));else if(g&&g!=="#"){a.data(c,"href.tabs",g),a.data(c,"load.tabs",g.replace(/#.*$/,""));var j=d._tabId(c);c.href="#"+j;var k=d.element.find("#"+j);k.length||(k=a(e.panelTemplate).attr("id",j).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(d.panels[b-1]||d.list),k.data("destroy.tabs",!0)),d.panels=d.panels.add(k)}else e.disabled.push(b)}),c?(this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all"),this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all"),this.lis.addClass("ui-state-default ui-corner-top"),this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom"),e.selected===b?(location.hash&&this.anchors.each(function(a,b){if(b.hash==location.hash)return e.selected=a,!1}),typeof e.selected!="number"&&e.cookie&&(e.selected=parseInt(d._cookie(),10)),typeof e.selected!="number"&&this.lis.filter(".ui-tabs-selected").length&&(e.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"))),e.selected=e.selected||(this.lis.length?0:-1)):e.selected===null&&(e.selected=-1),e.selected=e.selected>=0&&this.anchors[e.selected]||e.selected<0?e.selected:0,e.disabled=a.unique(e.disabled.concat(a.map(this.lis.filter(".ui-state-disabled"),function(a,b){return d.lis.index(a)}))).sort(),a.inArray(e.selected,e.disabled)!=-1&&e.disabled.splice(a.inArray(e.selected,e.disabled),1),this.panels.addClass("ui-tabs-hide"),this.lis.removeClass("ui-tabs-selected ui-state-active"),e.selected>=0&&this.anchors.length&&(d.element.find(d._sanitizeSelector(d.anchors[e.selected].hash)).removeClass("ui-tabs-hide"),this.lis.eq(e.selected).addClass("ui-tabs-selected ui-state-active"),d.element.queue("tabs",function(){d._trigger("show",null,d._ui(d.anchors[e.selected],d.element.find(d._sanitizeSelector(d.anchors[e.selected].hash))[0]))}),this.load(e.selected)),a(window).bind("unload",function(){d.lis.add(d.anchors).unbind(".tabs"),d.lis=d.anchors=d.panels=null})):e.selected=this.lis.index(this.lis.filter(".ui-tabs-selected")),this.element[e.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible"),e.cookie&&this._cookie(e.selected,e.cookie);for(var g=0,h;h=this.lis[g];g++)a(h)[a.inArray(g,e.disabled)!=-1&&!a(h).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");e.cache===!1&&this.anchors.removeData("cache.tabs"),this.lis.add(this.anchors).unbind(".tabs");if(e.event!=="mouseover"){var i=function(a,b){b.is(":not(.ui-state-disabled)")&&b.addClass("ui-state-"+a)},j=function(a,b){b.removeClass("ui-state-"+a)};this.lis.bind("mouseover.tabs",function(){i("hover",a(this))}),this.lis.bind("mouseout.tabs",function(){j("hover",a(this))}),this.anchors.bind("focus.tabs",function(){i("focus",a(this).closest("li"))}),this.anchors.bind("blur.tabs",function(){j("focus",a(this).closest("li"))})}var k,l;e.fx&&(a.isArray(e.fx)?(k=e.fx[0],l=e.fx[1]):k=l=e.fx);var n=l?function(b,c){a(b).closest("li").addClass("ui-tabs-selected ui-state-active"),c.hide().removeClass("ui-tabs-hide").animate(l,l.duration||"normal",function(){m(c,l),d._trigger("show",null,d._ui(b,c[0]))})}:function(b,c){a(b).closest("li").addClass("ui-tabs-selected ui-state-active"),c.removeClass("ui-tabs-hide"),d._trigger("show",null,d._ui(b,c[0]))},o=k?function(a,b){b.animate(k,k.duration||"normal",function(){d.lis.removeClass("ui-tabs-selected ui-state-active"),b.addClass("ui-tabs-hide"),m(b,k),d.element.dequeue("tabs")})}:function(a,b,c){d.lis.removeClass("ui-tabs-selected ui-state-active"),b.addClass("ui-tabs-hide"),d.element.dequeue("tabs")};this.anchors.bind(e.event+".tabs",function(){var b=this,c=a(b).closest("li"),f=d.panels.filter(":not(.ui-tabs-hide)"),g=d.element.find(d._sanitizeSelector(b.hash));if(c.hasClass("ui-tabs-selected")&&!e.collapsible||c.hasClass("ui-state-disabled")||c.hasClass("ui-state-processing")||d.panels.filter(":animated").length||d._trigger("select",null,d._ui(this,g[0]))===!1)return this.blur(),!1;e.selected=d.anchors.index(this),d.abort();if(e.collapsible){if(c.hasClass("ui-tabs-selected"))return e.selected=-1,e.cookie&&d._cookie(e.selected,e.cookie),d.element.queue("tabs",function(){o(b,f)}).dequeue("tabs"),this.blur(),!1;if(!f.length)return e.cookie&&d._cookie(e.selected,e.cookie),d.element.queue("tabs",function(){n(b,g)}),d.load(d.anchors.index(this)),this.blur(),!1}e.cookie&&d._cookie(e.selected,e.cookie);if(g.length)f.length&&d.element.queue("tabs",function(){o(b,f)}),d.element.queue("tabs",function(){n(b,g)}),d.load(d.anchors.index(this));else throw"jQuery UI Tabs: Mismatching fragment identifier.";a.browser.msie&&this.blur()}),this.anchors.bind("click.tabs",function(){return!1})},_getIndex:function(a){return typeof a=="string"&&(a=this.anchors.index(this.anchors.filter("[href$='"+a+"']"))),a},destroy:function(){var b=this.options;return this.abort(),this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs"),this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all"),this.anchors.each(function(){var b=a.data(this,"href.tabs");b&&(this.href=b);var c=a(this).unbind(".tabs");a.each(["href","load","cache"],function(a,b){c.removeData(b+".tabs")})}),this.lis.unbind(".tabs").add(this.panels).each(function(){a.data(this,"destroy.tabs")?a(this).remove():a(this).removeClass(["ui-state-default","ui-corner-top","ui-tabs-selected","ui-state-active","ui-state-hover","ui-state-focus","ui-state-disabled","ui-tabs-panel","ui-widget-content","ui-corner-bottom","ui-tabs-hide"].join(" "))}),b.cookie&&this._cookie(null,b.cookie),this},add:function(c,d,e){e===b&&(e=this.anchors.length);var f=this,g=this.options,h=a(g.tabTemplate.replace(/#\{href\}/g,c).replace(/#\{label\}/g,d)),i=c.indexOf("#")?this._tabId(a("a",h)[0]):c.replace("#","");h.addClass("ui-state-default ui-corner-top").data("destroy.tabs",!0);var j=f.element.find("#"+i);return j.length||(j=a(g.panelTemplate).attr("id",i).data("destroy.tabs",!0)),j.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide"),e>=this.lis.length?(h.appendTo(this.list),j.appendTo(this.list[0].parentNode)):(h.insertBefore(this.lis[e]),j.insertBefore(this.panels[e])),g.disabled=a.map(g.disabled,function(a,b){return a>=e?++a:a}),this._tabify(),this.anchors.length==1&&(g.selected=0,h.addClass("ui-tabs-selected ui-state-active"),j.removeClass("ui-tabs-hide"),this.element.queue("tabs",function(){f._trigger("show",null,f._ui(f.anchors[0],f.panels[0]))}),this.load(0)),this._trigger("add",null,this._ui(this.anchors[e],this.panels[e])),this},remove:function(b){b=this._getIndex(b);var c=this.options,d=this.lis.eq(b).remove(),e=this.panels.eq(b).remove();return d.hasClass("ui-tabs-selected")&&this.anchors.length>1&&this.select(b+(b+1<this.anchors.length?1:-1)),c.disabled=a.map(a.grep(c.disabled,function(a,c){return a!=b}),function(a,c){return a>=b?--a:a}),this._tabify(),this._trigger("remove",null,this._ui(d.find("a")[0],e[0])),this},enable:function(b){b=this._getIndex(b);var c=this.options;if(a.inArray(b,c.disabled)==-1)return;return this.lis.eq(b).removeClass("ui-state-disabled"),c.disabled=a.grep(c.disabled,function(a,c){return a!=b}),this._trigger("enable",null,this._ui(this.anchors[b],this.panels[b])),this},disable:function(a){a=this._getIndex(a);var b=this,c=this.options;return a!=c.selected&&(this.lis.eq(a).addClass("ui-state-disabled"),c.disabled.push(a),c.disabled.sort(),this._trigger("disable",null,this._ui(this.anchors[a],this.panels[a]))),this},select:function(a){a=this._getIndex(a);if(a==-1)if(this.options.collapsible&&this.options.selected!=-1)a=this.options.selected;else return this;return this.anchors.eq(a).trigger(this.options.event+".tabs"),this},load:function(b){b=this._getIndex(b);var c=this,d=this.options,e=this.anchors.eq(b)[0],f=a.data(e,"load.tabs");this.abort();if(!f||this.element.queue("tabs").length!==0&&a.data(e,"cache.tabs")){this.element.dequeue("tabs");return}this.lis.eq(b).addClass("ui-state-processing");if(d.spinner){var g=a("span",e);g.data("label.tabs",g.html()).html(d.spinner)}return this.xhr=a.ajax(a.extend({},d.ajaxOptions,{url:f,success:function(f,g){c.element.find(c._sanitizeSelector(e.hash)).html(f),c._cleanup(),d.cache&&a.data(e,"cache.tabs",!0),c._trigger("load",null,c._ui(c.anchors[b],c.panels[b]));try{d.ajaxOptions.success(f,g)}catch(h){}},error:function(a,f,g){c._cleanup(),c._trigger("load",null,c._ui(c.anchors[b],c.panels[b]));try{d.ajaxOptions.error(a,f,b,e)}catch(g){}}})),c.element.dequeue("tabs"),this},abort:function(){return this.element.queue([]),this.panels.stop(!1,!0),this.element.queue("tabs",this.element.queue("tabs").splice(-2,2)),this.xhr&&(this.xhr.abort(),delete this.xhr),this._cleanup(),this},url:function(a,b){return this.anchors.eq(a).removeData("cache.tabs").data("load.tabs",b),this},length:function(){return this.anchors.length}}),a.extend(a.ui.tabs,{version:"1.8.23"}),a.extend(a.ui.tabs.prototype,{rotation:null,rotate:function(a,b){var c=this,d=this.options,e=c._rotate||(c._rotate=function(b){clearTimeout(c.rotation),c.rotation=setTimeout(function(){var a=d.selected;c.select(++a<c.anchors.length?a:0)},a),b&&b.stopPropagation()}),f=c._unrotate||(c._unrotate=b?function(a){e()}:function(a){a.clientX&&c.rotate(null)});return a?(this.element.bind("tabsshow",e),this.anchors.bind(d.event+".tabs",f),e()):(clearTimeout(c.rotation),this.element.unbind("tabsshow",e),this.anchors.unbind(d.event+".tabs",f),delete this._rotate,delete this._unrotate),this}})})(jQuery);;/*! jQuery UI - v1.8.23 - 2012-08-15 |
2236 | +* https://github.com/jquery/jquery-ui |
2237 | +* Includes: jquery.ui.datepicker.js |
2238 | +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ |
2239 | +(function($,undefined){function Datepicker(){this.debug=!1,this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},$.extend(this._defaults,this.regional[""]),this.dpDiv=bindHover($('<div id="'+this._mainDivId+'" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}function bindHover(a){var b="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return a.bind("mouseout",function(a){var c=$(a.target).closest(b);if(!c.length)return;c.removeClass("ui-state-hover ui-datepicker-prev-hover ui-datepicker-next-hover")}).bind("mouseover",function(c){var d=$(c.target).closest(b);if($.datepicker._isDisabledDatepicker(instActive.inline?a.parent()[0]:instActive.input[0])||!d.length)return;d.parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),d.addClass("ui-state-hover"),d.hasClass("ui-datepicker-prev")&&d.addClass("ui-datepicker-prev-hover"),d.hasClass("ui-datepicker-next")&&d.addClass("ui-datepicker-next-hover")})}function extendRemove(a,b){$.extend(a,b);for(var c in b)if(b[c]==null||b[c]==undefined)a[c]=b[c];return a}function isArray(a){return a&&($.browser.safari&&typeof a=="object"&&a.length||a.constructor&&a.constructor.toString().match(/\Array\(\)/))}$.extend($.ui,{datepicker:{version:"1.8.23"}});var PROP_NAME="datepicker",dpuuid=(new Date).getTime(),instActive;$.extend(Datepicker.prototype,{markerClassName:"hasDatepicker",maxRows:4,log:function(){this.debug&&console.log.apply("",arguments)},_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(a){return extendRemove(this._defaults,a||{}),this},_attachDatepicker:function(target,settings){var inlineSettings=null;for(var attrName in this._defaults){var attrValue=target.getAttribute("date:"+attrName);if(attrValue){inlineSettings=inlineSettings||{};try{inlineSettings[attrName]=eval(attrValue)}catch(err){inlineSettings[attrName]=attrValue}}}var nodeName=target.nodeName.toLowerCase(),inline=nodeName=="div"||nodeName=="span";target.id||(this.uuid+=1,target.id="dp"+this.uuid);var inst=this._newInst($(target),inline);inst.settings=$.extend({},settings||{},inlineSettings||{}),nodeName=="input"?this._connectDatepicker(target,inst):inline&&this._inlineDatepicker(target,inst)},_newInst:function(a,b){var c=a[0].id.replace(/([^A-Za-z0-9_-])/g,"\\\\$1");return{id:c,input:a,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:b,dpDiv:b?bindHover($('<div class="'+this._inlineClass+' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>')):this.dpDiv}},_connectDatepicker:function(a,b){var c=$(a);b.append=$([]),b.trigger=$([]);if(c.hasClass(this.markerClassName))return;this._attachments(c,b),c.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker",function(a,c,d){b.settings[c]=d}).bind("getData.datepicker",function(a,c){return this._get(b,c)}),this._autoSize(b),$.data(a,PROP_NAME,b),b.settings.disabled&&this._disableDatepicker(a)},_attachments:function(a,b){var c=this._get(b,"appendText"),d=this._get(b,"isRTL");b.append&&b.append.remove(),c&&(b.append=$('<span class="'+this._appendClass+'">'+c+"</span>"),a[d?"before":"after"](b.append)),a.unbind("focus",this._showDatepicker),b.trigger&&b.trigger.remove();var e=this._get(b,"showOn");(e=="focus"||e=="both")&&a.focus(this._showDatepicker);if(e=="button"||e=="both"){var f=this._get(b,"buttonText"),g=this._get(b,"buttonImage");b.trigger=$(this._get(b,"buttonImageOnly")?$("<img/>").addClass(this._triggerClass).attr({src:g,alt:f,title:f}):$('<button type="button"></button>').addClass(this._triggerClass).html(g==""?f:$("<img/>").attr({src:g,alt:f,title:f}))),a[d?"before":"after"](b.trigger),b.trigger.click(function(){return $.datepicker._datepickerShowing&&$.datepicker._lastInput==a[0]?$.datepicker._hideDatepicker():$.datepicker._datepickerShowing&&$.datepicker._lastInput!=a[0]?($.datepicker._hideDatepicker(),$.datepicker._showDatepicker(a[0])):$.datepicker._showDatepicker(a[0]),!1})}},_autoSize:function(a){if(this._get(a,"autoSize")&&!a.inline){var b=new Date(2009,11,20),c=this._get(a,"dateFormat");if(c.match(/[DM]/)){var d=function(a){var b=0,c=0;for(var d=0;d<a.length;d++)a[d].length>b&&(b=a[d].length,c=d);return c};b.setMonth(d(this._get(a,c.match(/MM/)?"monthNames":"monthNamesShort"))),b.setDate(d(this._get(a,c.match(/DD/)?"dayNames":"dayNamesShort"))+20-b.getDay())}a.input.attr("size",this._formatDate(a,b).length)}},_inlineDatepicker:function(a,b){var c=$(a);if(c.hasClass(this.markerClassName))return;c.addClass(this.markerClassName).append(b.dpDiv).bind("setData.datepicker",function(a,c,d){b.settings[c]=d}).bind("getData.datepicker",function(a,c){return this._get(b,c)}),$.data(a,PROP_NAME,b),this._setDate(b,this._getDefaultDate(b),!0),this._updateDatepicker(b),this._updateAlternate(b),b.settings.disabled&&this._disableDatepicker(a),b.dpDiv.css("display","block")},_dialogDatepicker:function(a,b,c,d,e){var f=this._dialogInst;if(!f){this.uuid+=1;var g="dp"+this.uuid;this._dialogInput=$('<input type="text" id="'+g+'" style="position: absolute; top: -100px; width: 0px;"/>'),this._dialogInput.keydown(this._doKeyDown),$("body").append(this._dialogInput),f=this._dialogInst=this._newInst(this._dialogInput,!1),f.settings={},$.data(this._dialogInput[0],PROP_NAME,f)}extendRemove(f.settings,d||{}),b=b&&b.constructor==Date?this._formatDate(f,b):b,this._dialogInput.val(b),this._pos=e?e.length?e:[e.pageX,e.pageY]:null;if(!this._pos){var h=document.documentElement.clientWidth,i=document.documentElement.clientHeight,j=document.documentElement.scrollLeft||document.body.scrollLeft,k=document.documentElement.scrollTop||document.body.scrollTop;this._pos=[h/2-100+j,i/2-150+k]}return this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),f.settings.onSelect=c,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),$.blockUI&&$.blockUI(this.dpDiv),$.data(this._dialogInput[0],PROP_NAME,f),this},_destroyDatepicker:function(a){var b=$(a),c=$.data(a,PROP_NAME);if(!b.hasClass(this.markerClassName))return;var d=a.nodeName.toLowerCase();$.removeData(a,PROP_NAME),d=="input"?(c.append.remove(),c.trigger.remove(),b.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)):(d=="div"||d=="span")&&b.removeClass(this.markerClassName).empty()},_enableDatepicker:function(a){var b=$(a),c=$.data(a,PROP_NAME);if(!b.hasClass(this.markerClassName))return;var d=a.nodeName.toLowerCase();if(d=="input")a.disabled=!1,c.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""});else if(d=="div"||d=="span"){var e=b.children("."+this._inlineClass);e.children().removeClass("ui-state-disabled"),e.find("select.ui-datepicker-month, select.ui-datepicker-year").removeAttr("disabled")}this._disabledInputs=$.map(this._disabledInputs,function(b){return b==a?null:b})},_disableDatepicker:function(a){var b=$(a),c=$.data(a,PROP_NAME);if(!b.hasClass(this.markerClassName))return;var d=a.nodeName.toLowerCase();if(d=="input")a.disabled=!0,c.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"});else if(d=="div"||d=="span"){var e=b.children("."+this._inlineClass);e.children().addClass("ui-state-disabled"),e.find("select.ui-datepicker-month, select.ui-datepicker-year").attr("disabled","disabled")}this._disabledInputs=$.map(this._disabledInputs,function(b){return b==a?null:b}),this._disabledInputs[this._disabledInputs.length]=a},_isDisabledDatepicker:function(a){if(!a)return!1;for(var b=0;b<this._disabledInputs.length;b++)if(this._disabledInputs[b]==a)return!0;return!1},_getInst:function(a){try{return $.data(a,PROP_NAME)}catch(b){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(a,b,c){var d=this._getInst(a);if(arguments.length==2&&typeof b=="string")return b=="defaults"?$.extend({},$.datepicker._defaults):d?b=="all"?$.extend({},d.settings):this._get(d,b):null;var e=b||{};typeof b=="string"&&(e={},e[b]=c);if(d){this._curInst==d&&this._hideDatepicker();var f=this._getDateDatepicker(a,!0),g=this._getMinMaxDate(d,"min"),h=this._getMinMaxDate(d,"max");extendRemove(d.settings,e),g!==null&&e.dateFormat!==undefined&&e.minDate===undefined&&(d.settings.minDate=this._formatDate(d,g)),h!==null&&e.dateFormat!==undefined&&e.maxDate===undefined&&(d.settings.maxDate=this._formatDate(d,h)),this._attachments($(a),d),this._autoSize(d),this._setDate(d,f),this._updateAlternate(d),this._updateDatepicker(d)}},_changeDatepicker:function(a,b,c){this._optionDatepicker(a,b,c)},_refreshDatepicker:function(a){var b=this._getInst(a);b&&this._updateDatepicker(b)},_setDateDatepicker:function(a,b){var c=this._getInst(a);c&&(this._setDate(c,b),this._updateDatepicker(c),this._updateAlternate(c))},_getDateDatepicker:function(a,b){var c=this._getInst(a);return c&&!c.inline&&this._setDateFromField(c,b),c?this._getDate(c):null},_doKeyDown:function(a){var b=$.datepicker._getInst(a.target),c=!0,d=b.dpDiv.is(".ui-datepicker-rtl");b._keyEvent=!0;if($.datepicker._datepickerShowing)switch(a.keyCode){case 9:$.datepicker._hideDatepicker(),c=!1;break;case 13:var e=$("td."+$.datepicker._dayOverClass+":not(."+$.datepicker._currentClass+")",b.dpDiv);e[0]&&$.datepicker._selectDay(a.target,b.selectedMonth,b.selectedYear,e[0]);var f=$.datepicker._get(b,"onSelect");if(f){var g=$.datepicker._formatDate(b);f.apply(b.input?b.input[0]:null,[g,b])}else $.datepicker._hideDatepicker();return!1;case 27:$.datepicker._hideDatepicker();break;case 33:$.datepicker._adjustDate(a.target,a.ctrlKey?-$.datepicker._get(b,"stepBigMonths"):-$.datepicker._get(b,"stepMonths"),"M");break;case 34:$.datepicker._adjustDate(a.target,a.ctrlKey?+$.datepicker._get(b,"stepBigMonths"):+$.datepicker._get(b,"stepMonths"),"M");break;case 35:(a.ctrlKey||a.metaKey)&&$.datepicker._clearDate(a.target),c=a.ctrlKey||a.metaKey;break;case 36:(a.ctrlKey||a.metaKey)&&$.datepicker._gotoToday(a.target),c=a.ctrlKey||a.metaKey;break;case 37:(a.ctrlKey||a.metaKey)&&$.datepicker._adjustDate(a.target,d?1:-1,"D"),c=a.ctrlKey||a.metaKey,a.originalEvent.altKey&&$.datepicker._adjustDate(a.target,a.ctrlKey?-$.datepicker._get(b,"stepBigMonths"):-$.datepicker._get(b,"stepMonths"),"M");break;case 38:(a.ctrlKey||a.metaKey)&&$.datepicker._adjustDate(a.target,-7,"D"),c=a.ctrlKey||a.metaKey;break;case 39:(a.ctrlKey||a.metaKey)&&$.datepicker._adjustDate(a.target,d?-1:1,"D"),c=a.ctrlKey||a.metaKey,a.originalEvent.altKey&&$.datepicker._adjustDate(a.target,a.ctrlKey?+$.datepicker._get(b,"stepBigMonths"):+$.datepicker._get(b,"stepMonths"),"M");break;case 40:(a.ctrlKey||a.metaKey)&&$.datepicker._adjustDate(a.target,7,"D"),c=a.ctrlKey||a.metaKey;break;default:c=!1}else a.keyCode==36&&a.ctrlKey?$.datepicker._showDatepicker(this):c=!1;c&&(a.preventDefault(),a.stopPropagation())},_doKeyPress:function(a){var b=$.datepicker._getInst(a.target);if($.datepicker._get(b,"constrainInput")){var c=$.datepicker._possibleChars($.datepicker._get(b,"dateFormat")),d=String.fromCharCode(a.charCode==undefined?a.keyCode:a.charCode);return a.ctrlKey||a.metaKey||d<" "||!c||c.indexOf(d)>-1}},_doKeyUp:function(a){var b=$.datepicker._getInst(a.target);if(b.input.val()!=b.lastVal)try{var c=$.datepicker.parseDate($.datepicker._get(b,"dateFormat"),b.input?b.input.val():null,$.datepicker._getFormatConfig(b));c&&($.datepicker._setDateFromField(b),$.datepicker._updateAlternate(b),$.datepicker._updateDatepicker(b))}catch(d){$.datepicker.log(d)}return!0},_showDatepicker:function(a){a=a.target||a,a.nodeName.toLowerCase()!="input"&&(a=$("input",a.parentNode)[0]);if($.datepicker._isDisabledDatepicker(a)||$.datepicker._lastInput==a)return;var b=$.datepicker._getInst(a);$.datepicker._curInst&&$.datepicker._curInst!=b&&($.datepicker._curInst.dpDiv.stop(!0,!0),b&&$.datepicker._datepickerShowing&&$.datepicker._hideDatepicker($.datepicker._curInst.input[0]));var c=$.datepicker._get(b,"beforeShow"),d=c?c.apply(a,[a,b]):{};if(d===!1)return;extendRemove(b.settings,d),b.lastVal=null,$.datepicker._lastInput=a,$.datepicker._setDateFromField(b),$.datepicker._inDialog&&(a.value=""),$.datepicker._pos||($.datepicker._pos=$.datepicker._findPos(a),$.datepicker._pos[1]+=a.offsetHeight);var e=!1;$(a).parents().each(function(){return e|=$(this).css("position")=="fixed",!e}),e&&$.browser.opera&&($.datepicker._pos[0]-=document.documentElement.scrollLeft,$.datepicker._pos[1]-=document.documentElement.scrollTop);var f={left:$.datepicker._pos[0],top:$.datepicker._pos[1]};$.datepicker._pos=null,b.dpDiv.empty(),b.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),$.datepicker._updateDatepicker(b),f=$.datepicker._checkOffset(b,f,e),b.dpDiv.css({position:$.datepicker._inDialog&&$.blockUI?"static":e?"fixed":"absolute",display:"none",left:f.left+"px",top:f.top+"px"});if(!b.inline){var g=$.datepicker._get(b,"showAnim"),h=$.datepicker._get(b,"duration"),i=function(){var a=b.dpDiv.find("iframe.ui-datepicker-cover");if(!!a.length){var c=$.datepicker._getBorders(b.dpDiv);a.css({left:-c[0],top:-c[1],width:b.dpDiv.outerWidth(),height:b.dpDiv.outerHeight()})}};b.dpDiv.zIndex($(a).zIndex()+1),$.datepicker._datepickerShowing=!0,$.effects&&$.effects[g]?b.dpDiv.show(g,$.datepicker._get(b,"showOptions"),h,i):b.dpDiv[g||"show"](g?h:null,i),(!g||!h)&&i(),b.input.is(":visible")&&!b.input.is(":disabled")&&b.input.focus(),$.datepicker._curInst=b}},_updateDatepicker:function(a){var b=this;b.maxRows=4;var c=$.datepicker._getBorders(a.dpDiv);instActive=a,a.dpDiv.empty().append(this._generateHTML(a)),this._attachHandlers(a);var d=a.dpDiv.find("iframe.ui-datepicker-cover");!d.length||d.css({left:-c[0],top:-c[1],width:a.dpDiv.outerWidth(),height:a.dpDiv.outerHeight()}),a.dpDiv.find("."+this._dayOverClass+" a").mouseover();var e=this._getNumberOfMonths(a),f=e[1],g=17;a.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),f>1&&a.dpDiv.addClass("ui-datepicker-multi-"+f).css("width",g*f+"em"),a.dpDiv[(e[0]!=1||e[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi"),a.dpDiv[(this._get(a,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),a==$.datepicker._curInst&&$.datepicker._datepickerShowing&&a.input&&a.input.is(":visible")&&!a.input.is(":disabled")&&a.input[0]!=document.activeElement&&a.input.focus();if(a.yearshtml){var h=a.yearshtml;setTimeout(function(){h===a.yearshtml&&a.yearshtml&&a.dpDiv.find("select.ui-datepicker-year:first").replaceWith(a.yearshtml),h=a.yearshtml=null},0)}},_getBorders:function(a){var b=function(a){return{thin:1,medium:2,thick:3}[a]||a};return[parseFloat(b(a.css("border-left-width"))),parseFloat(b(a.css("border-top-width")))]},_checkOffset:function(a,b,c){var d=a.dpDiv.outerWidth(),e=a.dpDiv.outerHeight(),f=a.input?a.input.outerWidth():0,g=a.input?a.input.outerHeight():0,h=document.documentElement.clientWidth+(c?0:$(document).scrollLeft()),i=document.documentElement.clientHeight+(c?0:$(document).scrollTop());return b.left-=this._get(a,"isRTL")?d-f:0,b.left-=c&&b.left==a.input.offset().left?$(document).scrollLeft():0,b.top-=c&&b.top==a.input.offset().top+g?$(document).scrollTop():0,b.left-=Math.min(b.left,b.left+d>h&&h>d?Math.abs(b.left+d-h):0),b.top-=Math.min(b.top,b.top+e>i&&i>e?Math.abs(e+g):0),b},_findPos:function(a){var b=this._getInst(a),c=this._get(b,"isRTL");while(a&&(a.type=="hidden"||a.nodeType!=1||$.expr.filters.hidden(a)))a=a[c?"previousSibling":"nextSibling"];var d=$(a).offset();return[d.left,d.top]},_hideDatepicker:function(a){var b=this._curInst;if(!b||a&&b!=$.data(a,PROP_NAME))return;if(this._datepickerShowing){var c=this._get(b,"showAnim"),d=this._get(b,"duration"),e=function(){$.datepicker._tidyDialog(b)};$.effects&&$.effects[c]?b.dpDiv.hide(c,$.datepicker._get(b,"showOptions"),d,e):b.dpDiv[c=="slideDown"?"slideUp":c=="fadeIn"?"fadeOut":"hide"](c?d:null,e),c||e(),this._datepickerShowing=!1;var f=this._get(b,"onClose");f&&f.apply(b.input?b.input[0]:null,[b.input?b.input.val():"",b]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),$.blockUI&&($.unblockUI(),$("body").append(this.dpDiv))),this._inDialog=!1}},_tidyDialog:function(a){a.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(a){if(!$.datepicker._curInst)return;var b=$(a.target),c=$.datepicker._getInst(b[0]);(b[0].id!=$.datepicker._mainDivId&&b.parents("#"+$.datepicker._mainDivId).length==0&&!b.hasClass($.datepicker.markerClassName)&&!b.closest("."+$.datepicker._triggerClass).length&&$.datepicker._datepickerShowing&&(!$.datepicker._inDialog||!$.blockUI)||b.hasClass($.datepicker.markerClassName)&&$.datepicker._curInst!=c)&&$.datepicker._hideDatepicker()},_adjustDate:function(a,b,c){var d=$(a),e=this._getInst(d[0]);if(this._isDisabledDatepicker(d[0]))return;this._adjustInstDate(e,b+(c=="M"?this._get(e,"showCurrentAtPos"):0),c),this._updateDatepicker(e)},_gotoToday:function(a){var b=$(a),c=this._getInst(b[0]);if(this._get(c,"gotoCurrent")&&c.currentDay)c.selectedDay=c.currentDay,c.drawMonth=c.selectedMonth=c.currentMonth,c.drawYear=c.selectedYear=c.currentYear;else{var d=new Date;c.selectedDay=d.getDate(),c.drawMonth=c.selectedMonth=d.getMonth(),c.drawYear=c.selectedYear=d.getFullYear()}this._notifyChange(c),this._adjustDate(b)},_selectMonthYear:function(a,b,c){var d=$(a),e=this._getInst(d[0]);e["selected"+(c=="M"?"Month":"Year")]=e["draw"+(c=="M"?"Month":"Year")]=parseInt(b.options[b.selectedIndex].value,10),this._notifyChange(e),this._adjustDate(d)},_selectDay:function(a,b,c,d){var e=$(a);if($(d).hasClass(this._unselectableClass)||this._isDisabledDatepicker(e[0]))return;var f=this._getInst(e[0]);f.selectedDay=f.currentDay=$("a",d).html(),f.selectedMonth=f.currentMonth=b,f.selectedYear=f.currentYear=c,this._selectDate(a,this._formatDate(f,f.currentDay,f.currentMonth,f.currentYear))},_clearDate:function(a){var b=$(a),c=this._getInst(b[0]);this._selectDate(b,"")},_selectDate:function(a,b){var c=$(a),d=this._getInst(c[0]);b=b!=null?b:this._formatDate(d),d.input&&d.input.val(b),this._updateAlternate(d);var e=this._get(d,"onSelect");e?e.apply(d.input?d.input[0]:null,[b,d]):d.input&&d.input.trigger("change"),d.inline?this._updateDatepicker(d):(this._hideDatepicker(),this._lastInput=d.input[0],typeof d.input[0]!="object"&&d.input.focus(),this._lastInput=null)},_updateAlternate:function(a){var b=this._get(a,"altField");if(b){var c=this._get(a,"altFormat")||this._get(a,"dateFormat"),d=this._getDate(a),e=this.formatDate(c,d,this._getFormatConfig(a));$(b).each(function(){$(this).val(e)})}},noWeekends:function(a){var b=a.getDay();return[b>0&&b<6,""]},iso8601Week:function(a){var b=new Date(a.getTime());b.setDate(b.getDate()+4-(b.getDay()||7));var c=b.getTime();return b.setMonth(0),b.setDate(1),Math.floor(Math.round((c-b)/864e5)/7)+1},parseDate:function(a,b,c){if(a==null||b==null)throw"Invalid arguments";b=typeof b=="object"?b.toString():b+"";if(b=="")return null;var d=(c?c.shortYearCutoff:null)||this._defaults.shortYearCutoff;d=typeof d!="string"?d:(new Date).getFullYear()%100+parseInt(d,10);var e=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,f=(c?c.dayNames:null)||this._defaults.dayNames,g=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort,h=(c?c.monthNames:null)||this._defaults.monthNames,i=-1,j=-1,k=-1,l=-1,m=!1,n=function(b){var c=s+1<a.length&&a.charAt(s+1)==b;return c&&s++,c},o=function(a){var c=n(a),d=a=="@"?14:a=="!"?20:a=="y"&&c?4:a=="o"?3:2,e=new RegExp("^\\d{1,"+d+"}"),f=b.substring(r).match(e);if(!f)throw"Missing number at position "+r;return r+=f[0].length,parseInt(f[0],10)},p=function(a,c,d){var e=$.map(n(a)?d:c,function(a,b){return[[b,a]]}).sort(function(a,b){return-(a[1].length-b[1].length)}),f=-1;$.each(e,function(a,c){var d=c[1];if(b.substr(r,d.length).toLowerCase()==d.toLowerCase())return f=c[0],r+=d.length,!1});if(f!=-1)return f+1;throw"Unknown name at position "+r},q=function(){if(b.charAt(r)!=a.charAt(s))throw"Unexpected literal at position "+r;r++},r=0;for(var s=0;s<a.length;s++)if(m)a.charAt(s)=="'"&&!n("'")?m=!1:q();else switch(a.charAt(s)){case"d":k=o("d");break;case"D":p("D",e,f);break;case"o":l=o("o");break;case"m":j=o("m");break;case"M":j=p("M",g,h);break;case"y":i=o("y");break;case"@":var t=new Date(o("@"));i=t.getFullYear(),j=t.getMonth()+1,k=t.getDate();break;case"!":var t=new Date((o("!")-this._ticksTo1970)/1e4);i=t.getFullYear(),j=t.getMonth()+1,k=t.getDate();break;case"'":n("'")?q():m=!0;break;default:q()}if(r<b.length)throw"Extra/unparsed characters found in date: "+b.substring(r);i==-1?i=(new Date).getFullYear():i<100&&(i+=(new Date).getFullYear()-(new Date).getFullYear()%100+(i<=d?0:-100));if(l>-1){j=1,k=l;do{var u=this._getDaysInMonth(i,j-1);if(k<=u)break;j++,k-=u}while(!0)}var t=this._daylightSavingAdjust(new Date(i,j-1,k));if(t.getFullYear()!=i||t.getMonth()+1!=j||t.getDate()!=k)throw"Invalid date";return t},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*24*60*60*1e7,formatDate:function(a,b,c){if(!b)return"";var d=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,e=(c?c.dayNames:null)||this._defaults.dayNames,f=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort,g=(c?c.monthNames:null)||this._defaults.monthNames,h=function(b){var c=m+1<a.length&&a.charAt(m+1)==b;return c&&m++,c},i=function(a,b,c){var d=""+b;if(h(a))while(d.length<c)d="0"+d;return d},j=function(a,b,c,d){return h(a)?d[b]:c[b]},k="",l=!1;if(b)for(var m=0;m<a.length;m++)if(l)a.charAt(m)=="'"&&!h("'")?l=!1:k+=a.charAt(m);else switch(a.charAt(m)){case"d":k+=i("d",b.getDate(),2);break;case"D":k+=j("D",b.getDay(),d,e);break;case"o":k+=i("o",Math.round(((new Date(b.getFullYear(),b.getMonth(),b.getDate())).getTime()-(new Date(b.getFullYear(),0,0)).getTime())/864e5),3);break;case"m":k+=i("m",b.getMonth()+1,2);break;case"M":k+=j("M",b.getMonth(),f,g);break;case"y":k+=h("y")?b.getFullYear():(b.getYear()%100<10?"0":"")+b.getYear()%100;break;case"@":k+=b.getTime();break;case"!":k+=b.getTime()*1e4+this._ticksTo1970;break;case"'":h("'")?k+="'":l=!0;break;default:k+=a.charAt(m)}return k},_possibleChars:function(a){var b="",c=!1,d=function(b){var c=e+1<a.length&&a.charAt(e+1)==b;return c&&e++,c};for(var e=0;e<a.length;e++)if(c)a.charAt(e)=="'"&&!d("'")?c=!1:b+=a.charAt(e);else switch(a.charAt(e)){case"d":case"m":case"y":case"@":b+="0123456789";break;case"D":case"M":return null;case"'":d("'")?b+="'":c=!0;break;default:b+=a.charAt(e)}return b},_get:function(a,b){return a.settings[b]!==undefined?a.settings[b]:this._defaults[b]},_setDateFromField:function(a,b){if(a.input.val()==a.lastVal)return;var c=this._get(a,"dateFormat"),d=a.lastVal=a.input?a.input.val():null,e,f;e=f=this._getDefaultDate(a);var g=this._getFormatConfig(a);try{e=this.parseDate(c,d,g)||f}catch(h){this.log(h),d=b?"":d}a.selectedDay=e.getDate(),a.drawMonth=a.selectedMonth=e.getMonth(),a.drawYear=a.selectedYear=e.getFullYear(),a.currentDay=d?e.getDate():0,a.currentMonth=d?e.getMonth():0,a.currentYear=d?e.getFullYear():0,this._adjustInstDate(a)},_getDefaultDate:function(a){return this._restrictMinMax(a,this._determineDate(a,this._get(a,"defaultDate"),new Date))},_determineDate:function(a,b,c){var d=function(a){var b=new Date;return b.setDate(b.getDate()+a),b},e=function(b){try{return $.datepicker.parseDate($.datepicker._get(a,"dateFormat"),b,$.datepicker._getFormatConfig(a))}catch(c){}var d=(b.toLowerCase().match(/^c/)?$.datepicker._getDate(a):null)||new Date,e=d.getFullYear(),f=d.getMonth(),g=d.getDate(),h=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,i=h.exec(b);while(i){switch(i[2]||"d"){case"d":case"D":g+=parseInt(i[1],10);break;case"w":case"W":g+=parseInt(i[1],10)*7;break;case"m":case"M":f+=parseInt(i[1],10),g=Math.min(g,$.datepicker._getDaysInMonth(e,f));break;case"y":case"Y":e+=parseInt(i[1],10),g=Math.min(g,$.datepicker._getDaysInMonth(e,f))}i=h.exec(b)}return new Date(e,f,g)},f=b==null||b===""?c:typeof b=="string"?e(b):typeof b=="number"?isNaN(b)?c:d(b):new Date(b.getTime());return f=f&&f.toString()=="Invalid Date"?c:f,f&&(f.setHours(0),f.setMinutes(0),f.setSeconds(0),f.setMilliseconds(0)),this._daylightSavingAdjust(f)},_daylightSavingAdjust:function(a){return a?(a.setHours(a.getHours()>12?a.getHours()+2:0),a):null},_setDate:function(a,b,c){var d=!b,e=a.selectedMonth,f=a.selectedYear,g=this._restrictMinMax(a,this._determineDate(a,b,new Date));a.selectedDay=a.currentDay=g.getDate(),a.drawMonth=a.selectedMonth=a.currentMonth=g.getMonth(),a.drawYear=a.selectedYear=a.currentYear=g.getFullYear(),(e!=a.selectedMonth||f!=a.selectedYear)&&!c&&this._notifyChange(a),this._adjustInstDate(a),a.input&&a.input.val(d?"":this._formatDate(a))},_getDate:function(a){var b=!a.currentYear||a.input&&a.input.val()==""?null:this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return b},_attachHandlers:function(a){var b=this._get(a,"stepMonths"),c="#"+a.id.replace(/\\\\/g,"\\");a.dpDiv.find("[data-handler]").map(function(){var a={prev:function(){window["DP_jQuery_"+dpuuid].datepicker._adjustDate(c,-b,"M")},next:function(){window["DP_jQuery_"+dpuuid].datepicker._adjustDate(c,+b,"M")},hide:function(){window["DP_jQuery_"+dpuuid].datepicker._hideDatepicker()},today:function(){window["DP_jQuery_"+dpuuid].datepicker._gotoToday(c)},selectDay:function(){return window["DP_jQuery_"+dpuuid].datepicker._selectDay(c,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return window["DP_jQuery_"+dpuuid].datepicker._selectMonthYear(c,this,"M"),!1},selectYear:function(){return window["DP_jQuery_"+dpuuid].datepicker._selectMonthYear(c,this,"Y"),!1}};$(this).bind(this.getAttribute("data-event"),a[this.getAttribute("data-handler")])})},_generateHTML:function(a){var b=new Date;b=this._daylightSavingAdjust(new Date(b.getFullYear(),b.getMonth(),b.getDate()));var c=this._get(a,"isRTL"),d=this._get(a,"showButtonPanel"),e=this._get(a,"hideIfNoPrevNext"),f=this._get(a,"navigationAsDateFormat"),g=this._getNumberOfMonths(a),h=this._get(a,"showCurrentAtPos"),i=this._get(a,"stepMonths"),j=g[0]!=1||g[1]!=1,k=this._daylightSavingAdjust(a.currentDay?new Date(a.currentYear,a.currentMonth,a.currentDay):new Date(9999,9,9)),l=this._getMinMaxDate(a,"min"),m=this._getMinMaxDate(a,"max"),n=a.drawMonth-h,o=a.drawYear;n<0&&(n+=12,o--);if(m){var p=this._daylightSavingAdjust(new Date(m.getFullYear(),m.getMonth()-g[0]*g[1]+1,m.getDate()));p=l&&p<l?l:p;while(this._daylightSavingAdjust(new Date(o,n,1))>p)n--,n<0&&(n=11,o--)}a.drawMonth=n,a.drawYear=o;var q=this._get(a,"prevText");q=f?this.formatDate(q,this._daylightSavingAdjust(new Date(o,n-i,1)),this._getFormatConfig(a)):q;var r=this._canAdjustMonth(a,-1,o,n)?'<a class="ui-datepicker-prev ui-corner-all" data-handler="prev" data-event="click" title="'+q+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"e":"w")+'">'+q+"</span></a>":e?"":'<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+q+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"e":"w")+'">'+q+"</span></a>",s=this._get(a,"nextText");s=f?this.formatDate(s,this._daylightSavingAdjust(new Date(o,n+i,1)),this._getFormatConfig(a)):s;var t=this._canAdjustMonth(a,1,o,n)?'<a class="ui-datepicker-next ui-corner-all" data-handler="next" data-event="click" title="'+s+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"w":"e")+'">'+s+"</span></a>":e?"":'<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+s+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"w":"e")+'">'+s+"</span></a>",u=this._get(a,"currentText"),v=this._get(a,"gotoCurrent")&&a.currentDay?k:b;u=f?this.formatDate(u,v,this._getFormatConfig(a)):u;var w=a.inline?"":'<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" data-handler="hide" data-event="click">'+this._get(a,"closeText")+"</button>",x=d?'<div class="ui-datepicker-buttonpane ui-widget-content">'+(c?w:"")+(this._isInRange(a,v)?'<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" data-handler="today" data-event="click">'+u+"</button>":"")+(c?"":w)+"</div>":"",y=parseInt(this._get(a,"firstDay"),10);y=isNaN(y)?0:y;var z=this._get(a,"showWeek"),A=this._get(a,"dayNames"),B=this._get(a,"dayNamesShort"),C=this._get(a,"dayNamesMin"),D=this._get(a,"monthNames"),E=this._get(a,"monthNamesShort"),F=this._get(a,"beforeShowDay"),G=this._get(a,"showOtherMonths"),H=this._get(a,"selectOtherMonths"),I=this._get(a,"calculateWeek")||this.iso8601Week,J=this._getDefaultDate(a),K="";for(var L=0;L<g[0];L++){var M="";this.maxRows=4;for(var N=0;N<g[1];N++){var O=this._daylightSavingAdjust(new Date(o,n,a.selectedDay)),P=" ui-corner-all",Q="";if(j){Q+='<div class="ui-datepicker-group';if(g[1]>1)switch(N){case 0:Q+=" ui-datepicker-group-first",P=" ui-corner-"+(c?"right":"left");break;case g[1]-1:Q+=" ui-datepicker-group-last",P=" ui-corner-"+(c?"left":"right");break;default:Q+=" ui-datepicker-group-middle",P=""}Q+='">'}Q+='<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix'+P+'">'+(/all|left/.test(P)&&L==0?c?t:r:"")+(/all|right/.test(P)&&L==0?c?r:t:"")+this._generateMonthYearHeader(a,n,o,l,m,L>0||N>0,D,E)+'</div><table class="ui-datepicker-calendar"><thead>'+"<tr>";var R=z?'<th class="ui-datepicker-week-col">'+this._get(a,"weekHeader")+"</th>":"";for(var S=0;S<7;S++){var T=(S+y)%7;R+="<th"+((S+y+6)%7>=5?' class="ui-datepicker-week-end"':"")+">"+'<span title="'+A[T]+'">'+C[T]+"</span></th>"}Q+=R+"</tr></thead><tbody>";var U=this._getDaysInMonth(o,n);o==a.selectedYear&&n==a.selectedMonth&&(a.selectedDay=Math.min(a.selectedDay,U));var V=(this._getFirstDayOfMonth(o,n)-y+7)%7,W=Math.ceil((V+U)/7),X=j?this.maxRows>W?this.maxRows:W:W;this.maxRows=X;var Y=this._daylightSavingAdjust(new Date(o,n,1-V));for(var Z=0;Z<X;Z++){Q+="<tr>";var _=z?'<td class="ui-datepicker-week-col">'+this._get(a,"calculateWeek")(Y)+"</td>":"";for(var S=0;S<7;S++){var ba=F?F.apply(a.input?a.input[0]:null,[Y]):[!0,""],bb=Y.getMonth()!=n,bc=bb&&!H||!ba[0]||l&&Y<l||m&&Y>m;_+='<td class="'+((S+y+6)%7>=5?" ui-datepicker-week-end":"")+(bb?" ui-datepicker-other-month":"")+(Y.getTime()==O.getTime()&&n==a.selectedMonth&&a._keyEvent||J.getTime()==Y.getTime()&&J.getTime()==O.getTime()?" "+this._dayOverClass:"")+(bc?" "+this._unselectableClass+" ui-state-disabled":"")+(bb&&!G?"":" "+ba[1]+(Y.getTime()==k.getTime()?" "+this._currentClass:"")+(Y.getTime()==b.getTime()?" ui-datepicker-today":""))+'"'+((!bb||G)&&ba[2]?' title="'+ba[2]+'"':"")+(bc?"":' data-handler="selectDay" data-event="click" data-month="'+Y.getMonth()+'" data-year="'+Y.getFullYear()+'"')+">"+(bb&&!G?" ":bc?'<span class="ui-state-default">'+Y.getDate()+"</span>":'<a class="ui-state-default'+(Y.getTime()==b.getTime()?" ui-state-highlight":"")+(Y.getTime()==k.getTime()?" ui-state-active":"")+(bb?" ui-priority-secondary":"")+'" href="#">'+Y.getDate()+"</a>")+"</td>",Y.setDate(Y.getDate()+1),Y=this._daylightSavingAdjust(Y)}Q+=_+"</tr>"}n++,n>11&&(n=0,o++),Q+="</tbody></table>"+(j?"</div>"+(g[0]>0&&N==g[1]-1?'<div class="ui-datepicker-row-break"></div>':""):""),M+=Q}K+=M}return K+=x+($.browser.msie&&parseInt($.browser.version,10)<7&&!a.inline?'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>':""),a._keyEvent=!1,K},_generateMonthYearHeader:function(a,b,c,d,e,f,g,h){var i=this._get(a,"changeMonth"),j=this._get(a,"changeYear"),k=this._get(a,"showMonthAfterYear"),l='<div class="ui-datepicker-title">',m="";if(f||!i)m+='<span class="ui-datepicker-month">'+g[b]+"</span>";else{var n=d&&d.getFullYear()==c,o=e&&e.getFullYear()==c;m+='<select class="ui-datepicker-month" data-handler="selectMonth" data-event="change">';for(var p=0;p<12;p++)(!n||p>=d.getMonth())&&(!o||p<=e.getMonth())&&(m+='<option value="'+p+'"'+(p==b?' selected="selected"':"")+">"+h[p]+"</option>");m+="</select>"}k||(l+=m+(f||!i||!j?" ":""));if(!a.yearshtml){a.yearshtml="";if(f||!j)l+='<span class="ui-datepicker-year">'+c+"</span>";else{var q=this._get(a,"yearRange").split(":"),r=(new Date).getFullYear(),s=function(a){var b=a.match(/c[+-].*/)?c+parseInt(a.substring(1),10):a.match(/[+-].*/)?r+parseInt(a,10):parseInt(a,10);return isNaN(b)?r:b},t=s(q[0]),u=Math.max(t,s(q[1]||""));t=d?Math.max(t,d.getFullYear()):t,u=e?Math.min(u,e.getFullYear()):u,a.yearshtml+='<select class="ui-datepicker-year" data-handler="selectYear" data-event="change">';for(;t<=u;t++)a.yearshtml+='<option value="'+t+'"'+(t==c?' selected="selected"':"")+">"+t+"</option>";a.yearshtml+="</select>",l+=a.yearshtml,a.yearshtml=null}}return l+=this._get(a,"yearSuffix"),k&&(l+=(f||!i||!j?" ":"")+m),l+="</div>",l},_adjustInstDate:function(a,b,c){var d=a.drawYear+(c=="Y"?b:0),e=a.drawMonth+(c=="M"?b:0),f=Math.min(a.selectedDay,this._getDaysInMonth(d,e))+(c=="D"?b:0),g=this._restrictMinMax(a,this._daylightSavingAdjust(new Date(d,e,f)));a.selectedDay=g.getDate(),a.drawMonth=a.selectedMonth=g.getMonth(),a.drawYear=a.selectedYear=g.getFullYear(),(c=="M"||c=="Y")&&this._notifyChange(a)},_restrictMinMax:function(a,b){var c=this._getMinMaxDate(a,"min"),d=this._getMinMaxDate(a,"max"),e=c&&b<c?c:b;return e=d&&e>d?d:e,e},_notifyChange:function(a){var b=this._get(a,"onChangeMonthYear");b&&b.apply(a.input?a.input[0]:null,[a.selectedYear,a.selectedMonth+1,a])},_getNumberOfMonths:function(a){var b=this._get(a,"numberOfMonths");return b==null?[1,1]:typeof b=="number"?[1,b]:b},_getMinMaxDate:function(a,b){return this._determineDate(a,this._get(a,b+"Date"),null)},_getDaysInMonth:function(a,b){return 32-this._daylightSavingAdjust(new Date(a,b,32)).getDate()},_getFirstDayOfMonth:function(a,b){return(new Date(a,b,1)).getDay()},_canAdjustMonth:function(a,b,c,d){var e=this._getNumberOfMonths(a),f=this._daylightSavingAdjust(new Date(c,d+(b<0?b:e[0]*e[1]),1));return b<0&&f.setDate(this._getDaysInMonth(f.getFullYear(),f.getMonth())),this._isInRange(a,f)},_isInRange:function(a,b){var c=this._getMinMaxDate(a,"min"),d=this._getMinMaxDate(a,"max");return(!c||b.getTime()>=c.getTime())&&(!d||b.getTime()<=d.getTime())},_getFormatConfig:function(a){var b=this._get(a,"shortYearCutoff");return b=typeof b!="string"?b:(new Date).getFullYear()%100+parseInt(b,10),{shortYearCutoff:b,dayNamesShort:this._get(a,"dayNamesShort"),dayNames:this._get(a,"dayNames"),monthNamesShort:this._get(a,"monthNamesShort"),monthNames:this._get(a,"monthNames")}},_formatDate:function(a,b,c,d){b||(a.currentDay=a.selectedDay,a.currentMonth=a.selectedMonth,a.currentYear=a.selectedYear);var e=b?typeof b=="object"?b:this._daylightSavingAdjust(new Date(d,c,b)):this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return this.formatDate(this._get(a,"dateFormat"),e,this._getFormatConfig(a))}}),$.fn.datepicker=function(a){if(!this.length)return this;$.datepicker.initialized||($(document).mousedown($.datepicker._checkExternalClick).find("body").append($.datepicker.dpDiv),$.datepicker.initialized=!0);var b=Array.prototype.slice.call(arguments,1);return typeof a!="string"||a!="isDisabled"&&a!="getDate"&&a!="widget"?a=="option"&&arguments.length==2&&typeof arguments[1]=="string"?$.datepicker["_"+a+"Datepicker"].apply($.datepicker,[this[0]].concat(b)):this.each(function(){typeof a=="string"?$.datepicker["_"+a+"Datepicker"].apply($.datepicker,[this].concat(b)):$.datepicker._attachDatepicker(this,a)}):$.datepicker["_"+a+"Datepicker"].apply($.datepicker,[this[0]].concat(b))},$.datepicker=new Datepicker,$.datepicker.initialized=!1,$.datepicker.uuid=(new Date).getTime(),$.datepicker.version="1.8.23",window["DP_jQuery_"+dpuuid]=$})(jQuery);;/*! jQuery UI - v1.8.23 - 2012-08-15 |
2240 | +* https://github.com/jquery/jquery-ui |
2241 | +* Includes: jquery.ui.progressbar.js |
2242 | +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ |
2243 | +(function(a,b){a.widget("ui.progressbar",{options:{value:0,max:100},min:0,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.options.max,"aria-valuenow":this._value()}),this.valueDiv=a("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element),this.oldValue=this._value(),this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.valueDiv.remove(),a.Widget.prototype.destroy.apply(this,arguments)},value:function(a){return a===b?this._value():(this._setOption("value",a),this)},_setOption:function(b,c){b==="value"&&(this.options.value=c,this._refreshValue(),this._value()===this.options.max&&this._trigger("complete")),a.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var a=this.options.value;return typeof a!="number"&&(a=0),Math.min(this.options.max,Math.max(this.min,a))},_percentage:function(){return 100*this._value()/this.options.max},_refreshValue:function(){var a=this.value(),b=this._percentage();this.oldValue!==a&&(this.oldValue=a,this._trigger("change")),this.valueDiv.toggle(a>this.min).toggleClass("ui-corner-right",a===this.options.max).width(b.toFixed(0)+"%"),this.element.attr("aria-valuenow",a)}}),a.extend(a.ui.progressbar,{version:"1.8.23"})})(jQuery);; |
2244 | \ No newline at end of file |
2245 | |
2246 | === added file 'sloecode/public/js/wiki-edit-helpers.js' |
2247 | --- sloecode/public/js/wiki-edit-helpers.js 1970-01-01 00:00:00 +0000 |
2248 | +++ sloecode/public/js/wiki-edit-helpers.js 2012-09-26 01:36:19 +0000 |
2249 | @@ -0,0 +1,66 @@ |
2250 | +function wrap_text(leftTag, rightTag) { |
2251 | + var textArea = $('textarea#content'); |
2252 | + var len = textArea.val().length; |
2253 | + var start = textArea[0].selectionStart; |
2254 | + var end = textArea[0].selectionEnd; |
2255 | + var selectedText = textArea.val().substring(start, end); |
2256 | + |
2257 | + var existingOutsideLeftTag = textArea.val().substring(start - leftTag.length, start); |
2258 | + var existingOutsideRightTag = textArea.val().substring(end, end + rightTag.length); |
2259 | + var existingInsideLeftTag = textArea.val().substring(start, start + leftTag.length); |
2260 | + var existingInsideRightTag = textArea.val().substring(end - rightTag.length, end); |
2261 | + |
2262 | + if (existingOutsideLeftTag == leftTag && existingOutsideRightTag == rightTag) |
2263 | + { |
2264 | + var leftSubstring = textArea.val().substring(0, start - leftTag.length); |
2265 | + var rightSubstring = textArea.val().substring(end + rightTag.length); |
2266 | + textArea.val(leftSubstring + selectedText + rightSubstring); |
2267 | + textArea[0].selectionStart = start - leftTag.length; |
2268 | + textArea[0].selectionEnd = end - leftTag.length; |
2269 | + } |
2270 | + else if (existingInsideLeftTag == leftTag && existingInsideRightTag == rightTag) |
2271 | + { |
2272 | + var leftSubstring = textArea.val().substring(0, start); |
2273 | + var rightSubstring = textArea.val().substring(end); |
2274 | + selectedText = selectedText.substring(leftTag.length, selectedText.length - rightTag.length) |
2275 | + textArea.val(leftSubstring + selectedText + rightSubstring); |
2276 | + textArea[0].selectionStart = start; |
2277 | + textArea[0].selectionEnd = end - 2 * leftTag.length; |
2278 | + } |
2279 | + else |
2280 | + { |
2281 | + var replacement = leftTag + selectedText + rightTag; |
2282 | + textArea.val(textArea.val().substring(0, start) + replacement + textArea.val().substring(end, len)); |
2283 | + textArea[0].selectionStart = start + leftTag.length; |
2284 | + textArea[0].selectionEnd = end + leftTag.length; |
2285 | + } |
2286 | +} |
2287 | +function display_link_window() { |
2288 | + $("#dialog-modal").dialog({ |
2289 | + width: 300, |
2290 | + height: 200, |
2291 | + buttons: { |
2292 | + "Add Link": function() { |
2293 | + var textArea = $('textarea#content'); |
2294 | + var len = textArea.val().length; |
2295 | + var start = textArea[0].selectionStart; |
2296 | + var leftText = textArea.val().substring(0, start); |
2297 | + var rightText = textArea.val().substring(start); |
2298 | + var linkString = "[" + $("#link_title").val() + "](" + $("#link_href").val() + ")"; |
2299 | + textArea.val(leftText + linkString + rightText); |
2300 | + $(this).dialog("close"); |
2301 | + } |
2302 | + } |
2303 | + }); |
2304 | +} |
2305 | +$(document).ready(function(){ |
2306 | + $('.toolbar-bold').click(function(){ |
2307 | + wrap_text("**", "**"); |
2308 | + }); |
2309 | + $('.toolbar-italic').click(function(){ |
2310 | + wrap_text("*", "*"); |
2311 | + }); |
2312 | + $('.toolbar-link').click(function(){ |
2313 | + display_link_window(); |
2314 | + }); |
2315 | +}); |
2316 | |
2317 | === modified file 'sloecode/sshserver/accesslog.py' |
2318 | --- sloecode/sshserver/accesslog.py 2011-01-07 09:27:32 +0000 |
2319 | +++ sloecode/sshserver/accesslog.py 2012-09-26 01:36:19 +0000 |
2320 | @@ -17,7 +17,6 @@ |
2321 | provideHandler, |
2322 | ) |
2323 | # This non-standard import is necessary to hook up the event system. |
2324 | -import zope.component.event |
2325 | |
2326 | from sloecode.sshserver.events import ILoggingEvent |
2327 | |
2328 | |
2329 | === added file 'sloecode/templates/admin/template-edit.html' |
2330 | --- sloecode/templates/admin/template-edit.html 1970-01-01 00:00:00 +0000 |
2331 | +++ sloecode/templates/admin/template-edit.html 2012-09-26 01:36:19 +0000 |
2332 | @@ -0,0 +1,17 @@ |
2333 | +{% extends "base.html" %} |
2334 | + |
2335 | +{% block title %} Wiki {% endblock %} |
2336 | + |
2337 | +{% block content %} |
2338 | +{% set pathurl = h.url(controller=path, action="+save") %} |
2339 | +<p>{{ h.form(pathurl, method="post", name="wiki") }} |
2340 | + {{ h.hidden('old_name', template['name']) }} |
2341 | + Name: {{ h.text('name', template['name']) }}<br> |
2342 | + Folder Location: {{ h.text('save_location', template['save_location']) }}<br> |
2343 | + Description: {{ h.text('description', template['description']) }}<br> |
2344 | + {{ h.textarea("content", template['content'], rows=20, style='width:99%') }}<br> |
2345 | + {{ h.submit('save', 'Save') }} |
2346 | +{{ h.end_form() }}</p> |
2347 | +{% endblock %} |
2348 | + |
2349 | + |
2350 | |
2351 | === added file 'sloecode/templates/admin/template-view.html' |
2352 | --- sloecode/templates/admin/template-view.html 1970-01-01 00:00:00 +0000 |
2353 | +++ sloecode/templates/admin/template-view.html 2012-09-26 01:36:19 +0000 |
2354 | @@ -0,0 +1,12 @@ |
2355 | +{% extends "base.html" %} |
2356 | + |
2357 | +{% block title %} Wiki {% endblock %} |
2358 | + |
2359 | +{% block content %} |
2360 | +{{ h.link_to("Edit", h.url(controller="admin/wiki", action="edit_template", filename=template.name)) }}<br> |
2361 | +Name: {{ template.name }}<br> |
2362 | +Description: {{ template.description }}<br> |
2363 | +Save Location: {{ template.save_location }}<br> |
2364 | +Content: {{ template.content.replace('\n', '<br>') }}<br> |
2365 | + |
2366 | +{% endblock %} |
2367 | \ No newline at end of file |
2368 | |
2369 | === added file 'sloecode/templates/admin/template-viewall.html' |
2370 | --- sloecode/templates/admin/template-viewall.html 1970-01-01 00:00:00 +0000 |
2371 | +++ sloecode/templates/admin/template-viewall.html 2012-09-26 01:36:19 +0000 |
2372 | @@ -0,0 +1,13 @@ |
2373 | +{% extends "base.html" %} |
2374 | + |
2375 | +{% block title %} Wiki - Page Templates {% endblock %} |
2376 | + |
2377 | +{% block content %} |
2378 | +<div style='float:left'> |
2379 | + {% for template in template_names %} |
2380 | + {{h.link_to(template, h.url(controller="admin/wiki", action="edit_template", filename=template)) |
2381 | + }} |
2382 | + {% endfor %} |
2383 | +</div> |
2384 | + |
2385 | +{% endblock %} |
2386 | \ No newline at end of file |
2387 | |
2388 | === modified file 'sloecode/templates/project-details.html' |
2389 | --- sloecode/templates/project-details.html 2012-01-14 16:01:49 +0000 |
2390 | +++ sloecode/templates/project-details.html 2012-09-26 01:36:19 +0000 |
2391 | @@ -16,6 +16,11 @@ |
2392 | <div class="content-left"> |
2393 | <h1>{{ project.name }}: {{ project.displayname|e }}</h1> |
2394 | <h4>{{ project.description|e }}</h4> |
2395 | + <h2> |
2396 | + <a href='/p/{{ project.name }}/wiki'> |
2397 | + Project Wiki |
2398 | + </a> |
2399 | + </h2 |
2400 | </div> |
2401 | </div> |
2402 | </div> |
2403 | |
2404 | === added directory 'sloecode/templates/wiki' |
2405 | === added file 'sloecode/templates/wiki/base.html' |
2406 | --- sloecode/templates/wiki/base.html 1970-01-01 00:00:00 +0000 |
2407 | +++ sloecode/templates/wiki/base.html 2012-09-26 01:36:19 +0000 |
2408 | @@ -0,0 +1,21 @@ |
2409 | +{% extends "base.html" %} |
2410 | + |
2411 | +{% block prehead_includes %} |
2412 | + {{ h.stylesheet_link(h.url('/css/wiki.css')) }} |
2413 | + {% block header %}{% endblock %} |
2414 | +{% endblock %} |
2415 | + |
2416 | +{% block title %} Wiki {% endblock %} |
2417 | + |
2418 | +{% block content %} |
2419 | +<div class='wiki_actions_wrapper'> |
2420 | + <div class='wikkid'> |
2421 | + {% block wiki_actions %}{% endblock %} |
2422 | + </div> |
2423 | + <div class='clear'></div> |
2424 | +</div> |
2425 | +<div class='clear'></div> |
2426 | +<div class='wikkid_wrapper'> |
2427 | +{% block wiki_content %}{% endblock %} |
2428 | +</div> |
2429 | +{% endblock %} |
2430 | |
2431 | === added file 'sloecode/templates/wiki/directory.html' |
2432 | --- sloecode/templates/wiki/directory.html 1970-01-01 00:00:00 +0000 |
2433 | +++ sloecode/templates/wiki/directory.html 2012-09-26 01:36:19 +0000 |
2434 | @@ -0,0 +1,31 @@ |
2435 | +{% extends "wiki/base.html" %} |
2436 | + |
2437 | +{% block title %} Wiki {% endblock %} |
2438 | + |
2439 | +{% block wiki_actions %} |
2440 | + <div class='wikkid'> |
2441 | + <ul class='wiki_breadcrumbs'> |
2442 | + {% for crumb in fragments['breadcrumbs'] %} |
2443 | + <li> |
2444 | + <a class='wiki_crumb' href="{{ crumb.path }}"><span class='wiki_crumb_content'>{{ crumb.title }}</span></a> |
2445 | + </li> |
2446 | + {% endfor %} |
2447 | + </ul> |
2448 | + </div> |
2449 | +{% endblock %} |
2450 | + |
2451 | +{% block wiki_content %} |
2452 | + <table class="dir-listing"> |
2453 | + {% if fragments['content'] %} |
2454 | + {% for item in fragments['content'] %} |
2455 | + <tr class="{{ loop.cycle('odd', 'even') }}"> |
2456 | + <td> |
2457 | + <a href="{{ item.url }}" class="{{ item.css_class }}">{{ item.name }}</a> |
2458 | + </td> |
2459 | + </tr> |
2460 | + {% endfor %} |
2461 | + {% else %} |
2462 | + There are no files at the moment. |
2463 | + {% endif %} |
2464 | + </table> |
2465 | +{% endblock %} |
2466 | |
2467 | === added file 'sloecode/templates/wiki/edit.html' |
2468 | --- sloecode/templates/wiki/edit.html 1970-01-01 00:00:00 +0000 |
2469 | +++ sloecode/templates/wiki/edit.html 2012-09-26 01:36:19 +0000 |
2470 | @@ -0,0 +1,42 @@ |
2471 | +{% extends "wiki/page.html" %} |
2472 | + |
2473 | +{% block header %} |
2474 | + {{ h.javascript_link(h.url('http://code.jquery.com/jquery-latest.min.js')) }} |
2475 | + {{ h.javascript_link(h.url('/js/jquery-ui-1.8.23.custom.min.js')) }} |
2476 | + {{ h.stylesheet_link(h.url('/css/smoothness/jquery-ui-1.8.23.custom.css')) }} |
2477 | + {{ h.javascript_link(h.url('/js/wiki-edit-helpers.js')) }} |
2478 | +{% endblock %} |
2479 | + |
2480 | +{% block page_content %} |
2481 | +{{ h.form(fragments['save_url'], method="post", name="wiki") }} |
2482 | + {{ h.hidden('description') }} |
2483 | + {{ h.hidden('rev-id', value=fragments['rev-id']) }} |
2484 | + <div class='edit-toolbar'> |
2485 | + <ul class='edit-toolbar-buttons'> |
2486 | + <li><a href='#' class='toolbar-bold'><b>B</b></a></li> |
2487 | + <li><a href='#' class='toolbar-italic'><i>I</i></a></li> |
2488 | + <li><a href='#' class='toolbar-link'>l</a></li> |
2489 | + </ul> |
2490 | + </div> |
2491 | + <div class='edit-content'> |
2492 | + {{ h.textarea("content", fragments['content'], rows=30) }} |
2493 | + </div><br> |
2494 | + {{ h.submit('save', 'Save') }} |
2495 | + {{ h.submit('preview', 'Preview') }} |
2496 | + <a href="{{ fragments['cancel_url'] }}">Cancel</a> |
2497 | + {% if fragments['preview'] %} |
2498 | + {{ fragments['preview'] }} |
2499 | + {% endif %} |
2500 | +{{ h.end_form() }}</p> |
2501 | +<div id="dialog-modal" style="display:none"> |
2502 | + <form> |
2503 | + <label for="link_title">Text To Show:</label> |
2504 | + <br /> |
2505 | + <input type="textbox" id="link_title"/> |
2506 | + <br /><br /> |
2507 | + <label for="link_href">URL:</label> |
2508 | + <br /> |
2509 | + <input type="textbox" id="link_href"/> |
2510 | + </form> |
2511 | +</div> |
2512 | +{% endblock %} |
2513 | |
2514 | === added file 'sloecode/templates/wiki/load-template.html' |
2515 | --- sloecode/templates/wiki/load-template.html 1970-01-01 00:00:00 +0000 |
2516 | +++ sloecode/templates/wiki/load-template.html 2012-09-26 01:36:19 +0000 |
2517 | @@ -0,0 +1,3 @@ |
2518 | +Save Location: {{ h.text('save_location', template.save_location) }}<span class='field-helper'>This is the folder that your new file will go into.</span><br> |
2519 | +{{ h.textarea('content', template.content, rows=20, style='width:99%') }}<br> |
2520 | +{{ h.submit('save', 'Save') }} |
2521 | \ No newline at end of file |
2522 | |
2523 | === added file 'sloecode/templates/wiki/newfile.html' |
2524 | --- sloecode/templates/wiki/newfile.html 1970-01-01 00:00:00 +0000 |
2525 | +++ sloecode/templates/wiki/newfile.html 2012-09-26 01:36:19 +0000 |
2526 | @@ -0,0 +1,43 @@ |
2527 | +{% extends "base.html" %} |
2528 | + |
2529 | +{% block title %} Wiki {% endblock %} |
2530 | + |
2531 | +{% block content %} |
2532 | +{% set pathurl = h.url(controller=path, action="+save") %} |
2533 | +<p>{{ h.form(pathurl, method="post", name="wiki") }} |
2534 | + Filename: {{ h.text('filename') }}<span class='field-helper'>This is what your new file will be called. Can include slashes to denote directories.</span><br> |
2535 | + Description: {{ h.text('description') }}<span class='field-helper'>A brief description of the purpose of this file.</span><br> |
2536 | + Template: {{ h.select('template', None, template_names) }}<span class='field-helper'>You can pre-populate your file with content from a template by selecting one of these.</span><br> |
2537 | + <div id="template_load_content"></div> |
2538 | +{{ h.end_form() }}</p> |
2539 | +<script type="text/javascript" src='http://code.jquery.com/jquery-latest.min.js'></script> |
2540 | +<script type="text/javascript"> |
2541 | + $('form[name=wiki]').submit(function(){ |
2542 | + //Get Filename (and possibly folders) from filename field |
2543 | + var baseUrl = "{{pathurl}}"; |
2544 | + var lastSlashIndex = baseUrl.lastIndexOf('/'); |
2545 | + var leftUrl = baseUrl.substring(0, lastSlashIndex); |
2546 | + var rightUrl = baseUrl.substring(lastSlashIndex); |
2547 | + var filename = $('#filename').val(); |
2548 | + var urlFilename = ""; |
2549 | + if (filename.length > 0) |
2550 | + { |
2551 | + urlFilename = "/" + filename; |
2552 | + } |
2553 | + var saveLocation = $('#save_location').val(); |
2554 | + var urlFolder = ""; |
2555 | + if (saveLocation.length > 0) |
2556 | + { |
2557 | + urlFolder = "/" + saveLocation; |
2558 | + } |
2559 | + $('form[name=wiki]').attr('action', leftUrl + urlFolder + urlFilename + rightUrl); |
2560 | + }); |
2561 | + $('#template').change(function(){ |
2562 | + var url = "{{ h.url(controller='wiki', action='load_template') }}"; |
2563 | + var filename = $('#template').val(); |
2564 | + var map = {}; |
2565 | + map["template_name"] = filename; |
2566 | + $.post(url, map, function(data){ $('#template_load_content').html(data); }, "html") |
2567 | + }); |
2568 | +</script> |
2569 | +{% endblock %} |
2570 | |
2571 | === added file 'sloecode/templates/wiki/page.html' |
2572 | --- sloecode/templates/wiki/page.html 1970-01-01 00:00:00 +0000 |
2573 | +++ sloecode/templates/wiki/page.html 2012-09-26 01:36:19 +0000 |
2574 | @@ -0,0 +1,31 @@ |
2575 | +{% extends "wiki/base.html" %} |
2576 | + |
2577 | +{% block title %} Wiki {% endblock %} |
2578 | + |
2579 | +{% block wiki_actions %} |
2580 | +<div class='wikkid'> |
2581 | + <ul class='wiki_breadcrumbs'> |
2582 | + {% for crumb in fragments['breadcrumbs'] %} |
2583 | + <li> |
2584 | + <a class='wiki_crumb' href="{{ crumb.path }}"><span class='wiki_crumb_content'>{{ crumb.title }}</span></a> |
2585 | + </li> |
2586 | + {% endfor %} |
2587 | + </ul> |
2588 | + </div> |
2589 | + <ul class='wiki_action_button_wrapper'> |
2590 | + <li>{{ h.link_to("Edit", fragments['edit_url'], class="wiki_action_button") }}</li> |
2591 | + <li>{{ h.link_to("Browse Wiki Contents", fragments['listing_url'], class="wiki_action_button") }}</li> |
2592 | + <li>{{ h.link_to("New File", fragments['newfile_url'], class="wiki_action_button") }}</li> |
2593 | + </ul> |
2594 | + <div class='clear'></div> |
2595 | +</div> |
2596 | +{% endblock %} |
2597 | + |
2598 | +{% block wiki_content %} |
2599 | + {% block page_content %} {% endblock %} |
2600 | + <div> |
2601 | + {% if fragments['last_modified_by'] %} |
2602 | + Last modified on <b>{{ fragments['last_modified_date'] }}</b> by <b>{{ fragments['last_modified_by'] }}</b>. |
2603 | + {% endif %} |
2604 | + </div> |
2605 | +{% endblock %} |
2606 | |
2607 | === added file 'sloecode/templates/wiki/text.html' |
2608 | --- sloecode/templates/wiki/text.html 1970-01-01 00:00:00 +0000 |
2609 | +++ sloecode/templates/wiki/text.html 2012-09-26 01:36:19 +0000 |
2610 | @@ -0,0 +1,5 @@ |
2611 | +{% extends "wiki/page.html" %} |
2612 | + |
2613 | +{% block page_content %} |
2614 | +{{ fragments['content'] }} |
2615 | +{% endblock %} |
2616 | |
2617 | === modified file 'sloecode/tests/test_project.py' |
2618 | --- sloecode/tests/test_project.py 2012-05-01 04:14:51 +0000 |
2619 | +++ sloecode/tests/test_project.py 2012-09-26 01:36:19 +0000 |
2620 | @@ -66,4 +66,4 @@ |
2621 | self.assertTrue(me in Session) |
2622 | |
2623 | self.assertTrue(mem not in Session) |
2624 | - self.assertTrue(sc not in Session) |
2625 | + self.assertTrue(sc not in Session) |
2626 | \ No newline at end of file |
2627 | |
2628 | === added file 'sloecode/tests/test_template.py' |
2629 | --- sloecode/tests/test_template.py 1970-01-01 00:00:00 +0000 |
2630 | +++ sloecode/tests/test_template.py 2012-09-26 01:36:19 +0000 |
2631 | @@ -0,0 +1,83 @@ |
2632 | +# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- |
2633 | +# |
2634 | +# This program is free software: you can redistribute it and/or modify |
2635 | +# it under the terms of the GNU General Public License as published by |
2636 | +# the Free Software Foundation, either version 3 of the License, or |
2637 | +# (at your option) any later version. |
2638 | + |
2639 | +# This program is distributed in the hope that it will be useful, |
2640 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
2641 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
2642 | +# GNU General Public License for more details. |
2643 | + |
2644 | +# You should have received a copy of the GNU General Public License |
2645 | +# along with this program. If not, see <http://www.gnu.org/licenses/>. |
2646 | + |
2647 | +# Copyright 2012 Sloecode Developers |
2648 | +from sloecode.model.meta import Session |
2649 | +from sloecode.model import Template |
2650 | +from sloecode.tests import SloecodeTestCase |
2651 | +from sqlalchemy.exc import IntegrityError |
2652 | + |
2653 | + |
2654 | +class TestTemplate(SloecodeTestCase): |
2655 | + |
2656 | + def test_create(self): |
2657 | + """Create a person.""" |
2658 | + blog_template = Template(name='blog', description='This is a blog post', |
2659 | + save_location='/', content='Some content.') |
2660 | + self.failIf(blog_template is None) |
2661 | + |
2662 | + def test_unique(self): |
2663 | + """Make sure the blog name is unique.""" |
2664 | + blog_template = Template(name='blog', description='This is a blog post', |
2665 | + save_location='/', content='Some content.') |
2666 | + Session.add(blog_template) |
2667 | + Session.commit() |
2668 | + |
2669 | + another_blog_template = Template(name='blog', description='This is a blog post', |
2670 | + save_location='/', content='Some content.') |
2671 | + Session.add(another_blog_template) |
2672 | + self.failUnlessRaises(IntegrityError, Session.commit) |
2673 | + |
2674 | + def test_tests(self): |
2675 | + """make sure DB data is flushed between tests.""" |
2676 | + blog_template = Template(name='blog') |
2677 | + Session.add(blog_template) |
2678 | + Session.commit() |
2679 | + |
2680 | + def test_querying(self): |
2681 | + """make sure we can query the database for specific templates.""" |
2682 | + # Add some users: |
2683 | + Session.add(Template(name='blog', description='blog post')) |
2684 | + Session.add(Template(name='milestones', description='milestones', |
2685 | + content='some content')) |
2686 | + Session.add(Template(name='blank page', description='blank page', |
2687 | + save_location='/')) |
2688 | + Session.commit() |
2689 | + |
2690 | + # query all templates: |
2691 | + qi = Session.query(Template) |
2692 | + self.assertTrue(len(qi.all()) == 3) |
2693 | + |
2694 | + # Check get_one returns a Template not a list of Templates |
2695 | + blog_template = Template.get_one(name='blog') |
2696 | + self.assertTrue(isinstance(blog_template, Template)) |
2697 | + |
2698 | + def test_update(self): |
2699 | + """Make sure we can edit a template in the database.""" |
2700 | + |
2701 | + Session.add(Template(name='blog', description='a blog spot', |
2702 | + content='This is some content.')) |
2703 | + Session.commit() |
2704 | + |
2705 | + blog_template = Template.get(name='blog')[0] |
2706 | + blog_template.name = 'blog spot' |
2707 | + blog_template.content = 'This is some more content' |
2708 | + blog_template.save_location = '/' |
2709 | + Session.merge(blog_template) |
2710 | + Session.commit() |
2711 | + |
2712 | + blog = Template.get(name='blog spot')[0] |
2713 | + self.assertTrue(blog.save_location == '/') |
2714 | + self.assertTrue(blog is blog_template) |
2715 | |
2716 | === modified file 'sloecode/websetup.py' |
2717 | --- sloecode/websetup.py 2012-05-01 04:14:51 +0000 |
2718 | +++ sloecode/websetup.py 2012-09-26 01:36:19 +0000 |
2719 | @@ -18,16 +18,12 @@ |
2720 | """Setup the sloecode application""" |
2721 | |
2722 | import logging |
2723 | - |
2724 | import pylons.test |
2725 | |
2726 | -from sloecode.bzr.factory import BazaarRepositoryFactory |
2727 | from sloecode.config.environment import load_environment |
2728 | from sloecode.model.meta import Session, metadata, Base |
2729 | from sloecode.model import Person, SiteRole |
2730 | from sloecode.model.site_role import USER_ADMIN, PROJECT_ADMIN |
2731 | - |
2732 | - |
2733 | log = logging.getLogger(__name__) |
2734 | |
2735 | |
2736 | @@ -35,7 +31,7 @@ |
2737 | """Place any commands to setup sloecode here""" |
2738 | # Don't reload the app if it was loaded under the testing environment |
2739 | if not pylons.test.pylonsapp: |
2740 | - load_environment(conf.global_conf, conf.local_conf) |
2741 | + config = load_environment(conf.global_conf, conf.local_conf) |
2742 | |
2743 | # Create the tables if they don't already exist |
2744 | metadata.create_all(bind=Session.bind) |
2745 | @@ -54,16 +50,9 @@ |
2746 | Session.commit() |
2747 | log.info("Successfully setup") |
2748 | |
2749 | - # Ensure that the directories exist for the repositories. |
2750 | - fact = BazaarRepositoryFactory( |
2751 | - conf.global_conf['bzr_person_root'], |
2752 | - conf.global_conf['bzr_project_root'], |
2753 | - conf.global_conf['bzr_deleted_person_root'], |
2754 | - conf.global_conf['bzr_deleted_project_root'], |
2755 | - ) |
2756 | # create repo for admin user we created above: |
2757 | # TODO: this will crash if the admin user was already created, which |
2758 | # will be the case if the database has been wiped or moved from one |
2759 | # backend to another. We should detect this and warn about it, but |
2760 | # probably not crash! |
2761 | - fact.create_shared_repository_for_person(admin.login) |
2762 | + config['bzr.factory'].create_shared_repository_for_person(admin.login) |
2763 | |
2764 | === added file 'sloecode/wikkid_view_adapters.py' |
2765 | --- sloecode/wikkid_view_adapters.py 1970-01-01 00:00:00 +0000 |
2766 | +++ sloecode/wikkid_view_adapters.py 2012-09-26 01:36:19 +0000 |
2767 | @@ -0,0 +1,159 @@ |
2768 | +# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- |
2769 | +# |
2770 | +# This program is free software: you can redistribute it and/or modify |
2771 | +# it under the terms of the GNU General Public License as published by |
2772 | +# the Free Software Foundation, either version 3 of the License, or |
2773 | +# (at your option) any later version. |
2774 | + |
2775 | +# This program is distributed in the hope that it will be useful, |
2776 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
2777 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
2778 | +# GNU General Public License for more details. |
2779 | + |
2780 | +# You should have received a copy of the GNU General Public License |
2781 | +# along with this program. If not, see <http://www.gnu.org/licenses/>. |
2782 | + |
2783 | +# Copyright 2012 Sloecode Developers |
2784 | + |
2785 | + |
2786 | +import logging |
2787 | + |
2788 | + |
2789 | +log = logging.getLogger(__name__) |
2790 | + |
2791 | + |
2792 | +def _add_single_page_fragments(fragments, view): |
2793 | + """Adds fragments for single-page based views to the dict passed in.""" |
2794 | + try: |
2795 | + fragments['last_modified_by'] = view.last_modified_by.display_name |
2796 | + fragments['last_modified_date'] = view.last_modified_date |
2797 | + except: |
2798 | + pass |
2799 | + fragments['listing_url'] = view.canonical_url(view.context.root_resource, |
2800 | + 'listing') |
2801 | + fragments['edit_url'] = view.canonical_url(view.context, 'edit') |
2802 | + fragments['breadcrumbs'] = view.breadcrumbs |
2803 | + # The template may be overwritten in child classes |
2804 | + fragments['template'] = '/wiki/text.html' |
2805 | + |
2806 | + |
2807 | +def _get_base_fragments(app, environ): |
2808 | + """Performs actions that are common to every view. |
2809 | + |
2810 | + Returns a dictionary containing values common to every view. |
2811 | + |
2812 | + """ |
2813 | + view = app.get_view(environ) |
2814 | + #Perform any redirects if they need to happen |
2815 | + view.before_render() |
2816 | + newfile_url = view.canonical_url(view.context.root_resource, 'newfile') |
2817 | + fragments = { |
2818 | + 'newfile_url': newfile_url, |
2819 | + } |
2820 | + return fragments, view |
2821 | + |
2822 | + |
2823 | +def _get_directory_fragments(app, environ): |
2824 | + """Returns fragments for views related to directories.""" |
2825 | + fragments, view = _get_base_fragments(app, environ) |
2826 | + |
2827 | + fragments['breadcrumbs'] = view.breadcrumbs |
2828 | + fragments['content'] = view.items |
2829 | + fragments['template'] = '/wiki/directory.html' |
2830 | + |
2831 | + return fragments |
2832 | + |
2833 | + |
2834 | +def _get_missing_page_fragments(app, environ): |
2835 | + """Returns fragments for views related to missing pages.""" |
2836 | + fragments, view = _get_base_fragments(app, environ) |
2837 | + |
2838 | + fragments['listing_url'] = view.canonical_url(view.context.root_resource, |
2839 | + 'listing') |
2840 | + fragments['edit_url'] = view.canonical_url(view.context, 'edit') |
2841 | + fragments['breadcrumbs'] = view.breadcrumbs |
2842 | + fragments['template'] = '/wiki/text.html' |
2843 | + not_found_msg = "File not found: %s <br><a href='%s'>Create a new page</a>" |
2844 | + fragments['content'] = not_found_msg % (view.title, |
2845 | + view.canonical_url(view.context, |
2846 | + 'newfile')) |
2847 | + |
2848 | + return fragments |
2849 | + |
2850 | + |
2851 | +def _get_edit_fragments(app, environ): |
2852 | + """Returns fragments for views related to edit pages.""" |
2853 | + fragments, view = _get_base_fragments(app, environ) |
2854 | + _add_single_page_fragments(fragments, view) |
2855 | + |
2856 | + fragments['content'] = view.content |
2857 | + fragments['save_url'] = view.save_url |
2858 | + fragments['cancel_url'] = view.cancel_url |
2859 | + fragments['rev-id'] = view.rev_id |
2860 | + fragments['cancel_url'] = view.cancel_url |
2861 | + fragments['template'] = '/wiki/edit.html' |
2862 | + try: |
2863 | + fragments['preview'] = view.preview_content |
2864 | + except: |
2865 | + pass |
2866 | + |
2867 | + return fragments |
2868 | + |
2869 | + |
2870 | +def _get_root_fragments(app, environ): |
2871 | + """Returns fragments for views related to the root resource.""" |
2872 | + fragments, view = _get_base_fragments(app, environ) |
2873 | + # This will get redirected to the actual root resource. |
2874 | + # Have put an explicit call to the function that redirects just in case. |
2875 | + view.before_render() |
2876 | + |
2877 | + |
2878 | +def _get_source_text_fragments(app, environ): |
2879 | + """Returns fragments for views related to source text pages.""" |
2880 | + fragments, view = _get_base_fragments(app, environ) |
2881 | + _add_single_page_fragments(fragments, view) |
2882 | + |
2883 | + fragments['content'] = view.content |
2884 | + |
2885 | + return fragments |
2886 | + |
2887 | + |
2888 | +def _get_wiki_page_fragments(app, environ): |
2889 | + """Returns fragments for views related to wiki pages.""" |
2890 | + fragments, view = _get_base_fragments(app, environ) |
2891 | + _add_single_page_fragments(fragments, view) |
2892 | + |
2893 | + fragments['content'] = view.content |
2894 | + |
2895 | + return fragments |
2896 | + |
2897 | + |
2898 | +_view_map = { |
2899 | + 'DirectoryListingPage': _get_directory_fragments, |
2900 | + 'MissingPage': _get_missing_page_fragments, |
2901 | + 'MissingDirectory': _get_missing_page_fragments, |
2902 | + 'NewWikiPage': _get_edit_fragments, |
2903 | + 'RootPage': _get_root_fragments, |
2904 | + 'SourceTextPage': _get_wiki_page_fragments, |
2905 | + 'EditTextFile': _get_edit_fragments, |
2906 | + 'UpdateTextFile': _get_edit_fragments, |
2907 | + 'SaveNewTextFile': _get_edit_fragments, |
2908 | + 'WikiPage': _get_wiki_page_fragments, |
2909 | +} |
2910 | + |
2911 | + |
2912 | +def get_page_fragments(app, environ, view_name=None): |
2913 | + """Returns a dictionary containing the page fragments required for the |
2914 | + passed environ. |
2915 | + |
2916 | + Also performs any redirects that need to happen for the view. |
2917 | + |
2918 | + Returns None if view is not in dictionary. |
2919 | + |
2920 | + """ |
2921 | + if view_name is None: |
2922 | + view_name = app.get_view(environ).__class__.__name__ |
2923 | + log.info("View: %s" % view_name) |
2924 | + if view_name in _view_map: |
2925 | + return _view_map[view_name](app, environ) |
2926 | + return None |