diff --git a/.gitignore b/.gitignore index 811e3fb..d3f6703 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ pydat/pydat/custom_settings.py *.pyc *.swp +*.vscode diff --git a/Dockerfile b/Dockerfile index 5242bb6..e6bfb41 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,7 +2,7 @@ FROM httpd:2.4 MAINTAINER mitrecnd, http://github.com/mitrecnd -ENV WSGI_VERSION="4.4.13" PATH=$PATH:/opt/WhoDat/pydat/scripts +ENV WSGI_VERSION="4.6.4" PATH=$PATH:/opt/WhoDat/pydat/scripts COPY . /opt/WhoDat/ ADD https://bootstrap.pypa.io/get-pip.py /tmp/ @@ -21,7 +21,7 @@ RUN \ apt-get install -y python python-dev $buildDeps && \ /tmp/get-pip.py && \ rm /tmp/get-pip.py && \ - pip install -r /opt/WhoDat/docker/requirements.txt && \ + pip install -r /opt/WhoDat/requirements.es5.txt && \ cd /tmp/ && \ tar -zxf ${WSGI_VERSION}.tar.gz && \ rm ${WSGI_VERSION}.tar.gz && \ diff --git a/README.md b/README.md index 536bc7c..713f4eb 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,7 @@ -WhoDat Project -============== - +# WhoDat Project The WhoDat project is a front-end for whoisxmlapi data, or any whois data -living in a MongoDB. It integrates whois data, current IP resolutions and +living in ElasticSearch. It integrates whois data, current IP resolutions and passive DNS. In addition to providing an interactive, pivotable application for analysts to perform research, it also has an API which will allow output in JSON or list format. @@ -18,182 +16,179 @@ from scratch by [Wesley Shields](https://github.com/wxsBSD) and The PHP version is left for those who want to run it, but it is not as full featured or extensible as the Python implementation, and is not supported. -For more information on the PHP implementation please see the [readme](../master/legacy_whodat/README.md). For more information on the Python implementation -keep reading... - - -ElasticSearch Support -===================== - -Important pyDat 3.0 ElasticSearch Notes: - -Note this is the only release (and overdue) for 3.0 as work is under way for pyDat 4.0. -pyDat 4.0 will remove support for MongoDB and requires a minimum of ElasticSearch 5.2 but -should be easier to work with and considerably faster due to significant improvements in -ElasticSearch 5.x. It will also, more than likely, require a full re-ingestion of source -data. - -This release supports only ElasticSearch 2.x !! - - -PreReqs to run with ElasticSearch: - -- ElasticSearch installed somewhere -- python elasticsearch library (pip install elasticsearch>=2.0.0,<3.0.0) -- python lex yacc library (pip install ply) -- below specified prereqs too - -ElasticSearch Scripting - -ElasticSearch comes with dynamic Groovy scripting disabled due to potential sandbox breakout issues with the Groovy container. Unfortunately, the only way to do certain things in ElasticSearch is via this scripting language. Because the default installation of ES does not have a work-around, there is a setting called ES_SCRIPTING_ENABLED in the pyDat settings file which is set to False by default. When set to True, the pyDat advanced search capability will expose an extra feature called 'Unique Domains' which given search results that will return multiple results for a given domain (e.g., due to multiple versions of a domain matching) will return only the latest entry instead of all entries. Before setting this option to True, you must install a script server-side on every ES node -- to do this, please copy the file called \_score.groovy from the es_scripts directory to your scripts directory located in the elasticsearch configuration directory. On package-based installs of ES on RedHat/CentOS or Ubuntu this should be /etc/elasticsearch/scripts. If the scripts directory does not exist, please create it. Note you have to restart the Node for it to pick up the script. - - ElasticSearch Plugins - -The murmur3 mapping type was removed from the ElasticSearch core and into a plugin. The stats page uses this field to obtain information about the domains loaded in elasticsearch and further the template provided will not load if the murmur3 mapper is not loaded. Ensure the plugin is installed on *every* node in your cluster before proceeding. Alternatively, you can remove 'hash' field from domainName in the template and disable the stats page (just html comment or remove the link from the header). +For more information on the PHP implementation please see the +[readme](../master/legacy_whodat/README.md). For more information on the +Python implementation keep reading... +## PreReqs -To install the plugin, use the plugin utility on every node: +pyDat is a python 2.7 application that requires the following to run: -
-plugin install mapper-murmur3
-
+- ElasticSearch installed somewhere (versions 5.2 -> 6.x are supported, up to 6.3.1 tested) +- python packages: + - requests + - unicodecsv + - markdown + - django + - elasticsearch (version must correspond to cluster version) + - ply - -This will require a restart of the node to pick up the plugin. - - -pyDat -===== +## pyDat pyDat is a Python implementation of [Chris Clark's](https://github.com/Xen0ph0n) WhoDat code. It is designed to be more extensible and has more features than the PHP implementation. -Version 2.0 of pyDat introduced support for historical whois searches. This capability -necessitated modifying the way data is stored in the database. To aid in properly populating -the database, a script called [elasticsearch_populate](./pydat/scripts/elasticsearch_populate.py) is provided +To aid in properly populating the database, a script called +[elasticsearch_populate](./pydat/scripts/elasticsearch_populate.py) is provided to auto-populate the data. Note that the data coming from whoisxmlapi doesn't seem to be always consistent so some care should be taken when ingesting data. More testing needs to be done to ensure all data is ingested properly. Anyone setting up their database, should read the available flags for the script before running it to ensure they've tweaked it for their setup. The following is the output from elasticsearch_populate -h -Version 3.0 introduces ElasticSearch 2.x as a backend for whois data - -
-usage: elasticsearch_populate.py [-h] (-f FILE | -d DIRECTORY) [-e EXTENSION]
-                                 [-r] [-v] [--vverbose] [-s]
-                                 [-x EXCLUDE | -n INCLUDE] [-o COMMENT]
-                                 [-u [ES_URI [ES_URI ...]]] [-p INDEX_PREFIX]
-                                 [-i IDENTIFIER] [-B BULK_SIZE]
-                                 [--optimize-import] [-t THREADS]
-                                 [--bulk-serializers BULK_SERIALIZERS]
-                                 [--bulk-threads BULK_THREADS]
-                                 [--enable-delta-indexes]
-
-optional arguments:
-  -h, --help            show this help message and exit
-  -f FILE, --file FILE  Input CSV file
-  -d DIRECTORY, --directory DIRECTORY
-                        Directory to recursively search for CSV files --
-                        mutually exclusive to '-f' option
-  -e EXTENSION, --extension EXTENSION
-                        When scanning for CSV files only parse files with
-                        given extension (default: 'csv')
-  -r, --redo            Attempt to re-import a failed import or import more
-                        data, uses stored metatdata from previous import (-o,
-                        -n, and -x not required and will be ignored!!)
-  -v, --verbose         Be verbose
-  --vverbose            Be very verbose (Prints status of every domain parsed,
-                        very noisy)
-  -s, --stats           Print out Stats after running
-  -x EXCLUDE, --exclude EXCLUDE
-                        Comma separated list of keys to exclude if updating
-                        entry
-  -n INCLUDE, --include INCLUDE
-                        Comma separated list of keys to include if updating
-                        entry (mutually exclusive to -x)
-  -o COMMENT, --comment COMMENT
-                        Comment to store with metadata
-  -u [ES_URI [ES_URI ...]], --es-uri [ES_URI [ES_URI ...]]
-                        Location(s) of ElasticSearch Server (e.g.,
-                        foo.server.com:9200) Can take multiple endpoints
-  -p INDEX_PREFIX, --index-prefix INDEX_PREFIX
-                        Index prefix to use in ElasticSearch (default: whois)
-  -i IDENTIFIER, --identifier IDENTIFIER
-                        Numerical identifier to use in update to signify
-                        version (e.g., '8' or '20140120')
-  -B BULK_SIZE, --bulk-size BULK_SIZE
-                        Size of Bulk Elasticsearch Requests
-  --optimize-import     If enabled, will change ES index settings to speed up
-                        bulk imports, but if the cluster has a failure, data
-                        might be lost permanently!
-  -t THREADS, --threads THREADS
-                        Number of workers, defaults to 2. Note that each
-                        worker will increase the load on your ES cluster since
-                        it will try to lookup whatever record it is working on
-                        in ES
-  --bulk-serializers BULK_SERIALIZERS
-                        How many threads to spawn to combine messages from
-                        workers. Only increase this if you're are running a
-                        lot of workers and one cpu is unable to keep up with
-                        the load
-  --bulk-threads BULK_THREADS
-                        How many threads to spawn to send bulk ES messages.
-                        The larger your cluster, the more you can increase
-                        this
-  --enable-delta-indexes
-                        If enabled, will put changed entries in a separate
-                        index. These indexes can be safely deleted if space is
-                        an issue, also provides some other improvements
-
- - -Note that when adding a new version of data to the database, you should use either the -x flag to exclude certain -fields that are not important to track changes or the -n flag to include specific fields that are subject to scrutiny. -This will significantly decrease the amount of data that is stored between versions. You can only use either -x or -n not both -at the same time, but you can choose whichever is best for your given environment. As an example, if you get daily updates, you -might decide that for daily updates you only care if contactEmail changes but every quarter you might want to instead only exclude + usage: elasticsearch_populate.py [-h] [-f FILE | -d DIRECTORY] [-e EXTENSION] + (-i IDENTIFIER | -r | -z | --config-template-only) + [-v] [--vverbose] [-s] + [-x EXCLUDE | -n INCLUDE] [-o COMMENT] + [-u [ES_URI [ES_URI ...]]] + [--es-user ES_USER] [--es-pass ES_PASS] + [--es-ask-pass] [--es-enable-ssl ES_CACERT] + [--es-disable-sniffing] [-p INDEX_PREFIX] + [-B BULK_SIZE] [-b BULK_FETCH_SIZE] + [--rollover-size ROLLOVER_DOCS] + [--pipelines PIPELINES] + [--shipper-threads SHIPPER_THREADS] + [--fetcher-threads FETCHER_THREADS] + [--ignore-field-prefixes [IGNORE_FIELD_PREFIXES [IGNORE_FIELD_PREFIXES ...]]] + [--debug] + + optional arguments: + -h, --help show this help message and exit + -f FILE, --file FILE Input CSV file + -d DIRECTORY, --directory DIRECTORY + Directory to recursively search for CSV files -- + mutually exclusive to '-f' option + -e EXTENSION, --extension EXTENSION + When scanning for CSV files only parse files with + given extension (default: 'csv') + -i IDENTIFIER, --identifier IDENTIFIER + Numerical identifier to use in update to signify + version (e.g., '8' or '20140120') + -r, --redo Attempt to re-import a failed import or import more + data, uses stored metadata from previous import (-o, + -n, and -x not required and will be ignored!!) + -z, --update Run the script in update mode. Intended for taking + daily whois data and adding new domains to the current + existing index in ES. + --config-template-only + Configure the ElasticSearch template and then exit + -v, --verbose Be verbose + --vverbose Be very verbose (Prints status of every domain parsed, + very noisy) + -s, --stats Print out Stats after running + -x EXCLUDE, --exclude EXCLUDE + Comma separated list of keys to exclude if updating + entry + -n INCLUDE, --include INCLUDE + Comma separated list of keys to include if updating + entry (mutually exclusive to -x) + -o COMMENT, --comment COMMENT + Comment to store with metadata + -u [ES_URI [ES_URI ...]], --es-uri [ES_URI [ES_URI ...]] + Location(s) of ElasticSearch Server (e.g., + foo.server.com:9200) Can take multiple endpoints + --es-user ES_USER Username for ElasticSearch when Basic Authis enabled + --es-pass ES_PASS Password for ElasticSearch when Basic Authis enabled + --es-ask-pass Prompt for ElasticSearch password + --es-enable-ssl ES_CACERT + The path, on disk to the cacert of the ElasticSearch + server to enable ssl/https support + --es-disable-sniffing + Disable ES sniffing, useful when ssl + hostnameverification is not working properly + -p INDEX_PREFIX, --index-prefix INDEX_PREFIX + Index prefix to use in ElasticSearch (default: pydat) + -B BULK_SIZE, --bulk-size BULK_SIZE + Size of Bulk Elasticsearch Requests + -b BULK_FETCH_SIZE, --bulk-fetch-size BULK_FETCH_SIZE + Number of documents to search for at a time (default + 50), note that this will be multiplied by the number + of indices you have, e.g., if you have 10 + pydat- indices it results in a request for 500 + documents + --rollover-size ROLLOVER_DOCS + Set the number of documents after which point a new + index should be created, defaults to 50 milllion, note + that this is fuzzy since the index count isn't + continuously updated, so should be reasonably below 2 + billion per ES shard and should take your ES + configuration into consideration + --pipelines PIPELINES + Number of pipelines, defaults to 2 + --shipper-threads SHIPPER_THREADS + How many threads per pipeline to spawn to send bulk ES + messages. The larger your cluster, the more you can + increase this, defaults to 1 + --fetcher-threads FETCHER_THREADS + How many threads to spawn to search ES. The larger + your cluster, the more you can increase this, defaults + to 2 + --ignore-field-prefixes [IGNORE_FIELD_PREFIXES [IGNORE_FIELD_PREFIXES ...]] + list of fields (in whois data) to ignore when + extracting and inserting into ElasticSearch + --debug Enables debug logging + +Note that when adding a new version of data to the database, you should use +either the -x flag to exclude certain fields that are not important to track +changes or the -n flag to include specific fields that are subject to scrutiny. +This will significantly decrease the amount of data that is stored between +versions. You can only use either -x or -n not both at the same time, but you +can choose whichever is best for your given environment. As an example, if you +get daily updates, you might decide that for daily updates you only care +if contactEmail changes but every quarter you might want to instead only exclude certain fields you don't find important. -Version 3.0 of pyDat introduces ElasticSearch as the backend going forward for storing and searching data. Although the mongo backend -should still work, it should be considered deprecated and it is recommended installations move to ES as a backend as it provides -numerous benefits with regards to searching, including a full-featured query language allowing for more powerful searches. - -ScreenShot -=========== +### ScreenShot ![alt tag](https://imgur.com/QT7Mkfp.png) -Running pyDat -============= - -pyDat does not provide any data on its own. You must provide your own whois data in an ElasticSearch data store . Beyond the data in ElasticSearch you will need -[Django](https://djangoproject.com), [unicodecsv](https://pypi.python.org/pypi/unicodecsv), -[requests](https://pypi.python.org/pypi/requests) (at least 2.2.1) and [markdown](https://pypi.python.org/pypi/Markdown). +### Running pyDat +pyDat does not provide any data on its own. You must provide your own whois +data in an ElasticSearch data store. -Populating ElasticSearch with whoisxmlapi data (Ubuntu 14.04.3 LTS) -=========================================================== +### Populating ElasticSearch with whoisxmlapi data (Ubuntu 16.04.3 LTS) -- Install ElasticSearch. Using [Docker](https://hub.docker.com/_/elasticsearch/) is the easiest mechanism +- Install ElasticSearch. Using [Docker](https://www.docker.elastic.co/) is the easiest mechanism - Download latest trimmed (smallest possible) whoisxmlapi quarterly DB dump. - Extract the csv files. - - Use the included script in the scripts/ directory: -``` -./elasticsearch_populate.py -u localhost:9200 -f ~/whois/data/1.csv -i '1' -v -s -x Audit_auditUpdatedDate,updatedDate,standardRegUpdatedDate,expiresDate,standardRegExpiresDate -``` +> + ./elasticsearch_populate.py -u localhost:9200 -f ~/whois/data/1.csv -i '1' -v -s -x Audit_auditUpdatedDate,updatedDate,standardRegUpdatedDate,expiresDate,standardRegExpiresDate + +### Upgrading ElasticSearch 5.x -> 6.x + +If you started with Elasticsearch 5.x and upgrade your cluster to 6.x, you +should run the population script with the `--config-template-only` flag to update +the backend template. This will not change the way the data is configured and +serves only to eliminate deprecation warnings that your cluster will +throw otherwise + +> + ./elasticsearch_populate -u localhost:9200 --config-template-only + +## Installation -Local Installation --------------------- +### Local Installation - Copy pydat to /var/www/ (or prefered location) - Copy pydat/custom_settings_example.py to pydat/custom_settings.py. - Edit pydat/custom_settings.py to suit your needs. - Include your Passive DNS keys if you have any! - Configure Apache to use the provided wsgi interface to pydat. + ```bash sudo apt-get install libapache2-mod-wsgi sudo vi /etc/apache2/sites-available/whois @@ -210,109 +205,153 @@ sudo vi /etc/apache2/sites-available/whois ``` -Docker Installation -------------------- +### Docker Installation -If you don't want to install pyDat manually, you can use the docker image to quickly deploy the system. +If you don't want to install pyDat manually, you can use the docker image to +quickly deploy the system. -First, make sure to copy custom_settings_example.py to custom_settings.py and customize it to match your environment +First, make sure to copy custom_settings_example.py to custom_settings.py +and customize it to match your environment You can then launch pyDat by running -``` -docker run -d --name pydat -p 80:80 -v :/opt/WhoDat/pydat/pydat/custom_settings.py mitrecnd/pydat -``` + docker run -d --name pydat -p 80:80 -v :/opt/WhoDat/pydat/pydat/custom_settings.py mitrecnd/pydat +### Docker Compose -pyDat API -=========================================================== +To run pydat with compose your `docker-compose.yml` file could look like: -Starting with pyDat 2.0 there's a scriptable API that allows you to make search requests and obtain JSON data. The following endpoints are exposed: +```yaml +version: '2' +services: + pydat: + image: mitrecnd/pydat + volumes: + - "./custom_settings.py:/opt/WhoDat/pydat/pydat/custom_settings.py" + ports: + - 80:80 +``` +Note that the above config assumes that a `custom_settings.py` file exists in the +same directory as the compose file. + +#### Docker Compose Test Setup + +If you want to test pydat with a local docker-ized instance of ES, here is an +example compose configuration: + +```yaml +version: '2' +services: + elasticsearch: + image: docker.elastic.co/elasticsearch/elasticsearch-oss:6.3.1 + environment: + - cluster.name=pydat + - bootstrap.memory_lock=true + - "ES_JAVA_OPTS=-Xms512m -Xmx512m" + ulimits: + memlock: + soft: -1 + hard: -1 + mem_limit: 1g + volumes: + - pydat-data:/usr/share/elasticsearch/data + ports: + - 127.0.0.1:9200:9200 + pydat: + image: mitrecnd/pydat + volumes: + - "./custom_settings.py:/opt/WhoDat/pydat/pydat/custom_settings.py" + ports: + - 0.0.0.0:8888:80 + +volumes: + pydat-data: ``` -ajax/metadata/ -ajax/metadata// + +Along with the contents of its cooresponding `custom_settings.py` file: + +```python +DEBUG = True +ALLOWED_HOSTS = ['*'] +ES_URI = 'elasticsearch:9200' ``` +Note that the ElasticSearch instance is only accessible via localhost, while +pydat will be listening on all interfaces on port 8888. Also, further note that +while this is fine for small data sets, a production-level cluster is +recommended for hosting full quarterly dumps. + +## pyDat API + +The following endpoints are exposed: + +> + ajax/metadata/ + ajax/metadata// + The metadata endpoint returns metadata available for the data in the database. Specifying a version will return metadata for that specific version -``` -ajax/domain// -ajax/domain//latest/ -ajax/domain/// -ajax/domain//// -ajax/domain//diff/// -``` +> + ajax/domain// + ajax/domain//latest/ + ajax/domain/// + ajax/domain//// + ajax/domain//diff/// The domain endpoint allows you to get information about a specific domain name. By default, this will return information for any version of a domain that is found in the database. You can specify more information to obtain specific versions of domain information or to obtain the latest entry. You can also obtain a diff between two versions of a domain to see what has changed. -**Warning**: The output from the /diff endpoint has changed slightly in 3.0 to conform to the output of other endpoints. Data for the diff now resides in the 'data' object nested under the root - -``` -ajax/domains/// -ajax/domains///latest/ -ajax/domains//// -ajax/domains///// -``` +> + ajax/domains/// + ajax/domains///latest/ + ajax/domains//// + ajax/domains///// The domains endpoint allows you to search for domains based on a specified key. Currently the following keys are supported: -``` -domainName -registrant_name -contactEmail -registrant_telephone -``` +> + domainName + registrant_name + contactEmail + registrant_telephone Similar to the domain endpoint you can specify what versions of the data you are looking for. - Example Queries: -``` -curl http://pydat.myorg.domain/ajax/domain/google.com/latest/ - -curl http://pydat.myorg.domain/ajax/domains/domainName/google.com/ -``` +> + curl http://pydat.myorg.domain/ajax/domain/google.com/latest/ -Advanced Syntax Endpoint -------------------------- + curl http://pydat.myorg.domain/ajax/domains/domainName/google.com/ -If using ElasticSearch as the backend, a new endpoint is available that supports search via the advanced query syntax: +### Advanced Syntax Endpoint -``` -ajax/query -``` + ajax/query This endpoint takes 4 parameters via a GET request: -``` -query - The query to search ES with -size - The number of elements to return (aka page size) -page - The page to return, combining this with size you can get the results in chunks -unique - Only accepted if ES scripting is enabled (read above) -``` - -###Note on the unique parameter -If you're using the unique parameter, note that paging of results is disabled, but the size paramter will still be used to control the number of results returned. + query - The query to search ES with + size - The number of elements to return (aka page size) + page - The page to return, combining this with size you can get the results in chunks + unique - Only accepted if ES scripting is enabled (read above) +**Note on the unique parameter**: If you're using the unique parameter, note +that paging of results is disabled, but the size parameter will still be used +to control the number of results returned. -Untested Stuff -============= +## Untested Stuff Chris has an update.py script which I haven't used yet, so all bets are off, but it should allow you to get regular updates on specific watched fields via a cron job. For more information please see the [PHP implementation](../master/whodat). -TODO -==== +## TODO - Move Chris' update script to a common directory and test it out. -Legal Stuff -=========== +## Legal Stuff -pyDat is copyright The MITRE Corporation 2016. +pyDat is copyright The MITRE Corporation 2018. The PHP implementation is copyright Chris Clark, 2013. Contact him at Chris@xenosys.org. @@ -330,6 +369,6 @@ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along -with pyDat. If not, see http://www.gnu.org/licenses/. +with pyDat. If not, see . Approved for Public Release; Distribution Unlimited 14-1633 diff --git a/docker/README.md b/docker/README.md index 28ba96b..1e0dbf4 100755 --- a/docker/README.md +++ b/docker/README.md @@ -43,9 +43,9 @@ Note that you will still need to create and pass in a custom_setings.py configur Image Organization ------------------ -This image is based on Apache's httpd image with all required dependencies to use pyDat with MongoDB or ElasticSearch. +This image is based on Apache's httpd image with all required dependencies to use pyDat with ElasticSearch. -The repo has been installed into /opt/WhoDat but a soft link has been created at /pydat which points to /opt/WhoDat/pydat/pydat to make it easier to add a custom_settings file. +The repo has been installed into /opt/WhoDat but a soft link has been created at /pydat which points to /opt/WhoDat/pydat/pydat to make it easier to add a custom_settings file. The PATH has also been modified to include the scripts directory allowing you to directly execute the populate scripts from the command line: diff --git a/docker/apache.config b/docker/apache.config index 85746fd..d8c168e 100644 --- a/docker/apache.config +++ b/docker/apache.config @@ -22,6 +22,7 @@ LoadModule status_module modules/mod_status.so LoadModule autoindex_module modules/mod_autoindex.so LoadModule dir_module modules/mod_dir.so LoadModule alias_module modules/mod_alias.so +LoadModule mpm_event_module modules/mod_mpm_event.so User daemon @@ -196,7 +197,7 @@ WSGIScriptAlias "/" "/opt/WhoDat/pydat/pydat/wsgi.py" process-group=pydat applic # Static content - CSS, Javascript, images, etc. - Alias /static/ /opt/WhoDat/pydat/pydat/static/ + Alias /static/ /opt/WhoDat/pydat/extras/www/static/ Order allow,deny Allow from all diff --git a/docker/requirements.txt b/docker/requirements.txt deleted file mode 100644 index 6f31a30..0000000 --- a/docker/requirements.txt +++ /dev/null @@ -1,7 +0,0 @@ -pymongo -requests -unicodecsv -markdown -django<=1.11.12 -elasticsearch>=2.0.0,<3.0.0 -ply diff --git a/pydat/README.md b/pydat/README.md index 778f6a8..35015d4 100644 --- a/pydat/README.md +++ b/pydat/README.md @@ -1,29 +1,24 @@ -pyDat with ElasticSearch -================================== +# pyDat Advanced Search -When used with an ElasticSearch backend, pyDat exposes a new search interface -that allows for more customized queries to be made. +pyDat an advanced search interface that allows for more customized queries +to be made. -Intro to Advanced Search ------------------------------- +## Intro to Advanced Search +------- This syntax allows a user to search for generic terms across all entries or to search specific fields for data, crafting potentially complex queries to find data. Here's a simple, example search: -``` -gmail.com -``` + gmail.com Searching for just that phrase will instruct pyDat to return pretty much any entry that has gmail or com in it (which would be alot!). Instead, one could search for: -``` -"gmail.com" -``` + "gmail.com" By quoting the search phrase, pyDat will now search for that phrase in its entirety so any entry that has "gmail.com" will be returned. But since @@ -36,7 +31,7 @@ Okay, with the basics out of the way, let's get a bit more advanced, say we to find the whois entry for the domain gmail.com but don't want the clutter of domains that use a gmail email address. We could search for: -``` domainName:"gmail.com" ``` + domainName:"gmail.com" Instead of searching the entirety of a record, pyDat will now scope your search to only the domainName field. Again, quotes are used to instruct pyDat that @@ -47,62 +42,49 @@ definitely have .com. What you'll also notice, though, is that the 'score' value displayed by pyDat for those entries will be considerably lower than the 'score' for gmail.com. -Combining Queries ----------------------- +### Combining Queries Extending the above, you can combine search terms to make more advanced search queries. For example, if you're looking for any domain with 'foo' in it, which also has an email address (registrant or administrative contact) that contains 'bar' in it you could do the following: -``` -domainName:foo email:bar -``` + domainName:foo email:bar By default, multiple conditions are *and*'d together. But if you want to search for things using an *or* condition, you can use the keyword '**OR**'. As an example, if you want to search for an entry with 'foo' in the domain and either 'bar' *or* 'bah' in the email you can do the following: -``` -domainName:foo (email:bar OR email:bah) -``` + domainName:foo (email:bar OR email:bah) Since *and* conditions are given priority, the **OR** conditions must be put in parens and generally it's better to put **OR** conditions in parens for the sake of clarity. The '**AND**' keyword can be further used to increase clarity, but is unnecessary: -``` -domainName:foo AND (email:bar OR email:bah) -``` + domainName:foo AND (email:bar OR email:bah) -Negating Queries ---------------------- +### Negating Queries If a user wants to exclude certain paramters, it is possible by prepending a query with '**NOT**' to negate the query. -``` -email:"domains@google.com" AND NOT domainName:"google.com" -``` + email:"domains@google.com" AND NOT domainName:"google.com" The above example would find all domains that have an email address of 'domains@google.com' but would exclude the domain 'google.com'. Note that the **NOT** keyword has higher precedence than **AND** or **OR** so queries will be negated before they are combined. -Fuzzy Searching --------------------- +### Fuzzy Searching ElasticSearch's '*fuzzy*' searching capability allows you to find terms that are similar to your search term. This is exposed in the query syntax using the '**~**' character and works on specified fields (this feature will not work on generic searches). Here's an example: -``` -~domainName:foo -``` + ~domainName:foo The above query will do a search on the domainName field for the value foo, but will do a fuzzy search with fuzziness (or the Levenshtein edit distance if you @@ -112,65 +94,57 @@ manually, you can add '**0**', '**1**', or '**2**' to the '**~**' character. For example: -``` -~2domainName:google -``` + ~2domainName:google The above will do a fuzzy search on the domainName field using a fuzziness value of 2 and will return any whois records that have a domain name that is 2 edits away from '*google*'. -**Note: ElasticSearch limits fuzziness to 2 at the max, internally. Entering 3 +*Note*: ElasticSearch limits fuzziness to 2 at the max, internally. Entering 3 through 9 will not raise an error but will be the same as entering '2'. the AUTO option uses '0' for terms that are 1 character long, '1' for terms that are between 1 and 5 characters and '2' for terms that are longer than 5 characters. These are generally good values.** -Getting Particular ---------------------- +### Getting Particular The new query syntax supports regex and wildcard searches on specific fields using a special syntax. -**Note that fuzzy searching (as detailed above) is not supported for wildcard -and regex searches, nor would it really make any sense.** +*Note*: fuzzy searching (as detailed above) is not supported for wildcard +and regex searches, nor would it really make any sense. -### WildCard Searches +#### WildCard Searches WildCard searches are done using quoted strings that start with a '**w**' For example: -``` -w'fo?.com' -``` + w'fo?.com' Further, the wildcard syntax interprets two special characters, '**?**' and '\*'. The '**?**' symbol represents a single character, while the '\*' character represents any number of characters. So, the search specified above -would find foo.com but also any entry that is preceded by 'fo', following by -any single character and then followed by '.com', e.g., fop.com, fon.com, etc. +would find `foo.com` but also any entry that is preceded by '`fo`', following by +any single character and then followed by '.com', e.g., `fop.com`, `fon.com`, etc. -### Regex Searches +#### Regex Searches Similar to WildCard searches, the regex syntax allows for regex searches to be applied to specified fields using quoted strings that start with a '**r**'. For example: -``` -r'foo[0-9]+\.com' -``` + r'foo[0-9]+\.com' Further, the regex syntax should accept any special characters that ElasticSearch will accept. -**Note: Regex searches should be a last resort, as they can be computationally +*Note*: Regex searches should be a last resort, as they can be computationally expensive and tax a cluster unnecessarily. Consider using a wildcard search or -refining your search terms when possible.** +refining your search terms when possible. -Date Searches ------------------ +### Date Searches There are three date fields that can be searched (assuming there is data populated in the backend): @@ -181,52 +155,37 @@ populated in the backend): The syntax for date searches are as follows: -``` -<key>:YYYY-mm-dd -``` + :YYYY-mm-dd As an example to search for entries that have a created date of January 2nd 2003, you search search for: -``` -created:2003-01-02 -``` + created:2003-01-02 To search between a range of dates, you can do the following: -``` -<key>:YYYY-mm-dd:YYYY-mm-dd -``` + :YYYY-mm-dd:YYYY-mm-dd So to find all entries created between January 2nd 2003 and February 1st 2003, you'd do: -``` -created:2003-01-02:2003-02-01 -``` + created:2003-01-02:2003-02-01 Combining date searches is the same as combining other searches. For example you can do: -``` -created:2003-01-01 expires:2022-01-30:2023-01-20 -``` + created:2003-01-01 expires:2022-01-30:2023-01-20 This includes using parentheses and the '**OR**' keyword: -``` -created:2003-01-01 OR created:2004-01-02 -``` + created:2003-01-01 OR created:2004-01-02 While date searches can be useful, they are best used in conjunction with other queries such as: -``` -domainName:w'fo???.com' created:2014-01-02:2014-01-25 -``` + domainName:w'fo???.com' created:2014-01-02:2014-01-25 -Understanding Scoring ---------------------------- +## Understanding Scoring Scores returned by pyDat are the same scores returned by ElasticSearch. The important thing to understand about ElasticSearch scores is that they are @@ -241,16 +200,13 @@ considerably lower than that of the first result. Scores that match the same will have the same score. If, for example, you are searching for an email address: -``` -email:foo@gmail.com -``` + email:foo@gmail.com If the top results all have the same score, that means each of them matched your query equally. Results after that might drop of drastically indicating that only those top results might actually be relevant to your query. -Recognized Keys --------------------- +## Recognized Keys The following is a list of keys that are recognized for searching specific fields: @@ -290,47 +246,45 @@ fields: - **registrarName** - **whoisServer** - **administrativeContact_street** - -- shortcut for all 4 administrative street entries + -- shortcut for all 4 administrative street entries - **registrant_street** - -- shortcut for all 4 registrant street entries + -- shortcut for all 4 registrant street entries - **dn** - -- shortcut for domainName + -- shortcut for domainName - **email** - -- shortcut for both emails above + -- shortcut for both emails above - **name** - -- shortcut for both names above + -- shortcut for both names above - **organization** - -- shortcut for both organizations above + -- shortcut for both organizations above - **street** - -- shortcut for all 8 streets above + -- shortcut for all 8 streets above - **city** - -- shortcut for both cities above + -- shortcut for both cities above - **state** - -- shortcut for both states above + -- shortcut for both states above - **postalCode** - -- shortcut for both postal codes above + -- shortcut for both postal codes above - **country** - -- shortcut for both countries above + -- shortcut for both countries above - **telephone** - -- shortcut for both telephone numbers above + -- shortcut for both telephone numbers above - **telephoneExt** - -- shortcut for both telephone extensions above + -- shortcut for both telephone extensions above - **fax** - -- shortcut for both faxes above + -- shortcut for both faxes above - **faxExt** - -- shortcut for both fax extensions above + -- shortcut for both fax extensions above - **ns** - -- shortcut for nameServers + -- shortcut for nameServers - **registrar** - -- shortcut for registrarName + -- shortcut for registrarName - **email_local** - -- Searches only the local part of an email (everything before the '**@**' symbol) + -- Searches only the local part of an email (everything before the "**@**" symbol) - **email_domain** - -- Searches only the domain part of an email (everything after the '**@**' symbol) + -- Searches only the domain part of an email (everything after the '**@**' symbol) - -Caveats/Things to Consider ---------- +## Caveats/Things to Consider ### Case (In)Sensitivity @@ -341,13 +295,9 @@ regex or wildcard search is pointless as they will never match. This also applies to the commonly used character set *\[A-Z\]*. As examples, the following queries will never match: -``` -w'F?o.com' -``` + w'F?o.com' -``` -r'foo[A-Z]+.com' -``` + r'foo[A-Z]+.com' The above queries will never return a result as everything in the ElasticSearch backend is down-cased when it is processed. Keep this in mind when using regex @@ -370,6 +320,20 @@ part, this does not apply to searches for things that look like domain names (e.g., "google.com" -- and this is due to the way ElasticSearch recognizes the '**.**' character in domain names). +### NULL Queries + +As privacy concerns reduce the amount of visibile data, the abaility to +pare down data has become considerably more important, to aid to this a new +keyword/token has been added: `!!NULL!!`. The null token allows one to search +for fields that are not filled. For example: + +> + registrant_name: !!NULL!! + +The above query would return all records where the registrant_name was empty. +Note that this should be used along with other queries and is less useful +on its own + ### Shortcut Searches Most shortcut searches (using any of the fields above listed as shortcut for @@ -389,17 +353,12 @@ Further specifying a fuzzy search on a quoted string will not search the same way as a non-fuzzy search on a quoted string, nor will it return the same results as two fuzzy searches in the same field. For example: -``` -name:"john smith" -``` - -``` -~name:john ~name:smith -``` - -``` -~name:"john smith" -``` +> + name:"john smith" +> + ~name:john ~name:smith +> + ~name:"john smith" The above queries will all return different data, with the last one being the most generic and probably returning the most data. diff --git a/pydat/extras/www/static/css/jquery-ui-1.10.4.min.css b/pydat/extras/www/static/css/jquery-ui-1.10.4.min.css deleted file mode 100644 index 3c6d34c..0000000 --- a/pydat/extras/www/static/css/jquery-ui-1.10.4.min.css +++ /dev/null @@ -1,7 +0,0 @@ -/*! jQuery UI - v1.10.4 - 2014-04-02 -* http://jqueryui.com -* Includes: jquery.ui.core.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tabs.css, jquery.ui.tooltip.css, jquery.ui.theme.css -* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS%2CTahoma%2CVerdana%2CArial%2Csans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=gloss_wave&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=highlight_soft&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=glass&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=glass&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=highlight_soft&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=diagonals_thick&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=diagonals_thick&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=flat&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px -* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ - -.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin-top:2px;padding:.5em .5em .5em .7em;min-height:0}.ui-accordion .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-noicons{padding-left:.7em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-button{display:inline-block;position:relative;padding:0;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.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}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.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}.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}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.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}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:49%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.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}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-dialog{overflow:hidden;position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:20px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-menu{list-style:none;padding:2px;margin:0;display:block;outline:none}.ui-menu .ui-menu{margin-top:-3px;position:absolute}.ui-menu .ui-menu-item{margin:0;padding:0;width:100%;list-style-image:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}.ui-menu .ui-menu-divider{margin:5px -2px 5px -2px;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-menu-item a{text-decoration:none;display:block;padding:2px .4em;line-height:1.5;min-height:0;font-weight:normal}.ui-menu .ui-menu-item a.ui-state-focus,.ui-menu .ui-menu-item a.ui-state-active{font-weight:normal;margin:-1px}.ui-menu .ui-state-disabled{font-weight:normal;margin:.4em 0 .2em;line-height:1.5}.ui-menu .ui-state-disabled a{cursor:default}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item a{position:relative;padding-left:2em}.ui-menu .ui-icon{position:absolute;top:.2em;left:.2em}.ui-menu .ui-menu-icon{position:static;float:right}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url("images/animated-overlay.gif");height:100%;filter:alpha(opacity=25);opacity:0.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:none;color:inherit;padding:0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:22px}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:none;border-bottom:none;border-right:none}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px;-webkit-box-shadow:0 0 5px #aaa;box-shadow:0 0 5px #aaa}body .ui-tooltip{border-width:2px}.ui-widget{font-family:Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #ddd;background:#eee url("images/ui-bg_highlight-soft_100_eeeeee_1x100.png") 50% top repeat-x;color:#333}.ui-widget-content a{color:#333}.ui-widget-header{border:1px solid #e78f08;background:#f6a828 url("images/ui-bg_gloss-wave_35_f6a828_500x100.png") 50% 50% repeat-x;color:#fff;font-weight:bold}.ui-widget-header a{color:#fff}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #ccc;background:#f6f6f6 url("images/ui-bg_glass_100_f6f6f6_1x400.png") 50% 50% repeat-x;font-weight:bold;color:#1c94c4}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#1c94c4;text-decoration:none}.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 #fbcb09;background:#fdf5ce url("images/ui-bg_glass_100_fdf5ce_1x400.png") 50% 50% repeat-x;font-weight:bold;color:#c77405}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited{color:#c77405;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #fbd850;background:#fff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x;font-weight:bold;color:#eb8f00}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#eb8f00;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fed22f;background:#ffe45c url("images/ui-bg_highlight-soft_75_ffe45c_1x100.png") 50% top repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#b81900 url("images/ui-bg_diagonals-thick_18_b81900_40x40.png") 50% 50% repeat;color:#fff}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#fff}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#fff}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url("images/ui-icons_222222_256x240.png")}.ui-widget-header .ui-icon{background-image:url("images/ui-icons_ffffff_256x240.png")}.ui-state-default .ui-icon{background-image:url("images/ui-icons_ef8c08_256x240.png")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url("images/ui-icons_ef8c08_256x240.png")}.ui-state-active .ui-icon{background-image:url("images/ui-icons_ef8c08_256x240.png")}.ui-state-highlight .ui-icon{background-image:url("images/ui-icons_228ef1_256x240.png")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("images/ui-icons_ffd27a_256x240.png")}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:4px}.ui-widget-overlay{background:#666 url("images/ui-bg_diagonals-thick_20_666666_40x40.png") 50% 50% repeat;opacity:.5;filter:Alpha(Opacity=50)}.ui-widget-shadow{margin:-5px 0 0 -5px;padding:5px;background:#000 url("images/ui-bg_flat_10_000000_40x100.png") 50% 50% repeat-x;opacity:.2;filter:Alpha(Opacity=20);border-radius:5px} \ No newline at end of file diff --git a/pydat/pydat/static/css/jquery-ui-1.10.4.css b/pydat/extras/www/static/css/jquery-ui-1.12.1.css similarity index 66% rename from pydat/pydat/static/css/jquery-ui-1.10.4.css rename to pydat/extras/www/static/css/jquery-ui-1.12.1.css index 3f85daf..4db005d 100644 --- a/pydat/pydat/static/css/jquery-ui-1.10.4.css +++ b/pydat/extras/www/static/css/jquery-ui-1.12.1.css @@ -1,9 +1,13 @@ -/*! jQuery UI - v1.10.4 - 2015-04-06 +/*! jQuery UI - v1.12.1 - 2017-06-14 * http://jqueryui.com -* Includes: jquery.ui.core.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tabs.css, jquery.ui.tooltip.css, jquery.ui.theme.css -* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=0.9em&cornerRadius=4px&bgColorHeader=%23888888&bgTextureHeader=highlight_hard&bgImgOpacityHeader=15&borderColorHeader=%23404040&fcHeader=%23ffffff&iconColorHeader=%23cccccc&bgColorContent=%234D4D4D&bgTextureContent=gloss_wave&bgImgOpacityContent=16&borderColorContent=%23404040&fcContent=%23eeeeee&iconColorContent=%23bbbbbb&bgColorDefault=%23adadad&bgTextureDefault=highlight_soft&bgImgOpacityDefault=35&borderColorDefault=%23cccccc&fcDefault=%23333333&iconColorDefault=%23666666&bgColorHover=%23dddddd&bgTextureHover=highlight_soft&bgImgOpacityHover=60&borderColorHover=%23dddddd&fcHover=%23000000&iconColorHover=%23c98000&bgColorActive=%23121212&bgTextureActive=inset_soft&bgImgOpacityActive=15&borderColorActive=%23000000&fcActive=%23ffffff&iconColorActive=%23f29a00&bgColorHighlight=%23555555&bgTextureHighlight=highlight_hard&bgImgOpacityHighlight=55&borderColorHighlight=%23404040&fcHighlight=%23cccccc&iconColorHighlight=%23aaaaaa&bgColorError=%23fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=%23cd0a0a&fcError=%23cd0a0a&iconColorError=%23cd0a0a&bgColorOverlay=%23aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=%23aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px&tr%26ffDefault=Helvetica%2CArial%2Csans-serif -* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */ +* Includes: draggable.css, core.css, resizable.css, selectable.css, sortable.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, progressbar.css, selectmenu.css, slider.css, spinner.css, tabs.css, tooltip.css, theme.css +* To view and modify this theme, visit http://jqueryui.com/themeroller/?scope=&folderName=custom-theme&tr%26ffDefault=Helvetica%2CArial%2Csans-serif&bgImgOpacityError=95&bgImgOpacityHighlight=55&bgImgOpacityActive=15&bgImgOpacityHover=60&bgImgOpacityDefault=35&bgImgOpacityContent=16&bgImgOpacityHeader=15&cornerRadiusShadow=8px&offsetLeftShadow=-8px&offsetTopShadow=-8px&thicknessShadow=8px&opacityShadow=30&bgImgOpacityShadow=0&bgTextureShadow=flat&bgColorShadow=%23aaaaaa&opacityOverlay=30&bgImgOpacityOverlay=0&bgTextureOverlay=flat&bgColorOverlay=%23aaaaaa&iconColorError=%23cd0a0a&fcError=%23cd0a0a&borderColorError=%23cd0a0a&bgTextureError=glass&bgColorError=%23fef1ec&iconColorHighlight=%23aaaaaa&fcHighlight=%23cccccc&borderColorHighlight=%23404040&bgTextureHighlight=highlight_hard&bgColorHighlight=%23555555&iconColorActive=%23f29a00&fcActive=%23ffffff&borderColorActive=%23000000&bgTextureActive=inset_soft&bgColorActive=%23121212&iconColorHover=%23c98000&fcHover=%23000000&borderColorHover=%23dddddd&bgTextureHover=highlight_soft&bgColorHover=%23dddddd&iconColorDefault=%23666666&fcDefault=%23333333&borderColorDefault=%23cccccc&bgTextureDefault=highlight_soft&bgColorDefault=%23adadad&iconColorContent=%23bbbbbb&fcContent=%23eeeeee&borderColorContent=%23404040&bgTextureContent=gloss_wave&bgColorContent=%234D4D4D&iconColorHeader=%23cccccc&fcHeader=%23ffffff&borderColorHeader=%23404040&bgTextureHeader=highlight_hard&bgColorHeader=%23888888&cornerRadius=4px&fwDefault=normal&fsDefault=0.9em&ffDefault=Verdana%2CArial%2Csans-serif +* Copyright jQuery Foundation and other contributors; Licensed MIT */ +.ui-draggable-handle { + -ms-touch-action: none; + touch-action: none; +} /* Layout helpers ----------------------------------*/ .ui-helper-hidden { @@ -38,9 +42,6 @@ .ui-helper-clearfix:after { clear: both; } -.ui-helper-clearfix { - min-height: 0; /* support: IE7 */ -} .ui-helper-zfix { width: 100%; height: 100%; @@ -48,7 +49,7 @@ left: 0; position: absolute; opacity: 0; - filter:Alpha(Opacity=0); + filter:Alpha(Opacity=0); /* support: IE8 */ } .ui-front { @@ -60,20 +61,27 @@ ----------------------------------*/ .ui-state-disabled { cursor: default !important; + pointer-events: none; } /* Icons ----------------------------------*/ - -/* states and images */ .ui-icon { - display: block; + display: inline-block; + vertical-align: middle; + margin-top: -.25em; + position: relative; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } +.ui-widget-icon-block { + left: 50%; + margin-left: -8px; + display: block; +} /* Misc visuals ----------------------------------*/ @@ -93,6 +101,8 @@ position: absolute; font-size: 0.1px; display: block; + -ms-touch-action: none; + touch-action: none; } .ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { @@ -154,33 +164,26 @@ right: -5px; top: -5px; } +.ui-selectable { + -ms-touch-action: none; + touch-action: none; +} .ui-selectable-helper { position: absolute; z-index: 100; border: 1px dotted black; } +.ui-sortable-handle { + -ms-touch-action: none; + touch-action: none; +} .ui-accordion .ui-accordion-header { display: block; cursor: pointer; position: relative; - margin-top: 2px; + margin: 2px 0 0 0; padding: .5em .5em .5em .7em; - min-height: 0; /* support: IE7 */ -} -.ui-accordion .ui-accordion-icons { - padding-left: 2.2em; -} -.ui-accordion .ui-accordion-noicons { - padding-left: .7em; -} -.ui-accordion .ui-accordion-icons .ui-accordion-icons { - padding-left: 2.2em; -} -.ui-accordion .ui-accordion-header .ui-accordion-header-icon { - position: absolute; - left: .5em; - top: 50%; - margin-top: -8px; + font-size: 100%; } .ui-accordion .ui-accordion-content { padding: 1em 2.2em; @@ -193,17 +196,78 @@ left: 0; cursor: default; } +.ui-menu { + list-style: none; + padding: 0; + margin: 0; + display: block; + outline: 0; +} +.ui-menu .ui-menu { + position: absolute; +} +.ui-menu .ui-menu-item { + margin: 0; + cursor: pointer; + /* support: IE10, see #8844 */ + list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"); +} +.ui-menu .ui-menu-item-wrapper { + position: relative; + padding: 3px 1em 3px .4em; +} +.ui-menu .ui-menu-divider { + margin: 5px 0; + height: 0; + font-size: 0; + line-height: 0; + border-width: 1px 0 0 0; +} +.ui-menu .ui-state-focus, +.ui-menu .ui-state-active { + margin: -1px; +} + +/* icon support */ +.ui-menu-icons { + position: relative; +} +.ui-menu-icons .ui-menu-item-wrapper { + padding-left: 2em; +} + +/* left-aligned */ +.ui-menu .ui-icon { + position: absolute; + top: 0; + bottom: 0; + left: .2em; + margin: auto 0; +} + +/* right-aligned */ +.ui-menu .ui-menu-icon { + left: auto; + right: 0; +} .ui-button { + padding: .4em 1em; display: inline-block; position: relative; - padding: 0; line-height: normal; margin-right: .1em; cursor: pointer; vertical-align: middle; text-align: center; - overflow: visible; /* removes extra width in IE */ + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + + /* Support: IE <= 11 */ + overflow: visible; } + .ui-button, .ui-button:link, .ui-button:visited, @@ -211,91 +275,129 @@ .ui-button:active { text-decoration: none; } + /* to make room for the icon, a width needs to be set here */ .ui-button-icon-only { - width: 2.2em; -} -/* button elements seem to need a little more width */ -button.ui-button-icon-only { - width: 2.4em; + width: 2em; + box-sizing: border-box; + text-indent: -9999px; + white-space: nowrap; } -.ui-button-icons-only { - width: 3.4em; + +/* no icon support for input elements */ +input.ui-button.ui-button-icon-only { + text-indent: 0; } -button.ui-button-icons-only { - width: 3.7em; + +/* button icon element(s) */ +.ui-button-icon-only .ui-icon { + position: absolute; + top: 50%; + left: 50%; + margin-top: -8px; + margin-left: -8px; } -/* button text element */ -.ui-button .ui-button-text { - display: block; - line-height: normal; +.ui-button.ui-icon-notext .ui-icon { + padding: 0; + width: 2.1em; + height: 2.1em; + text-indent: -9999px; + white-space: nowrap; + } -.ui-button-text-only .ui-button-text { + +input.ui-button.ui-icon-notext .ui-icon { + width: auto; + height: auto; + text-indent: 0; + white-space: normal; padding: .4em 1em; } -.ui-button-icon-only .ui-button-text, -.ui-button-icons-only .ui-button-text { - padding: .4em; - text-indent: -9999999px; + +/* workarounds */ +/* Support: Firefox 5 - 40 */ +input.ui-button::-moz-focus-inner, +button.ui-button::-moz-focus-inner { + border: 0; + padding: 0; } -.ui-button-text-icon-primary .ui-button-text, -.ui-button-text-icons .ui-button-text { - padding: .4em 1em .4em 2.1em; +.ui-controlgroup { + vertical-align: middle; + display: inline-block; } -.ui-button-text-icon-secondary .ui-button-text, -.ui-button-text-icons .ui-button-text { - padding: .4em 2.1em .4em 1em; +.ui-controlgroup > .ui-controlgroup-item { + float: left; + margin-left: 0; + margin-right: 0; } -.ui-button-text-icons .ui-button-text { - padding-left: 2.1em; - padding-right: 2.1em; +.ui-controlgroup > .ui-controlgroup-item:focus, +.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus { + z-index: 9999; } -/* no icon support for input elements, provide padding by default */ -input.ui-button { +.ui-controlgroup-vertical > .ui-controlgroup-item { + display: block; + float: none; + width: 100%; + margin-top: 0; + margin-bottom: 0; + text-align: left; +} +.ui-controlgroup-vertical .ui-controlgroup-item { + box-sizing: border-box; +} +.ui-controlgroup .ui-controlgroup-label { padding: .4em 1em; } - -/* button icon element(s) */ -.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; +.ui-controlgroup .ui-controlgroup-label span { + font-size: 80%; } -.ui-button-icon-only .ui-icon { - left: 50%; - margin-left: -8px; +.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item { + border-left: none; } -.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; +.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item { + border-top: none; +} +.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content { + border-right: none; } -.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; +.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content { + border-bottom: none; } -/* button sets */ -.ui-buttonset { - margin-right: 7px; +/* Spinner specific style fixes */ +.ui-controlgroup-vertical .ui-spinner-input { + + /* Support: IE8 only, Android < 4.4 only */ + width: 75%; + width: calc( 100% - 2.4em ); } -.ui-buttonset .ui-button { - margin-left: 0; - margin-right: -.3em; +.ui-controlgroup-vertical .ui-spinner .ui-spinner-up { + border-top-style: solid; } -/* workarounds */ -/* reset extra padding in Firefox, see h5bp.com/l */ -input.ui-button::-moz-focus-inner, -button.ui-button::-moz-focus-inner { - border: 0; - padding: 0; +.ui-checkboxradio-label .ui-icon-background { + box-shadow: inset 1px 1px 1px #ccc; + border-radius: .12em; + border: none; +} +.ui-checkboxradio-radio-label .ui-icon-background { + width: 16px; + height: 16px; + border-radius: 1em; + overflow: visible; + border: none; +} +.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon, +.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon { + background-image: none; + width: 8px; + height: 8px; + border-width: 4px; + border-style: solid; +} +.ui-checkboxradio-disabled { + pointer-events: none; } .ui-datepicker { width: 17em; @@ -349,7 +451,7 @@ button.ui-button::-moz-focus-inner { } .ui-datepicker select.ui-datepicker-month, .ui-datepicker select.ui-datepicker-year { - width: 49%; + width: 45%; } .ui-datepicker table { width: 100%; @@ -462,8 +564,17 @@ button.ui-button::-moz-focus-inner { border-right-width: 0; border-left-width: 1px; } -.ui-dialog { + +/* Icons */ +.ui-datepicker .ui-icon { + display: block; + text-indent: -99999px; overflow: hidden; + background-repeat: no-repeat; + left: .5em; + top: .3em; +} +.ui-dialog { position: absolute; top: 0; left: 0; @@ -512,84 +623,47 @@ button.ui-button::-moz-focus-inner { margin: .5em .4em .5em 0; cursor: pointer; } -.ui-dialog .ui-resizable-se { - width: 12px; - height: 12px; - right: -5px; - bottom: -5px; - background-position: 16px 16px; -} -.ui-draggable .ui-dialog-titlebar { - cursor: move; -} -.ui-menu { - list-style: none; - padding: 2px; - margin: 0; - display: block; - outline: none; -} -.ui-menu .ui-menu { - margin-top: -3px; - position: absolute; -} -.ui-menu .ui-menu-item { - margin: 0; - padding: 0; - width: 100%; - /* support: IE10, see #8844 */ - list-style-image: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7); +.ui-dialog .ui-resizable-n { + height: 2px; + top: 0; } -.ui-menu .ui-menu-divider { - margin: 5px -2px 5px -2px; - height: 0; - font-size: 0; - line-height: 0; - border-width: 1px 0 0 0; +.ui-dialog .ui-resizable-e { + width: 2px; + right: 0; } -.ui-menu .ui-menu-item a { - text-decoration: none; - display: block; - padding: 2px .4em; - line-height: 1.5; - min-height: 0; /* support: IE7 */ - font-weight: normal; +.ui-dialog .ui-resizable-s { + height: 2px; + bottom: 0; } -.ui-menu .ui-menu-item a.ui-state-focus, -.ui-menu .ui-menu-item a.ui-state-active { - font-weight: normal; - margin: -1px; +.ui-dialog .ui-resizable-w { + width: 2px; + left: 0; } - -.ui-menu .ui-state-disabled { - font-weight: normal; - margin: .4em 0 .2em; - line-height: 1.5; +.ui-dialog .ui-resizable-se, +.ui-dialog .ui-resizable-sw, +.ui-dialog .ui-resizable-ne, +.ui-dialog .ui-resizable-nw { + width: 7px; + height: 7px; } -.ui-menu .ui-state-disabled a { - cursor: default; +.ui-dialog .ui-resizable-se { + right: 0; + bottom: 0; } - -/* icon support */ -.ui-menu-icons { - position: relative; +.ui-dialog .ui-resizable-sw { + left: 0; + bottom: 0; } -.ui-menu-icons .ui-menu-item a { - position: relative; - padding-left: 2em; +.ui-dialog .ui-resizable-ne { + right: 0; + top: 0; } - -/* left-aligned */ -.ui-menu .ui-icon { - position: absolute; - top: .2em; - left: .2em; +.ui-dialog .ui-resizable-nw { + left: 0; + top: 0; } - -/* right-aligned */ -.ui-menu .ui-menu-icon { - position: static; - float: right; +.ui-draggable .ui-dialog-titlebar { + cursor: move; } .ui-progressbar { height: 2em; @@ -601,14 +675,54 @@ button.ui-button::-moz-focus-inner { height: 100%; } .ui-progressbar .ui-progressbar-overlay { - background: url("../images/animated-overlay.gif"); + background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw=="); height: 100%; - filter: alpha(opacity=25); + filter: alpha(opacity=25); /* support: IE8 */ opacity: 0.25; } .ui-progressbar-indeterminate .ui-progressbar-value { background-image: none; } +.ui-selectmenu-menu { + padding: 0; + margin: 0; + position: absolute; + top: 0; + left: 0; + display: none; +} +.ui-selectmenu-menu .ui-menu { + overflow: auto; + overflow-x: hidden; + padding-bottom: 1px; +} +.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup { + font-size: 1em; + font-weight: bold; + line-height: 1.5; + padding: 2px 0.4em; + margin: 0.5em 0 0 0; + height: auto; + border: 0; +} +.ui-selectmenu-open { + display: block; +} +.ui-selectmenu-text { + display: block; + margin-right: 20px; + overflow: hidden; + text-overflow: ellipsis; +} +.ui-selectmenu-button.ui-button { + text-align: left; + white-space: nowrap; + width: 14em; +} +.ui-selectmenu-icon.ui-icon { + float: right; + margin-top: 0; +} .ui-slider { position: relative; text-align: left; @@ -619,6 +733,8 @@ button.ui-button::-moz-focus-inner { width: 1.2em; height: 1.2em; cursor: default; + -ms-touch-action: none; + touch-action: none; } .ui-slider .ui-slider-range { position: absolute; @@ -629,7 +745,7 @@ button.ui-button::-moz-focus-inner { background-position: 0 0; } -/* For IE8 - See #6727 */ +/* support: IE8 - See #6727 */ .ui-slider.ui-state-disabled .ui-slider-handle, .ui-slider.ui-state-disabled .ui-slider-range { filter: inherit; @@ -683,14 +799,14 @@ button.ui-button::-moz-focus-inner { border: none; background: none; color: inherit; - padding: 0; + padding: .222em 0; margin: .2em 0; vertical-align: middle; margin-left: .4em; - margin-right: 22px; + margin-right: 2em; } .ui-spinner-button { - width: 16px; + width: 1.6em; height: 50%; font-size: .5em; padding: 0; @@ -704,16 +820,9 @@ button.ui-button::-moz-focus-inner { } /* more specificity required here to override default borders */ .ui-spinner a.ui-spinner-button { - border-top: none; - border-bottom: none; - border-right: none; -} -/* vertically center icon */ -.ui-spinner .ui-icon { - position: absolute; - margin-top: -8px; - top: 50%; - left: 0; + border-top-style: none; + border-bottom-style: none; + border-right-style: none; } .ui-spinner-up { top: 0; @@ -721,12 +830,6 @@ button.ui-button::-moz-focus-inner { .ui-spinner-down { bottom: 0; } - -/* TR overrides */ -.ui-spinner .ui-icon-triangle-1-s { - /* need to fix icons sprite */ - background-position: -65px -16px; -} .ui-tabs { position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ padding: .2em; @@ -773,8 +876,6 @@ button.ui-button::-moz-focus-inner { position: absolute; z-index: 9999; max-width: 300px; - -webkit-box-shadow: 0 0 5px #aaa; - box-shadow: 0 0 5px #aaa; } body .ui-tooltip { border-width: 2px; @@ -796,9 +897,12 @@ body .ui-tooltip { font-family: Verdana,Arial,sans-serif; font-size: 1em; } +.ui-widget.ui-widget-content { + border: 1px solid #cccccc; +} .ui-widget-content { border: 1px solid #404040; - background: #4D4D4D url("../images/ui-bg_gloss-wave_16_4D4D4D_500x100.png") 50% top repeat-x; + background: #4D4D4D url("/static/images/ui-bg_gloss-wave_16_4D4D4D_500x100.png") 50% top repeat-x; color: #eeeeee; } .ui-widget-content a { @@ -806,7 +910,7 @@ body .ui-tooltip { } .ui-widget-header { border: 1px solid #404040; - background: #888888 url("../images/ui-bg_highlight-hard_15_888888_1x100.png") 50% 50% repeat-x; + background: #888888 url("/static/images/ui-bg_highlight-hard_15_888888_1x100.png") 50% 50% repeat-x; color: #ffffff; font-weight: bold; } @@ -818,15 +922,25 @@ body .ui-tooltip { ----------------------------------*/ .ui-state-default, .ui-widget-content .ui-state-default, -.ui-widget-header .ui-state-default { +.ui-widget-header .ui-state-default, +.ui-button, + +/* We use html here because we need a greater specificity to make sure disabled +works properly when clicked or hovered */ +html .ui-button.ui-state-disabled:hover, +html .ui-button.ui-state-disabled:active { border: 1px solid #cccccc; - background: #adadad url("../images/ui-bg_highlight-soft_35_adadad_1x100.png") 50% 50% repeat-x; + background: #adadad url("/static/images/ui-bg_highlight-soft_35_adadad_1x100.png") 50% 50% repeat-x; font-weight: normal; color: #333333; } .ui-state-default a, .ui-state-default a:link, -.ui-state-default a:visited { +.ui-state-default a:visited, +a.ui-button, +a:link.ui-button, +a:visited.ui-button, +.ui-button { color: #333333; text-decoration: none; } @@ -835,9 +949,11 @@ body .ui-tooltip { .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, -.ui-widget-header .ui-state-focus { +.ui-widget-header .ui-state-focus, +.ui-button:hover, +.ui-button:focus { border: 1px solid #dddddd; - background: #dddddd url("../images/ui-bg_highlight-soft_60_dddddd_1x100.png") 50% 50% repeat-x; + background: #dddddd url("/static/images/ui-bg_highlight-soft_60_dddddd_1x100.png") 50% 50% repeat-x; font-weight: normal; color: #000000; } @@ -848,18 +964,32 @@ body .ui-tooltip { .ui-state-focus a, .ui-state-focus a:hover, .ui-state-focus a:link, -.ui-state-focus a:visited { +.ui-state-focus a:visited, +a.ui-button:hover, +a.ui-button:focus { color: #000000; text-decoration: none; } + +.ui-visual-focus { + box-shadow: 0 0 3px 1px rgb(94, 158, 214); +} .ui-state-active, .ui-widget-content .ui-state-active, -.ui-widget-header .ui-state-active { +.ui-widget-header .ui-state-active, +a.ui-button:active, +.ui-button:active, +.ui-button.ui-state-active:hover { border: 1px solid #000000; - background: #121212 url("../images/ui-bg_inset-soft_15_121212_1x100.png") 50% 50% repeat-x; + background: #121212 url("/static/images/ui-bg_inset-soft_15_121212_1x100.png") 50% 50% repeat-x; font-weight: normal; color: #ffffff; } +.ui-icon-background, +.ui-state-active .ui-icon-background { + border: #000000; + background-color: #ffffff; +} .ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { @@ -873,9 +1003,13 @@ body .ui-tooltip { .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight { border: 1px solid #404040; - background: #555555 url("../images/ui-bg_highlight-hard_55_555555_1x100.png") 50% top repeat-x; + background: #555555 url("/static/images/ui-bg_highlight-hard_55_555555_1x100.png") 50% top repeat-x; color: #cccccc; } +.ui-state-checked { + border: 1px solid #404040; + background: #555555; +} .ui-state-highlight a, .ui-widget-content .ui-state-highlight a, .ui-widget-header .ui-state-highlight a { @@ -885,7 +1019,7 @@ body .ui-tooltip { .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; + background: #fef1ec url("/static/images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x; color: #cd0a0a; } .ui-state-error a, @@ -907,18 +1041,18 @@ body .ui-tooltip { .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; - filter:Alpha(Opacity=70); + filter:Alpha(Opacity=70); /* support: IE8 */ font-weight: normal; } .ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; - filter:Alpha(Opacity=35); + filter:Alpha(Opacity=35); /* support: IE8 */ background-image: none; } .ui-state-disabled .ui-icon { - filter:Alpha(Opacity=35); /* For IE8 - See #6059 */ + filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */ } /* Icons @@ -931,46 +1065,50 @@ body .ui-tooltip { } .ui-icon, .ui-widget-content .ui-icon { - background-image: url("../images/ui-icons_bbbbbb_256x240.png"); + background-image: url("/static/images/ui-icons_bbbbbb_256x240.png"); } .ui-widget-header .ui-icon { - background-image: url("../images/ui-icons_cccccc_256x240.png"); -} -.ui-state-default .ui-icon { - background-image: url("../images/ui-icons_666666_256x240.png"); + background-image: url("/static/images/ui-icons_cccccc_256x240.png"); } .ui-state-hover .ui-icon, -.ui-state-focus .ui-icon { - background-image: url("../images/ui-icons_c98000_256x240.png"); +.ui-state-focus .ui-icon, +.ui-button:hover .ui-icon, +.ui-button:focus .ui-icon { + background-image: url("/static/images/ui-icons_c98000_256x240.png"); } -.ui-state-active .ui-icon { - background-image: url("../images/ui-icons_f29a00_256x240.png"); +.ui-state-active .ui-icon, +.ui-button:active .ui-icon { + background-image: url("/static/images/ui-icons_f29a00_256x240.png"); } -.ui-state-highlight .ui-icon { - background-image: url("../images/ui-icons_aaaaaa_256x240.png"); +.ui-state-highlight .ui-icon, +.ui-button .ui-state-highlight.ui-icon { + background-image: url("/static/images/ui-icons_aaaaaa_256x240.png"); } .ui-state-error .ui-icon, .ui-state-error-text .ui-icon { - background-image: url("../images/ui-icons_cd0a0a_256x240.png"); + background-image: url("/static/images/ui-icons_cd0a0a_256x240.png"); +} +.ui-button .ui-icon { + background-image: url("/static/images/ui-icons_666666_256x240.png"); } /* positioning */ .ui-icon-blank { background-position: 16px 16px; } -.ui-icon-carat-1-n { background-position: 0 0; } -.ui-icon-carat-1-ne { background-position: -16px 0; } -.ui-icon-carat-1-e { background-position: -32px 0; } -.ui-icon-carat-1-se { background-position: -48px 0; } -.ui-icon-carat-1-s { background-position: -64px 0; } -.ui-icon-carat-1-sw { background-position: -80px 0; } -.ui-icon-carat-1-w { background-position: -96px 0; } -.ui-icon-carat-1-nw { background-position: -112px 0; } -.ui-icon-carat-2-n-s { background-position: -128px 0; } -.ui-icon-carat-2-e-w { background-position: -144px 0; } +.ui-icon-caret-1-n { background-position: 0 0; } +.ui-icon-caret-1-ne { background-position: -16px 0; } +.ui-icon-caret-1-e { background-position: -32px 0; } +.ui-icon-caret-1-se { background-position: -48px 0; } +.ui-icon-caret-1-s { background-position: -65px 0; } +.ui-icon-caret-1-sw { background-position: -80px 0; } +.ui-icon-caret-1-w { background-position: -96px 0; } +.ui-icon-caret-1-nw { background-position: -112px 0; } +.ui-icon-caret-2-n-s { background-position: -128px 0; } +.ui-icon-caret-2-e-w { background-position: -144px 0; } .ui-icon-triangle-1-n { background-position: 0 -16px; } .ui-icon-triangle-1-ne { background-position: -16px -16px; } .ui-icon-triangle-1-e { background-position: -32px -16px; } .ui-icon-triangle-1-se { background-position: -48px -16px; } -.ui-icon-triangle-1-s { background-position: -64px -16px; } +.ui-icon-triangle-1-s { background-position: -65px -16px; } .ui-icon-triangle-1-sw { background-position: -80px -16px; } .ui-icon-triangle-1-w { background-position: -96px -16px; } .ui-icon-triangle-1-nw { background-position: -112px -16px; } @@ -980,7 +1118,7 @@ body .ui-tooltip { .ui-icon-arrow-1-ne { background-position: -16px -32px; } .ui-icon-arrow-1-e { background-position: -32px -32px; } .ui-icon-arrow-1-se { background-position: -48px -32px; } -.ui-icon-arrow-1-s { background-position: -64px -32px; } +.ui-icon-arrow-1-s { background-position: -65px -32px; } .ui-icon-arrow-1-sw { background-position: -80px -32px; } .ui-icon-arrow-1-w { background-position: -96px -32px; } .ui-icon-arrow-1-nw { background-position: -112px -32px; } @@ -992,7 +1130,7 @@ body .ui-tooltip { .ui-icon-arrowstop-1-e { background-position: -208px -32px; } .ui-icon-arrowstop-1-s { background-position: -224px -32px; } .ui-icon-arrowstop-1-w { background-position: -240px -32px; } -.ui-icon-arrowthick-1-n { background-position: 0 -48px; } +.ui-icon-arrowthick-1-n { background-position: 1px -48px; } .ui-icon-arrowthick-1-ne { background-position: -16px -48px; } .ui-icon-arrowthick-1-e { background-position: -32px -48px; } .ui-icon-arrowthick-1-se { background-position: -48px -48px; } @@ -1164,15 +1302,11 @@ body .ui-tooltip { /* Overlays */ .ui-widget-overlay { - background: #aaaaaa url("../images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x; + background: #aaaaaa; opacity: .3; - filter: Alpha(Opacity=30); + filter: Alpha(Opacity=30); /* support: IE8 */ } .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: .3; - filter: Alpha(Opacity=30); - border-radius: 8px; + -webkit-box-shadow: -8px -8px 8px #aaaaaa; + box-shadow: -8px -8px 8px #aaaaaa; } diff --git a/pydat/extras/www/static/css/pydat.css b/pydat/extras/www/static/css/pydat.css index d3fb9aa..c2ebd3d 100644 --- a/pydat/extras/www/static/css/pydat.css +++ b/pydat/extras/www/static/css/pydat.css @@ -77,12 +77,19 @@ html, body { #search{ float:left; - width: 50%; + width: 75%; +} + +.adv_table1{ + width: 100%; +} + +.adv_table1 input[type="text"] { + width: 95%; } #stats { float:right; - width: 50%; } #stats_table{ @@ -138,7 +145,7 @@ html, body { .tab_item { display: table-cell; - width: 110px; + width: 150px; } .b_right { @@ -243,6 +250,10 @@ tr td.oldVersion { background-color: #fece2f !important; } +#page #dnsdata { + word-break: break-all; + word-break: break-word; +} /***pdns.html***/ #noresults{ @@ -256,3 +267,7 @@ tr td.oldVersion { #pdns .dnsres a { color: black; } + +#pdns_fields { + width: 100%; +} diff --git a/pydat/extras/www/static/images/ui-bg_diagonals-medium_20_d34d17_40x40.png b/pydat/extras/www/static/images/ui-bg_diagonals-medium_20_d34d17_40x40.png deleted file mode 100644 index c2339ed..0000000 Binary files a/pydat/extras/www/static/images/ui-bg_diagonals-medium_20_d34d17_40x40.png and /dev/null differ diff --git a/pydat/extras/www/static/images/ui-bg_diagonals-thick_18_b81900_40x40.png b/pydat/extras/www/static/images/ui-bg_diagonals-thick_18_b81900_40x40.png deleted file mode 100644 index 4e691de..0000000 Binary files a/pydat/extras/www/static/images/ui-bg_diagonals-thick_18_b81900_40x40.png and /dev/null differ diff --git a/pydat/extras/www/static/images/ui-bg_diagonals-thick_20_666666_40x40.png b/pydat/extras/www/static/images/ui-bg_diagonals-thick_20_666666_40x40.png deleted file mode 100644 index 7bc8a92..0000000 Binary files a/pydat/extras/www/static/images/ui-bg_diagonals-thick_20_666666_40x40.png and /dev/null differ diff --git a/pydat/extras/www/static/images/ui-bg_flat_10_000000_40x100.png b/pydat/extras/www/static/images/ui-bg_flat_10_000000_40x100.png deleted file mode 100644 index c5d10e6..0000000 Binary files a/pydat/extras/www/static/images/ui-bg_flat_10_000000_40x100.png and /dev/null differ diff --git a/pydat/extras/www/static/images/ui-bg_flat_30_cccccc_40x100.png b/pydat/extras/www/static/images/ui-bg_flat_30_cccccc_40x100.png deleted file mode 100644 index 629fa32..0000000 Binary files a/pydat/extras/www/static/images/ui-bg_flat_30_cccccc_40x100.png and /dev/null differ diff --git a/pydat/extras/www/static/images/ui-bg_flat_50_5c5c5c_40x100.png b/pydat/extras/www/static/images/ui-bg_flat_50_5c5c5c_40x100.png deleted file mode 100644 index e8f8af7..0000000 Binary files a/pydat/extras/www/static/images/ui-bg_flat_50_5c5c5c_40x100.png and /dev/null differ diff --git a/pydat/extras/www/static/images/ui-bg_glass_100_f6f6f6_1x400.png b/pydat/extras/www/static/images/ui-bg_glass_100_f6f6f6_1x400.png deleted file mode 100644 index ae8f555..0000000 Binary files a/pydat/extras/www/static/images/ui-bg_glass_100_f6f6f6_1x400.png and /dev/null differ diff --git a/pydat/extras/www/static/images/ui-bg_glass_100_fdf5ce_1x400.png b/pydat/extras/www/static/images/ui-bg_glass_100_fdf5ce_1x400.png deleted file mode 100644 index c2c5706..0000000 Binary files a/pydat/extras/www/static/images/ui-bg_glass_100_fdf5ce_1x400.png and /dev/null differ diff --git a/pydat/extras/www/static/images/ui-bg_glass_65_ffffff_1x400.png b/pydat/extras/www/static/images/ui-bg_glass_65_ffffff_1x400.png deleted file mode 100644 index b559b14..0000000 Binary files a/pydat/extras/www/static/images/ui-bg_glass_65_ffffff_1x400.png and /dev/null differ diff --git a/pydat/extras/www/static/images/ui-bg_glass_95_fef1ec_1x400.png b/pydat/extras/www/static/images/ui-bg_glass_95_fef1ec_1x400.png index 2f9b0d0..21345b4 100644 Binary files a/pydat/extras/www/static/images/ui-bg_glass_95_fef1ec_1x400.png and b/pydat/extras/www/static/images/ui-bg_glass_95_fef1ec_1x400.png differ diff --git a/pydat/extras/www/static/images/ui-bg_gloss-wave_16_4D4D4D_500x100.png b/pydat/extras/www/static/images/ui-bg_gloss-wave_16_4D4D4D_500x100.png index 17a2912..d0c1bf8 100644 Binary files a/pydat/extras/www/static/images/ui-bg_gloss-wave_16_4D4D4D_500x100.png and b/pydat/extras/www/static/images/ui-bg_gloss-wave_16_4D4D4D_500x100.png differ diff --git a/pydat/extras/www/static/images/ui-bg_gloss-wave_35_f6a828_500x100.png b/pydat/extras/www/static/images/ui-bg_gloss-wave_35_f6a828_500x100.png deleted file mode 100644 index f8b3d68..0000000 Binary files a/pydat/extras/www/static/images/ui-bg_gloss-wave_35_f6a828_500x100.png and /dev/null differ diff --git a/pydat/extras/www/static/images/ui-bg_gloss-wave_45_817865_500x100.png b/pydat/extras/www/static/images/ui-bg_gloss-wave_45_817865_500x100.png deleted file mode 100644 index 6d406b6..0000000 Binary files a/pydat/extras/www/static/images/ui-bg_gloss-wave_45_817865_500x100.png and /dev/null differ diff --git a/pydat/extras/www/static/images/ui-bg_gloss-wave_60_fece2f_500x100.png b/pydat/extras/www/static/images/ui-bg_gloss-wave_60_fece2f_500x100.png deleted file mode 100644 index c1573d9..0000000 Binary files a/pydat/extras/www/static/images/ui-bg_gloss-wave_60_fece2f_500x100.png and /dev/null differ diff --git a/pydat/extras/www/static/images/ui-bg_gloss-wave_70_ffdd57_500x100.png b/pydat/extras/www/static/images/ui-bg_gloss-wave_70_ffdd57_500x100.png deleted file mode 100644 index bbb2fc8..0000000 Binary files a/pydat/extras/www/static/images/ui-bg_gloss-wave_70_ffdd57_500x100.png and /dev/null differ diff --git a/pydat/extras/www/static/images/ui-bg_gloss-wave_90_fff9e5_500x100.png b/pydat/extras/www/static/images/ui-bg_gloss-wave_90_fff9e5_500x100.png deleted file mode 100644 index 9604f4a..0000000 Binary files a/pydat/extras/www/static/images/ui-bg_gloss-wave_90_fff9e5_500x100.png and /dev/null differ diff --git a/pydat/extras/www/static/images/ui-bg_highlight-hard_15_888888_1x100.png b/pydat/extras/www/static/images/ui-bg_highlight-hard_15_888888_1x100.png index 4450fe4..2340144 100644 Binary files a/pydat/extras/www/static/images/ui-bg_highlight-hard_15_888888_1x100.png and b/pydat/extras/www/static/images/ui-bg_highlight-hard_15_888888_1x100.png differ diff --git a/pydat/extras/www/static/images/ui-bg_highlight-hard_55_555555_1x100.png b/pydat/extras/www/static/images/ui-bg_highlight-hard_55_555555_1x100.png index 33c7fc1..ee5d12b 100644 Binary files a/pydat/extras/www/static/images/ui-bg_highlight-hard_55_555555_1x100.png and b/pydat/extras/www/static/images/ui-bg_highlight-hard_55_555555_1x100.png differ diff --git a/pydat/extras/www/static/images/ui-bg_highlight-soft_100_eeeeee_1x100.png b/pydat/extras/www/static/images/ui-bg_highlight-soft_100_eeeeee_1x100.png deleted file mode 100644 index c121135..0000000 Binary files a/pydat/extras/www/static/images/ui-bg_highlight-soft_100_eeeeee_1x100.png and /dev/null differ diff --git a/pydat/extras/www/static/images/ui-bg_highlight-soft_100_feeebd_1x100.png b/pydat/extras/www/static/images/ui-bg_highlight-soft_100_feeebd_1x100.png deleted file mode 100644 index b4c5238..0000000 Binary files a/pydat/extras/www/static/images/ui-bg_highlight-soft_100_feeebd_1x100.png and /dev/null differ diff --git a/pydat/extras/www/static/images/ui-bg_highlight-soft_35_adadad_1x100.png b/pydat/extras/www/static/images/ui-bg_highlight-soft_35_adadad_1x100.png index de5911d..919d48c 100644 Binary files a/pydat/extras/www/static/images/ui-bg_highlight-soft_35_adadad_1x100.png and b/pydat/extras/www/static/images/ui-bg_highlight-soft_35_adadad_1x100.png differ diff --git a/pydat/extras/www/static/images/ui-bg_highlight-soft_60_dddddd_1x100.png b/pydat/extras/www/static/images/ui-bg_highlight-soft_60_dddddd_1x100.png index db96df4..6933e22 100644 Binary files a/pydat/extras/www/static/images/ui-bg_highlight-soft_60_dddddd_1x100.png and b/pydat/extras/www/static/images/ui-bg_highlight-soft_60_dddddd_1x100.png differ diff --git a/pydat/extras/www/static/images/ui-bg_highlight-soft_75_ffe45c_1x100.png b/pydat/extras/www/static/images/ui-bg_highlight-soft_75_ffe45c_1x100.png deleted file mode 100644 index 9c7d2f6..0000000 Binary files a/pydat/extras/www/static/images/ui-bg_highlight-soft_75_ffe45c_1x100.png and /dev/null differ diff --git a/pydat/extras/www/static/images/ui-bg_inset-soft_15_121212_1x100.png b/pydat/extras/www/static/images/ui-bg_inset-soft_15_121212_1x100.png index da9d4e3..7b37cbd 100644 Binary files a/pydat/extras/www/static/images/ui-bg_inset-soft_15_121212_1x100.png and b/pydat/extras/www/static/images/ui-bg_inset-soft_15_121212_1x100.png differ diff --git a/pydat/extras/www/static/images/ui-bg_inset-soft_30_ffffff_1x100.png b/pydat/extras/www/static/images/ui-bg_inset-soft_30_ffffff_1x100.png deleted file mode 100644 index 738bb92..0000000 Binary files a/pydat/extras/www/static/images/ui-bg_inset-soft_30_ffffff_1x100.png and /dev/null differ diff --git a/pydat/extras/www/static/images/ui-icons_222222_256x240.png b/pydat/extras/www/static/images/ui-icons_222222_256x240.png deleted file mode 100644 index 1106eef..0000000 Binary files a/pydat/extras/www/static/images/ui-icons_222222_256x240.png and /dev/null differ diff --git a/pydat/extras/www/static/images/ui-icons_228ef1_256x240.png b/pydat/extras/www/static/images/ui-icons_228ef1_256x240.png deleted file mode 100644 index 8c64a89..0000000 Binary files a/pydat/extras/www/static/images/ui-icons_228ef1_256x240.png and /dev/null differ diff --git a/pydat/extras/www/static/images/ui-icons_3d3d3d_256x240.png b/pydat/extras/www/static/images/ui-icons_3d3d3d_256x240.png deleted file mode 100644 index 52e7fb9..0000000 Binary files a/pydat/extras/www/static/images/ui-icons_3d3d3d_256x240.png and /dev/null differ diff --git a/pydat/extras/www/static/images/ui-icons_666666_256x240.png b/pydat/extras/www/static/images/ui-icons_666666_256x240.png index 39bd7a9..7f3e652 100644 Binary files a/pydat/extras/www/static/images/ui-icons_666666_256x240.png and b/pydat/extras/www/static/images/ui-icons_666666_256x240.png differ diff --git a/pydat/extras/www/static/images/ui-icons_aaaaaa_256x240.png b/pydat/extras/www/static/images/ui-icons_aaaaaa_256x240.png index a0faaf2..207d0ba 100644 Binary files a/pydat/extras/www/static/images/ui-icons_aaaaaa_256x240.png and b/pydat/extras/www/static/images/ui-icons_aaaaaa_256x240.png differ diff --git a/pydat/extras/www/static/images/ui-icons_bbbbbb_256x240.png b/pydat/extras/www/static/images/ui-icons_bbbbbb_256x240.png index e83b6dd..a3a17f3 100644 Binary files a/pydat/extras/www/static/images/ui-icons_bbbbbb_256x240.png and b/pydat/extras/www/static/images/ui-icons_bbbbbb_256x240.png differ diff --git a/pydat/extras/www/static/images/ui-icons_bd7b00_256x240.png b/pydat/extras/www/static/images/ui-icons_bd7b00_256x240.png deleted file mode 100644 index 1b05bdd..0000000 Binary files a/pydat/extras/www/static/images/ui-icons_bd7b00_256x240.png and /dev/null differ diff --git a/pydat/extras/www/static/images/ui-icons_c98000_256x240.png b/pydat/extras/www/static/images/ui-icons_c98000_256x240.png index 71a28fd..e80f9a6 100644 Binary files a/pydat/extras/www/static/images/ui-icons_c98000_256x240.png and b/pydat/extras/www/static/images/ui-icons_c98000_256x240.png differ diff --git a/pydat/extras/www/static/images/ui-icons_cccccc_256x240.png b/pydat/extras/www/static/images/ui-icons_cccccc_256x240.png index 9fdc41a..d936719 100644 Binary files a/pydat/extras/www/static/images/ui-icons_cccccc_256x240.png and b/pydat/extras/www/static/images/ui-icons_cccccc_256x240.png differ diff --git a/pydat/extras/www/static/images/ui-icons_cd0a0a_256x240.png b/pydat/extras/www/static/images/ui-icons_cd0a0a_256x240.png index 4937018..7e8ebc1 100644 Binary files a/pydat/extras/www/static/images/ui-icons_cd0a0a_256x240.png and b/pydat/extras/www/static/images/ui-icons_cd0a0a_256x240.png differ diff --git a/pydat/extras/www/static/images/ui-icons_d19405_256x240.png b/pydat/extras/www/static/images/ui-icons_d19405_256x240.png deleted file mode 100644 index 48de901..0000000 Binary files a/pydat/extras/www/static/images/ui-icons_d19405_256x240.png and /dev/null differ diff --git a/pydat/extras/www/static/images/ui-icons_eb990f_256x240.png b/pydat/extras/www/static/images/ui-icons_eb990f_256x240.png deleted file mode 100644 index d73d5cd..0000000 Binary files a/pydat/extras/www/static/images/ui-icons_eb990f_256x240.png and /dev/null differ diff --git a/pydat/extras/www/static/images/ui-icons_ed9f26_256x240.png b/pydat/extras/www/static/images/ui-icons_ed9f26_256x240.png deleted file mode 100644 index 4f25c8b..0000000 Binary files a/pydat/extras/www/static/images/ui-icons_ed9f26_256x240.png and /dev/null differ diff --git a/pydat/extras/www/static/images/ui-icons_ef8c08_256x240.png b/pydat/extras/www/static/images/ui-icons_ef8c08_256x240.png deleted file mode 100644 index 760f14a..0000000 Binary files a/pydat/extras/www/static/images/ui-icons_ef8c08_256x240.png and /dev/null differ diff --git a/pydat/extras/www/static/images/ui-icons_f29a00_256x240.png b/pydat/extras/www/static/images/ui-icons_f29a00_256x240.png index 9b8d898..7db4ab6 100644 Binary files a/pydat/extras/www/static/images/ui-icons_f29a00_256x240.png and b/pydat/extras/www/static/images/ui-icons_f29a00_256x240.png differ diff --git a/pydat/extras/www/static/images/ui-icons_fadc7a_256x240.png b/pydat/extras/www/static/images/ui-icons_fadc7a_256x240.png deleted file mode 100644 index 95a4e5d..0000000 Binary files a/pydat/extras/www/static/images/ui-icons_fadc7a_256x240.png and /dev/null differ diff --git a/pydat/extras/www/static/images/ui-icons_ffd27a_256x240.png b/pydat/extras/www/static/images/ui-icons_ffd27a_256x240.png deleted file mode 100644 index 21fd40e..0000000 Binary files a/pydat/extras/www/static/images/ui-icons_ffd27a_256x240.png and /dev/null differ diff --git a/pydat/extras/www/static/images/ui-icons_ffe180_256x240.png b/pydat/extras/www/static/images/ui-icons_ffe180_256x240.png deleted file mode 100644 index c26bc29..0000000 Binary files a/pydat/extras/www/static/images/ui-icons_ffe180_256x240.png and /dev/null differ diff --git a/pydat/extras/www/static/images/ui-icons_ffffff_256x240.png b/pydat/extras/www/static/images/ui-icons_ffffff_256x240.png deleted file mode 100644 index 7cfcb5c..0000000 Binary files a/pydat/extras/www/static/images/ui-icons_ffffff_256x240.png and /dev/null differ diff --git a/pydat/extras/www/static/js/dnsdb.js b/pydat/extras/www/static/js/dnsdb.js new file mode 100644 index 0000000..772561b --- /dev/null +++ b/pydat/extras/www/static/js/dnsdb.js @@ -0,0 +1,50 @@ +$(document).ready(function(){ + + $('#dnsdb-tab').tabs(); + $('.dnsdb-dnsres').dataTable( + { + "bJQueryUI": true, + //"bAutoWidth": false, + "oLanguage": {'sSearch': 'Filter:', + 'sZeroRecords': 'No Records Found', + }, + "aoColumnDefs": [ + {"sWidth": "15%", 'bSortable': false, 'aTargets': [-1]}, + ], + "sPaginationType": "full_numbers", + "sDom" : '<"H"lfirp>t<"F"lfip>', + "iDisplayLength" : 50, + "fnDrawCallback": function(oSettings) { + $(".resolve").on("click", function() { + $(this).removeClass('link'); + $(this).off('click'); + resolve($(this).attr('domainName'), $(this)); + }); + } + }); + + /* + var tabName = $(document.createElement('span')); + tabName.text("PDNS" + direction + " Results"); + tabName.css('position', 'absolute'); + tabName.css('right', '20px'); + tabName.css('font-size', '20px'); + tabName.css('top', '13px'); + $("#pdns-DNSDB").append(tabName); + */ + + + $(".pdns_search_form [name='result_format']").change(function(){ + //Filtering should only be visible for List + if($(this).find("option:selected").val() == "list"){ + $(this).parents().find('.form_filter').removeClass("novis").show(); + }else{ + $(this).parents().find('.form_filter').addClass("novis"); + } + }); + + + $(".pdns_search_form [name='result_format']").change(); + + +}); diff --git a/pydat/extras/www/static/js/domain_advanced.js b/pydat/extras/www/static/js/domain_advanced.js index 3be68ab..f8c7595 100644 --- a/pydat/extras/www/static/js/domain_advanced.js +++ b/pydat/extras/www/static/js/domain_advanced.js @@ -172,7 +172,7 @@ function fnFormatDetails ( oTable, nTr ) dTable += '
'; - dTable += 'Click To Get Full Details'; + dTable += 'Click To Get Full Details'; dTable += '
'; dTable += ''; //domain_details @@ -384,13 +384,14 @@ function get_historical(domain, entry_version, target){ for(var i = 0; i < result.length; i++){ var hrow = document.createElement('tr'); var tdclass = ""; + var res_entry_version = result[i].Version + "." + result[i].UpdateVersion - if(+(result[i].Version) == +entry_version){ + if(res_entry_version == entry_version){ tdclass = "bold"; } var hcell = document.createElement('td'); $(hcell).addClass(tdclass); - $(hcell).html(result[i].Version); + $(hcell).html(res_entry_version); $(hrow).append(hcell); var hcell = document.createElement('td'); @@ -415,16 +416,31 @@ function get_historical(domain, entry_version, target){ var hcell = document.createElement('td'); $(hcell).addClass(tdclass); - if(+entry_version == result[i].Version){ + if(entry_version == res_entry_version){ $(hcell).html(' '); }else{ - $(hcell).html('Click'); + $(hcell).html('Click'); } $(hrow).append(hcell); var inner = " " if (i != 0){ - inner = '' + result[i - 1].Version + " > " + result[i].Version + ''; + previous_entry_version = result[i-1].Version + "." + result[i-1].UpdateVersion; + inner = '' + + previous_entry_version + + " > " + + res_entry_version + + ''; } var hcell = document.createElement('td'); @@ -440,7 +456,7 @@ function get_historical(domain, entry_version, target){ var dTab = $(target).parents("tr").find(".detailTable"); dTab.find(".fullDetail").on("click", function(){ - full($(this).attr('domainName'), entry_version); + full($(this).attr('domainName'), $(this).attr('entry_version')); }); dTab.find(".diff").on("click", function(){ diff($(this).attr('domainName'), $(this).attr('version1'), $(this).attr('version2')); diff --git a/pydat/extras/www/static/js/jquery-1.11.0.min.js b/pydat/extras/www/static/js/jquery-1.11.0.min.js deleted file mode 100644 index 73f33fb..0000000 --- a/pydat/extras/www/static/js/jquery-1.11.0.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/*! jQuery v1.11.0 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ -!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k="".trim,l={},m="1.11.0",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(n.isPlainObject(c)||(b=n.isArray(c)))?(b?(b=!1,f=a&&n.isArray(a)?a:[]):f=a&&n.isPlainObject(a)?a:{},g[d]=n.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray||function(a){return"array"===n.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return a-parseFloat(a)>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(l.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&n.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:k&&!k.call("\ufeff\xa0")?function(a){return null==a?"":k.call(a)}:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),n.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||n.guid++,e):void 0},now:function(){return+new Date},support:l}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s="sizzle"+-new Date,t=a.document,u=0,v=0,w=eb(),x=eb(),y=eb(),z=function(a,b){return a===b&&(j=!0),0},A="undefined",B=1<<31,C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=D.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",M=L.replace("w","w#"),N="\\["+K+"*("+L+")"+K+"*(?:([*^$|!~]?=)"+K+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+M+")|)|)"+K+"*\\]",O=":("+L+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+N.replace(3,8)+")*)|.*)\\)|)",P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(O),U=new RegExp("^"+M+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L.replace("w","w*")+")"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=/'|\\/g,ab=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),bb=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{G.apply(D=H.call(t.childNodes),t.childNodes),D[t.childNodes.length].nodeType}catch(cb){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function db(a,b,d,e){var f,g,h,i,j,m,p,q,u,v;if((b?b.ownerDocument||b:t)!==l&&k(b),b=b||l,d=d||[],!a||"string"!=typeof a)return d;if(1!==(i=b.nodeType)&&9!==i)return[];if(n&&!e){if(f=Z.exec(a))if(h=f[1]){if(9===i){if(g=b.getElementById(h),!g||!g.parentNode)return d;if(g.id===h)return d.push(g),d}else if(b.ownerDocument&&(g=b.ownerDocument.getElementById(h))&&r(b,g)&&g.id===h)return d.push(g),d}else{if(f[2])return G.apply(d,b.getElementsByTagName(a)),d;if((h=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(h)),d}if(c.qsa&&(!o||!o.test(a))){if(q=p=s,u=b,v=9===i&&a,1===i&&"object"!==b.nodeName.toLowerCase()){m=ob(a),(p=b.getAttribute("id"))?q=p.replace(_,"\\$&"):b.setAttribute("id",q),q="[id='"+q+"'] ",j=m.length;while(j--)m[j]=q+pb(m[j]);u=$.test(a)&&mb(b.parentNode)||b,v=m.join(",")}if(v)try{return G.apply(d,u.querySelectorAll(v)),d}catch(w){}finally{p||b.removeAttribute("id")}}}return xb(a.replace(P,"$1"),b,d,e)}function eb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function fb(a){return a[s]=!0,a}function gb(a){var b=l.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function hb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function ib(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||B)-(~a.sourceIndex||B);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function jb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function kb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function lb(a){return fb(function(b){return b=+b,fb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function mb(a){return a&&typeof a.getElementsByTagName!==A&&a}c=db.support={},f=db.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},k=db.setDocument=function(a){var b,e=a?a.ownerDocument||a:t,g=e.defaultView;return e!==l&&9===e.nodeType&&e.documentElement?(l=e,m=e.documentElement,n=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){k()},!1):g.attachEvent&&g.attachEvent("onunload",function(){k()})),c.attributes=gb(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=gb(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(e.getElementsByClassName)&&gb(function(a){return a.innerHTML="
",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=gb(function(a){return m.appendChild(a).id=s,!e.getElementsByName||!e.getElementsByName(s).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==A&&n){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ab,bb);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ab,bb);return function(a){var c=typeof a.getAttributeNode!==A&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==A?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==A&&n?b.getElementsByClassName(a):void 0},p=[],o=[],(c.qsa=Y.test(e.querySelectorAll))&&(gb(function(a){a.innerHTML="",a.querySelectorAll("[t^='']").length&&o.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||o.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll(":checked").length||o.push(":checked")}),gb(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&o.push("name"+K+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||o.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),o.push(",.*:")})),(c.matchesSelector=Y.test(q=m.webkitMatchesSelector||m.mozMatchesSelector||m.oMatchesSelector||m.msMatchesSelector))&&gb(function(a){c.disconnectedMatch=q.call(a,"div"),q.call(a,"[s!='']:x"),p.push("!=",O)}),o=o.length&&new RegExp(o.join("|")),p=p.length&&new RegExp(p.join("|")),b=Y.test(m.compareDocumentPosition),r=b||Y.test(m.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},z=b?function(a,b){if(a===b)return j=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===t&&r(t,a)?-1:b===e||b.ownerDocument===t&&r(t,b)?1:i?I.call(i,a)-I.call(i,b):0:4&d?-1:1)}:function(a,b){if(a===b)return j=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],k=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:i?I.call(i,a)-I.call(i,b):0;if(f===g)return ib(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)k.unshift(c);while(h[d]===k[d])d++;return d?ib(h[d],k[d]):h[d]===t?-1:k[d]===t?1:0},e):l},db.matches=function(a,b){return db(a,null,null,b)},db.matchesSelector=function(a,b){if((a.ownerDocument||a)!==l&&k(a),b=b.replace(S,"='$1']"),!(!c.matchesSelector||!n||p&&p.test(b)||o&&o.test(b)))try{var d=q.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return db(b,l,null,[a]).length>0},db.contains=function(a,b){return(a.ownerDocument||a)!==l&&k(a),r(a,b)},db.attr=function(a,b){(a.ownerDocument||a)!==l&&k(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!n):void 0;return void 0!==f?f:c.attributes||!n?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},db.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},db.uniqueSort=function(a){var b,d=[],e=0,f=0;if(j=!c.detectDuplicates,i=!c.sortStable&&a.slice(0),a.sort(z),j){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return i=null,a},e=db.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=db.selectors={cacheLength:50,createPseudo:fb,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ab,bb),a[3]=(a[4]||a[5]||"").replace(ab,bb),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||db.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&db.error(a[0]),a},PSEUDO:function(a){var b,c=!a[5]&&a[2];return V.CHILD.test(a[0])?null:(a[3]&&void 0!==a[4]?a[2]=a[4]:c&&T.test(c)&&(b=ob(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ab,bb).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=w[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&w(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==A&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=db.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),t=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&t){k=q[s]||(q[s]={}),j=k[a]||[],n=j[0]===u&&j[1],m=j[0]===u&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[u,n,m];break}}else if(t&&(j=(b[s]||(b[s]={}))[a])&&j[0]===u)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(t&&((l[s]||(l[s]={}))[a]=[u,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||db.error("unsupported pseudo: "+a);return e[s]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?fb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:fb(function(a){var b=[],c=[],d=g(a.replace(P,"$1"));return d[s]?fb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:fb(function(a){return function(b){return db(a,b).length>0}}),contains:fb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:fb(function(a){return U.test(a||"")||db.error("unsupported lang: "+a),a=a.replace(ab,bb).toLowerCase(),function(b){var c;do if(c=n?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===m},focus:function(a){return a===l.activeElement&&(!l.hasFocus||l.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:lb(function(){return[0]}),last:lb(function(a,b){return[b-1]}),eq:lb(function(a,b,c){return[0>c?c+b:c]}),even:lb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:lb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:lb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:lb(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function qb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=v++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[u,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[s]||(b[s]={}),(h=i[d])&&h[0]===u&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function rb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function sb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function tb(a,b,c,d,e,f){return d&&!d[s]&&(d=tb(d)),e&&!e[s]&&(e=tb(e,f)),fb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||wb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:sb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=sb(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?I.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=sb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ub(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],i=g||d.relative[" "],j=g?1:0,k=qb(function(a){return a===b},i,!0),l=qb(function(a){return I.call(b,a)>-1},i,!0),m=[function(a,c,d){return!g&&(d||c!==h)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>j;j++)if(c=d.relative[a[j].type])m=[qb(rb(m),c)];else{if(c=d.filter[a[j].type].apply(null,a[j].matches),c[s]){for(e=++j;f>e;e++)if(d.relative[a[e].type])break;return tb(j>1&&rb(m),j>1&&pb(a.slice(0,j-1).concat({value:" "===a[j-2].type?"*":""})).replace(P,"$1"),c,e>j&&ub(a.slice(j,e)),f>e&&ub(a=a.slice(e)),f>e&&pb(a))}m.push(c)}return rb(m)}function vb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,i,j,k){var m,n,o,p=0,q="0",r=f&&[],s=[],t=h,v=f||e&&d.find.TAG("*",k),w=u+=null==t?1:Math.random()||.1,x=v.length;for(k&&(h=g!==l&&g);q!==x&&null!=(m=v[q]);q++){if(e&&m){n=0;while(o=a[n++])if(o(m,g,i)){j.push(m);break}k&&(u=w)}c&&((m=!o&&m)&&p--,f&&r.push(m))}if(p+=q,c&&q!==p){n=0;while(o=b[n++])o(r,s,g,i);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=E.call(j));s=sb(s)}G.apply(j,s),k&&!f&&s.length>0&&p+b.length>1&&db.uniqueSort(j)}return k&&(u=w,h=t),r};return c?fb(f):f}g=db.compile=function(a,b){var c,d=[],e=[],f=y[a+" "];if(!f){b||(b=ob(a)),c=b.length;while(c--)f=ub(b[c]),f[s]?d.push(f):e.push(f);f=y(a,vb(e,d))}return f};function wb(a,b,c){for(var d=0,e=b.length;e>d;d++)db(a,b[d],c);return c}function xb(a,b,e,f){var h,i,j,k,l,m=ob(a);if(!f&&1===m.length){if(i=m[0]=m[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&c.getById&&9===b.nodeType&&n&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(ab,bb),b)||[])[0],!b)return e;a=a.slice(i.shift().value.length)}h=V.needsContext.test(a)?0:i.length;while(h--){if(j=i[h],d.relative[k=j.type])break;if((l=d.find[k])&&(f=l(j.matches[0].replace(ab,bb),$.test(i[0].type)&&mb(b.parentNode)||b))){if(i.splice(h,1),a=f.length&&pb(i),!a)return G.apply(e,f),e;break}}}return g(a,m)(f,b,!n,e,$.test(a)&&mb(b.parentNode)||b),e}return c.sortStable=s.split("").sort(z).join("")===s,c.detectDuplicates=!!j,k(),c.sortDetached=gb(function(a){return 1&a.compareDocumentPosition(l.createElement("div"))}),gb(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||hb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&gb(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||hb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),gb(function(a){return null==a.getAttribute("disabled")})||hb(J,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),db}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return n.inArray(a,b)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;e>b;b++)if(n.contains(d[b],this))return!0}));for(b=0;e>b;b++)n.find(a,d[b],c);return c=this.pushStack(e>1?n.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=a.document,A=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,B=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:A.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:z,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=z.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return y.find(a);this.length=1,this[0]=d}return this.context=z,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};B.prototype=n.fn,y=n(z);var C=/^(?:parents|prev(?:Until|All))/,D={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!n(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b,c=n(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(n.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?n.inArray(this[0],n(a)):n.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function E(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return E(a,"nextSibling")},prev:function(a){return E(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return n.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(D[a]||(e=n.unique(e)),C.test(a)&&(e=e.reverse())),this.pushStack(e)}});var F=/\S+/g,G={};function H(a){var b=G[a]={};return n.each(a.match(F)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?G[a]||H(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&n.each(arguments,function(a,c){var d;while((d=n.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){if(a===!0?!--n.readyWait:!n.isReady){if(!z.body)return setTimeout(n.ready);n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(z,[n]),n.fn.trigger&&n(z).trigger("ready").off("ready"))}}});function J(){z.addEventListener?(z.removeEventListener("DOMContentLoaded",K,!1),a.removeEventListener("load",K,!1)):(z.detachEvent("onreadystatechange",K),a.detachEvent("onload",K))}function K(){(z.addEventListener||"load"===event.type||"complete"===z.readyState)&&(J(),n.ready())}n.ready.promise=function(b){if(!I)if(I=n.Deferred(),"complete"===z.readyState)setTimeout(n.ready);else if(z.addEventListener)z.addEventListener("DOMContentLoaded",K,!1),a.addEventListener("load",K,!1);else{z.attachEvent("onreadystatechange",K),a.attachEvent("onload",K);var c=!1;try{c=null==a.frameElement&&z.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!n.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}J(),n.ready()}}()}return I.promise(b)};var L="undefined",M;for(M in n(l))break;l.ownLast="0"!==M,l.inlineBlockNeedsLayout=!1,n(function(){var a,b,c=z.getElementsByTagName("body")[0];c&&(a=z.createElement("div"),a.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",b=z.createElement("div"),c.appendChild(a).appendChild(b),typeof b.style.zoom!==L&&(b.style.cssText="border:0;margin:0;width:1px;padding:1px;display:inline;zoom:1",(l.inlineBlockNeedsLayout=3===b.offsetWidth)&&(c.style.zoom=1)),c.removeChild(a),a=b=null)}),function(){var a=z.createElement("div");if(null==l.deleteExpando){l.deleteExpando=!0;try{delete a.test}catch(b){l.deleteExpando=!1}}a=null}(),n.acceptData=function(a){var b=n.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(O,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}n.data(a,b,c)}else c=void 0}return c}function Q(a){var b;for(b in a)if(("data"!==b||!n.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function R(a,b,d,e){if(n.acceptData(a)){var f,g,h=n.expando,i=a.nodeType,j=i?n.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||n.guid++:h),j[k]||(j[k]=i?{}:{toJSON:n.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=n.extend(j[k],b):j[k].data=n.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[n.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[n.camelCase(b)])):f=g,f -}}function S(a,b,c){if(n.acceptData(a)){var d,e,f=a.nodeType,g=f?n.cache:a,h=f?a[n.expando]:n.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){n.isArray(b)?b=b.concat(n.map(b,n.camelCase)):b in d?b=[b]:(b=n.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!Q(d):!n.isEmptyObject(d))return}(c||(delete g[h].data,Q(g[h])))&&(f?n.cleanData([a],!0):l.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}n.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?n.cache[a[n.expando]]:a[n.expando],!!a&&!Q(a)},data:function(a,b,c){return R(a,b,c)},removeData:function(a,b){return S(a,b)},_data:function(a,b,c){return R(a,b,c,!0)},_removeData:function(a,b){return S(a,b,!0)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=n.data(f),1===f.nodeType&&!n._data(f,"parsedAttrs"))){c=g.length;while(c--)d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d]));n._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){n.data(this,a)}):arguments.length>1?this.each(function(){n.data(this,a,b)}):f?P(f,a,n.data(f,a)):void 0},removeData:function(a){return this.each(function(){n.removeData(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=n._data(a,b),c&&(!d||n.isArray(c)?d=n._data(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return n._data(a,c)||n._data(a,c,{empty:n.Callbacks("once memory").add(function(){n._removeData(a,b+"queue"),n._removeData(a,c)})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},X=/^(?:checkbox|radio)$/i;!function(){var a=z.createDocumentFragment(),b=z.createElement("div"),c=z.createElement("input");if(b.setAttribute("className","t"),b.innerHTML="
a",l.leadingWhitespace=3===b.firstChild.nodeType,l.tbody=!b.getElementsByTagName("tbody").length,l.htmlSerialize=!!b.getElementsByTagName("link").length,l.html5Clone="<:nav>"!==z.createElement("nav").cloneNode(!0).outerHTML,c.type="checkbox",c.checked=!0,a.appendChild(c),l.appendChecked=c.checked,b.innerHTML="",l.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,a.appendChild(b),b.innerHTML="",l.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,l.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){l.noCloneEvent=!1}),b.cloneNode(!0).click()),null==l.deleteExpando){l.deleteExpando=!0;try{delete b.test}catch(d){l.deleteExpando=!1}}a=b=c=null}(),function(){var b,c,d=z.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(l[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),l[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var Y=/^(?:input|select|textarea)$/i,Z=/^key/,$=/^(?:mouse|contextmenu)|click/,_=/^(?:focusinfocus|focusoutblur)$/,ab=/^([^.]*)(?:\.(.+)|)$/;function bb(){return!0}function cb(){return!1}function db(){try{return z.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=n.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof n===L||a&&n.event.triggered===a.type?void 0:n.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(F)||[""],h=b.length;while(h--)f=ab.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=n.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=n.event.special[o]||{},l=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},i),(m=g[o])||(m=g[o]=[],m.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,l):m.push(l),n.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n.hasData(a)&&n._data(a);if(r&&(k=r.events)){b=(b||"").match(F)||[""],j=b.length;while(j--)if(h=ab.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=m.length;while(f--)g=m[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(k)&&(delete r.handle,n._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,m,o=[d||z],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||z,3!==d.nodeType&&8!==d.nodeType&&!_.test(p+n.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[n.expando]?b:new n.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),k=n.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!n.isWindow(d)){for(i=k.delegateType||p,_.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||z)&&o.push(l.defaultView||l.parentWindow||a)}m=0;while((h=o[m++])&&!b.isPropagationStopped())b.type=m>1?i:k.bindType||p,f=(n._data(h,"events")||{})[b.type]&&n._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&n.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&n.acceptData(d)&&g&&d[p]&&!n.isWindow(d)){l=d[g],l&&(d[g]=null),n.event.triggered=p;try{d[p]()}catch(r){}n.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(n._data(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((n.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?n(c,this).index(i)>=0:n.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h]","i"),ib=/^\s+/,jb=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,kb=/<([\w:]+)/,lb=/\s*$/g,sb={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:l.htmlSerialize?[0,"",""]:[1,"X
","
"]},tb=eb(z),ub=tb.appendChild(z.createElement("div"));sb.optgroup=sb.option,sb.tbody=sb.tfoot=sb.colgroup=sb.caption=sb.thead,sb.th=sb.td;function vb(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==L?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==L?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||n.nodeName(d,b)?f.push(d):n.merge(f,vb(d,b));return void 0===b||b&&n.nodeName(a,b)?n.merge([a],f):f}function wb(a){X.test(a.type)&&(a.defaultChecked=a.checked)}function xb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function yb(a){return a.type=(null!==n.find.attr(a,"type"))+"/"+a.type,a}function zb(a){var b=qb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ab(a,b){for(var c,d=0;null!=(c=a[d]);d++)n._data(c,"globalEval",!b||n._data(b[d],"globalEval"))}function Bb(a,b){if(1===b.nodeType&&n.hasData(a)){var c,d,e,f=n._data(a),g=n._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)n.event.add(b,c,h[c][d])}g.data&&(g.data=n.extend({},g.data))}}function Cb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!l.noCloneEvent&&b[n.expando]){e=n._data(b);for(d in e.events)n.removeEvent(b,d,e.handle);b.removeAttribute(n.expando)}"script"===c&&b.text!==a.text?(yb(b).text=a.text,zb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),l.html5Clone&&a.innerHTML&&!n.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&X.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}n.extend({clone:function(a,b,c){var d,e,f,g,h,i=n.contains(a.ownerDocument,a);if(l.html5Clone||n.isXMLDoc(a)||!hb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(ub.innerHTML=a.outerHTML,ub.removeChild(f=ub.firstChild)),!(l.noCloneEvent&&l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(d=vb(f),h=vb(a),g=0;null!=(e=h[g]);++g)d[g]&&Cb(e,d[g]);if(b)if(c)for(h=h||vb(a),d=d||vb(f),g=0;null!=(e=h[g]);g++)Bb(e,d[g]);else Bb(a,f);return d=vb(f,"script"),d.length>0&&Ab(d,!i&&vb(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k,m=a.length,o=eb(b),p=[],q=0;m>q;q++)if(f=a[q],f||0===f)if("object"===n.type(f))n.merge(p,f.nodeType?[f]:f);else if(mb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(kb.exec(f)||["",""])[1].toLowerCase(),k=sb[i]||sb._default,h.innerHTML=k[1]+f.replace(jb,"<$1>")+k[2],e=k[0];while(e--)h=h.lastChild;if(!l.leadingWhitespace&&ib.test(f)&&p.push(b.createTextNode(ib.exec(f)[0])),!l.tbody){f="table"!==i||lb.test(f)?""!==k[1]||lb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)n.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}n.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),l.appendChecked||n.grep(vb(p,"input"),wb),q=0;while(f=p[q++])if((!d||-1===n.inArray(f,d))&&(g=n.contains(f.ownerDocument,f),h=vb(o.appendChild(f),"script"),g&&Ab(h),c)){e=0;while(f=h[e++])pb.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=n.expando,j=n.cache,k=l.deleteExpando,m=n.event.special;null!=(d=a[h]);h++)if((b||n.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)m[e]?n.event.remove(d,e):n.removeEvent(d,e,g.handle);j[f]&&(delete j[f],k?delete d[i]:typeof d.removeAttribute!==L?d.removeAttribute(i):d[i]=null,c.push(f))}}}),n.fn.extend({text:function(a){return W(this,function(a){return void 0===a?n.text(this):this.empty().append((this[0]&&this[0].ownerDocument||z).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=xb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=xb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(vb(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&Ab(vb(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&n.cleanData(vb(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&n.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return W(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(gb,""):void 0;if(!("string"!=typeof a||nb.test(a)||!l.htmlSerialize&&hb.test(a)||!l.leadingWhitespace&&ib.test(a)||sb[(kb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(jb,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(vb(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(vb(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,k=this.length,m=this,o=k-1,p=a[0],q=n.isFunction(p);if(q||k>1&&"string"==typeof p&&!l.checkClone&&ob.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(k&&(i=n.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=n.map(vb(i,"script"),yb),f=g.length;k>j;j++)d=i,j!==o&&(d=n.clone(d,!0,!0),f&&n.merge(g,vb(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,n.map(g,zb),j=0;f>j;j++)d=g[j],pb.test(d.type||"")&&!n._data(d,"globalEval")&&n.contains(h,d)&&(d.src?n._evalUrl&&n._evalUrl(d.src):n.globalEval((d.text||d.textContent||d.innerHTML||"").replace(rb,"")));i=c=null}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=0,e=[],g=n(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),n(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Db,Eb={};function Fb(b,c){var d=n(c.createElement(b)).appendTo(c.body),e=a.getDefaultComputedStyle?a.getDefaultComputedStyle(d[0]).display:n.css(d[0],"display");return d.detach(),e}function Gb(a){var b=z,c=Eb[a];return c||(c=Fb(a,b),"none"!==c&&c||(Db=(Db||n("