Showing preview only (1,882K chars total). Download the full file or copy to clipboard to get everything.
Repository: alfonsomga/symfony.demo.on.roids
Branch: master
Commit: f01514d70f28
Files: 379
Total size: 1.7 MB
Directory structure:
gitextract_ljy0z57z/
├── .gitignore
├── .travis.yml
├── LICENSE
├── README.md
├── app/
│ ├── .htaccess
│ ├── AppCache.php
│ ├── AppKernel.php
│ ├── Resources/
│ │ ├── TwigBundle/
│ │ │ └── views/
│ │ │ └── Exception/
│ │ │ ├── error.html.twig
│ │ │ ├── error403.html.twig
│ │ │ ├── error404.html.twig
│ │ │ └── error500.html.twig
│ │ ├── assets/
│ │ │ ├── css/
│ │ │ │ ├── font-lato.css
│ │ │ │ └── highlight-solarized-light.css
│ │ │ ├── js/
│ │ │ │ ├── bootstrap-3.3.4.js
│ │ │ │ ├── highlight.pack.js
│ │ │ │ ├── jquery-2.1.4.js
│ │ │ │ └── main.js
│ │ │ └── scss/
│ │ │ ├── bootstrap/
│ │ │ │ ├── _alerts.scss
│ │ │ │ ├── _badges.scss
│ │ │ │ ├── _breadcrumbs.scss
│ │ │ │ ├── _button-groups.scss
│ │ │ │ ├── _buttons.scss
│ │ │ │ ├── _carousel.scss
│ │ │ │ ├── _close.scss
│ │ │ │ ├── _code.scss
│ │ │ │ ├── _component-animations.scss
│ │ │ │ ├── _dropdowns.scss
│ │ │ │ ├── _forms.scss
│ │ │ │ ├── _glyphicons.scss
│ │ │ │ ├── _grid.scss
│ │ │ │ ├── _input-groups.scss
│ │ │ │ ├── _jumbotron.scss
│ │ │ │ ├── _labels.scss
│ │ │ │ ├── _list-group.scss
│ │ │ │ ├── _media.scss
│ │ │ │ ├── _mixins.scss
│ │ │ │ ├── _modals.scss
│ │ │ │ ├── _navbar.scss
│ │ │ │ ├── _navs.scss
│ │ │ │ ├── _normalize.scss
│ │ │ │ ├── _pager.scss
│ │ │ │ ├── _pagination.scss
│ │ │ │ ├── _panels.scss
│ │ │ │ ├── _popovers.scss
│ │ │ │ ├── _print.scss
│ │ │ │ ├── _progress-bars.scss
│ │ │ │ ├── _responsive-embed.scss
│ │ │ │ ├── _responsive-utilities.scss
│ │ │ │ ├── _scaffolding.scss
│ │ │ │ ├── _tables.scss
│ │ │ │ ├── _theme.scss
│ │ │ │ ├── _thumbnails.scss
│ │ │ │ ├── _tooltip.scss
│ │ │ │ ├── _type.scss
│ │ │ │ ├── _utilities.scss
│ │ │ │ ├── _variables.scss
│ │ │ │ ├── _wells.scss
│ │ │ │ ├── flatly-theme/
│ │ │ │ │ ├── _bootswatch.scss
│ │ │ │ │ └── _variables.scss
│ │ │ │ └── mixins/
│ │ │ │ ├── _alerts.scss
│ │ │ │ ├── _background-variant.scss
│ │ │ │ ├── _border-radius.scss
│ │ │ │ ├── _buttons.scss
│ │ │ │ ├── _center-block.scss
│ │ │ │ ├── _clearfix.scss
│ │ │ │ ├── _forms.scss
│ │ │ │ ├── _gradients.scss
│ │ │ │ ├── _grid-framework.scss
│ │ │ │ ├── _grid.scss
│ │ │ │ ├── _hide-text.scss
│ │ │ │ ├── _image.scss
│ │ │ │ ├── _labels.scss
│ │ │ │ ├── _list-group.scss
│ │ │ │ ├── _nav-divider.scss
│ │ │ │ ├── _nav-vertical-align.scss
│ │ │ │ ├── _opacity.scss
│ │ │ │ ├── _pagination.scss
│ │ │ │ ├── _panels.scss
│ │ │ │ ├── _progress-bar.scss
│ │ │ │ ├── _reset-filter.scss
│ │ │ │ ├── _resize.scss
│ │ │ │ ├── _responsive-visibility.scss
│ │ │ │ ├── _size.scss
│ │ │ │ ├── _tab-focus.scss
│ │ │ │ ├── _table-row.scss
│ │ │ │ ├── _text-emphasis.scss
│ │ │ │ ├── _text-overflow.scss
│ │ │ │ └── _vendor-prefixes.scss
│ │ │ ├── bootstrap.scss
│ │ │ ├── font-awesome/
│ │ │ │ ├── _animated.scss
│ │ │ │ ├── _bordered-pulled.scss
│ │ │ │ ├── _core.scss
│ │ │ │ ├── _fixed-width.scss
│ │ │ │ ├── _icons.scss
│ │ │ │ ├── _larger.scss
│ │ │ │ ├── _list.scss
│ │ │ │ ├── _mixins.scss
│ │ │ │ ├── _path.scss
│ │ │ │ ├── _rotated-flipped.scss
│ │ │ │ ├── _stacked.scss
│ │ │ │ └── _variables.scss
│ │ │ ├── font-awesome.scss
│ │ │ └── main.scss
│ │ ├── translations/
│ │ │ ├── messages.ca.xliff
│ │ │ ├── messages.cs.xliff
│ │ │ ├── messages.de.xliff
│ │ │ ├── messages.en.xliff
│ │ │ ├── messages.es.xliff
│ │ │ ├── messages.fr.xliff
│ │ │ ├── messages.id.xliff
│ │ │ ├── messages.it.xliff
│ │ │ ├── messages.ja.xliff
│ │ │ ├── messages.nl.xliff
│ │ │ ├── messages.pl.xliff
│ │ │ ├── messages.pt_BR.xliff
│ │ │ ├── messages.ro.xliff
│ │ │ ├── messages.ru.xliff
│ │ │ ├── messages.uk.xliff
│ │ │ ├── validators.ca.xliff
│ │ │ ├── validators.cs.xliff
│ │ │ ├── validators.de.xliff
│ │ │ ├── validators.en.xliff
│ │ │ ├── validators.es.xliff
│ │ │ ├── validators.fr.xliff
│ │ │ ├── validators.id.xliff
│ │ │ ├── validators.it.xliff
│ │ │ ├── validators.ja.xliff
│ │ │ ├── validators.nl.xliff
│ │ │ ├── validators.pl.xliff
│ │ │ ├── validators.pt_BR.xliff
│ │ │ ├── validators.ro.xliff
│ │ │ ├── validators.ru.xliff
│ │ │ └── validators.uk.xliff
│ │ └── views/
│ │ ├── admin/
│ │ │ ├── blog/
│ │ │ │ ├── _form.html.twig
│ │ │ │ ├── edit.html.twig
│ │ │ │ ├── index.html.twig
│ │ │ │ ├── new.html.twig
│ │ │ │ └── show.html.twig
│ │ │ └── layout.html.twig
│ │ ├── base.html.twig
│ │ ├── blog/
│ │ │ ├── _comment_form.html.twig
│ │ │ ├── _delete_post_confirmation.html.twig
│ │ │ ├── comment_form_error.html.twig
│ │ │ ├── index.html.twig
│ │ │ └── post_show.html.twig
│ │ ├── default/
│ │ │ ├── _flash_messages.html.twig
│ │ │ └── homepage.html.twig
│ │ ├── form/
│ │ │ └── fields.html.twig
│ │ └── security/
│ │ └── login.html.twig
│ ├── SymfonyRequirements.php
│ ├── autoload.php
│ ├── check.php
│ ├── config/
│ │ ├── config.yml
│ │ ├── config_dev.yml
│ │ ├── config_prod.yml
│ │ ├── config_test.yml
│ │ ├── parameters.yml.dist
│ │ ├── routing.yml
│ │ ├── routing_dev.yml
│ │ ├── security.yml
│ │ └── services.yml
│ ├── console
│ ├── logs/
│ │ └── .gitkeep
│ └── phpunit.xml.dist
├── composer.json
├── src/
│ ├── .htaccess
│ ├── AppBundle/
│ │ ├── AppBundle.php
│ │ ├── Command/
│ │ │ ├── AddUserCommand.php
│ │ │ ├── DeleteUserCommand.php
│ │ │ └── ListUsersCommand.php
│ │ ├── Controller/
│ │ │ ├── Admin/
│ │ │ │ └── BlogController.php
│ │ │ ├── BlogController.php
│ │ │ └── SecurityController.php
│ │ ├── DataFixtures/
│ │ │ └── ORM/
│ │ │ └── LoadFixtures.php
│ │ ├── Entity/
│ │ │ ├── Comment.php
│ │ │ ├── Post.php
│ │ │ └── User.php
│ │ ├── EventListener/
│ │ │ └── RedirectToPreferredLocaleListener.php
│ │ ├── Form/
│ │ │ ├── CommentType.php
│ │ │ ├── PostType.php
│ │ │ └── Type/
│ │ │ └── DateTimePickerType.php
│ │ ├── Repository/
│ │ │ ├── PostRepository.php
│ │ │ └── UserRepository.php
│ │ ├── Tests/
│ │ │ ├── Controller/
│ │ │ │ ├── Admin/
│ │ │ │ │ └── BlogControllerTest.php
│ │ │ │ ├── BlogControllerTest.php
│ │ │ │ └── DefaultControllerTest.php
│ │ │ └── Utils/
│ │ │ └── SluggerTest.php
│ │ ├── Twig/
│ │ │ └── AppExtension.php
│ │ └── Utils/
│ │ ├── Markdown.php
│ │ ├── MomentFormatConverter.php
│ │ └── Slugger.php
│ ├── CodeExplorerBundle/
│ │ ├── CodeExplorerBundle.php
│ │ ├── DependencyInjection/
│ │ │ └── CodeExplorerExtension.php
│ │ ├── EventListener/
│ │ │ └── ControllerListener.php
│ │ ├── Resources/
│ │ │ ├── config/
│ │ │ │ └── services.yml
│ │ │ └── views/
│ │ │ └── source_code.html.twig
│ │ └── Twig/
│ │ └── SourceCodeExtension.php
│ ├── ElasticSearchBundle/
│ │ ├── Controller/
│ │ │ └── ElasticSearchController.php
│ │ ├── ElasticSearchBundle.php
│ │ ├── Resources/
│ │ │ ├── config/
│ │ │ │ ├── config.yml
│ │ │ │ ├── routing.yml
│ │ │ │ └── services.yml
│ │ │ └── views/
│ │ │ └── elastica_search_results.html.twig
│ │ └── Tests/
│ │ └── Controller/
│ │ └── ElasticSearchControllerTest.php
│ ├── OAuthBundle/
│ │ ├── Controller/
│ │ │ └── OAuthController.php
│ │ ├── DependencyInjection/
│ │ │ ├── Configuration.php
│ │ │ └── OAuthExtension.php
│ │ ├── OAuthBundle.php
│ │ ├── Provider/
│ │ │ └── UserProvider.php
│ │ ├── Resources/
│ │ │ └── config/
│ │ │ ├── config.yml
│ │ │ ├── routing.yml
│ │ │ └── services.yml
│ │ ├── Services/
│ │ │ └── AuthenticationSuccessHandler.php
│ │ └── Tests/
│ │ ├── Controller/
│ │ │ └── OAuthControllerTest.php
│ │ └── OAuthTest.php
│ ├── RabbitMQBundle/
│ │ ├── Controller/
│ │ │ └── RabbitMQController.php
│ │ ├── DependencyInjection/
│ │ │ ├── Configuration.php
│ │ │ └── RabbitMQExtension.php
│ │ ├── RabbitMQBundle.php
│ │ ├── Resources/
│ │ │ ├── config/
│ │ │ │ ├── config.yml
│ │ │ │ ├── config_dev.yml
│ │ │ │ ├── config_test.yml
│ │ │ │ ├── routing.yml
│ │ │ │ └── services.yml
│ │ │ └── views/
│ │ │ └── pdf_post_view.html.twig
│ │ ├── Services/
│ │ │ ├── PDFGenerator.php
│ │ │ └── RabbitMQ/
│ │ │ └── PDFGeneratorConsumer.php
│ │ └── Tests/
│ │ └── Controller/
│ │ └── RabbitMQControllerTest.php
│ ├── RedisBundle/
│ │ ├── Controller/
│ │ │ └── RedisController.php
│ │ ├── RedisBundle.php
│ │ ├── Resources/
│ │ │ ├── config/
│ │ │ │ ├── config.yml
│ │ │ │ ├── routing.yml
│ │ │ │ └── services.yml
│ │ │ └── views/
│ │ │ └── blog/
│ │ │ └── top_posts.html.twig
│ │ └── Tests/
│ │ └── Controller/
│ │ └── RedisControllerTest.php
│ └── RestBundle/
│ ├── Controller/
│ │ └── RestController.php
│ ├── DependencyInjection/
│ │ ├── Configuration.php
│ │ └── RestExtension.php
│ ├── Form/
│ │ ├── CommentRestType.php
│ │ └── PostRestType.php
│ ├── Resources/
│ │ ├── config/
│ │ │ ├── config.yml
│ │ │ ├── routing.yml
│ │ │ ├── serializer/
│ │ │ │ └── AppBundle/
│ │ │ │ ├── Entity.Comment.yml
│ │ │ │ └── Entity.Post.yml
│ │ │ └── services.yml
│ │ └── views/
│ │ ├── Comment/
│ │ │ ├── editComment.html.twig
│ │ │ ├── getComment.html.twig
│ │ │ ├── getComments.html.twig
│ │ │ └── newComment.html.twig
│ │ ├── Post/
│ │ │ ├── editPost.html.twig
│ │ │ ├── getPost.html.twig
│ │ │ ├── getPosts.html.twig
│ │ │ └── newPost.html.twig
│ │ ├── api_base_layout.html.twig
│ │ └── api_index.html.twig
│ ├── RestBundle.php
│ └── Tests/
│ └── Controller/
│ └── RestControllerTest.php
├── vagrant/
│ ├── Vagrantfile
│ └── ansible/
│ ├── hosts_inventory
│ ├── roles/
│ │ ├── Stouts.rabbitmq/
│ │ │ ├── .bumpversion.cfg
│ │ │ ├── .travis.yml
│ │ │ ├── CONTRIBUTORS
│ │ │ ├── LICENSE
│ │ │ ├── Makefile
│ │ │ ├── README.md
│ │ │ ├── defaults/
│ │ │ │ └── main.yml
│ │ │ ├── handlers/
│ │ │ │ └── main.yml
│ │ │ ├── meta/
│ │ │ │ ├── .galaxy_install_info
│ │ │ │ └── main.yml
│ │ │ ├── tasks/
│ │ │ │ ├── install.deb.yml
│ │ │ │ ├── main.yml
│ │ │ │ └── rabbitmq.yml
│ │ │ └── test.yml
│ │ ├── geerlingguy.composer/
│ │ │ ├── .travis.yml
│ │ │ ├── README.md
│ │ │ ├── defaults/
│ │ │ │ └── main.yml
│ │ │ ├── meta/
│ │ │ │ ├── .galaxy_install_info
│ │ │ │ └── main.yml
│ │ │ ├── tasks/
│ │ │ │ ├── global-require.yml
│ │ │ │ └── main.yml
│ │ │ ├── templates/
│ │ │ │ ├── auth.json.j2
│ │ │ │ └── composer.sh.j2
│ │ │ └── tests/
│ │ │ ├── inventory
│ │ │ ├── test-global-require.yml
│ │ │ └── test.yml
│ │ ├── geerlingguy.nginx/
│ │ │ ├── .travis.yml
│ │ │ ├── README.md
│ │ │ ├── defaults/
│ │ │ │ └── main.yml
│ │ │ ├── handlers/
│ │ │ │ └── main.yml
│ │ │ ├── meta/
│ │ │ │ ├── .galaxy_install_info
│ │ │ │ └── main.yml
│ │ │ ├── tasks/
│ │ │ │ ├── main.yml
│ │ │ │ ├── setup-Debian.yml
│ │ │ │ ├── setup-RedHat.yml
│ │ │ │ └── vhosts.yml
│ │ │ ├── templates/
│ │ │ │ ├── nginx.conf.j2
│ │ │ │ ├── nginx.repo.j2
│ │ │ │ └── vhosts.j2
│ │ │ ├── tests/
│ │ │ │ ├── inventory
│ │ │ │ └── test.yml
│ │ │ └── vars/
│ │ │ ├── Debian.yml
│ │ │ └── RedHat.yml
│ │ ├── geerlingguy.php/
│ │ │ ├── .travis.yml
│ │ │ ├── README.md
│ │ │ ├── defaults/
│ │ │ │ └── main.yml
│ │ │ ├── handlers/
│ │ │ │ └── main.yml
│ │ │ ├── meta/
│ │ │ │ ├── .galaxy_install_info
│ │ │ │ └── main.yml
│ │ │ ├── tasks/
│ │ │ │ ├── configure-fpm.yml
│ │ │ │ ├── configure.yml
│ │ │ │ ├── install-from-source.yml
│ │ │ │ ├── main.yml
│ │ │ │ ├── setup-Debian.yml
│ │ │ │ └── setup-RedHat.yml
│ │ │ ├── templates/
│ │ │ │ ├── apc.ini.j2
│ │ │ │ ├── fpm-init.j2
│ │ │ │ ├── opcache.ini.j2
│ │ │ │ ├── php-fpm.conf.j2
│ │ │ │ └── php.ini.j2
│ │ │ ├── tests/
│ │ │ │ ├── inventory
│ │ │ │ ├── test-install-from-source.yml
│ │ │ │ └── test-install-package.yml
│ │ │ └── vars/
│ │ │ ├── Debian.yml
│ │ │ └── RedHat.yml
│ │ ├── geerlingguy.redis/
│ │ │ ├── .travis.yml
│ │ │ ├── README.md
│ │ │ ├── defaults/
│ │ │ │ └── main.yml
│ │ │ ├── handlers/
│ │ │ │ └── main.yml
│ │ │ ├── meta/
│ │ │ │ ├── .galaxy_install_info
│ │ │ │ └── main.yml
│ │ │ ├── tasks/
│ │ │ │ ├── main.yml
│ │ │ │ ├── setup-Debian.yml
│ │ │ │ └── setup-RedHat.yml
│ │ │ ├── templates/
│ │ │ │ └── redis.conf.j2
│ │ │ ├── tests/
│ │ │ │ ├── inventory
│ │ │ │ └── test.yml
│ │ │ └── vars/
│ │ │ ├── Debian.yml
│ │ │ └── RedHat.yml
│ │ └── gpstathis.elasticsearch/
│ │ ├── .gitignore
│ │ ├── .travis.yml
│ │ ├── README.md
│ │ ├── Vagrantfile
│ │ ├── defaults/
│ │ │ └── main.yml
│ │ ├── handlers/
│ │ │ └── main.yml
│ │ ├── meta/
│ │ │ ├── .galaxy_install_info
│ │ │ └── main.yml
│ │ ├── tasks/
│ │ │ ├── aws.yml
│ │ │ ├── custom-jars.yml
│ │ │ ├── elastic-install.yml
│ │ │ ├── java.yml
│ │ │ ├── main.yml
│ │ │ ├── marvel.yml
│ │ │ ├── plugins.yml
│ │ │ ├── post-run.yml
│ │ │ ├── spm.yml
│ │ │ └── timezone.yml
│ │ ├── templates/
│ │ │ ├── elasticsearch.default.j2
│ │ │ ├── elasticsearch.in.sh.j2
│ │ │ └── elasticsearch.yml.j2
│ │ ├── tests/
│ │ │ ├── ansible.cfg
│ │ │ ├── elastic_test.sh
│ │ │ ├── local.ini
│ │ │ ├── test1.yml
│ │ │ └── test1_var.yml
│ │ ├── vagrant-inventory.ini
│ │ ├── vagrant-main.yml
│ │ └── vars/
│ │ ├── sample.yml
│ │ └── vagrant.yml
│ ├── setup.yml
│ └── templates/
│ └── rabbitmq-consumers.j2
└── web/
├── .htaccess
├── app.php
├── app_dev.php
├── config.php
├── css/
│ ├── api.css
│ └── app.css
├── fonts/
│ └── font-awesome/
│ └── FontAwesome.otf
├── js/
│ └── app.js
└── robots.txt
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
# Cache and logs (Symfony2)
/app/cache/*
/app/logs/*
!app/cache/.gitkeep
!app/logs/.gitkeep
# Cache and logs (Symfony3)
/var/cache/*
/var/logs/*
!var/cache/.gitkeep
!var/logs/.gitkeep
# Parameters
/app/config/parameters.yml
/app/config/parameters.ini
# Managed by Composer
/app/bootstrap.php.cache
/var/bootstrap.php.cache
/bin/*
!bin/console
!bin/symfony_requirements
/vendor/
# Assets and user uploads
/web/bundles/
/web/uploads/
/web/downloads/
# PHPUnit
/app/phpunit.xml
/phpunit.xml
# Build data
/build/
# Composer PHAR
/composer.phar
# Vagrant
/vagrant/.vagrant/
# IDE
/.idea/
================================================
FILE: .travis.yml
================================================
language: php
sudo: required
cache:
directories:
- $HOME/.composer/cache/files
matrix:
fast_finish: true
include:
- php: 5.5
- php: 5.6
- php: 7.0
allow_failures:
- php: 7.0
services:
- redis-server
- elasticsearch
- rabbitmq
before_install:
- wget http://download.gna.org/wkhtmltopdf/0.12/0.12.3/wkhtmltox-0.12.3_linux-generic-amd64.tar.xz
- tar xf wkhtmltox-0.12.3_linux-generic-amd64.tar.xz
- sudo mv wkhtmltox/bin/wkhtmltopdf /usr/local/bin/
- chmod +x /usr/local/bin/wkhtmltopdf
install:
- composer install
before_script:
- sudo rabbitmqctl add_user admin symfony.demo.on.roids
- app/console rabbitmq:consumer generate_pdf --env=test &
script:
- phpunit -c app
================================================
FILE: LICENSE
================================================
The MIT License (MIT)
Copyright (c) 2015 Alfonso M.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: README.md
================================================
# The Symfony Demo Application on Roids!
[](https://travis-ci.org/alfonsomga/symfony.demo.on.roids)[](https://packagist.org/packages/alfonsomga/symfony.demo.on.roids)[](https://packagist.org/packages/alfonsomga/symfony.demo.on.roids)[](https://packagist.org/packages/alfonsomga/symfony.demo.on.roids)
The "Symfony Demo Application on Roids" is an application based on the original [**Symfony Demo Application**](https://github.com/symfony/symfony-demo) that includes extra features using technologies like [**Elasticsearch**](https://www.elastic.co/products/elasticsearch), [**OAuth**](http://oauth.net/), [**RabbitMQ**](https://www.rabbitmq.com/), [**Redis**](http://redis.io/) and a [**RESTful API**](https://en.wikipedia.org/wiki/Representational_state_transfer) + [**HATEOAS**](https://en.wikipedia.org/wiki/HATEOAS).
<p align="center">
<a href="#"><img src="http://svgporn.com/logos/elasticsearch.svg" heigh="15%" width="15%"></a>
<a href="#"><img src="http://svgporn.com/logos/oauth.svg" heigh="15%" width="15%"></a>
<a href="#"><img src="http://svgporn.com/logos/rabbitmq.svg" heigh="15%" width="15%"></a>
<a href="#"><img src="http://svgporn.com/logos/redis.svg" heigh="15%" width="15%"></a>
<a href="#"><img src="https://i.imgur.com/qovozc2.png" heigh="15%" width="15%"></a>
</p>
## Table of Contents
- [Setting up & running the demo with Vagrant + Ansible](#setting-up--running-the-demo-with-vagrant--ansible)
- [Prerequisites](#prerequisites)
- [Instructions](#instructions)
- [RESTful API + HATEOAS](#restful-api--hateoas)
- [Elasticsearch](#elasticsearch)
- [OAuth](#oauth)
- [RabbitMQ](#rabbitmq)
- [Redis](#redis)
<img src="http://svgporn.com/logos/ansible.svg" heigh="5%" width="5%" align="right">
<img src="http://svgporn.com/logos/vagrant.svg" heigh="5%" width="5%" align="right">
## Setting up & running the demo with [**Vagrant**](https://www.vagrantup.com/) + [**Ansible**](http://www.ansible.com/)
<img src="http://fotos.subefotos.com/dd1a2c7b983291b6bba45185952f1eaeo.png">
### Prerequisites
- [Vagrant](https://www.vagrantup.com/downloads.html) installed
- [Ansible] (http://docs.ansible.com/ansible/intro_installation.html) installed
- [Virtualbox](https://www.virtualbox.org/wiki/Downloads) installed
### Instructions
1. ``git clone https://github.com/alfonsomga/symfony.demo.on.roids.git``
2. ``cd symfony.demo.on.roids/vagrant/``
3. ``vagrant up``
4. Wait until Ansible installs and configure everything
5. Finally navigate to <a href="http://192.168.50.88/" target="_blank">**http://192.168.50.88**</a> to browse the app
Congratulations! You're now ready to use The Symfony Demo On Roids.
<img src="https://i.imgur.com/qovozc2.png" heigh="10%" width="10%" align="right">
## RESTful API + HATEOAS
<img src="http://fotos.subefotos.com/902ef9199023b7d7ff1e37aadc32ee09o.png">
A RESTful API + HATEOAS has been implemented for expose the resources. Different formats are available for manage the data: HTML, JSON and XML.
**Related urls:**
- <a href="http://192.168.50.88/api/v1/" target="_blank">**API Index page**</a>
- <a href="http://192.168.50.88/api/doc" target="_blank">**API Documentation**</a>
**Bundles used:**
- [**FOSRestBundle**](https://github.com/FriendsOfSymfony/FOSRestBundle)
- [**JMSSerializerBundle**](https://github.com/schmittjoh/JMSSerializerBundle)
- [**NelmioApiDocBundle**](https://github.com/nelmio/NelmioApiDocBundle)
- [**FOSHttpCacheBundle**](https://github.com/FriendsOfSymfony/FOSHttpCacheBundle)
- [**BazingaHateoasBundle**](https://github.com/willdurand/BazingaHateoasBundle)
- [**BazingaRestExtraBundle**](https://github.com/willdurand/BazingaRestExtraBundle)
<img src="http://svgporn.com/logos/elasticsearch.svg" heigh="10%" width="10%" align="right">
## Elasticsearch
<img src="http://fotos.subefotos.com/073c48b4ad7243e1ca4385dc34f5a2e9o.png">
Elasticsearch has been used for add a simple search form and show relevant results based on the user search query.
**Related urls:**
- <a href="http://192.168.50.88:9200/_plugin/head/" target="_blank">**Elasticsearch Admin panel**</a>
- <a href="http://192.168.50.88/blog/search-results?q=Lorem+ipsum" target="_blank">**Elasticsearch app search page (results for ``Lorem ipsum``)**</a>
**Bundles used:**
- [**FOSElasticaBundle**](https://github.com/FriendsOfSymfony/FOSElasticaBundle)
<img src="http://svgporn.com/logos/oauth.svg" heigh="15%" width="10%" align="right">
## OAuth
<img src="http://fotos.subefotos.com/8aa0e2f21490393c399ed412b0003ba3o.png">
OAuth has been used for link/unlink an account from an OAuth provider (GitHub in this case) to an existent backend account and allows to log in directly to the backend from a GitHub account.
To use this feature you must [register a new OAuth Application](https://github.com/settings/applications/new) and edit the [parameters.yml.dist](https://github.com/alfonsomga/symfony.demo.on.roids/blob/master/app/config/parameters.yml.dist) file with your app ``client id`` and ``client secret`` token.
**Related urls:**
- <a href="http://192.168.50.88/en/login" target="_blank">**Login page (click on ``Sign in with GitHub``)**</a>
- <a href="http://192.168.50.88/en/admin/post/" target="_blank">**Manage your OAuth account (``Link`` or ``Unlink`` ``Github Account``)**</a>
**Bundles used:**
- [**HWIOAuthBundle**](https://github.com/hwi/HWIOAuthBundle)
<img src="http://svgporn.com/logos/rabbitmq.svg" heigh="10%" width="10%" align="right">
## RabbitMQ
<img src="http://fotos.subefotos.com/39b1eaf4c05ef3124701805f9d3a80d7o.png">
RabbitMQ has been used for generate a PDF file based on the article content from a consumer in a scalable way.
**Related urls:**
- <a href="http://192.168.50.88:15672" target="_blank">**RabbitMQ Admin panel (User: ``admin`` password: ``symfony.demo.on.roids``)**</a>
- <a href="http://192.168.50.88/en/blog/posts/lorem-ipsum-dolor-sit-amet-consectetur-adipiscing-elit" target="_blank">**Post page (click on ``Download post as PDF``)**</a>
**Bundles used:**
- [**RabbitMqBundle**](https://github.com/videlalvaro/RabbitMqBundle)
- [**KnpSnappyBundle**](https://github.com/KnpLabs/KnpSnappyBundle)
<img src="http://svgporn.com/logos/redis.svg" heigh="10%" width="10%" align="right">
## Redis
<img src="http://fotos.subefotos.com/8e6e6a3507f8145c3bf72d3c9af53951o.png">
Redis has been used for show the top 5 popular posts and set a cache lifetime of 3600 seconds.
**Related urls:**
- <a href="http://192.168.50.88/blog/top-5-popular-posts" target="_blank">**Top 5 popular posts**</a>
**Bundles used:**
- [**SncRedisBundle**](https://github.com/snc/SncRedisBundle)
================================================
FILE: app/.htaccess
================================================
<IfModule mod_authz_core.c>
Require all denied
</IfModule>
<IfModule !mod_authz_core.c>
Order deny,allow
Deny from all
</IfModule>
================================================
FILE: app/AppCache.php
================================================
<?php
use Symfony\Bundle\FrameworkBundle\HttpCache\HttpCache;
class AppCache extends HttpCache
{
}
================================================
FILE: app/AppKernel.php
================================================
<?php
use Symfony\Component\HttpKernel\Kernel;
use Symfony\Component\Config\Loader\LoaderInterface;
class AppKernel extends Kernel
{
public function registerBundles()
{
// When you install a third-party bundle or create a new bundle in your
// application, you must add it in the following array to register it
// in the application. Otherwise, the bundle won't be enabled and you
// won't be able to use it.
$bundles = array(
new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
new Symfony\Bundle\SecurityBundle\SecurityBundle(),
new Symfony\Bundle\TwigBundle\TwigBundle(),
new Symfony\Bundle\MonologBundle\MonologBundle(),
new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
new Symfony\Bundle\AsseticBundle\AsseticBundle(),
new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(),
new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
new Knp\Bundle\PaginatorBundle\KnpPaginatorBundle(),
new CodeExplorerBundle\CodeExplorerBundle(),
new AppBundle\AppBundle(),
new RestBundle\RestBundle(),
new OAuthBundle\OAuthBundle(),
new RedisBundle\RedisBundle(),
new RabbitMQBundle\RabbitMQBundle(),
new ElasticSearchBundle\ElasticSearchBundle(),
new JMS\SerializerBundle\JMSSerializerBundle(),
new FOS\RestBundle\FOSRestBundle(),
new Nelmio\ApiDocBundle\NelmioApiDocBundle(),
new FOS\HttpCacheBundle\FOSHttpCacheBundle(),
new Bazinga\Bundle\HateoasBundle\BazingaHateoasBundle(),
new Bazinga\Bundle\RestExtraBundle\BazingaRestExtraBundle(),
new HWI\Bundle\OAuthBundle\HWIOAuthBundle(),
new Snc\RedisBundle\SncRedisBundle(),
new FOS\ElasticaBundle\FOSElasticaBundle(),
new OldSound\RabbitMqBundle\OldSoundRabbitMqBundle(),
new Knp\Bundle\SnappyBundle\KnpSnappyBundle(),
);
// Some bundles are only used while developing the application or during
// the unit and functional tests. Therefore, they are only registered
// when the application runs in 'dev' or 'test' environments. This allows
// to increase application performance in the production environment.
if (in_array($this->getEnvironment(), array('dev', 'test'))) {
$bundles[] = new Symfony\Bundle\DebugBundle\DebugBundle();
$bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
$bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle();
$bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle();
$bundles[] = new Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle();
$bundles[] = new Liip\FunctionalTestBundle\LiipFunctionalTestBundle();
}
return $bundles;
}
public function registerContainerConfiguration(LoaderInterface $loader)
{
$loader->load(__DIR__.'/config/config_'.$this->getEnvironment().'.yml');
}
}
================================================
FILE: app/Resources/TwigBundle/views/Exception/error.html.twig
================================================
{#
This template is used to render any error different from 403, 404 and 500.
This is the simplest way to customize error pages in Symfony applications.
In case you need it, you can also hook into the internal exception handling
made by Symfony. This allows you to perform advanced tasks and even recover
your application from some errors.
See http://symfony.com/doc/current/cookbook/controller/error_pages.html
#}
{% extends 'base.html.twig' %}
{% block body_id 'error' %}
{% block main %}
<h1 class="text-danger">Error</h1>
<p class="lead">
There was an unknown error (HTTP {{ status_code }})
that prevented to complete your request.
</p>
<p>
Try loading this page again in some minutes or
<a href="{{ path('blog_index') }}">go back to the homepage</a>.
</p>
{% endblock %}
{% block sidebar %}
{{ parent() }}
{{ show_source_code(_self) }}
{% endblock %}
================================================
FILE: app/Resources/TwigBundle/views/Exception/error403.html.twig
================================================
{#
This template is used to render errors of type HTTP 403 (Forbidden)
This is the simplest way to customize error pages in Symfony applications.
In case you need it, you can also hook into the internal exception handling
made by Symfony. This allows you to perform advanced tasks and even recover
your application from some errors.
See http://symfony.com/doc/current/cookbook/controller/error_pages.html
#}
{% extends 'base.html.twig' %}
{% block body_id 'error' %}
{% block main %}
<h1 class="text-danger"><i class="fa fa-unlock-alt"></i> Error 403</h1>
<p class="lead">
You don't have permission to access to this resource.
</p>
<p>
Ask your manager or system administrator to grant you
access to this resource.
</p>
{% endblock %}
{% block sidebar %}
{{ parent() }}
{{ show_source_code(_self) }}
{% endblock %}
================================================
FILE: app/Resources/TwigBundle/views/Exception/error404.html.twig
================================================
{#
This template is used to render errors of type HTTP 404 (Not Found)
This is the simplest way to customize error pages in Symfony applications.
In case you need it, you can also hook into the internal exception handling
made by Symfony. This allows you to perform advanced tasks and even recover
your application from some errors.
See http://symfony.com/doc/current/cookbook/controller/error_pages.html
#}
{% extends 'base.html.twig' %}
{% block body_id 'error' %}
{% block main %}
<h1 class="text-danger">Error 404</h1>
<p class="lead">
We couldn't find the page you requested.
</p>
<p>
Check out any misspelling in the URL or
<a href="{{ path('blog_index') }}">go back to the homepage</a>.
</p>
{% endblock %}
{% block sidebar %}
{{ parent() }}
{{ show_source_code(_self) }}
{% endblock %}
================================================
FILE: app/Resources/TwigBundle/views/Exception/error500.html.twig
================================================
{#
This template is used to render errors of type HTTP 500 (Internal Server Error)
This is the simplest way to customize error pages in Symfony applications.
In case you need it, you can also hook into the internal exception handling
made by Symfony. This allows you to perform advanced tasks and even recover
your application from some errors.
See http://symfony.com/doc/current/cookbook/controller/error_pages.html
#}
{% extends 'base.html.twig' %}
{% block body_id 'error' %}
{% block main %}
<h1 class="text-danger">Error 500</h1>
<p class="lead">
There was an internal server error.
</p>
<p>
Try loading this page again in some minutes or
<a href="{{ path('blog_index') }}">go back to the homepage</a>.
</p>
{% endblock %}
{% block sidebar %}
{{ parent() }}
{{ show_source_code(_self) }}
{% endblock %}
================================================
FILE: app/Resources/assets/css/font-lato.css
================================================
@font-face {
font-family: 'Lato';
font-style: normal;
font-weight: 400;
src: local('Lato Regular'), local('Lato-Regular'), url('../fonts/lato/Lato-Regular.woff') format('woff');
}
@font-face {
font-family: 'Lato';
font-style: normal;
font-weight: 700;
src: local('Lato Bold'), local('Lato-Bold'), url('../fonts/lato/Lato-Bold.woff') format('woff');
}
@font-face {
font-family: 'Lato';
font-style: italic;
font-weight: 400;
src: local('Lato Italic'), local('Lato-Italic'), url('../fonts/lato/Lato-Italic.woff') format('woff');
}
@font-face {
font-family: 'Lato';
font-style: italic;
font-weight: 700;
src: local('Lato Bold Italic'), local('Lato-BoldItalic'), url('../fonts/lato/Lato-BoldItalic.woff') format('woff');
}
================================================
FILE: app/Resources/assets/css/highlight-solarized-light.css
================================================
/*
Orginal Style from ethanschoonover.com/solarized (c) Jeremy Hull <sourdrums@gmail.com>
*/
.hljs {
display: block;
overflow-x: auto;
padding: 0.5em;
background: #fdf6e3;
color: #657b83;
-webkit-text-size-adjust: none;
}
.hljs-comment,
.diff .hljs-header,
.hljs-doctype,
.hljs-pi,
.lisp .hljs-string,
.hljs-javadoc {
color: #93a1a1;
}
/* Solarized Green */
.hljs-keyword,
.hljs-winutils,
.method,
.hljs-addition,
.css .hljs-tag,
.hljs-request,
.hljs-status,
.nginx .hljs-title {
color: #859900;
}
/* Solarized Cyan */
.hljs-number,
.hljs-command,
.hljs-string,
.hljs-tag .hljs-value,
.hljs-rules .hljs-value,
.hljs-phpdoc,
.hljs-dartdoc,
.tex .hljs-formula,
.hljs-regexp,
.hljs-hexcolor,
.hljs-link_url {
color: #2aa198;
}
/* Solarized Blue */
.hljs-title,
.hljs-localvars,
.hljs-chunk,
.hljs-decorator,
.hljs-built_in,
.hljs-identifier,
.vhdl .hljs-literal,
.hljs-id,
.css .hljs-function {
color: #268bd2;
}
/* Solarized Yellow */
.hljs-attribute,
.hljs-variable,
.lisp .hljs-body,
.smalltalk .hljs-number,
.hljs-constant,
.hljs-class .hljs-title,
.hljs-parent,
.hljs-type,
.hljs-link_reference {
color: #b58900;
}
/* Solarized Orange */
.hljs-preprocessor,
.hljs-preprocessor .hljs-keyword,
.hljs-pragma,
.hljs-shebang,
.hljs-symbol,
.hljs-symbol .hljs-string,
.diff .hljs-change,
.hljs-special,
.hljs-attr_selector,
.hljs-subst,
.hljs-cdata,
.css .hljs-pseudo,
.hljs-header {
color: #cb4b16;
}
/* Solarized Red */
.hljs-deletion,
.hljs-important {
color: #dc322f;
}
/* Solarized Violet */
.hljs-link_label {
color: #6c71c4;
}
.tex .hljs-formula {
background: #eee8d5;
}
================================================
FILE: app/Resources/assets/js/bootstrap-3.3.4.js
================================================
/*!
* Bootstrap v3.3.4 (http://getbootstrap.com)
* Copyright 2011-2015 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
if (typeof jQuery === 'undefined') {
throw new Error('Bootstrap\'s JavaScript requires jQuery')
}
+function ($) {
'use strict';
var version = $.fn.jquery.split(' ')[0].split('.')
if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1)) {
throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher')
}
}(jQuery);
/* ========================================================================
* Bootstrap: transition.js v3.3.4
* http://getbootstrap.com/javascript/#transitions
* ========================================================================
* Copyright 2011-2015 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
+function ($) {
'use strict';
// CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
// ============================================================
function transitionEnd() {
var el = document.createElement('bootstrap')
var transEndEventNames = {
WebkitTransition : 'webkitTransitionEnd',
MozTransition : 'transitionend',
OTransition : 'oTransitionEnd otransitionend',
transition : 'transitionend'
}
for (var name in transEndEventNames) {
if (el.style[name] !== undefined) {
return { end: transEndEventNames[name] }
}
}
return false // explicit for ie8 ( ._.)
}
// http://blog.alexmaccaw.com/css-transitions
$.fn.emulateTransitionEnd = function (duration) {
var called = false
var $el = this
$(this).one('bsTransitionEnd', function () { called = true })
var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
setTimeout(callback, duration)
return this
}
$(function () {
$.support.transition = transitionEnd()
if (!$.support.transition) return
$.event.special.bsTransitionEnd = {
bindType: $.support.transition.end,
delegateType: $.support.transition.end,
handle: function (e) {
if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)
}
}
})
}(jQuery);
/* ========================================================================
* Bootstrap: alert.js v3.3.4
* http://getbootstrap.com/javascript/#alerts
* ========================================================================
* Copyright 2011-2015 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
+function ($) {
'use strict';
// ALERT CLASS DEFINITION
// ======================
var dismiss = '[data-dismiss="alert"]'
var Alert = function (el) {
$(el).on('click', dismiss, this.close)
}
Alert.VERSION = '3.3.4'
Alert.TRANSITION_DURATION = 150
Alert.prototype.close = function (e) {
var $this = $(this)
var selector = $this.attr('data-target')
if (!selector) {
selector = $this.attr('href')
selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
}
var $parent = $(selector)
if (e) e.preventDefault()
if (!$parent.length) {
$parent = $this.closest('.alert')
}
$parent.trigger(e = $.Event('close.bs.alert'))
if (e.isDefaultPrevented()) return
$parent.removeClass('in')
function removeElement() {
// detach from parent, fire event then clean up data
$parent.detach().trigger('closed.bs.alert').remove()
}
$.support.transition && $parent.hasClass('fade') ?
$parent
.one('bsTransitionEnd', removeElement)
.emulateTransitionEnd(Alert.TRANSITION_DURATION) :
removeElement()
}
// ALERT PLUGIN DEFINITION
// =======================
function Plugin(option) {
return this.each(function () {
var $this = $(this)
var data = $this.data('bs.alert')
if (!data) $this.data('bs.alert', (data = new Alert(this)))
if (typeof option == 'string') data[option].call($this)
})
}
var old = $.fn.alert
$.fn.alert = Plugin
$.fn.alert.Constructor = Alert
// ALERT NO CONFLICT
// =================
$.fn.alert.noConflict = function () {
$.fn.alert = old
return this
}
// ALERT DATA-API
// ==============
$(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)
}(jQuery);
/* ========================================================================
* Bootstrap: button.js v3.3.4
* http://getbootstrap.com/javascript/#buttons
* ========================================================================
* Copyright 2011-2015 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
+function ($) {
'use strict';
// BUTTON PUBLIC CLASS DEFINITION
// ==============================
var Button = function (element, options) {
this.$element = $(element)
this.options = $.extend({}, Button.DEFAULTS, options)
this.isLoading = false
}
Button.VERSION = '3.3.4'
Button.DEFAULTS = {
loadingText: 'loading...'
}
Button.prototype.setState = function (state) {
var d = 'disabled'
var $el = this.$element
var val = $el.is('input') ? 'val' : 'html'
var data = $el.data()
state = state + 'Text'
if (data.resetText == null) $el.data('resetText', $el[val]())
// push to event loop to allow forms to submit
setTimeout($.proxy(function () {
$el[val](data[state] == null ? this.options[state] : data[state])
if (state == 'loadingText') {
this.isLoading = true
$el.addClass(d).attr(d, d)
} else if (this.isLoading) {
this.isLoading = false
$el.removeClass(d).removeAttr(d)
}
}, this), 0)
}
Button.prototype.toggle = function () {
var changed = true
var $parent = this.$element.closest('[data-toggle="buttons"]')
if ($parent.length) {
var $input = this.$element.find('input')
if ($input.prop('type') == 'radio') {
if ($input.prop('checked') && this.$element.hasClass('active')) changed = false
else $parent.find('.active').removeClass('active')
}
if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change')
} else {
this.$element.attr('aria-pressed', !this.$element.hasClass('active'))
}
if (changed) this.$element.toggleClass('active')
}
// BUTTON PLUGIN DEFINITION
// ========================
function Plugin(option) {
return this.each(function () {
var $this = $(this)
var data = $this.data('bs.button')
var options = typeof option == 'object' && option
if (!data) $this.data('bs.button', (data = new Button(this, options)))
if (option == 'toggle') data.toggle()
else if (option) data.setState(option)
})
}
var old = $.fn.button
$.fn.button = Plugin
$.fn.button.Constructor = Button
// BUTTON NO CONFLICT
// ==================
$.fn.button.noConflict = function () {
$.fn.button = old
return this
}
// BUTTON DATA-API
// ===============
$(document)
.on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {
var $btn = $(e.target)
if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
Plugin.call($btn, 'toggle')
e.preventDefault()
})
.on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) {
$(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))
})
}(jQuery);
/* ========================================================================
* Bootstrap: carousel.js v3.3.4
* http://getbootstrap.com/javascript/#carousel
* ========================================================================
* Copyright 2011-2015 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
+function ($) {
'use strict';
// CAROUSEL CLASS DEFINITION
// =========================
var Carousel = function (element, options) {
this.$element = $(element)
this.$indicators = this.$element.find('.carousel-indicators')
this.options = options
this.paused = null
this.sliding = null
this.interval = null
this.$active = null
this.$items = null
this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))
this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element
.on('mouseenter.bs.carousel', $.proxy(this.pause, this))
.on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
}
Carousel.VERSION = '3.3.4'
Carousel.TRANSITION_DURATION = 600
Carousel.DEFAULTS = {
interval: 5000,
pause: 'hover',
wrap: true,
keyboard: true
}
Carousel.prototype.keydown = function (e) {
if (/input|textarea/i.test(e.target.tagName)) return
switch (e.which) {
case 37: this.prev(); break
case 39: this.next(); break
default: return
}
e.preventDefault()
}
Carousel.prototype.cycle = function (e) {
e || (this.paused = false)
this.interval && clearInterval(this.interval)
this.options.interval
&& !this.paused
&& (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
return this
}
Carousel.prototype.getItemIndex = function (item) {
this.$items = item.parent().children('.item')
return this.$items.index(item || this.$active)
}
Carousel.prototype.getItemForDirection = function (direction, active) {
var activeIndex = this.getItemIndex(active)
var willWrap = (direction == 'prev' && activeIndex === 0)
|| (direction == 'next' && activeIndex == (this.$items.length - 1))
if (willWrap && !this.options.wrap) return active
var delta = direction == 'prev' ? -1 : 1
var itemIndex = (activeIndex + delta) % this.$items.length
return this.$items.eq(itemIndex)
}
Carousel.prototype.to = function (pos) {
var that = this
var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))
if (pos > (this.$items.length - 1) || pos < 0) return
if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid"
if (activeIndex == pos) return this.pause().cycle()
return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))
}
Carousel.prototype.pause = function (e) {
e || (this.paused = true)
if (this.$element.find('.next, .prev').length && $.support.transition) {
this.$element.trigger($.support.transition.end)
this.cycle(true)
}
this.interval = clearInterval(this.interval)
return this
}
Carousel.prototype.next = function () {
if (this.sliding) return
return this.slide('next')
}
Carousel.prototype.prev = function () {
if (this.sliding) return
return this.slide('prev')
}
Carousel.prototype.slide = function (type, next) {
var $active = this.$element.find('.item.active')
var $next = next || this.getItemForDirection(type, $active)
var isCycling = this.interval
var direction = type == 'next' ? 'left' : 'right'
var that = this
if ($next.hasClass('active')) return (this.sliding = false)
var relatedTarget = $next[0]
var slideEvent = $.Event('slide.bs.carousel', {
relatedTarget: relatedTarget,
direction: direction
})
this.$element.trigger(slideEvent)
if (slideEvent.isDefaultPrevented()) return
this.sliding = true
isCycling && this.pause()
if (this.$indicators.length) {
this.$indicators.find('.active').removeClass('active')
var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])
$nextIndicator && $nextIndicator.addClass('active')
}
var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
if ($.support.transition && this.$element.hasClass('slide')) {
$next.addClass(type)
$next[0].offsetWidth // force reflow
$active.addClass(direction)
$next.addClass(direction)
$active
.one('bsTransitionEnd', function () {
$next.removeClass([type, direction].join(' ')).addClass('active')
$active.removeClass(['active', direction].join(' '))
that.sliding = false
setTimeout(function () {
that.$element.trigger(slidEvent)
}, 0)
})
.emulateTransitionEnd(Carousel.TRANSITION_DURATION)
} else {
$active.removeClass('active')
$next.addClass('active')
this.sliding = false
this.$element.trigger(slidEvent)
}
isCycling && this.cycle()
return this
}
// CAROUSEL PLUGIN DEFINITION
// ==========================
function Plugin(option) {
return this.each(function () {
var $this = $(this)
var data = $this.data('bs.carousel')
var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)
var action = typeof option == 'string' ? option : options.slide
if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))
if (typeof option == 'number') data.to(option)
else if (action) data[action]()
else if (options.interval) data.pause().cycle()
})
}
var old = $.fn.carousel
$.fn.carousel = Plugin
$.fn.carousel.Constructor = Carousel
// CAROUSEL NO CONFLICT
// ====================
$.fn.carousel.noConflict = function () {
$.fn.carousel = old
return this
}
// CAROUSEL DATA-API
// =================
var clickHandler = function (e) {
var href
var $this = $(this)
var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
if (!$target.hasClass('carousel')) return
var options = $.extend({}, $target.data(), $this.data())
var slideIndex = $this.attr('data-slide-to')
if (slideIndex) options.interval = false
Plugin.call($target, options)
if (slideIndex) {
$target.data('bs.carousel').to(slideIndex)
}
e.preventDefault()
}
$(document)
.on('click.bs.carousel.data-api', '[data-slide]', clickHandler)
.on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)
$(window).on('load', function () {
$('[data-ride="carousel"]').each(function () {
var $carousel = $(this)
Plugin.call($carousel, $carousel.data())
})
})
}(jQuery);
/* ========================================================================
* Bootstrap: collapse.js v3.3.4
* http://getbootstrap.com/javascript/#collapse
* ========================================================================
* Copyright 2011-2015 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
+function ($) {
'use strict';
// COLLAPSE PUBLIC CLASS DEFINITION
// ================================
var Collapse = function (element, options) {
this.$element = $(element)
this.options = $.extend({}, Collapse.DEFAULTS, options)
this.$trigger = $('[data-toggle="collapse"][href="#' + element.id + '"],' +
'[data-toggle="collapse"][data-target="#' + element.id + '"]')
this.transitioning = null
if (this.options.parent) {
this.$parent = this.getParent()
} else {
this.addAriaAndCollapsedClass(this.$element, this.$trigger)
}
if (this.options.toggle) this.toggle()
}
Collapse.VERSION = '3.3.4'
Collapse.TRANSITION_DURATION = 350
Collapse.DEFAULTS = {
toggle: true
}
Collapse.prototype.dimension = function () {
var hasWidth = this.$element.hasClass('width')
return hasWidth ? 'width' : 'height'
}
Collapse.prototype.show = function () {
if (this.transitioning || this.$element.hasClass('in')) return
var activesData
var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')
if (actives && actives.length) {
activesData = actives.data('bs.collapse')
if (activesData && activesData.transitioning) return
}
var startEvent = $.Event('show.bs.collapse')
this.$element.trigger(startEvent)
if (startEvent.isDefaultPrevented()) return
if (actives && actives.length) {
Plugin.call(actives, 'hide')
activesData || actives.data('bs.collapse', null)
}
var dimension = this.dimension()
this.$element
.removeClass('collapse')
.addClass('collapsing')[dimension](0)
.attr('aria-expanded', true)
this.$trigger
.removeClass('collapsed')
.attr('aria-expanded', true)
this.transitioning = 1
var complete = function () {
this.$element
.removeClass('collapsing')
.addClass('collapse in')[dimension]('')
this.transitioning = 0
this.$element
.trigger('shown.bs.collapse')
}
if (!$.support.transition) return complete.call(this)
var scrollSize = $.camelCase(['scroll', dimension].join('-'))
this.$element
.one('bsTransitionEnd', $.proxy(complete, this))
.emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])
}
Collapse.prototype.hide = function () {
if (this.transitioning || !this.$element.hasClass('in')) return
var startEvent = $.Event('hide.bs.collapse')
this.$element.trigger(startEvent)
if (startEvent.isDefaultPrevented()) return
var dimension = this.dimension()
this.$element[dimension](this.$element[dimension]())[0].offsetHeight
this.$element
.addClass('collapsing')
.removeClass('collapse in')
.attr('aria-expanded', false)
this.$trigger
.addClass('collapsed')
.attr('aria-expanded', false)
this.transitioning = 1
var complete = function () {
this.transitioning = 0
this.$element
.removeClass('collapsing')
.addClass('collapse')
.trigger('hidden.bs.collapse')
}
if (!$.support.transition) return complete.call(this)
this.$element
[dimension](0)
.one('bsTransitionEnd', $.proxy(complete, this))
.emulateTransitionEnd(Collapse.TRANSITION_DURATION)
}
Collapse.prototype.toggle = function () {
this[this.$element.hasClass('in') ? 'hide' : 'show']()
}
Collapse.prototype.getParent = function () {
return $(this.options.parent)
.find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]')
.each($.proxy(function (i, element) {
var $element = $(element)
this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)
}, this))
.end()
}
Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {
var isOpen = $element.hasClass('in')
$element.attr('aria-expanded', isOpen)
$trigger
.toggleClass('collapsed', !isOpen)
.attr('aria-expanded', isOpen)
}
function getTargetFromTrigger($trigger) {
var href
var target = $trigger.attr('data-target')
|| (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
return $(target)
}
// COLLAPSE PLUGIN DEFINITION
// ==========================
function Plugin(option) {
return this.each(function () {
var $this = $(this)
var data = $this.data('bs.collapse')
var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false
if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
if (typeof option == 'string') data[option]()
})
}
var old = $.fn.collapse
$.fn.collapse = Plugin
$.fn.collapse.Constructor = Collapse
// COLLAPSE NO CONFLICT
// ====================
$.fn.collapse.noConflict = function () {
$.fn.collapse = old
return this
}
// COLLAPSE DATA-API
// =================
$(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
var $this = $(this)
if (!$this.attr('data-target')) e.preventDefault()
var $target = getTargetFromTrigger($this)
var data = $target.data('bs.collapse')
var option = data ? 'toggle' : $this.data()
Plugin.call($target, option)
})
}(jQuery);
/* ========================================================================
* Bootstrap: dropdown.js v3.3.4
* http://getbootstrap.com/javascript/#dropdowns
* ========================================================================
* Copyright 2011-2015 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
+function ($) {
'use strict';
// DROPDOWN CLASS DEFINITION
// =========================
var backdrop = '.dropdown-backdrop'
var toggle = '[data-toggle="dropdown"]'
var Dropdown = function (element) {
$(element).on('click.bs.dropdown', this.toggle)
}
Dropdown.VERSION = '3.3.4'
Dropdown.prototype.toggle = function (e) {
var $this = $(this)
if ($this.is('.disabled, :disabled')) return
var $parent = getParent($this)
var isActive = $parent.hasClass('open')
clearMenus()
if (!isActive) {
if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
// if mobile we use a backdrop because click events don't delegate
$('<div class="dropdown-backdrop"/>').insertAfter($(this)).on('click', clearMenus)
}
var relatedTarget = { relatedTarget: this }
$parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))
if (e.isDefaultPrevented()) return
$this
.trigger('focus')
.attr('aria-expanded', 'true')
$parent
.toggleClass('open')
.trigger('shown.bs.dropdown', relatedTarget)
}
return false
}
Dropdown.prototype.keydown = function (e) {
if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return
var $this = $(this)
e.preventDefault()
e.stopPropagation()
if ($this.is('.disabled, :disabled')) return
var $parent = getParent($this)
var isActive = $parent.hasClass('open')
if ((!isActive && e.which != 27) || (isActive && e.which == 27)) {
if (e.which == 27) $parent.find(toggle).trigger('focus')
return $this.trigger('click')
}
var desc = ' li:not(.disabled):visible a'
var $items = $parent.find('[role="menu"]' + desc + ', [role="listbox"]' + desc)
if (!$items.length) return
var index = $items.index(e.target)
if (e.which == 38 && index > 0) index-- // up
if (e.which == 40 && index < $items.length - 1) index++ // down
if (!~index) index = 0
$items.eq(index).trigger('focus')
}
function clearMenus(e) {
if (e && e.which === 3) return
$(backdrop).remove()
$(toggle).each(function () {
var $this = $(this)
var $parent = getParent($this)
var relatedTarget = { relatedTarget: this }
if (!$parent.hasClass('open')) return
$parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
if (e.isDefaultPrevented()) return
$this.attr('aria-expanded', 'false')
$parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget)
})
}
function getParent($this) {
var selector = $this.attr('data-target')
if (!selector) {
selector = $this.attr('href')
selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
}
var $parent = selector && $(selector)
return $parent && $parent.length ? $parent : $this.parent()
}
// DROPDOWN PLUGIN DEFINITION
// ==========================
function Plugin(option) {
return this.each(function () {
var $this = $(this)
var data = $this.data('bs.dropdown')
if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
if (typeof option == 'string') data[option].call($this)
})
}
var old = $.fn.dropdown
$.fn.dropdown = Plugin
$.fn.dropdown.Constructor = Dropdown
// DROPDOWN NO CONFLICT
// ====================
$.fn.dropdown.noConflict = function () {
$.fn.dropdown = old
return this
}
// APPLY TO STANDARD DROPDOWN ELEMENTS
// ===================================
$(document)
.on('click.bs.dropdown.data-api', clearMenus)
.on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
.on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
.on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)
.on('keydown.bs.dropdown.data-api', '[role="menu"]', Dropdown.prototype.keydown)
.on('keydown.bs.dropdown.data-api', '[role="listbox"]', Dropdown.prototype.keydown)
}(jQuery);
/* ========================================================================
* Bootstrap: modal.js v3.3.4
* http://getbootstrap.com/javascript/#modals
* ========================================================================
* Copyright 2011-2015 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
+function ($) {
'use strict';
// MODAL CLASS DEFINITION
// ======================
var Modal = function (element, options) {
this.options = options
this.$body = $(document.body)
this.$element = $(element)
this.$dialog = this.$element.find('.modal-dialog')
this.$backdrop = null
this.isShown = null
this.originalBodyPad = null
this.scrollbarWidth = 0
this.ignoreBackdropClick = false
if (this.options.remote) {
this.$element
.find('.modal-content')
.load(this.options.remote, $.proxy(function () {
this.$element.trigger('loaded.bs.modal')
}, this))
}
}
Modal.VERSION = '3.3.4'
Modal.TRANSITION_DURATION = 300
Modal.BACKDROP_TRANSITION_DURATION = 150
Modal.DEFAULTS = {
backdrop: true,
keyboard: true,
show: true
}
Modal.prototype.toggle = function (_relatedTarget) {
return this.isShown ? this.hide() : this.show(_relatedTarget)
}
Modal.prototype.show = function (_relatedTarget) {
var that = this
var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
this.$element.trigger(e)
if (this.isShown || e.isDefaultPrevented()) return
this.isShown = true
this.checkScrollbar()
this.setScrollbar()
this.$body.addClass('modal-open')
this.escape()
this.resize()
this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
this.$dialog.on('mousedown.dismiss.bs.modal', function () {
that.$element.one('mouseup.dismiss.bs.modal', function (e) {
if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true
})
})
this.backdrop(function () {
var transition = $.support.transition && that.$element.hasClass('fade')
if (!that.$element.parent().length) {
that.$element.appendTo(that.$body) // don't move modals dom position
}
that.$element
.show()
.scrollTop(0)
that.adjustDialog()
if (transition) {
that.$element[0].offsetWidth // force reflow
}
that.$element
.addClass('in')
.attr('aria-hidden', false)
that.enforceFocus()
var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
transition ?
that.$dialog // wait for modal to slide in
.one('bsTransitionEnd', function () {
that.$element.trigger('focus').trigger(e)
})
.emulateTransitionEnd(Modal.TRANSITION_DURATION) :
that.$element.trigger('focus').trigger(e)
})
}
Modal.prototype.hide = function (e) {
if (e) e.preventDefault()
e = $.Event('hide.bs.modal')
this.$element.trigger(e)
if (!this.isShown || e.isDefaultPrevented()) return
this.isShown = false
this.escape()
this.resize()
$(document).off('focusin.bs.modal')
this.$element
.removeClass('in')
.attr('aria-hidden', true)
.off('click.dismiss.bs.modal')
.off('mouseup.dismiss.bs.modal')
this.$dialog.off('mousedown.dismiss.bs.modal')
$.support.transition && this.$element.hasClass('fade') ?
this.$element
.one('bsTransitionEnd', $.proxy(this.hideModal, this))
.emulateTransitionEnd(Modal.TRANSITION_DURATION) :
this.hideModal()
}
Modal.prototype.enforceFocus = function () {
$(document)
.off('focusin.bs.modal') // guard against infinite focus loop
.on('focusin.bs.modal', $.proxy(function (e) {
if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {
this.$element.trigger('focus')
}
}, this))
}
Modal.prototype.escape = function () {
if (this.isShown && this.options.keyboard) {
this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {
e.which == 27 && this.hide()
}, this))
} else if (!this.isShown) {
this.$element.off('keydown.dismiss.bs.modal')
}
}
Modal.prototype.resize = function () {
if (this.isShown) {
$(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))
} else {
$(window).off('resize.bs.modal')
}
}
Modal.prototype.hideModal = function () {
var that = this
this.$element.hide()
this.backdrop(function () {
that.$body.removeClass('modal-open')
that.resetAdjustments()
that.resetScrollbar()
that.$element.trigger('hidden.bs.modal')
})
}
Modal.prototype.removeBackdrop = function () {
this.$backdrop && this.$backdrop.remove()
this.$backdrop = null
}
Modal.prototype.backdrop = function (callback) {
var that = this
var animate = this.$element.hasClass('fade') ? 'fade' : ''
if (this.isShown && this.options.backdrop) {
var doAnimate = $.support.transition && animate
this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
.appendTo(this.$body)
this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
if (this.ignoreBackdropClick) {
this.ignoreBackdropClick = false
return
}
if (e.target !== e.currentTarget) return
this.options.backdrop == 'static'
? this.$element[0].focus()
: this.hide()
}, this))
if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
this.$backdrop.addClass('in')
if (!callback) return
doAnimate ?
this.$backdrop
.one('bsTransitionEnd', callback)
.emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
callback()
} else if (!this.isShown && this.$backdrop) {
this.$backdrop.removeClass('in')
var callbackRemove = function () {
that.removeBackdrop()
callback && callback()
}
$.support.transition && this.$element.hasClass('fade') ?
this.$backdrop
.one('bsTransitionEnd', callbackRemove)
.emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
callbackRemove()
} else if (callback) {
callback()
}
}
// these following methods are used to handle overflowing modals
Modal.prototype.handleUpdate = function () {
this.adjustDialog()
}
Modal.prototype.adjustDialog = function () {
var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight
this.$element.css({
paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',
paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''
})
}
Modal.prototype.resetAdjustments = function () {
this.$element.css({
paddingLeft: '',
paddingRight: ''
})
}
Modal.prototype.checkScrollbar = function () {
var fullWindowWidth = window.innerWidth
if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8
var documentElementRect = document.documentElement.getBoundingClientRect()
fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)
}
this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth
this.scrollbarWidth = this.measureScrollbar()
}
Modal.prototype.setScrollbar = function () {
var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
this.originalBodyPad = document.body.style.paddingRight || ''
if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
}
Modal.prototype.resetScrollbar = function () {
this.$body.css('padding-right', this.originalBodyPad)
}
Modal.prototype.measureScrollbar = function () { // thx walsh
var scrollDiv = document.createElement('div')
scrollDiv.className = 'modal-scrollbar-measure'
this.$body.append(scrollDiv)
var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth
this.$body[0].removeChild(scrollDiv)
return scrollbarWidth
}
// MODAL PLUGIN DEFINITION
// =======================
function Plugin(option, _relatedTarget) {
return this.each(function () {
var $this = $(this)
var data = $this.data('bs.modal')
var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
if (typeof option == 'string') data[option](_relatedTarget)
else if (options.show) data.show(_relatedTarget)
})
}
var old = $.fn.modal
$.fn.modal = Plugin
$.fn.modal.Constructor = Modal
// MODAL NO CONFLICT
// =================
$.fn.modal.noConflict = function () {
$.fn.modal = old
return this
}
// MODAL DATA-API
// ==============
$(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
var $this = $(this)
var href = $this.attr('href')
var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7
var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
if ($this.is('a')) e.preventDefault()
$target.one('show.bs.modal', function (showEvent) {
if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown
$target.one('hidden.bs.modal', function () {
$this.is(':visible') && $this.trigger('focus')
})
})
Plugin.call($target, option, this)
})
}(jQuery);
/* ========================================================================
* Bootstrap: tooltip.js v3.3.4
* http://getbootstrap.com/javascript/#tooltip
* Inspired by the original jQuery.tipsy by Jason Frame
* ========================================================================
* Copyright 2011-2015 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
+function ($) {
'use strict';
// TOOLTIP PUBLIC CLASS DEFINITION
// ===============================
var Tooltip = function (element, options) {
this.type = null
this.options = null
this.enabled = null
this.timeout = null
this.hoverState = null
this.$element = null
this.init('tooltip', element, options)
}
Tooltip.VERSION = '3.3.4'
Tooltip.TRANSITION_DURATION = 150
Tooltip.DEFAULTS = {
animation: true,
placement: 'top',
selector: false,
template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
trigger: 'hover focus',
title: '',
delay: 0,
html: false,
container: false,
viewport: {
selector: 'body',
padding: 0
}
}
Tooltip.prototype.init = function (type, element, options) {
this.enabled = true
this.type = type
this.$element = $(element)
this.options = this.getOptions(options)
this.$viewport = this.options.viewport && $(this.options.viewport.selector || this.options.viewport)
if (this.$element[0] instanceof document.constructor && !this.options.selector) {
throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')
}
var triggers = this.options.trigger.split(' ')
for (var i = triggers.length; i--;) {
var trigger = triggers[i]
if (trigger == 'click') {
this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
} else if (trigger != 'manual') {
var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'
var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'
this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
}
}
this.options.selector ?
(this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
this.fixTitle()
}
Tooltip.prototype.getDefaults = function () {
return Tooltip.DEFAULTS
}
Tooltip.prototype.getOptions = function (options) {
options = $.extend({}, this.getDefaults(), this.$element.data(), options)
if (options.delay && typeof options.delay == 'number') {
options.delay = {
show: options.delay,
hide: options.delay
}
}
return options
}
Tooltip.prototype.getDelegateOptions = function () {
var options = {}
var defaults = this.getDefaults()
this._options && $.each(this._options, function (key, value) {
if (defaults[key] != value) options[key] = value
})
return options
}
Tooltip.prototype.enter = function (obj) {
var self = obj instanceof this.constructor ?
obj : $(obj.currentTarget).data('bs.' + this.type)
if (self && self.$tip && self.$tip.is(':visible')) {
self.hoverState = 'in'
return
}
if (!self) {
self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
$(obj.currentTarget).data('bs.' + this.type, self)
}
clearTimeout(self.timeout)
self.hoverState = 'in'
if (!self.options.delay || !self.options.delay.show) return self.show()
self.timeout = setTimeout(function () {
if (self.hoverState == 'in') self.show()
}, self.options.delay.show)
}
Tooltip.prototype.leave = function (obj) {
var self = obj instanceof this.constructor ?
obj : $(obj.currentTarget).data('bs.' + this.type)
if (!self) {
self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
$(obj.currentTarget).data('bs.' + this.type, self)
}
clearTimeout(self.timeout)
self.hoverState = 'out'
if (!self.options.delay || !self.options.delay.hide) return self.hide()
self.timeout = setTimeout(function () {
if (self.hoverState == 'out') self.hide()
}, self.options.delay.hide)
}
Tooltip.prototype.show = function () {
var e = $.Event('show.bs.' + this.type)
if (this.hasContent() && this.enabled) {
this.$element.trigger(e)
var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])
if (e.isDefaultPrevented() || !inDom) return
var that = this
var $tip = this.tip()
var tipId = this.getUID(this.type)
this.setContent()
$tip.attr('id', tipId)
this.$element.attr('aria-describedby', tipId)
if (this.options.animation) $tip.addClass('fade')
var placement = typeof this.options.placement == 'function' ?
this.options.placement.call(this, $tip[0], this.$element[0]) :
this.options.placement
var autoToken = /\s?auto?\s?/i
var autoPlace = autoToken.test(placement)
if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
$tip
.detach()
.css({ top: 0, left: 0, display: 'block' })
.addClass(placement)
.data('bs.' + this.type, this)
this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
var pos = this.getPosition()
var actualWidth = $tip[0].offsetWidth
var actualHeight = $tip[0].offsetHeight
if (autoPlace) {
var orgPlacement = placement
var $container = this.options.container ? $(this.options.container) : this.$element.parent()
var containerDim = this.getPosition($container)
placement = placement == 'bottom' && pos.bottom + actualHeight > containerDim.bottom ? 'top' :
placement == 'top' && pos.top - actualHeight < containerDim.top ? 'bottom' :
placement == 'right' && pos.right + actualWidth > containerDim.width ? 'left' :
placement == 'left' && pos.left - actualWidth < containerDim.left ? 'right' :
placement
$tip
.removeClass(orgPlacement)
.addClass(placement)
}
var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
this.applyPlacement(calculatedOffset, placement)
var complete = function () {
var prevHoverState = that.hoverState
that.$element.trigger('shown.bs.' + that.type)
that.hoverState = null
if (prevHoverState == 'out') that.leave(that)
}
$.support.transition && this.$tip.hasClass('fade') ?
$tip
.one('bsTransitionEnd', complete)
.emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
complete()
}
}
Tooltip.prototype.applyPlacement = function (offset, placement) {
var $tip = this.tip()
var width = $tip[0].offsetWidth
var height = $tip[0].offsetHeight
// manually read margins because getBoundingClientRect includes difference
var marginTop = parseInt($tip.css('margin-top'), 10)
var marginLeft = parseInt($tip.css('margin-left'), 10)
// we must check for NaN for ie 8/9
if (isNaN(marginTop)) marginTop = 0
if (isNaN(marginLeft)) marginLeft = 0
offset.top = offset.top + marginTop
offset.left = offset.left + marginLeft
// $.fn.offset doesn't round pixel values
// so we use setOffset directly with our own function B-0
$.offset.setOffset($tip[0], $.extend({
using: function (props) {
$tip.css({
top: Math.round(props.top),
left: Math.round(props.left)
})
}
}, offset), 0)
$tip.addClass('in')
// check to see if placing tip in new offset caused the tip to resize itself
var actualWidth = $tip[0].offsetWidth
var actualHeight = $tip[0].offsetHeight
if (placement == 'top' && actualHeight != height) {
offset.top = offset.top + height - actualHeight
}
var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)
if (delta.left) offset.left += delta.left
else offset.top += delta.top
var isVertical = /top|bottom/.test(placement)
var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight
var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'
$tip.offset(offset)
this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)
}
Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {
this.arrow()
.css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')
.css(isVertical ? 'top' : 'left', '')
}
Tooltip.prototype.setContent = function () {
var $tip = this.tip()
var title = this.getTitle()
$tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
$tip.removeClass('fade in top bottom left right')
}
Tooltip.prototype.hide = function (callback) {
var that = this
var $tip = $(this.$tip)
var e = $.Event('hide.bs.' + this.type)
function complete() {
if (that.hoverState != 'in') $tip.detach()
that.$element
.removeAttr('aria-describedby')
.trigger('hidden.bs.' + that.type)
callback && callback()
}
this.$element.trigger(e)
if (e.isDefaultPrevented()) return
$tip.removeClass('in')
$.support.transition && $tip.hasClass('fade') ?
$tip
.one('bsTransitionEnd', complete)
.emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
complete()
this.hoverState = null
return this
}
Tooltip.prototype.fixTitle = function () {
var $e = this.$element
if ($e.attr('title') || typeof ($e.attr('data-original-title')) != 'string') {
$e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
}
}
Tooltip.prototype.hasContent = function () {
return this.getTitle()
}
Tooltip.prototype.getPosition = function ($element) {
$element = $element || this.$element
var el = $element[0]
var isBody = el.tagName == 'BODY'
var elRect = el.getBoundingClientRect()
if (elRect.width == null) {
// width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093
elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })
}
var elOffset = isBody ? { top: 0, left: 0 } : $element.offset()
var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }
var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null
return $.extend({}, elRect, scroll, outerDims, elOffset)
}
Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :
placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
/* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
}
Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {
var delta = { top: 0, left: 0 }
if (!this.$viewport) return delta
var viewportPadding = this.options.viewport && this.options.viewport.padding || 0
var viewportDimensions = this.getPosition(this.$viewport)
if (/right|left/.test(placement)) {
var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll
var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight
if (topEdgeOffset < viewportDimensions.top) { // top overflow
delta.top = viewportDimensions.top - topEdgeOffset
} else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow
delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset
}
} else {
var leftEdgeOffset = pos.left - viewportPadding
var rightEdgeOffset = pos.left + viewportPadding + actualWidth
if (leftEdgeOffset < viewportDimensions.left) { // left overflow
delta.left = viewportDimensions.left - leftEdgeOffset
} else if (rightEdgeOffset > viewportDimensions.width) { // right overflow
delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset
}
}
return delta
}
Tooltip.prototype.getTitle = function () {
var title
var $e = this.$element
var o = this.options
title = $e.attr('data-original-title')
|| (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
return title
}
Tooltip.prototype.getUID = function (prefix) {
do prefix += ~~(Math.random() * 1000000)
while (document.getElementById(prefix))
return prefix
}
Tooltip.prototype.tip = function () {
return (this.$tip = this.$tip || $(this.options.template))
}
Tooltip.prototype.arrow = function () {
return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))
}
Tooltip.prototype.enable = function () {
this.enabled = true
}
Tooltip.prototype.disable = function () {
this.enabled = false
}
Tooltip.prototype.toggleEnabled = function () {
this.enabled = !this.enabled
}
Tooltip.prototype.toggle = function (e) {
var self = this
if (e) {
self = $(e.currentTarget).data('bs.' + this.type)
if (!self) {
self = new this.constructor(e.currentTarget, this.getDelegateOptions())
$(e.currentTarget).data('bs.' + this.type, self)
}
}
self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
}
Tooltip.prototype.destroy = function () {
var that = this
clearTimeout(this.timeout)
this.hide(function () {
that.$element.off('.' + that.type).removeData('bs.' + that.type)
})
}
// TOOLTIP PLUGIN DEFINITION
// =========================
function Plugin(option) {
return this.each(function () {
var $this = $(this)
var data = $this.data('bs.tooltip')
var options = typeof option == 'object' && option
if (!data && /destroy|hide/.test(option)) return
if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
if (typeof option == 'string') data[option]()
})
}
var old = $.fn.tooltip
$.fn.tooltip = Plugin
$.fn.tooltip.Constructor = Tooltip
// TOOLTIP NO CONFLICT
// ===================
$.fn.tooltip.noConflict = function () {
$.fn.tooltip = old
return this
}
}(jQuery);
/* ========================================================================
* Bootstrap: popover.js v3.3.4
* http://getbootstrap.com/javascript/#popovers
* ========================================================================
* Copyright 2011-2015 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
+function ($) {
'use strict';
// POPOVER PUBLIC CLASS DEFINITION
// ===============================
var Popover = function (element, options) {
this.init('popover', element, options)
}
if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
Popover.VERSION = '3.3.4'
Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
placement: 'right',
trigger: 'click',
content: '',
template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
})
// NOTE: POPOVER EXTENDS tooltip.js
// ================================
Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)
Popover.prototype.constructor = Popover
Popover.prototype.getDefaults = function () {
return Popover.DEFAULTS
}
Popover.prototype.setContent = function () {
var $tip = this.tip()
var title = this.getTitle()
var content = this.getContent()
$tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
$tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events
this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
](content)
$tip.removeClass('fade top bottom left right in')
// IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
// this manually by checking the contents.
if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()
}
Popover.prototype.hasContent = function () {
return this.getTitle() || this.getContent()
}
Popover.prototype.getContent = function () {
var $e = this.$element
var o = this.options
return $e.attr('data-content')
|| (typeof o.content == 'function' ?
o.content.call($e[0]) :
o.content)
}
Popover.prototype.arrow = function () {
return (this.$arrow = this.$arrow || this.tip().find('.arrow'))
}
// POPOVER PLUGIN DEFINITION
// =========================
function Plugin(option) {
return this.each(function () {
var $this = $(this)
var data = $this.data('bs.popover')
var options = typeof option == 'object' && option
if (!data && /destroy|hide/.test(option)) return
if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
if (typeof option == 'string') data[option]()
})
}
var old = $.fn.popover
$.fn.popover = Plugin
$.fn.popover.Constructor = Popover
// POPOVER NO CONFLICT
// ===================
$.fn.popover.noConflict = function () {
$.fn.popover = old
return this
}
}(jQuery);
/* ========================================================================
* Bootstrap: scrollspy.js v3.3.4
* http://getbootstrap.com/javascript/#scrollspy
* ========================================================================
* Copyright 2011-2015 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
+function ($) {
'use strict';
// SCROLLSPY CLASS DEFINITION
// ==========================
function ScrollSpy(element, options) {
this.$body = $(document.body)
this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)
this.options = $.extend({}, ScrollSpy.DEFAULTS, options)
this.selector = (this.options.target || '') + ' .nav li > a'
this.offsets = []
this.targets = []
this.activeTarget = null
this.scrollHeight = 0
this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))
this.refresh()
this.process()
}
ScrollSpy.VERSION = '3.3.4'
ScrollSpy.DEFAULTS = {
offset: 10
}
ScrollSpy.prototype.getScrollHeight = function () {
return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)
}
ScrollSpy.prototype.refresh = function () {
var that = this
var offsetMethod = 'offset'
var offsetBase = 0
this.offsets = []
this.targets = []
this.scrollHeight = this.getScrollHeight()
if (!$.isWindow(this.$scrollElement[0])) {
offsetMethod = 'position'
offsetBase = this.$scrollElement.scrollTop()
}
this.$body
.find(this.selector)
.map(function () {
var $el = $(this)
var href = $el.data('target') || $el.attr('href')
var $href = /^#./.test(href) && $(href)
return ($href
&& $href.length
&& $href.is(':visible')
&& [[$href[offsetMethod]().top + offsetBase, href]]) || null
})
.sort(function (a, b) { return a[0] - b[0] })
.each(function () {
that.offsets.push(this[0])
that.targets.push(this[1])
})
}
ScrollSpy.prototype.process = function () {
var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
var scrollHeight = this.getScrollHeight()
var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height()
var offsets = this.offsets
var targets = this.targets
var activeTarget = this.activeTarget
var i
if (this.scrollHeight != scrollHeight) {
this.refresh()
}
if (scrollTop >= maxScroll) {
return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)
}
if (activeTarget && scrollTop < offsets[0]) {
this.activeTarget = null
return this.clear()
}
for (i = offsets.length; i--;) {
activeTarget != targets[i]
&& scrollTop >= offsets[i]
&& (offsets[i + 1] === undefined || scrollTop < offsets[i + 1])
&& this.activate(targets[i])
}
}
ScrollSpy.prototype.activate = function (target) {
this.activeTarget = target
this.clear()
var selector = this.selector +
'[data-target="' + target + '"],' +
this.selector + '[href="' + target + '"]'
var active = $(selector)
.parents('li')
.addClass('active')
if (active.parent('.dropdown-menu').length) {
active = active
.closest('li.dropdown')
.addClass('active')
}
active.trigger('activate.bs.scrollspy')
}
ScrollSpy.prototype.clear = function () {
$(this.selector)
.parentsUntil(this.options.target, '.active')
.removeClass('active')
}
// SCROLLSPY PLUGIN DEFINITION
// ===========================
function Plugin(option) {
return this.each(function () {
var $this = $(this)
var data = $this.data('bs.scrollspy')
var options = typeof option == 'object' && option
if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))
if (typeof option == 'string') data[option]()
})
}
var old = $.fn.scrollspy
$.fn.scrollspy = Plugin
$.fn.scrollspy.Constructor = ScrollSpy
// SCROLLSPY NO CONFLICT
// =====================
$.fn.scrollspy.noConflict = function () {
$.fn.scrollspy = old
return this
}
// SCROLLSPY DATA-API
// ==================
$(window).on('load.bs.scrollspy.data-api', function () {
$('[data-spy="scroll"]').each(function () {
var $spy = $(this)
Plugin.call($spy, $spy.data())
})
})
}(jQuery);
/* ========================================================================
* Bootstrap: tab.js v3.3.4
* http://getbootstrap.com/javascript/#tabs
* ========================================================================
* Copyright 2011-2015 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
+function ($) {
'use strict';
// TAB CLASS DEFINITION
// ====================
var Tab = function (element) {
this.element = $(element)
}
Tab.VERSION = '3.3.4'
Tab.TRANSITION_DURATION = 150
Tab.prototype.show = function () {
var $this = this.element
var $ul = $this.closest('ul:not(.dropdown-menu)')
var selector = $this.data('target')
if (!selector) {
selector = $this.attr('href')
selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
}
if ($this.parent('li').hasClass('active')) return
var $previous = $ul.find('.active:last a')
var hideEvent = $.Event('hide.bs.tab', {
relatedTarget: $this[0]
})
var showEvent = $.Event('show.bs.tab', {
relatedTarget: $previous[0]
})
$previous.trigger(hideEvent)
$this.trigger(showEvent)
if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return
var $target = $(selector)
this.activate($this.closest('li'), $ul)
this.activate($target, $target.parent(), function () {
$previous.trigger({
type: 'hidden.bs.tab',
relatedTarget: $this[0]
})
$this.trigger({
type: 'shown.bs.tab',
relatedTarget: $previous[0]
})
})
}
Tab.prototype.activate = function (element, container, callback) {
var $active = container.find('> .active')
var transition = callback
&& $.support.transition
&& (($active.length && $active.hasClass('fade')) || !!container.find('> .fade').length)
function next() {
$active
.removeClass('active')
.find('> .dropdown-menu > .active')
.removeClass('active')
.end()
.find('[data-toggle="tab"]')
.attr('aria-expanded', false)
element
.addClass('active')
.find('[data-toggle="tab"]')
.attr('aria-expanded', true)
if (transition) {
element[0].offsetWidth // reflow for transition
element.addClass('in')
} else {
element.removeClass('fade')
}
if (element.parent('.dropdown-menu').length) {
element
.closest('li.dropdown')
.addClass('active')
.end()
.find('[data-toggle="tab"]')
.attr('aria-expanded', true)
}
callback && callback()
}
$active.length && transition ?
$active
.one('bsTransitionEnd', next)
.emulateTransitionEnd(Tab.TRANSITION_DURATION) :
next()
$active.removeClass('in')
}
// TAB PLUGIN DEFINITION
// =====================
function Plugin(option) {
return this.each(function () {
var $this = $(this)
var data = $this.data('bs.tab')
if (!data) $this.data('bs.tab', (data = new Tab(this)))
if (typeof option == 'string') data[option]()
})
}
var old = $.fn.tab
$.fn.tab = Plugin
$.fn.tab.Constructor = Tab
// TAB NO CONFLICT
// ===============
$.fn.tab.noConflict = function () {
$.fn.tab = old
return this
}
// TAB DATA-API
// ============
var clickHandler = function (e) {
e.preventDefault()
Plugin.call($(this), 'show')
}
$(document)
.on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler)
.on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler)
}(jQuery);
/* ========================================================================
* Bootstrap: affix.js v3.3.4
* http://getbootstrap.com/javascript/#affix
* ========================================================================
* Copyright 2011-2015 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
+function ($) {
'use strict';
// AFFIX CLASS DEFINITION
// ======================
var Affix = function (element, options) {
this.options = $.extend({}, Affix.DEFAULTS, options)
this.$target = $(this.options.target)
.on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
.on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))
this.$element = $(element)
this.affixed = null
this.unpin = null
this.pinnedOffset = null
this.checkPosition()
}
Affix.VERSION = '3.3.4'
Affix.RESET = 'affix affix-top affix-bottom'
Affix.DEFAULTS = {
offset: 0,
target: window
}
Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {
var scrollTop = this.$target.scrollTop()
var position = this.$element.offset()
var targetHeight = this.$target.height()
if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false
if (this.affixed == 'bottom') {
if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'
return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'
}
var initializing = this.affixed == null
var colliderTop = initializing ? scrollTop : position.top
var colliderHeight = initializing ? targetHeight : height
if (offsetTop != null && scrollTop <= offsetTop) return 'top'
if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'
return false
}
Affix.prototype.getPinnedOffset = function () {
if (this.pinnedOffset) return this.pinnedOffset
this.$element.removeClass(Affix.RESET).addClass('affix')
var scrollTop = this.$target.scrollTop()
var position = this.$element.offset()
return (this.pinnedOffset = position.top - scrollTop)
}
Affix.prototype.checkPositionWithEventLoop = function () {
setTimeout($.proxy(this.checkPosition, this), 1)
}
Affix.prototype.checkPosition = function () {
if (!this.$element.is(':visible')) return
var height = this.$element.height()
var offset = this.options.offset
var offsetTop = offset.top
var offsetBottom = offset.bottom
var scrollHeight = $(document.body).height()
if (typeof offset != 'object') offsetBottom = offsetTop = offset
if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)
if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)
var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)
if (this.affixed != affix) {
if (this.unpin != null) this.$element.css('top', '')
var affixType = 'affix' + (affix ? '-' + affix : '')
var e = $.Event(affixType + '.bs.affix')
this.$element.trigger(e)
if (e.isDefaultPrevented()) return
this.affixed = affix
this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null
this.$element
.removeClass(Affix.RESET)
.addClass(affixType)
.trigger(affixType.replace('affix', 'affixed') + '.bs.affix')
}
if (affix == 'bottom') {
this.$element.offset({
top: scrollHeight - height - offsetBottom
})
}
}
// AFFIX PLUGIN DEFINITION
// =======================
function Plugin(option) {
return this.each(function () {
var $this = $(this)
var data = $this.data('bs.affix')
var options = typeof option == 'object' && option
if (!data) $this.data('bs.affix', (data = new Affix(this, options)))
if (typeof option == 'string') data[option]()
})
}
var old = $.fn.affix
$.fn.affix = Plugin
$.fn.affix.Constructor = Affix
// AFFIX NO CONFLICT
// =================
$.fn.affix.noConflict = function () {
$.fn.affix = old
return this
}
// AFFIX DATA-API
// ==============
$(window).on('load', function () {
$('[data-spy="affix"]').each(function () {
var $spy = $(this)
var data = $spy.data()
data.offset = data.offset || {}
if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom
if (data.offsetTop != null) data.offset.top = data.offsetTop
Plugin.call($spy, data)
})
})
}(jQuery);
================================================
FILE: app/Resources/assets/js/highlight.pack.js
================================================
!function(e){"undefined"!=typeof exports?e(exports):(window.hljs=e({}),"function"==typeof define&&define.amd&&define([],function(){return window.hljs}))}(function(e){function n(e){return e.replace(/&/gm,"&").replace(/</gm,"<").replace(/>/gm,">")}function t(e){return e.nodeName.toLowerCase()}function r(e,n){var t=e&&e.exec(n);return t&&0==t.index}function a(e){var n=(e.className+" "+(e.parentNode?e.parentNode.className:"")).split(/\s+/);return n=n.map(function(e){return e.replace(/^lang(uage)?-/,"")}),n.filter(function(e){return N(e)||/no(-?)highlight/.test(e)})[0]}function o(e,n){var t={};for(var r in e)t[r]=e[r];if(n)for(var r in n)t[r]=n[r];return t}function i(e){var n=[];return function r(e,a){for(var o=e.firstChild;o;o=o.nextSibling)3==o.nodeType?a+=o.nodeValue.length:1==o.nodeType&&(n.push({event:"start",offset:a,node:o}),a=r(o,a),t(o).match(/br|hr|img|input/)||n.push({event:"stop",offset:a,node:o}));return a}(e,0),n}function c(e,r,a){function o(){return e.length&&r.length?e[0].offset!=r[0].offset?e[0].offset<r[0].offset?e:r:"start"==r[0].event?e:r:e.length?e:r}function i(e){function r(e){return" "+e.nodeName+'="'+n(e.value)+'"'}l+="<"+t(e)+Array.prototype.map.call(e.attributes,r).join("")+">"}function c(e){l+="</"+t(e)+">"}function u(e){("start"==e.event?i:c)(e.node)}for(var s=0,l="",f=[];e.length||r.length;){var g=o();if(l+=n(a.substr(s,g[0].offset-s)),s=g[0].offset,g==e){f.reverse().forEach(c);do u(g.splice(0,1)[0]),g=o();while(g==e&&g.length&&g[0].offset==s);f.reverse().forEach(i)}else"start"==g[0].event?f.push(g[0].node):f.pop(),u(g.splice(0,1)[0])}return l+n(a.substr(s))}function u(e){function n(e){return e&&e.source||e}function t(t,r){return RegExp(n(t),"m"+(e.cI?"i":"")+(r?"g":""))}function r(a,i){if(!a.compiled){if(a.compiled=!0,a.k=a.k||a.bK,a.k){var c={},u=function(n,t){e.cI&&(t=t.toLowerCase()),t.split(" ").forEach(function(e){var t=e.split("|");c[t[0]]=[n,t[1]?Number(t[1]):1]})};"string"==typeof a.k?u("keyword",a.k):Object.keys(a.k).forEach(function(e){u(e,a.k[e])}),a.k=c}a.lR=t(a.l||/\b[A-Za-z0-9_]+\b/,!0),i&&(a.bK&&(a.b="\\b("+a.bK.split(" ").join("|")+")\\b"),a.b||(a.b=/\B|\b/),a.bR=t(a.b),a.e||a.eW||(a.e=/\B|\b/),a.e&&(a.eR=t(a.e)),a.tE=n(a.e)||"",a.eW&&i.tE&&(a.tE+=(a.e?"|":"")+i.tE)),a.i&&(a.iR=t(a.i)),void 0===a.r&&(a.r=1),a.c||(a.c=[]);var s=[];a.c.forEach(function(e){e.v?e.v.forEach(function(n){s.push(o(e,n))}):s.push("self"==e?a:e)}),a.c=s,a.c.forEach(function(e){r(e,a)}),a.starts&&r(a.starts,i);var l=a.c.map(function(e){return e.bK?"\\.?("+e.b+")\\.?":e.b}).concat([a.tE,a.i]).map(n).filter(Boolean);a.t=l.length?t(l.join("|"),!0):{exec:function(){return null}}}}r(e)}function s(e,t,a,o){function i(e,n){for(var t=0;t<n.c.length;t++)if(r(n.c[t].bR,e))return n.c[t]}function c(e,n){return r(e.eR,n)?e:e.eW?c(e.parent,n):void 0}function f(e,n){return!a&&r(n.iR,e)}function g(e,n){var t=x.cI?n[0].toLowerCase():n[0];return e.k.hasOwnProperty(t)&&e.k[t]}function p(e,n,t,r){var a=r?"":E.classPrefix,o='<span class="'+a,i=t?"":"</span>";return o+=e+'">',o+n+i}function d(){if(!w.k)return n(y);var e="",t=0;w.lR.lastIndex=0;for(var r=w.lR.exec(y);r;){e+=n(y.substr(t,r.index-t));var a=g(w,r);a?(B+=a[1],e+=p(a[0],n(r[0]))):e+=n(r[0]),t=w.lR.lastIndex,r=w.lR.exec(y)}return e+n(y.substr(t))}function h(){if(w.sL&&!R[w.sL])return n(y);var e=w.sL?s(w.sL,y,!0,L[w.sL]):l(y);return w.r>0&&(B+=e.r),"continuous"==w.subLanguageMode&&(L[w.sL]=e.top),p(e.language,e.value,!1,!0)}function v(){return void 0!==w.sL?h():d()}function b(e,t){var r=e.cN?p(e.cN,"",!0):"";e.rB?(M+=r,y=""):e.eB?(M+=n(t)+r,y=""):(M+=r,y=t),w=Object.create(e,{parent:{value:w}})}function m(e,t){if(y+=e,void 0===t)return M+=v(),0;var r=i(t,w);if(r)return M+=v(),b(r,t),r.rB?0:t.length;var a=c(w,t);if(a){var o=w;o.rE||o.eE||(y+=t),M+=v();do w.cN&&(M+="</span>"),B+=w.r,w=w.parent;while(w!=a.parent);return o.eE&&(M+=n(t)),y="",a.starts&&b(a.starts,""),o.rE?0:t.length}if(f(t,w))throw new Error('Illegal lexeme "'+t+'" for mode "'+(w.cN||"<unnamed>")+'"');return y+=t,t.length||1}var x=N(e);if(!x)throw new Error('Unknown language: "'+e+'"');u(x);for(var w=o||x,L={},M="",k=w;k!=x;k=k.parent)k.cN&&(M=p(k.cN,"",!0)+M);var y="",B=0;try{for(var C,j,I=0;;){if(w.t.lastIndex=I,C=w.t.exec(t),!C)break;j=m(t.substr(I,C.index-I),C[0]),I=C.index+j}m(t.substr(I));for(var k=w;k.parent;k=k.parent)k.cN&&(M+="</span>");return{r:B,value:M,language:e,top:w}}catch(A){if(-1!=A.message.indexOf("Illegal"))return{r:0,value:n(t)};throw A}}function l(e,t){t=t||E.languages||Object.keys(R);var r={r:0,value:n(e)},a=r;return t.forEach(function(n){if(N(n)){var t=s(n,e,!1);t.language=n,t.r>a.r&&(a=t),t.r>r.r&&(a=r,r=t)}}),a.language&&(r.second_best=a),r}function f(e){return E.tabReplace&&(e=e.replace(/^((<[^>]+>|\t)+)/gm,function(e,n){return n.replace(/\t/g,E.tabReplace)})),E.useBR&&(e=e.replace(/\n/g,"<br>")),e}function g(e,n,t){var r=n?x[n]:t,a=[e.trim()];return e.match(/(\s|^)hljs(\s|$)/)||a.push("hljs"),r&&a.push(r),a.join(" ").trim()}function p(e){var n=a(e);if(!/no(-?)highlight/.test(n)){var t;E.useBR?(t=document.createElementNS("http://www.w3.org/1999/xhtml","div"),t.innerHTML=e.innerHTML.replace(/\n/g,"").replace(/<br[ \/]*>/g,"\n")):t=e;var r=t.textContent,o=n?s(n,r,!0):l(r),u=i(t);if(u.length){var p=document.createElementNS("http://www.w3.org/1999/xhtml","div");p.innerHTML=o.value,o.value=c(u,i(p),r)}o.value=f(o.value),e.innerHTML=o.value,e.className=g(e.className,n,o.language),e.result={language:o.language,re:o.r},o.second_best&&(e.second_best={language:o.second_best.language,re:o.second_best.r})}}function d(e){E=o(E,e)}function h(){if(!h.called){h.called=!0;var e=document.querySelectorAll("pre code");Array.prototype.forEach.call(e,p)}}function v(){addEventListener("DOMContentLoaded",h,!1),addEventListener("load",h,!1)}function b(n,t){var r=R[n]=t(e);r.aliases&&r.aliases.forEach(function(e){x[e]=n})}function m(){return Object.keys(R)}function N(e){return R[e]||R[x[e]]}var E={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0},R={},x={};return e.highlight=s,e.highlightAuto=l,e.fixMarkup=f,e.highlightBlock=p,e.configure=d,e.initHighlighting=h,e.initHighlightingOnLoad=v,e.registerLanguage=b,e.listLanguages=m,e.getLanguage=N,e.inherit=o,e.IR="[a-zA-Z][a-zA-Z0-9_]*",e.UIR="[a-zA-Z_][a-zA-Z0-9_]*",e.NR="\\b\\d+(\\.\\d+)?",e.CNR="(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",e.BNR="\\b(0b[01]+)",e.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",e.BE={b:"\\\\[\\s\\S]",r:0},e.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[e.BE]},e.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[e.BE]},e.PWM={b:/\b(a|an|the|are|I|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such)\b/},e.CLCM={cN:"comment",b:"//",e:"$",c:[e.PWM]},e.CBCM={cN:"comment",b:"/\\*",e:"\\*/",c:[e.PWM]},e.HCM={cN:"comment",b:"#",e:"$",c:[e.PWM]},e.NM={cN:"number",b:e.NR,r:0},e.CNM={cN:"number",b:e.CNR,r:0},e.BNM={cN:"number",b:e.BNR,r:0},e.CSSNM={cN:"number",b:e.NR+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",r:0},e.RM={cN:"regexp",b:/\//,e:/\/[gimuy]*/,i:/\n/,c:[e.BE,{b:/\[/,e:/\]/,r:0,c:[e.BE]}]},e.TM={cN:"title",b:e.IR,r:0},e.UTM={cN:"title",b:e.UIR,r:0},e});hljs.registerLanguage("javascript",function(r){return{aliases:["js"],k:{keyword:"in if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const class",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document"},c:[{cN:"pi",r:10,v:[{b:/^\s*('|")use strict('|")/},{b:/^\s*('|")use asm('|")/}]},r.ASM,r.QSM,r.CLCM,r.CBCM,r.CNM,{b:"("+r.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[r.CLCM,r.CBCM,r.RM,{b:/</,e:/>;/,r:0,sL:"xml"}],r:0},{cN:"function",bK:"function",e:/\{/,eE:!0,c:[r.inherit(r.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/}),{cN:"params",b:/\(/,e:/\)/,c:[r.CLCM,r.CBCM],i:/["'\(]/}],i:/\[|%/},{b:/\$[(.]/},{b:"\\."+r.IR,r:0}]}});hljs.registerLanguage("twig",function(){var e={cN:"params",b:"\\(",e:"\\)"},t="attribute block constant cycle date dump include max min parent random range source template_from_string",a={cN:"function",bK:t,r:0,c:[e]},r={cN:"filter",b:/\|[A-Za-z]+\:?/,k:"abs batch capitalize convert_encoding date date_modify default escape first format join json_encode keys last length lower merge nl2br number_format raw replace reverse round slice sort split striptags title trim upper url_encode",c:[a]},c="autoescape block do embed extends filter flush for if import include macro sandbox set spaceless use verbatim";return c=c+" "+c.split(" ").map(function(e){return"end"+e}).join(" "),{aliases:["craftcms"],cI:!0,sL:"xml",subLanguageMode:"continuous",c:[{cN:"comment",b:/\{#/,e:/#}/},{cN:"template_tag",b:/\{%/,e:/%}/,k:c,c:[r,a]},{cN:"variable",b:/\{\{/,e:/}}/,c:[r,a]}]}});hljs.registerLanguage("sql",function(e){var t={cN:"comment",b:"--",e:"$"};return{cI:!0,i:/[<>]/,c:[{cN:"operator",bK:"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate savepoint release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup",e:/;/,eW:!0,k:{keyword:"abs absolute acos action add adddate addtime aes_decrypt aes_encrypt after aggregate all allocate alter analyze and any are as asc ascii asin assertion at atan atan2 atn2 authorization authors avg backup before begin benchmark between bin binlog bit_and bit_count bit_length bit_or bit_xor both by cache call cascade cascaded case cast catalog ceil ceiling chain change changed char_length character_length charindex charset check checksum checksum_agg choose close coalesce coercibility collate collation collationproperty column columns columns_updated commit compress concat concat_ws concurrent connect connection connection_id consistent constraint constraints continue contributors conv convert convert_tz corresponding cos cot count count_big crc32 create cross cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime data database databases datalength date_add date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts datetimeoffsetfromparts day dayname dayofmonth dayofweek dayofyear deallocate declare decode default deferrable deferred degrees delayed delete des_decrypt des_encrypt des_key_file desc describe descriptor diagnostics difference disconnect distinct distinctrow div do domain double drop dumpfile each else elt enclosed encode encrypt end end-exec engine engines eomonth errors escape escaped event eventdata events except exception exec execute exists exp explain export_set extended external extract fast fetch field fields find_in_set first first_value floor flush for force foreign format found found_rows from from_base64 from_days from_unixtime full function get get_format get_lock getdate getutcdate global go goto grant grants greatest group group_concat grouping grouping_id gtid_subset gtid_subtract handler having help hex high_priority hosts hour ident_current ident_incr ident_seed identified identity if ifnull ignore iif ilike immediate in index indicator inet6_aton inet6_ntoa inet_aton inet_ntoa infile initially inner innodb input insert install instr intersect into is is_free_lock is_ipv4 is_ipv4_compat is_ipv4_mapped is_not is_not_null is_used_lock isdate isnull isolation join key kill language last last_day last_insert_id last_value lcase lead leading least leaves left len lenght level like limit lines ln load load_file local localtime localtimestamp locate lock log log10 log2 logfile logs low_priority lower lpad ltrim make_set makedate maketime master master_pos_wait match matched max md5 medium merge microsecond mid min minute mod mode module month monthname mutex name_const names national natural nchar next no no_write_to_binlog not now nullif nvarchar oct octet_length of old_password on only open optimize option optionally or ord order outer outfile output pad parse partial partition password patindex percent_rank percentile_cont percentile_disc period_add period_diff pi plugin position pow power pragma precision prepare preserve primary prior privileges procedure procedure_analyze processlist profile profiles public publishingservername purge quarter query quick quote quotename radians rand read references regexp relative relaylog release release_lock rename repair repeat replace replicate reset restore restrict return returns reverse revoke right rlike rollback rollup round row row_count rows rpad rtrim savepoint schema scroll sec_to_time second section select serializable server session session_user set sha sha1 sha2 share show sign sin size slave sleep smalldatetimefromparts snapshot some soname soundex sounds_like space sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result sql_variant_property sqlstate sqrt square start starting status std stddev stddev_pop stddev_samp stdev stdevp stop str str_to_date straight_join strcmp string stuff subdate substr substring subtime subtring_index sum switchoffset sysdate sysdatetime sysdatetimeoffset system_user sysutcdatetime table tables tablespace tan temporary terminated tertiary_weights then time time_format time_to_sec timediff timefromparts timestamp timestampadd timestampdiff timezone_hour timezone_minute to to_base64 to_days to_seconds todatetimeoffset trailing transaction translation trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse ucase uncompress uncompressed_length unhex unicode uninstall union unique unix_timestamp unknown unlock update upgrade upped upper usage use user user_resources using utc_date utc_time utc_timestamp uuid uuid_short validate_password_strength value values var var_pop var_samp variables variance varp version view warnings week weekday weekofyear weight_string when whenever where with work write xml xor year yearweek zon",literal:"true false null",built_in:"array bigint binary bit blob boolean char character date dec decimal float int integer interval number numeric real serial smallint varchar varying int8 serial8 text"},c:[{cN:"string",b:"'",e:"'",c:[e.BE,{b:"''"}]},{cN:"string",b:'"',e:'"',c:[e.BE,{b:'""'}]},{cN:"string",b:"`",e:"`",c:[e.BE]},e.CNM,e.CBCM,t]},e.CBCM,t]}});hljs.registerLanguage("bash",function(e){var t={cN:"variable",v:[{b:/\$[\w\d#@][\w\d_]*/},{b:/\$\{(.*?)\}/}]},s={cN:"string",b:/"/,e:/"/,c:[e.BE,t,{cN:"variable",b:/\$\(/,e:/\)/,c:[e.BE]}]},a={cN:"string",b:/'/,e:/'/};return{aliases:["sh","zsh"],l:/-?[a-z\.]+/,k:{keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",operator:"-ne -eq -lt -gt -f -d -e -s -l -a"},c:[{cN:"shebang",b:/^#![^\n]+sh\s*$/,r:10},{cN:"function",b:/\w[\w\d_]*\s*\(\s*\)\s*\{/,rB:!0,c:[e.inherit(e.TM,{b:/\w[\w\d_]*/})],r:0},e.HCM,e.NM,s,a,t]}});hljs.registerLanguage("css",function(e){var c="[a-zA-Z-][a-zA-Z0-9_-]*",a={cN:"function",b:c+"\\(",rB:!0,eE:!0,e:"\\("};return{cI:!0,i:"[=/|']",c:[e.CBCM,{cN:"id",b:"\\#[A-Za-z0-9_-]+"},{cN:"class",b:"\\.[A-Za-z0-9_-]+",r:0},{cN:"attr_selector",b:"\\[",e:"\\]",i:"$"},{cN:"pseudo",b:":(:)?[a-zA-Z0-9\\_\\-\\+\\(\\)\\\"\\']+"},{cN:"at_rule",b:"@(font-face|page)",l:"[a-z-]+",k:"font-face page"},{cN:"at_rule",b:"@",e:"[{;]",c:[{cN:"keyword",b:/\S+/},{b:/\s/,eW:!0,eE:!0,r:0,c:[a,e.ASM,e.QSM,e.CSSNM]}]},{cN:"tag",b:c,r:0},{cN:"rules",b:"{",e:"}",i:"[^\\s]",r:0,c:[e.CBCM,{cN:"rule",b:"[^\\s]",rB:!0,e:";",eW:!0,c:[{cN:"attribute",b:"[A-Z\\_\\.\\-]+",e:":",eE:!0,i:"[^\\s]",starts:{cN:"value",eW:!0,eE:!0,c:[a,e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:"hexcolor",b:"#[0-9A-Fa-f]+"},{cN:"important",b:"!important"}]}}]}]}]}});hljs.registerLanguage("php",function(e){var c={cN:"variable",b:"\\$+[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]*"},i={cN:"preprocessor",b:/<\?(php)?|\?>/},a={cN:"string",c:[e.BE,i],v:[{b:'b"',e:'"'},{b:"b'",e:"'"},e.inherit(e.ASM,{i:null}),e.inherit(e.QSM,{i:null})]},n={v:[e.BNM,e.CNM]};return{aliases:["php3","php4","php5","php6"],cI:!0,k:"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally",c:[e.CLCM,e.HCM,{cN:"comment",b:"/\\*",e:"\\*/",c:[{cN:"phpdoc",b:"\\s@[A-Za-z]+"},i]},{cN:"comment",b:"__halt_compiler.+?;",eW:!0,k:"__halt_compiler",l:e.UIR},{cN:"string",b:"<<<['\"]?\\w+['\"]?$",e:"^\\w+;",c:[e.BE]},i,c,{b:/->+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{cN:"function",bK:"function",e:/[;{]/,eE:!0,i:"\\$|\\[|%",c:[e.UTM,{cN:"params",b:"\\(",e:"\\)",c:["self",c,e.CBCM,a,n]}]},{cN:"class",bK:"class interface",e:"{",eE:!0,i:/[:\(\$"]/,c:[{bK:"extends implements"},e.UTM]},{bK:"namespace",e:";",i:/[\.']/,c:[e.UTM]},{bK:"use",e:";",c:[e.UTM]},{b:"=>"},a,n]}});hljs.registerLanguage("apache",function(e){var r={cN:"number",b:"[\\$%]\\d+"};return{aliases:["apacheconf"],cI:!0,c:[e.HCM,{cN:"tag",b:"</?",e:">"},{cN:"keyword",b:/\w+/,r:0,k:{common:"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername"},starts:{e:/$/,r:0,k:{literal:"on off all"},c:[{cN:"sqbracket",b:"\\s\\[",e:"\\]$"},{cN:"cbracket",b:"[\\$%]\\{",e:"\\}",c:["self",r]},r,e.QSM]}}],i:/\S/}});hljs.registerLanguage("ini",function(e){return{cI:!0,i:/\S/,c:[{cN:"comment",b:";",e:"$"},{cN:"title",b:"^\\[",e:"\\]"},{cN:"setting",b:"^[a-z0-9\\[\\]_-]+[ \\t]*=[ \\t]*",e:"$",c:[{cN:"value",eW:!0,k:"on off true false yes no",c:[e.QSM,e.NM],r:0}]}]}});hljs.registerLanguage("markdown",function(){return{aliases:["md","mkdown","mkd"],c:[{cN:"header",v:[{b:"^#{1,6}",e:"$"},{b:"^.+?\\n[=-]{2,}$"}]},{b:"<",e:">",sL:"xml",r:0},{cN:"bullet",b:"^([*+-]|(\\d+\\.))\\s+"},{cN:"strong",b:"[*_]{2}.+?[*_]{2}"},{cN:"emphasis",v:[{b:"\\*.+?\\*"},{b:"_.+?_",r:0}]},{cN:"blockquote",b:"^>\\s+",e:"$"},{cN:"code",v:[{b:"`.+?`"},{b:"^( {4}| )",e:"$",r:0}]},{cN:"horizontal_rule",b:"^[-\\*]{3,}",e:"$"},{b:"\\[.+?\\][\\(\\[].*?[\\)\\]]",rB:!0,c:[{cN:"link_label",b:"\\[",e:"\\]",eB:!0,rE:!0,r:0},{cN:"link_url",b:"\\]\\(",e:"\\)",eB:!0,eE:!0},{cN:"link_reference",b:"\\]\\[",e:"\\]",eB:!0,eE:!0}],r:10},{b:"^\\[.+\\]:",rB:!0,c:[{cN:"link_reference",b:"\\[",e:"\\]:",eB:!0,eE:!0,starts:{cN:"link_url",e:"$"}}]}]}});hljs.registerLanguage("xml",function(){var t="[A-Za-z0-9\\._:-]+",e={b:/<\?(php)?(?!\w)/,e:/\?>/,sL:"php",subLanguageMode:"continuous"},c={eW:!0,i:/</,r:0,c:[e,{cN:"attribute",b:t,r:0},{b:"=",r:0,c:[{cN:"value",c:[e],v:[{b:/"/,e:/"/},{b:/'/,e:/'/},{b:/[^\s\/>]+/}]}]}]};return{aliases:["html","xhtml","rss","atom","xsl","plist"],cI:!0,c:[{cN:"doctype",b:"<!DOCTYPE",e:">",r:10,c:[{b:"\\[",e:"\\]"}]},{cN:"comment",b:"<!--",e:"-->",r:10},{cN:"cdata",b:"<\\!\\[CDATA\\[",e:"\\]\\]>",r:10},{cN:"tag",b:"<style(?=\\s|>|$)",e:">",k:{title:"style"},c:[c],starts:{e:"</style>",rE:!0,sL:"css"}},{cN:"tag",b:"<script(?=\\s|>|$)",e:">",k:{title:"script"},c:[c],starts:{e:"</script>",rE:!0,sL:"javascript"}},e,{cN:"pi",b:/<\?\w+/,e:/\?>/,r:10},{cN:"tag",b:"</?",e:"/?>",c:[{cN:"title",b:/[^ \/><\n\t]+/,r:0},c]}]}});hljs.registerLanguage("http",function(){return{i:"\\S",c:[{cN:"status",b:"^HTTP/[0-9\\.]+",e:"$",c:[{cN:"number",b:"\\b\\d{3}\\b"}]},{cN:"request",b:"^[A-Z]+ (.*?) HTTP/[0-9\\.]+$",rB:!0,e:"$",c:[{cN:"string",b:" ",e:" ",eB:!0,eE:!0}]},{cN:"attribute",b:"^\\w",e:": ",eE:!0,i:"\\n|\\s|=",starts:{cN:"string",e:"$"}},{b:"\\n\\n",starts:{sL:"",eW:!0}}]}});hljs.registerLanguage("json",function(e){var t={literal:"true false null"},i=[e.QSM,e.CNM],l={cN:"value",e:",",eW:!0,eE:!0,c:i,k:t},c={b:"{",e:"}",c:[{cN:"attribute",b:'\\s*"',e:'"\\s*:\\s*',eB:!0,eE:!0,c:[e.BE],i:"\\n",starts:l}],i:"\\S"},n={b:"\\[",e:"\\]",c:[e.inherit(l,{cN:null})],i:"\\S"};return i.splice(i.length,0,c,n),{c:i,k:t,i:"\\S"}});
================================================
FILE: app/Resources/assets/js/jquery-2.1.4.js
================================================
/*!
* jQuery JavaScript Library v2.1.4
* http://jquery.com/
*
* Includes Sizzle.js
* http://sizzlejs.com/
*
* Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors
* Released under the MIT license
* http://jquery.org/license
*
* Date: 2015-04-28T16:01Z
*/
(function( global, factory ) {
if ( typeof module === "object" && typeof module.exports === "object" ) {
// For CommonJS and CommonJS-like environments where a proper `window`
// is present, execute the factory and get jQuery.
// For environments that do not have a `window` with a `document`
// (such as Node.js), expose a factory as module.exports.
// This accentuates the need for the creation of a real `window`.
// e.g. var jQuery = require("jquery")(window);
// See ticket #14549 for more info.
module.exports = global.document ?
factory( global, true ) :
function( w ) {
if ( !w.document ) {
throw new Error( "jQuery requires a window with a document" );
}
return factory( w );
};
} else {
factory( global );
}
// Pass this if window is not defined yet
}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
// Support: Firefox 18+
// Can't be in strict mode, several libs including ASP.NET trace
// the stack via arguments.caller.callee and Firefox dies if
// you try to trace through "use strict" call chains. (#13335)
//
var arr = [];
var slice = arr.slice;
var concat = arr.concat;
var push = arr.push;
var indexOf = arr.indexOf;
var class2type = {};
var toString = class2type.toString;
var hasOwn = class2type.hasOwnProperty;
var support = {};
var
// Use the correct document accordingly with window argument (sandbox)
document = window.document,
version = "2.1.4",
// Define a local copy of jQuery
jQuery = function( selector, context ) {
// The jQuery object is actually just the init constructor 'enhanced'
// Need init if jQuery is called (just allow error to be thrown if not included)
return new jQuery.fn.init( selector, context );
},
// Support: Android<4.1
// Make sure we trim BOM and NBSP
rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
// Matches dashed string for camelizing
rmsPrefix = /^-ms-/,
rdashAlpha = /-([\da-z])/gi,
// Used by jQuery.camelCase as callback to replace()
fcamelCase = function( all, letter ) {
return letter.toUpperCase();
};
jQuery.fn = jQuery.prototype = {
// The current version of jQuery being used
jquery: version,
constructor: jQuery,
// Start with an empty selector
selector: "",
// The default length of a jQuery object is 0
length: 0,
toArray: function() {
return slice.call( this );
},
// Get the Nth element in the matched element set OR
// Get the whole matched element set as a clean array
get: function( num ) {
return num != null ?
// Return just the one element from the set
( num < 0 ? this[ num + this.length ] : this[ num ] ) :
// Return all the elements in a clean array
slice.call( this );
},
// Take an array of elements and push it onto the stack
// (returning the new matched element set)
pushStack: function( elems ) {
// Build a new jQuery matched element set
var ret = jQuery.merge( this.constructor(), elems );
// Add the old object onto the stack (as a reference)
ret.prevObject = this;
ret.context = this.context;
// Return the newly-formed element set
return ret;
},
// Execute a callback for every element in the matched set.
// (You can seed the arguments with an array of args, but this is
// only used internally.)
each: function( callback, args ) {
return jQuery.each( this, callback, args );
},
map: function( callback ) {
return this.pushStack( jQuery.map(this, function( elem, i ) {
return callback.call( elem, i, elem );
}));
},
slice: function() {
return this.pushStack( slice.apply( this, arguments ) );
},
first: function() {
return this.eq( 0 );
},
last: function() {
return this.eq( -1 );
},
eq: function( i ) {
var len = this.length,
j = +i + ( i < 0 ? len : 0 );
return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );
},
end: function() {
return this.prevObject || this.constructor(null);
},
// For internal use only.
// Behaves like an Array's method, not like a jQuery method.
push: push,
sort: arr.sort,
splice: arr.splice
};
jQuery.extend = jQuery.fn.extend = function() {
var options, name, src, copy, copyIsArray, clone,
target = arguments[0] || {},
i = 1,
length = arguments.length,
deep = false;
// Handle a deep copy situation
if ( typeof target === "boolean" ) {
deep = target;
// Skip the boolean and the target
target = arguments[ i ] || {};
i++;
}
// Handle case when target is a string or something (possible in deep copy)
if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
target = {};
}
// Extend jQuery itself if only one argument is passed
if ( i === length ) {
target = this;
i--;
}
for ( ; i < length; i++ ) {
// Only deal with non-null/undefined values
if ( (options = arguments[ i ]) != null ) {
// Extend the base object
for ( name in options ) {
src = target[ name ];
copy = options[ name ];
// Prevent never-ending loop
if ( target === copy ) {
continue;
}
// Recurse if we're merging plain objects or arrays
if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
if ( copyIsArray ) {
copyIsArray = false;
clone = src && jQuery.isArray(src) ? src : [];
} else {
clone = src && jQuery.isPlainObject(src) ? src : {};
}
// Never move original objects, clone them
target[ name ] = jQuery.extend( deep, clone, copy );
// Don't bring in undefined values
} else if ( copy !== undefined ) {
target[ name ] = copy;
}
}
}
}
// Return the modified object
return target;
};
jQuery.extend({
// Unique for each copy of jQuery on the page
expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
// Assume jQuery is ready without the ready module
isReady: true,
error: function( msg ) {
throw new Error( msg );
},
noop: function() {},
isFunction: function( obj ) {
return jQuery.type(obj) === "function";
},
isArray: Array.isArray,
isWindow: function( obj ) {
return obj != null && obj === obj.window;
},
isNumeric: function( obj ) {
// parseFloat NaNs numeric-cast false positives (null|true|false|"")
// ...but misinterprets leading-number strings, particularly hex literals ("0x...")
// subtraction forces infinities to NaN
// adding 1 corrects loss of precision from parseFloat (#15100)
return !jQuery.isArray( obj ) && (obj - parseFloat( obj ) + 1) >= 0;
},
isPlainObject: function( obj ) {
// Not plain objects:
// - Any object or value whose internal [[Class]] property is not "[object Object]"
// - DOM nodes
// - window
if ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
return false;
}
if ( obj.constructor &&
!hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) {
return false;
}
// If the function hasn't returned already, we're confident that
// |obj| is a plain object, created by {} or constructed with new Object
return true;
},
isEmptyObject: function( obj ) {
var name;
for ( name in obj ) {
return false;
}
return true;
},
type: function( obj ) {
if ( obj == null ) {
return obj + "";
}
// Support: Android<4.0, iOS<6 (functionish RegExp)
return typeof obj === "object" || typeof obj === "function" ?
class2type[ toString.call(obj) ] || "object" :
typeof obj;
},
// Evaluates a script in a global context
globalEval: function( code ) {
var script,
indirect = eval;
code = jQuery.trim( code );
if ( code ) {
// If the code includes a valid, prologue position
// strict mode pragma, execute code by injecting a
// script tag into the document.
if ( code.indexOf("use strict") === 1 ) {
script = document.createElement("script");
script.text = code;
document.head.appendChild( script ).parentNode.removeChild( script );
} else {
// Otherwise, avoid the DOM node creation, insertion
// and removal by using an indirect global eval
indirect( code );
}
}
},
// Convert dashed to camelCase; used by the css and data modules
// Support: IE9-11+
// Microsoft forgot to hump their vendor prefix (#9572)
camelCase: function( string ) {
return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
},
nodeName: function( elem, name ) {
return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
},
// args is for internal usage only
each: function( obj, callback, args ) {
var value,
i = 0,
length = obj.length,
isArray = isArraylike( obj );
if ( args ) {
if ( isArray ) {
for ( ; i < length; i++ ) {
value = callback.apply( obj[ i ], args );
if ( value === false ) {
break;
}
}
} else {
for ( i in obj ) {
value = callback.apply( obj[ i ], args );
if ( value === false ) {
break;
}
}
}
// A special, fast, case for the most common use of each
} else {
if ( isArray ) {
for ( ; i < length; i++ ) {
value = callback.call( obj[ i ], i, obj[ i ] );
if ( value === false ) {
break;
}
}
} else {
for ( i in obj ) {
value = callback.call( obj[ i ], i, obj[ i ] );
if ( value === false ) {
break;
}
}
}
}
return obj;
},
// Support: Android<4.1
trim: function( text ) {
return text == null ?
"" :
( text + "" ).replace( rtrim, "" );
},
// results is for internal usage only
makeArray: function( arr, results ) {
var ret = results || [];
if ( arr != null ) {
if ( isArraylike( Object(arr) ) ) {
jQuery.merge( ret,
typeof arr === "string" ?
[ arr ] : arr
);
} else {
push.call( ret, arr );
}
}
return ret;
},
inArray: function( elem, arr, i ) {
return arr == null ? -1 : indexOf.call( arr, elem, i );
},
merge: function( first, second ) {
var len = +second.length,
j = 0,
i = first.length;
for ( ; j < len; j++ ) {
first[ i++ ] = second[ j ];
}
first.length = i;
return first;
},
grep: function( elems, callback, invert ) {
var callbackInverse,
matches = [],
i = 0,
length = elems.length,
callbackExpect = !invert;
// Go through the array, only saving the items
// that pass the validator function
for ( ; i < length; i++ ) {
callbackInverse = !callback( elems[ i ], i );
if ( callbackInverse !== callbackExpect ) {
matches.push( elems[ i ] );
}
}
return matches;
},
// arg is for internal usage only
map: function( elems, callback, arg ) {
var value,
i = 0,
length = elems.length,
isArray = isArraylike( elems ),
ret = [];
// Go through the array, translating each of the items to their new values
if ( isArray ) {
for ( ; i < length; i++ ) {
value = callback( elems[ i ], i, arg );
if ( value != null ) {
ret.push( value );
}
}
// Go through every key on the object,
} else {
for ( i in elems ) {
value = callback( elems[ i ], i, arg );
if ( value != null ) {
ret.push( value );
}
}
}
// Flatten any nested arrays
return concat.apply( [], ret );
},
// A global GUID counter for objects
guid: 1,
// Bind a function to a context, optionally partially applying any
// arguments.
proxy: function( fn, context ) {
var tmp, args, proxy;
if ( typeof context === "string" ) {
tmp = fn[ context ];
context = fn;
fn = tmp;
}
// Quick check to determine if target is callable, in the spec
// this throws a TypeError, but we will just return undefined.
if ( !jQuery.isFunction( fn ) ) {
return undefined;
}
// Simulated bind
args = slice.call( arguments, 2 );
proxy = function() {
return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
};
// Set the guid of unique handler to the same of original handler, so it can be removed
proxy.guid = fn.guid = fn.guid || jQuery.guid++;
return proxy;
},
now: Date.now,
// jQuery.support is not used in Core but other projects attach their
// properties to it so it needs to exist.
support: support
});
// Populate the class2type map
jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
class2type[ "[object " + name + "]" ] = name.toLowerCase();
});
function isArraylike( obj ) {
// Support: iOS 8.2 (not reproducible in simulator)
// `in` check used to prevent JIT error (gh-2145)
// hasOwn isn't used here due to false negatives
// regarding Nodelist length in IE
var length = "length" in obj && obj.length,
type = jQuery.type( obj );
if ( type === "function" || jQuery.isWindow( obj ) ) {
return false;
}
if ( obj.nodeType === 1 && length ) {
return true;
}
return type === "array" || length === 0 ||
typeof length === "number" && length > 0 && ( length - 1 ) in obj;
}
var Sizzle =
/*!
* Sizzle CSS Selector Engine v2.2.0-pre
* http://sizzlejs.com/
*
* Copyright 2008, 2014 jQuery Foundation, Inc. and other contributors
* Released under the MIT license
* http://jquery.org/license
*
* Date: 2014-12-16
*/
(function( window ) {
var i,
support,
Expr,
getText,
isXML,
tokenize,
compile,
select,
outermostContext,
sortInput,
hasDuplicate,
// Local document vars
setDocument,
document,
docElem,
documentIsHTML,
rbuggyQSA,
rbuggyMatches,
matches,
contains,
// Instance-specific data
expando = "sizzle" + 1 * new Date(),
preferredDoc = window.document,
dirruns = 0,
done = 0,
classCache = createCache(),
tokenCache = createCache(),
compilerCache = createCache(),
sortOrder = function( a, b ) {
if ( a === b ) {
hasDuplicate = true;
}
return 0;
},
// General-purpose constants
MAX_NEGATIVE = 1 << 31,
// Instance methods
hasOwn = ({}).hasOwnProperty,
arr = [],
pop = arr.pop,
push_native = arr.push,
push = arr.push,
slice = arr.slice,
// Use a stripped-down indexOf as it's faster than native
// http://jsperf.com/thor-indexof-vs-for/5
indexOf = function( list, elem ) {
var i = 0,
len = list.length;
for ( ; i < len; i++ ) {
if ( list[i] === elem ) {
return i;
}
}
return -1;
},
booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
// Regular expressions
// Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace
whitespace = "[\\x20\\t\\r\\n\\f]",
// http://www.w3.org/TR/css3-syntax/#characters
characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
// Loosely modeled on CSS identifier characters
// An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors
// Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
identifier = characterEncoding.replace( "w", "w#" ),
// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
attributes = "\\[" + whitespace + "*(" + characterEncoding + ")(?:" + whitespace +
// Operator (capture 2)
"*([*^$|!~]?=)" + whitespace +
// "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
"*\\]",
pseudos = ":(" + characterEncoding + ")(?:\\((" +
// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
// 1. quoted (capture 3; capture 4 or capture 5)
"('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
// 2. simple (capture 6)
"((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
// 3. anything else (capture 2)
".*" +
")\\)|)",
// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
rwhitespace = new RegExp( whitespace + "+", "g" ),
rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
rpseudo = new RegExp( pseudos ),
ridentifier = new RegExp( "^" + identifier + "$" ),
matchExpr = {
"ID": new RegExp( "^#(" + characterEncoding + ")" ),
"CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),
"TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),
"ATTR": new RegExp( "^" + attributes ),
"PSEUDO": new RegExp( "^" + pseudos ),
"CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
"*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
"*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
"bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
// For use in libraries implementing .is()
// We use this for POS matching in `select`
"needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
},
rinputs = /^(?:input|select|textarea|button)$/i,
rheader = /^h\d$/i,
rnative = /^[^{]+\{\s*\[native \w/,
// Easily-parseable/retrievable ID or TAG or CLASS selectors
rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
rsibling = /[+~]/,
rescape = /'|\\/g,
// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
funescape = function( _, escaped, escapedWhitespace ) {
var high = "0x" + escaped - 0x10000;
// NaN means non-codepoint
// Support: Firefox<24
// Workaround erroneous numeric interpretation of +"0x"
return high !== high || escapedWhitespace ?
escaped :
high < 0 ?
// BMP codepoint
String.fromCharCode( high + 0x10000 ) :
// Supplemental Plane codepoint (surrogate pair)
String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
},
// Used for iframes
// See setDocument()
// Removing the function wrapper causes a "Permission Denied"
// error in IE
unloadHandler = function() {
setDocument();
};
// Optimize for push.apply( _, NodeList )
try {
push.apply(
(arr = slice.call( preferredDoc.childNodes )),
preferredDoc.childNodes
);
// Support: Android<4.0
// Detect silently failing push.apply
arr[ preferredDoc.childNodes.length ].nodeType;
} catch ( e ) {
push = { apply: arr.length ?
// Leverage slice if possible
function( target, els ) {
push_native.apply( target, slice.call(els) );
} :
// Support: IE<9
// Otherwise append directly
function( target, els ) {
var j = target.length,
i = 0;
// Can't trust NodeList.length
while ( (target[j++] = els[i++]) ) {}
target.length = j - 1;
}
};
}
function Sizzle( selector, context, results, seed ) {
var match, elem, m, nodeType,
// QSA vars
i, groups, old, nid, newContext, newSelector;
if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
setDocument( context );
}
context = context || document;
results = results || [];
nodeType = context.nodeType;
if ( typeof selector !== "string" || !selector ||
nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
return results;
}
if ( !seed && documentIsHTML ) {
// Try to shortcut find operations when possible (e.g., not under DocumentFragment)
if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {
// Speed-up: Sizzle("#ID")
if ( (m = match[1]) ) {
if ( nodeType === 9 ) {
elem = context.getElementById( m );
// Check parentNode to catch when Blackberry 4.6 returns
// nodes that are no longer in the document (jQuery #6963)
if ( elem && elem.parentNode ) {
// Handle the case where IE, Opera, and Webkit return items
// by name instead of ID
if ( elem.id === m ) {
results.push( elem );
return results;
}
} else {
return results;
}
} else {
// Context is not a document
if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&
contains( context, elem ) && elem.id === m ) {
results.push( elem );
return results;
}
}
// Speed-up: Sizzle("TAG")
} else if ( match[2] ) {
push.apply( results, context.getElementsByTagName( selector ) );
return results;
// Speed-up: Sizzle(".CLASS")
} else if ( (m = match[3]) && support.getElementsByClassName ) {
push.apply( results, context.getElementsByClassName( m ) );
return results;
}
}
// QSA path
if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
nid = old = expando;
newContext = context;
newSelector = nodeType !== 1 && selector;
// qSA works strangely on Element-rooted queries
// We can work around this by specifying an extra ID on the root
// and working up from there (Thanks to Andrew Dupont for the technique)
// IE 8 doesn't work on object elements
if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
groups = tokenize( selector );
if ( (old = context.getAttribute("id")) ) {
nid = old.replace( rescape, "\\$&" );
} else {
context.setAttribute( "id", nid );
}
nid = "[id='" + nid + "'] ";
i = groups.length;
while ( i-- ) {
groups[i] = nid + toSelector( groups[i] );
}
newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context;
newSelector = groups.join(",");
}
if ( newSelector ) {
try {
push.apply( results,
newContext.querySelectorAll( newSelector )
);
return results;
} catch(qsaError) {
} finally {
if ( !old ) {
context.removeAttribute("id");
}
}
}
}
}
// All others
return select( selector.replace( rtrim, "$1" ), context, results, seed );
}
/**
* Create key-value caches of limited size
* @returns {Function(string, Object)} Returns the Object data after storing it on itself with
* property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
* deleting the oldest entry
*/
function createCache() {
var keys = [];
function cache( key, value ) {
// Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
if ( keys.push( key + " " ) > Expr.cacheLength ) {
// Only keep the most recent entries
delete cache[ keys.shift() ];
}
return (cache[ key + " " ] = value);
}
return cache;
}
/**
* Mark a function for special use by Sizzle
* @param {Function} fn The function to mark
*/
function markFunction( fn ) {
fn[ expando ] = true;
return fn;
}
/**
* Support testing using an element
* @param {Function} fn Passed the created div and expects a boolean result
*/
function assert( fn ) {
var div = document.createElement("div");
try {
return !!fn( div );
} catch (e) {
return false;
} finally {
// Remove from its parent by default
if ( div.parentNode ) {
div.parentNode.removeChild( div );
}
// release memory in IE
div = null;
}
}
/**
* Adds the same handler for all of the specified attrs
* @param {String} attrs Pipe-separated list of attributes
* @param {Function} handler The method that will be applied
*/
function addHandle( attrs, handler ) {
var arr = attrs.split("|"),
i = attrs.length;
while ( i-- ) {
Expr.attrHandle[ arr[i] ] = handler;
}
}
/**
* Checks document order of two siblings
* @param {Element} a
* @param {Element} b
* @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
*/
function siblingCheck( a, b ) {
var cur = b && a,
diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
( ~b.sourceIndex || MAX_NEGATIVE ) -
( ~a.sourceIndex || MAX_NEGATIVE );
// Use IE sourceIndex if available on both nodes
if ( diff ) {
return diff;
}
// Check if b follows a
if ( cur ) {
while ( (cur = cur.nextSibling) ) {
if ( cur === b ) {
return -1;
}
}
}
return a ? 1 : -1;
}
/**
* Returns a function to use in pseudos for input types
* @param {String} type
*/
function createInputPseudo( type ) {
return function( elem ) {
var name = elem.nodeName.toLowerCase();
return name === "input" && elem.type === type;
};
}
/**
* Returns a function to use in pseudos for buttons
* @param {String} type
*/
function createButtonPseudo( type ) {
return function( elem ) {
var name = elem.nodeName.toLowerCase();
return (name === "input" || name === "button") && elem.type === type;
};
}
/**
* Returns a function to use in pseudos for positionals
* @param {Function} fn
*/
function createPositionalPseudo( fn ) {
return markFunction(function( argument ) {
argument = +argument;
return markFunction(function( seed, matches ) {
var j,
matchIndexes = fn( [], seed.length, argument ),
i = matchIndexes.length;
// Match elements found at the specified indexes
while ( i-- ) {
if ( seed[ (j = matchIndexes[i]) ] ) {
seed[j] = !(matches[j] = seed[j]);
}
}
});
});
}
/**
* Checks a node for validity as a Sizzle context
* @param {Element|Object=} context
* @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
*/
function testContext( context ) {
return context && typeof context.getElementsByTagName !== "undefined" && context;
}
// Expose support vars for convenience
support = Sizzle.support = {};
/**
* Detects XML nodes
* @param {Element|Object} elem An element or a document
* @returns {Boolean} True iff elem is a non-HTML XML node
*/
isXML = Sizzle.isXML = function( elem ) {
// documentElement is verified for cases where it doesn't yet exist
// (such as loading iframes in IE - #4833)
var documentElement = elem && (elem.ownerDocument || elem).documentElement;
return documentElement ? documentElement.nodeName !== "HTML" : false;
};
/**
* Sets document-related variables once based on the current document
* @param {Element|Object} [doc] An element or document object to use to set the document
* @returns {Object} Returns the current document
*/
setDocument = Sizzle.setDocument = function( node ) {
var hasCompare, parent,
doc = node ? node.ownerDocument || node : preferredDoc;
// If no document and documentElement is available, return
if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
return document;
}
// Set our document
document = doc;
docElem = doc.documentElement;
parent = doc.defaultView;
// Support: IE>8
// If iframe document is assigned to "document" variable and if iframe has been reloaded,
// IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936
// IE6-8 do not support the defaultView property so parent will be undefined
if ( parent && parent !== parent.top ) {
// IE11 does not have attachEvent, so all must suffer
if ( parent.addEventListener ) {
parent.addEventListener( "unload", unloadHandler, false );
} else if ( parent.attachEvent ) {
parent.attachEvent( "onunload", unloadHandler );
}
}
/* Support tests
---------------------------------------------------------------------- */
documentIsHTML = !isXML( doc );
/* Attributes
---------------------------------------------------------------------- */
// Support: IE<8
// Verify that getAttribute really returns attributes and not properties
// (excepting IE8 booleans)
support.attributes = assert(function( div ) {
div.className = "i";
return !div.getAttribute("className");
});
/* getElement(s)By*
---------------------------------------------------------------------- */
// Check if getElementsByTagName("*") returns only elements
support.getElementsByTagName = assert(function( div ) {
div.appendChild( doc.createComment("") );
return !div.getElementsByTagName("*").length;
});
// Support: IE<9
support.getElementsByClassName = rnative.test( doc.getElementsByClassName );
// Support: IE<10
// Check if getElementById returns elements by name
// The broken getElementById methods don't pick up programatically-set names,
// so use a roundabout getElementsByName test
support.getById = assert(function( div ) {
docElem.appendChild( div ).id = expando;
return !doc.getElementsByName || !doc.getElementsByName( expando ).length;
});
// ID find and filter
if ( support.getById ) {
Expr.find["ID"] = function( id, context ) {
if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
var m = context.getElementById( id );
// Check parentNode to catch when Blackberry 4.6 returns
// nodes that are no longer in the document #6963
return m && m.parentNode ? [ m ] : [];
}
};
Expr.filter["ID"] = function( id ) {
var attrId = id.replace( runescape, funescape );
return function( elem ) {
return elem.getAttribute("id") === attrId;
};
};
} else {
// Support: IE6/7
// getElementById is not reliable as a find shortcut
delete Expr.find["ID"];
Expr.filter["ID"] = function( id ) {
var attrId = id.replace( runescape, funescape );
return function( elem ) {
var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
return node && node.value === attrId;
};
};
}
// Tag
Expr.find["TAG"] = support.getElementsByTagName ?
function( tag, context ) {
if ( typeof context.getElementsByTagName !== "undefined" ) {
return context.getElementsByTagName( tag );
// DocumentFragment nodes don't have gEBTN
} else if ( support.qsa ) {
return context.querySelectorAll( tag );
}
} :
function( tag, context ) {
var elem,
tmp = [],
i = 0,
// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
results = context.getElementsByTagName( tag );
// Filter out possible comments
if ( tag === "*" ) {
while ( (elem = results[i++]) ) {
if ( elem.nodeType === 1 ) {
tmp.push( elem );
}
}
return tmp;
}
return results;
};
// Class
Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
if ( documentIsHTML ) {
return context.getElementsByClassName( className );
}
};
/* QSA/matchesSelector
---------------------------------------------------------------------- */
// QSA and matchesSelector support
// matchesSelector(:active) reports false when true (IE9/Opera 11.5)
rbuggyMatches = [];
// qSa(:focus) reports false when true (Chrome 21)
// We allow this because of a bug in IE8/9 that throws an error
// whenever `document.activeElement` is accessed on an iframe
// So, we allow :focus to pass through QSA all the time to avoid the IE error
// See http://bugs.jquery.com/ticket/13378
rbuggyQSA = [];
if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) {
// Build QSA regex
// Regex strategy adopted from Diego Perini
assert(function( div ) {
// Select is set to empty string on purpose
// This is to test IE's treatment of not explicitly
// setting a boolean content attribute,
// since its presence should be enough
// http://bugs.jquery.com/ticket/12359
docElem.appendChild( div ).innerHTML = "<a id='" + expando + "'></a>" +
"<select id='" + expando + "-\f]' msallowcapture=''>" +
"<option selected=''></option></select>";
// Support: IE8, Opera 11-12.16
// Nothing should be selected when empty strings follow ^= or $= or *=
// The test attribute must be unknown in Opera but "safe" for WinRT
// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
if ( div.querySelectorAll("[msallowcapture^='']").length ) {
rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
}
// Support: IE8
// Boolean attributes and "value" are not treated correctly
if ( !div.querySelectorAll("[selected]").length ) {
rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
}
// Support: Chrome<29, Android<4.2+, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.7+
if ( !div.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
rbuggyQSA.push("~=");
}
// Webkit/Opera - :checked should return selected option elements
// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
// IE8 throws error here and will not see later tests
if ( !div.querySelectorAll(":checked").length ) {
rbuggyQSA.push(":checked");
}
// Support: Safari 8+, iOS 8+
// https://bugs.webkit.org/show_bug.cgi?id=136851
// In-page `selector#id sibing-combinator selector` fails
if ( !div.querySelectorAll( "a#" + expando + "+*" ).length ) {
rbuggyQSA.push(".#.+[+~]");
}
});
assert(function( div ) {
// Support: Windows 8 Native Apps
// The type and name attributes are restricted during .innerHTML assignment
var input = doc.createElement("input");
input.setAttribute( "type", "hidden" );
div.appendChild( input ).setAttribute( "name", "D" );
// Support: IE8
// Enforce case-sensitivity of name attribute
if ( div.querySelectorAll("[name=d]").length ) {
rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
}
// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
// IE8 throws error here and will not see later tests
if ( !div.querySelectorAll(":enabled").length ) {
rbuggyQSA.push( ":enabled", ":disabled" );
}
// Opera 10-11 does not throw on post-comma invalid pseudos
div.querySelectorAll("*,:x");
rbuggyQSA.push(",.*:");
});
}
if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
docElem.webkitMatchesSelector ||
docElem.mozMatchesSelector ||
docElem.oMatchesSelector ||
docElem.msMatchesSelector) )) ) {
assert(function( div ) {
// Check to see if it's possible to do matchesSelector
// on a disconnected node (IE 9)
support.disconnectedMatch = matches.call( div, "div" );
// This should fail with an exception
// Gecko does not error, returns false instead
matches.call( div, "[s!='']:x" );
rbuggyMatches.push( "!=", pseudos );
});
}
rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
/* Contains
---------------------------------------------------------------------- */
hasCompare = rnative.test( docElem.compareDocumentPosition );
// Element contains another
// Purposefully does not implement inclusive descendent
// As in, an element does not contain itself
contains = hasCompare || rnative.test( docElem.contains ) ?
function( a, b ) {
var adown = a.nodeType === 9 ? a.documentElement : a,
bup = b && b.parentNode;
return a === bup || !!( bup && bup.nodeType === 1 && (
adown.contains ?
adown.contains( bup ) :
a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
));
} :
function( a, b ) {
if ( b ) {
while ( (b = b.parentNode) ) {
if ( b === a ) {
return true;
}
}
}
return false;
};
/* Sorting
---------------------------------------------------------------------- */
// Document order sorting
sortOrder = hasCompare ?
function( a, b ) {
// Flag for duplicate removal
if ( a === b ) {
hasDuplicate = true;
return 0;
}
// Sort on method existence if only one input has compareDocumentPosition
var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
if ( compare ) {
return compare;
}
// Calculate position if both inputs belong to the same document
compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
a.compareDocumentPosition( b ) :
// Otherwise we know they are disconnected
1;
// Disconnected nodes
if ( compare & 1 ||
(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
// Choose the first element that is related to our preferred document
if ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
return -1;
}
if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
return 1;
}
// Maintain original order
return sortInput ?
( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
0;
}
return compare & 4 ? -1 : 1;
} :
function( a, b ) {
// Exit early if the nodes are identical
if ( a === b ) {
hasDuplicate = true;
return 0;
}
var cur,
i = 0,
aup = a.parentNode,
bup = b.parentNode,
ap = [ a ],
bp = [ b ];
// Parentless nodes are either documents or disconnected
if ( !aup || !bup ) {
return a === doc ? -1 :
b === doc ? 1 :
aup ? -1 :
bup ? 1 :
sortInput ?
( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
0;
// If the nodes are siblings, we can do a quick check
} else if ( aup === bup ) {
return siblingCheck( a, b );
}
// Otherwise we need full lists of their ancestors for comparison
cur = a;
while ( (cur = cur.parentNode) ) {
ap.unshift( cur );
}
cur = b;
while ( (cur = cur.parentNode) ) {
bp.unshift( cur );
}
// Walk down the tree looking for a discrepancy
while ( ap[i] === bp[i] ) {
i++;
}
return i ?
// Do a sibling check if the nodes have a common ancestor
siblingCheck( ap[i], bp[i] ) :
// Otherwise nodes in our document sort first
ap[i] === preferredDoc ? -1 :
bp[i] === preferredDoc ? 1 :
0;
};
return doc;
};
Sizzle.matches = function( expr, elements ) {
return Sizzle( expr, null, null, elements );
};
Sizzle.matchesSelector = function( elem, expr ) {
// Set document vars if needed
if ( ( elem.ownerDocument || elem ) !== document ) {
setDocument( elem );
}
// Make sure that attribute selectors are quoted
expr = expr.replace( rattributeQuotes, "='$1']" );
if ( support.matchesSelector && documentIsHTML &&
( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {
try {
var ret = matches.call( elem, expr );
// IE 9's matchesSelector returns false on disconnected nodes
if ( ret || support.disconnectedMatch ||
// As well, disconnected nodes are said to be in a document
// fragment in IE 9
elem.document && elem.document.nodeType !== 11 ) {
return ret;
}
} catch (e) {}
}
return Sizzle( expr, document, null, [ elem ] ).length > 0;
};
Sizzle.contains = function( context, elem ) {
// Set document vars if needed
if ( ( context.ownerDocument || context ) !== document ) {
setDocument( context );
}
return contains( context, elem );
};
Sizzle.attr = function( elem, name ) {
// Set document vars if needed
if ( ( elem.ownerDocument || elem ) !== document ) {
setDocument( elem );
}
var fn = Expr.attrHandle[ name.toLowerCase() ],
// Don't get fooled by Object.prototype properties (jQuery #13807)
val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
fn( elem, name, !documentIsHTML ) :
undefined;
return val !== undefined ?
val :
support.attributes || !documentIsHTML ?
elem.getAttribute( name ) :
(val = elem.getAttributeNode(name)) && val.specified ?
val.value :
null;
};
Sizzle.error = function( msg ) {
throw new Error( "Syntax error, unrecognized expression: " + msg );
};
/**
* Document sorting and removing duplicates
* @param {ArrayLike} results
*/
Sizzle.uniqueSort = function( results ) {
var elem,
duplicates = [],
j = 0,
i = 0;
// Unless we *know* we can detect duplicates, assume their presence
hasDuplicate = !support.detectDuplicates;
sortInput = !support.sortStable && results.slice( 0 );
results.sort( sortOrder );
if ( hasDuplicate ) {
while ( (elem = results[i++]) ) {
if ( elem === results[ i ] ) {
j = duplicates.push( i );
}
}
while ( j-- ) {
results.splice( duplicates[ j ], 1 );
}
}
// Clear input after sorting to release objects
// See https://github.com/jquery/sizzle/pull/225
sortInput = null;
return results;
};
/**
* Utility function for retrieving the text value of an array of DOM nodes
* @param {Array|Element} elem
*/
getText = Sizzle.getText = function( elem ) {
var node,
ret = "",
i = 0,
nodeType = elem.nodeType;
if ( !nodeType ) {
// If no nodeType, this is expected to be an array
while ( (node = elem[i++]) ) {
// Do not traverse comment nodes
ret += getText( node );
}
} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
// Use textContent for elements
// innerText usage removed for consistency of new lines (jQuery #11153)
if ( typeof elem.textContent === "string" ) {
return elem.textContent;
} else {
// Traverse its children
for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
ret += getText( elem );
}
}
} else if ( nodeType === 3 || nodeType === 4 ) {
return elem.nodeValue;
}
// Do not include comment or processing instruction nodes
return ret;
};
Expr = Sizzle.selectors = {
// Can be adjusted by the user
cacheLength: 50,
createPseudo: markFunction,
match: matchExpr,
attrHandle: {},
find: {},
relative: {
">": { dir: "parentNode", first: true },
" ": { dir: "parentNode" },
"+": { dir: "previousSibling", first: true },
"~": { dir: "previousSibling" }
},
preFilter: {
"ATTR": function( match ) {
match[1] = match[1].replace( runescape, funescape );
// Move the given value to match[3] whether quoted or unquoted
match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
if ( match[2] === "~=" ) {
match[3] = " " + match[3] + " ";
}
return match.slice( 0, 4 );
},
"CHILD": function( match ) {
/* matches from matchExpr["CHILD"]
1 type (only|nth|...)
2 what (child|of-type)
3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
4 xn-component of xn+y argument ([+-]?\d*n|)
5 sign of xn-component
6 x of xn-component
7 sign of y-component
8 y of y-component
*/
match[1] = match[1].toLowerCase();
if ( match[1].slice( 0, 3 ) === "nth" ) {
// nth-* requires argument
if ( !match[3] ) {
Sizzle.error( match[0] );
}
// numeric x and y parameters for Expr.filter.CHILD
// remember that false/true cast respectively to 0/1
match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
// other types prohibit arguments
} else if ( match[3] ) {
Sizzle.error( match[0] );
}
return match;
},
"PSEUDO": function( match ) {
var excess,
unquoted = !match[6] && match[2];
if ( matchExpr["CHILD"].test( match[0] ) ) {
return null;
}
// Accept quoted arguments as-is
if ( match[3] ) {
match[2] = match[4] || match[5] || "";
// Strip excess characters from unquoted arguments
} else if ( unquoted && rpseudo.test( unquoted ) &&
// Get excess from tokenize (recursively)
(excess = tokenize( unquoted, true )) &&
// advance to the next closing parenthesis
(excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
// excess is a negative index
match[0] = match[0].slice( 0, excess );
match[2] = unquoted.slice( 0, excess );
}
// Return only captures needed by the pseudo filter method (type and argument)
return match.slice( 0, 3 );
}
},
filter: {
"TAG": function( nodeNameSelector ) {
var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
return nodeNameSelector === "*" ?
function() { return true; } :
function( elem ) {
return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
};
},
"CLASS": function( className ) {
var pattern = classCache[ className + " " ];
return pattern ||
(pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
classCache( className, function( elem ) {
return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" );
});
},
"ATTR": function( name, operator, check ) {
return function( elem ) {
var result = Sizzle.attr( elem, name );
if ( result == null ) {
return operator === "!=";
}
if ( !operator ) {
return true;
}
result += "";
return operator === "=" ? result === check :
operator === "!=" ? result !== check :
operator === "^=" ? check && result.indexOf( check ) === 0 :
operator === "*=" ? check && result.indexOf( check ) > -1 :
operator === "$=" ? check && result.slice( -check.length ) === check :
operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
false;
};
},
"CHILD": function( type, what, argument, first, last ) {
var simple = type.slice( 0, 3 ) !== "nth",
forward = type.slice( -4 ) !== "last",
ofType = what === "of-type";
return first === 1 && last === 0 ?
// Shortcut for :nth-*(n)
function( elem ) {
return !!elem.parentNode;
} :
function( elem, context, xml ) {
var cache, outerCache, node, diff, nodeIndex, start,
dir = simple !== forward ? "nextSibling" : "previousSibling",
parent = elem.parentNode,
name = ofType && elem.nodeName.toLowerCase(),
useCache = !xml && !ofType;
if ( parent ) {
// :(first|last|only)-(child|of-type)
if ( simple ) {
while ( dir ) {
node = elem;
while ( (node = node[ dir ]) ) {
if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {
return false;
}
}
// Reverse direction for :only-* (if we haven't yet done so)
start = dir = type === "only" && !start && "nextSibling";
}
return true;
}
start = [ forward ? parent.firstChild : parent.lastChild ];
// non-xml :nth-child(...) stores cache data on `parent`
if ( forward && useCache ) {
// Seek `elem` from a previously-cached index
outerCache = parent[ expando ] || (parent[ expando ] = {});
cache = outerCache[ type ] || [];
nodeIndex = cache[0] === dirruns && cache[1];
diff = cache[0] === dirruns && cache[2];
node = nodeIndex && parent.childNodes[ nodeIndex ];
while ( (node = ++nodeIndex && node && node[ dir ] ||
// Fallback to seeking `elem` from the start
(diff = nodeIndex = 0) || start.pop()) ) {
// When found, cache indexes on `parent` and break
if ( node.nodeType === 1 && ++diff && node === elem ) {
outerCache[ type ] = [ dirruns, nodeIndex, diff ];
break;
}
}
// Use previously-cached element index if available
} else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {
diff = cache[1];
// xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)
} else {
// Use the same loop as above to seek `elem` from the start
while ( (node = ++nodeIndex && node && node[ dir ] ||
(diff = nodeIndex = 0) || start.pop()) ) {
if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {
// Cache the index of each encountered element
if ( useCache ) {
(node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];
}
if ( node === elem ) {
break;
}
}
}
}
// Incorporate the offset, then check against cycle size
diff -= last;
return diff === first || ( diff % first === 0 && diff / first >= 0 );
}
};
},
"PSEUDO": function( pseudo, argument ) {
// pseudo-class names are case-insensitive
// http://www.w3.org/TR/selectors/#pseudo-classes
// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
// Remember that setFilters inherits from pseudos
var args,
fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
Sizzle.error( "unsupported pseudo: " + pseudo );
// The user may use createPseudo to indicate that
// arguments are needed to create the filter function
// just as Sizzle does
if ( fn[ expando ] ) {
return fn( argument );
}
// But maintain support for old signatures
if ( fn.length > 1 ) {
args = [ pseudo, pseudo, "", argument ];
return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
markFunction(function( seed, matches ) {
var idx,
matched = fn( seed, argument ),
i = matched.length;
while ( i-- ) {
idx = indexOf( seed, matched[i] );
seed[ idx ] = !( matches[ idx ] = matched[i] );
}
}) :
function( elem ) {
return fn( elem, 0, args );
};
}
return fn;
}
},
pseudos: {
// Potentially complex pseudos
"not": markFunction(function( selector ) {
// Trim the selector passed to compile
// to avoid treating leading and trailing
// spaces as combinators
var input = [],
results = [],
matcher = compile( selector.replace( rtrim, "$1" ) );
return matcher[ expando ] ?
markFunction(function( seed, matches, context, xml ) {
var elem,
unmatched = matcher( seed, null, xml, [] ),
i = seed.length;
// Match elements unmatched by `matcher`
while ( i-- ) {
if ( (elem = unmatched[i]) ) {
seed[i] = !(matches[i] = elem);
}
}
}) :
function( elem, context, xml ) {
input[0] = elem;
matcher( input, null, xml, results );
// Don't keep the element (issue #299)
input[0] = null;
return !results.pop();
};
}),
"has": markFunction(function( selector ) {
return function( elem ) {
return Sizzle( selector, elem ).length > 0;
};
}),
"contains": markFunction(function( text ) {
text = text.replace( runescape, funescape );
return function( elem ) {
return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
};
}),
// "Whether an element is represented by a :lang() selector
// is based solely on the element's language value
// being equal to the identifier C,
// or beginning with the identifier C immediately followed by "-".
// The matching of C against the element's language value is performed case-insensitively.
// The identifier C does not have to be a valid language name."
// http://www.w3.org/TR/selectors/#lang-pseudo
"lang": markFunction( function( lang ) {
// lang value must be a valid identifier
if ( !ridentifier.test(lang || "") ) {
Sizzle.error( "unsupported lang: " + lang );
}
lang = lang.replace( runescape, funescape ).toLowerCase();
return function( elem ) {
var elemLang;
do {
if ( (elemLang = documentIsHTML ?
elem.lang :
elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
elemLang = elemLang.toLowerCase();
return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
}
} while ( (elem = elem.parentNode) && elem.nodeType === 1 );
return false;
};
}),
// Miscellaneous
"target": function( elem ) {
var hash = window.location && window.location.hash;
return hash && hash.slice( 1 ) === elem.id;
},
"root": function( elem ) {
return elem === docElem;
},
"focus": function( elem ) {
return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
},
// Boolean properties
"enabled": function( elem ) {
return elem.disabled === false;
},
"disabled": function( elem ) {
return elem.disabled === true;
},
"checked": function( elem ) {
// In CSS3, :checked should return both checked and selected elements
// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
var nodeName = elem.nodeName.toLowerCase();
return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
},
"selected": function( elem ) {
// Accessing this property makes selected-by-default
// options in Safari work properly
if ( elem.parentNode ) {
elem.parentNode.selectedIndex;
}
return elem.selected === true;
},
// Contents
"empty": function( elem ) {
// http://www.w3.org/TR/selectors/#empty-pseudo
// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
// but not by others (comment: 8; processing instruction: 7; etc.)
// nodeType < 6 works because attributes (2) do not appear as children
for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
if ( elem.nodeType < 6 ) {
return false;
}
}
return true;
},
"parent": function( elem ) {
return !Expr.pseudos["empty"]( elem );
},
// Element/input types
"header": function( elem ) {
return rheader.test( elem.nodeName );
},
"input": function( elem ) {
return rinputs.test( elem.nodeName );
},
"button": function( elem ) {
var name = elem.nodeName.toLowerCase();
return name === "input" && elem.type === "button" || name === "button";
},
"text": function( elem ) {
var attr;
return elem.nodeName.toLowerCase() === "input" &&
elem.type === "text" &&
// Support: IE<8
// New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
},
// Position-in-collection
"first": createPositionalPseudo(function() {
return [ 0 ];
}),
"last": createPositionalPseudo(function( matchIndexes, length ) {
return [ length - 1 ];
}),
"eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
return [ argument < 0 ? argument + length : argument ];
}),
"even": createPositionalPseudo(function( matchIndexes, length ) {
var i = 0;
for ( ; i < length; i += 2 ) {
matchIndexes.push( i );
}
return matchIndexes;
}),
"odd": createPositionalPseudo(function( matchIndexes, length ) {
var i = 1;
for ( ; i < length; i += 2 ) {
matchIndexes.push( i );
}
return matchIndexes;
}),
"lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
var i = argument < 0 ? argument + length : argument;
for ( ; --i >= 0; ) {
matchIndexes.push( i );
}
return matchIndexes;
}),
"gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
var i = argument < 0 ? argument + length : argument;
for ( ; ++i < length; ) {
matchIndexes.push( i );
}
return matchIndexes;
})
}
};
Expr.pseudos["nth"] = Expr.pseudos["eq"];
// Add button/input type pseudos
for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
Expr.pseudos[ i ] = createInputPseudo( i );
}
for ( i in { submit: true, reset: true } ) {
Expr.pseudos[ i ] = createButtonPseudo( i );
}
// Easy API for creating new setFilters
function setFilters() {}
setFilters.prototype = Expr.filters = Expr.pseudos;
Expr.setFilters = new setFilters();
tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
var matched, match, tokens, type,
soFar, groups, preFilters,
cached = tokenCache[ selector + " " ];
if ( cached ) {
return parseOnly ? 0 : cached.slice( 0 );
}
soFar = selector;
groups = [];
preFilters = Expr.preFilter;
while ( soFar ) {
// Comma and first run
if ( !matched || (match = rcomma.exec( soFar )) ) {
if ( match ) {
// Don't consume trailing commas as valid
soFar = soFar.slice( match[0].length ) || soFar;
}
groups.push( (tokens = []) );
}
matched = false;
// Combinators
if ( (match = rcombinators.exec( soFar )) ) {
matched = match.shift();
tokens.push({
value: matched,
// Cast descendant combinators to space
type: match[0].replace( rtrim, " " )
});
soFar = soFar.slice( matched.length );
}
// Filters
for ( type in Expr.filter ) {
if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
(match = preFilters[ type ]( match ))) ) {
matched = match.shift();
tokens.push({
value: matched,
type: type,
matches: match
});
soFar = soFar.slice( matched.length );
}
}
if ( !matched ) {
break;
}
}
// Return the length of the invalid excess
// if we're just parsing
// Otherwise, throw an error or return tokens
return parseOnly ?
soFar.length :
soFar ?
Sizzle.error( selector ) :
// Cache the tokens
tokenCache( selector, groups ).slice( 0 );
};
function toSelector( tokens ) {
var i = 0,
len = tokens.length,
selector = "";
for ( ; i < len; i++ ) {
selector += tokens[i].value;
}
return selector;
}
function addCombinator( matcher, combinator, base ) {
var dir = combinator.dir,
checkNonElements = base && dir === "parentNode",
doneName = done++;
return combinator.first ?
// Check against closest ancestor/preceding element
function( elem, context, xml ) {
while ( (elem = elem[ dir ]) ) {
if ( elem.nodeType === 1 || checkNonElements ) {
return matcher( elem, context, xml );
}
}
} :
// Check against all ancestor/preceding elements
function( elem, context, xml ) {
var oldCache, outerCache,
newCache = [ dirruns, doneName ];
// We can't set arbitrary data on XML nodes, so they don't benefit from dir caching
if ( xml ) {
while ( (elem = elem[ dir ]) ) {
if ( elem.nodeType === 1 || checkNonElements ) {
if ( matcher( elem, context, xml ) ) {
return true;
}
}
}
} else {
while ( (elem = elem[ dir ]) ) {
if ( elem.nodeType === 1 || checkNonElements ) {
outerCache = elem[ expando ] || (elem[ expando ] = {});
if ( (oldCache = outerCache[ dir ]) &&
oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
// Assign to newCache so results back-propagate to previous elements
return (newCache[ 2 ] = oldCache[ 2 ]);
} else {
// Reuse newcache so results back-propagate to previous elements
outerCache[ dir ] = newCache;
// A match means we're done; a fail means we have to keep checking
if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
return true;
}
}
}
}
}
};
}
function elementMatcher( matchers ) {
return matchers.length > 1 ?
function( elem, context, xml ) {
var i = matchers.length;
while ( i-- ) {
if ( !matchers[i]( elem, context, xml ) ) {
return false;
}
}
return true;
} :
matchers[0];
}
function multipleContexts( selector, contexts, results ) {
var i = 0,
len = contexts.length;
for ( ; i < len; i++ ) {
Sizzle( selector, contexts[i], results );
}
return results;
}
function condense( unmatched, map, filter, context, xml ) {
var elem,
newUnmatched = [],
i = 0,
len = unmatched.length,
mapped = map != null;
for ( ; i < len; i++ ) {
if ( (elem = unmatched[i]) ) {
if ( !filter || filter( elem, context, xml ) ) {
newUnmatched.push( elem );
if ( mapped ) {
map.push( i );
}
}
}
}
return newUnmatched;
}
function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
if ( postFilter && !postFilter[ expando ] ) {
postFilter = setMatcher( postFilter );
}
if ( postFinder && !postFinder[ expando ] ) {
postFinder = setMatcher( postFinder, postSelector );
}
return markFunction(function( seed, results, context, xml ) {
var temp, i, elem,
preMap = [],
postMap = [],
preexisting = results.length,
// Get initial elements from seed or context
elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
// Prefilter to get matcher input, preserving a map for seed-results synchronization
matcherIn = preFilter && ( seed || !selector ) ?
condense( elems, preMap, preFilter, context, xml ) :
elems,
matcherOut = matcher ?
// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
// ...intermediate processing is necessary
[] :
// ...otherwise use results directly
results :
matcherIn;
// Find primary matches
if ( matcher ) {
matcher( matcherIn, matcherOut, context, xml );
}
// Apply postFilter
if ( postFilter ) {
temp = condense( matcherOut, postMap );
postFilter( temp, [], context, xml );
// Un-match failing elements by moving them back to matcherIn
i = temp.length;
while ( i-- ) {
if ( (elem = temp[i]) ) {
matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
}
}
}
if ( seed ) {
if ( postFinder || preFilter ) {
if ( postFinder ) {
// Get the final matcherOut by condensing this intermediate into postFinder contexts
temp = [];
i = matcherOut.length;
while ( i-- ) {
if ( (elem = matcherOut[i]) ) {
// Restore matcherIn since elem is not yet a final match
temp.push( (matcherIn[i] = elem) );
}
}
postFinder( null, (matcherOut = []), temp, xml );
}
// Move matched elements from seed to results to keep them synchronized
i = matcherOut.length;
while ( i-- ) {
if ( (elem = matcherOut[i]) &&
(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {
seed[temp] = !(results[temp] = elem);
}
}
}
// Add elements to results, through postFinder if defined
} else {
matcherOut = condense(
matcherOut === results ?
matcherOut.splice( preexisting, matcherOut.length ) :
matcherOut
);
if ( postFinder ) {
postFinder( null, results, matcherOut, xml );
} else {
push.apply( results, matcherOut );
}
}
});
}
function matcherFromTokens( tokens ) {
var checkContext, matcher, j,
len = tokens.length,
leadingRelative = Expr.relative[ tokens[0].type ],
implicitRelative = leadingRelative || Expr.relative[" "],
i = leadingRelative ? 1 : 0,
// The foundational matcher ensures that elements are reachable from top-level context(s)
matchContext = addCombinator( function( elem ) {
return elem === checkContext;
}, implicitRelative, true ),
matchAnyContext = addCombinator( function( elem ) {
return indexOf( checkContext, elem ) > -1;
}, implicitRelative, true ),
matchers = [ function( elem, context, xml ) {
var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
(checkContext = context).nodeType ?
matchContext( elem, context, xml ) :
matchAnyContext( elem, context, xml ) );
// Avoid hanging onto element (issue #299)
checkContext = null;
return ret;
} ];
for ( ; i < len; i++ ) {
if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
} else {
matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
// Return special upon seeing a positional matcher
if ( matcher[ expando ] ) {
// Find the next relative operator (if any) for proper handling
j = ++i;
for ( ; j < len; j++ ) {
if ( Expr.relative[ tokens[j].type ] ) {
break;
}
}
return setMatcher(
i > 1 && elementMatcher( matchers ),
i > 1 && toSelector(
// If the preceding token was a descendant combinator, insert an implicit any-element `*`
tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
).replace( rtrim, "$1" ),
matcher,
i < j && matcherFromTokens( tokens.slice( i, j ) ),
j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
j < len && toSelector( tokens )
);
}
matchers.push( matcher );
}
}
return elementMatcher( matchers );
}
function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
var bySet = setMatchers.length > 0,
byElement = elementMatchers.length > 0,
superMatcher = function( seed, context, xml, results, outermost ) {
var elem, j, matcher,
matchedCount = 0,
i = "0",
unmatched = seed && [],
setMatched = [],
contextBackup = outermostContext,
// We must always have either seed elements or outermost context
elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
// Use integer dirruns iff this is the outermost matcher
dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
len = elems.length;
if ( outermost ) {
outermostContext = context !== document && context;
}
// Add elements passing elementMatchers directly to results
// Keep `i` a string if there are no elements so `matchedCount` will be "00" below
// Support: IE<9, Safari
// Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
if ( byElement && elem ) {
j = 0;
while ( (matcher = elementMatchers[j++]) ) {
if ( matcher( elem, context, xml ) ) {
results.push( elem );
break;
}
}
if ( outermost ) {
dirruns = dirrunsUnique;
}
}
// Track unmatched elements for set filters
if ( bySet ) {
// They will have gone through all possible matchers
if ( (elem = !matcher && elem) ) {
matchedCount--;
}
// Lengthen the array for every element, matched or not
if ( seed ) {
unmatched.push( elem );
}
}
}
// Apply set filters to unmatched elements
matchedCount += i;
if ( bySet && i !== matchedCount ) {
j = 0;
while ( (matcher = setMatchers[j++]) ) {
matcher( unmatched, setMatched, context, xml );
}
if ( seed ) {
// Reintegrate element matches to eliminate the need for sorting
if ( matchedCount > 0 ) {
while ( i-- ) {
if ( !(unmatched[i] || setMatched[i]) ) {
setMatched[i] = pop.call( results );
}
}
}
// Discard index placeholder values to get only actual matches
setMatched = condense( setMatched );
}
// Add matches to results
push.apply( results, setMatched );
// Seedless set matches succeeding multiple successful matchers stipulate sorting
if ( outermost && !seed && setMatched.length > 0 &&
( matchedCount + setMatchers.length ) > 1 ) {
Sizzle.uniqueSort( results );
}
}
// Override manipulation of globals by nested matchers
if ( outermost ) {
dirruns = dirrunsUnique;
outermostContext = contextBackup;
}
return unmatched;
};
return bySet ?
markFunction( superMatcher ) :
superMatcher;
}
compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
var i,
setMatchers = [],
elementMatchers = [],
cached = compilerCache[ selector + " " ];
if ( !cached ) {
// Generate a function of recursive functions that can be used to check each element
if ( !match ) {
match = tokenize( selector );
}
i = match.length;
while ( i-- ) {
cached = matcherFromTokens( match[i] );
if ( cached[ expando ] ) {
setMatchers.push( cached );
} else {
elementMatchers.push( cached );
}
}
// Cache the compiled function
cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
// Save selector and tokenization
cached.selector = selector;
}
return cached;
};
/**
* A low-level selection function that works with Sizzle's compiled
* selector functions
* @param {String|Function} selector A selector or a pre-compiled
* selector function built with Sizzle.compile
* @param {Element} context
* @param {Array} [results]
* @param {Array} [seed] A set of elements to match against
*/
select = Sizzle.select = function( selector, context, results, seed ) {
var i, tokens, token, type, find,
compiled = typeof selector === "function" && selector,
match = !seed && tokenize( (selector = compiled.selector || selector) );
results = results || [];
// Try to minimize operations if there is no seed and only one group
if ( match.length === 1 ) {
// Take a shortcut and set the context if the root selector is an ID
tokens = match[0] = match[0].slice( 0 );
if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
support.getById && context.nodeType === 9 && documentIsHTML &&
Expr.relative[ tokens[1].type ] ) {
context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
if ( !context ) {
return results;
// Precompiled matchers will still verify ancestry, so step up a level
} else if ( compiled ) {
context = context.parentNode;
}
selector = selector.slice( tokens.shift().value.length );
}
// Fetch a seed set for right-to-left matching
i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
while ( i-- ) {
token = tokens[i];
// Abort if we hit a combinator
if ( Expr.relative[ (type = token.type) ] ) {
break;
}
if ( (find = Expr.find[ type ]) ) {
// Search, expanding context for leading sibling combinators
if ( (seed = find(
token.matches[0].replace( runescape, funescape ),
rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
)) ) {
// If seed is empty or no tokens remain, we can return early
tokens.splice( i, 1 );
selector = seed.length && toSelector( tokens );
if ( !selector ) {
push.apply( results, seed );
return results;
}
break;
}
}
}
}
// Compile and execute a filtering function if one is not provided
// Provide `match` to avoid retokenization if we modified the selector above
( compiled || compile( selector, match ) )(
seed,
context,
!documentIsHTML,
results,
rsibling.test( selector ) && testContext( context.parentNode ) || context
);
return results;
};
// One-time assignments
// Sort stability
support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
// Support: Chrome 14-35+
// Always assume duplicates if they aren't passed to the comparison function
support.detectDuplicates = !!hasDuplicate;
// Initialize against the default document
setDocument();
// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
// Detached nodes confoundingly follow *each other*
support.sortDetached = assert(function( div1 ) {
// Should return 1, but returns 4 (following)
return div1.compareDocumentPosition( document.createElement("div") ) & 1;
});
// Support: IE<8
// Prevent attribute/property "interpolation"
// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
if ( !assert(function( div ) {
div.innerHTML = "<a href='#'></a>";
return div.firstChild.getAttribute("href") === "#" ;
}) ) {
addHandle( "type|href|height|width", function( elem, name, isXML ) {
if ( !isXML ) {
return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
}
});
}
// Support: IE<9
// Use defaultValue in place of getAttribute("value")
if ( !support.attributes || !assert(function( div ) {
div.innerHTML = "<input/>";
div.firstChild.setAttribute( "value", "" );
return div.firstChild.getAttribute( "value" ) === "";
}) ) {
addHandle( "value", function( elem, name, isXML ) {
if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
return elem.defaultValue;
}
});
}
// Support: IE<9
// Use getAttributeNode to fetch booleans when getAttribute lies
if ( !assert(function( div ) {
return div.getAttribute("disabled") == null;
}) ) {
addHandle( booleans, function( elem, name, isXML ) {
var val;
if ( !isXML ) {
return elem[ name ] === true ? name.toLowerCase() :
(val = elem.getAttributeNode( name )) && val.specified ?
val.value :
null;
}
});
}
return Sizzle;
})( window );
jQuery.find = Sizzle;
jQuery.expr = Sizzle.selectors;
jQuery.expr[":"] = jQuery.expr.pseudos;
jQuery.unique = Sizzle.uniqueSort;
jQuery.text = Sizzle.getText;
jQuery.isXMLDoc = Sizzle.isXML;
jQuery.contains = Sizzle.contains;
var rneedsContext = jQuery.expr.match.needsContext;
var rsingleTag = (/^<(\w+)\s*\/?>(?:<\/\1>|)$/);
var risSimple = /^.[^:#\[\.,]*$/;
// Implement the identical functionality for filter and not
function winnow( elements, qualifier, not ) {
if ( jQuery.isFunction( qualifier ) ) {
return jQuery.grep( elements, function( elem, i ) {
/* jshint -W018 */
return !!qualifier.call( elem, i, elem ) !== not;
});
}
if ( qualifier.nodeType ) {
return jQuery.grep( elements, function( elem ) {
return ( elem === qualifier ) !== not;
});
}
if ( typeof qualifier === "string" ) {
if ( risSimple.test( qualifier ) ) {
return jQuery.filter( qualifier, elements, not );
}
qualifier = jQuery.filter( qualifier, elements );
}
return jQuery.grep( elements, function( elem ) {
return ( indexOf.call( qualifier, elem ) >= 0 ) !== not;
});
}
jQuery.filter = function( expr, elems, not ) {
var elem = elems[ 0 ];
if ( not ) {
expr = ":not(" + expr + ")";
}
return elems.length === 1 && elem.nodeType === 1 ?
jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :
jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
return elem.nodeType === 1;
}));
};
jQuery.fn.extend({
find: function( selector ) {
var i,
len = this.length,
ret = [],
self = this;
if ( typeof selector !== "string" ) {
return this.pushStack( jQuery( selector ).filter(function() {
for ( i = 0; i < len; i++ ) {
if ( jQuery.contains( self[ i ], this ) ) {
return true;
}
}
}) );
}
for ( i = 0; i < len; i++ ) {
jQuery.find( selector, self[ i ], ret );
}
// Needed because $( selector, context ) becomes $( context ).find( selector )
ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );
ret.selector = this.selector ? this.selector + " " + selector : selector;
return ret;
},
filter: function( selector ) {
return this.pushStack( winnow(this, selector || [], false) );
},
not: function( selector ) {
return this.pushStack( winnow(this, selector || [], true) );
},
is: function( selector ) {
return !!winnow(
this,
// If this is a positional/relative selector, check membership in the returned set
// so $("p:first").is("p:last") won't return true for a doc with two "p".
typeof selector === "string" && rneedsContext.test( selector ) ?
jQuery( selector ) :
selector || [],
false
).length;
}
});
// Initialize a jQuery object
// A central reference to the root jQuery(document)
var rootjQuery,
// A simple way to check for HTML strings
// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
// Strict HTML recognition (#11290: must start with <)
rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
init = jQuery.fn.init = function( selector, context ) {
var match, elem;
// HANDLE: $(""), $(null), $(undefined), $(false)
if ( !selector ) {
return this;
}
// Handle HTML strings
if ( typeof selector === "string" ) {
if ( selector[0] === "<" && selector[ selector.length - 1 ] === ">" && selector.length >= 3 ) {
// Assume that strings that start and end with <> are HTML and skip the regex check
match = [ null, selector, null ];
} else {
match = rquickExpr.exec( selector );
}
// Match html or make sure no context is specified for #id
if ( match && (match[1] || !context) ) {
// HANDLE: $(html) -> $(array)
if ( match[1] ) {
context = context instanceof jQuery ? context[0] : context;
// Option to run scripts is true for back-compat
// Intentionally let the error be thrown if parseHTML is not present
jQuery.merge( this, jQuery.parseHTML(
match[1],
context && context.nodeType ? context.ownerDocument || context : document,
true
) );
// HANDLE: $(html, props)
if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
for ( match in context ) {
// Properties of context are called as methods if possible
if ( jQuery.isFunction( this[ match ] ) ) {
this[ match ]( context[ match ] );
// ...and otherwise set as attributes
} else {
this.attr( match, context[ match ] );
}
}
}
return this;
// HANDLE: $(#id)
} else {
elem = document.getElementById( match[2] );
// Support: Blackberry 4.6
// gEBID returns nodes no longer in the document (#6963)
if ( elem && elem.parentNode ) {
// Inject the element directly into the jQuery object
this.length = 1;
this[0] = elem;
}
this.context = document;
this.selector = selector;
return this;
}
// HANDLE: $(expr, $(...))
} else if ( !context || context.jquery ) {
return ( context || rootjQuery ).find( selector );
// HANDLE: $(expr, context)
// (which is just equivalent to: $(context).find(expr)
} else {
return this.constructor( context ).find( selector );
}
// HANDLE: $(DOMElement)
} else if ( selector.nodeType ) {
this.context = this[0] = selector;
this.length = 1;
return this;
// HANDLE: $(function)
// Shortcut for document ready
} else if ( jQuery.isFunction( selector ) ) {
return typeof rootjQuery.ready !== "undefined" ?
rootjQuery.ready( selector ) :
// Execute immediately if ready is not present
selector( jQuery );
}
if ( selector.selector !== undefined ) {
this.selector = selector.selector;
this.context = selector.context;
}
return jQuery.makeArray( selector, this );
};
// Give the init function the jQuery prototype for later instantiation
init.prototype = jQuery.fn;
// Initialize central reference
rootjQuery = jQuery( document );
var rparentsprev = /^(?:parents|prev(?:Until|All))/,
// Methods guaranteed to produce a unique set when starting from a unique set
guaranteedUnique = {
children: true,
contents: true,
next: true,
prev: true
};
jQuery.extend({
dir: function( elem, dir, until ) {
var matched = [],
truncate = until !== undefined;
while ( (elem = elem[ dir ]) && elem.nodeType !== 9 ) {
if ( elem.nodeType === 1 ) {
if ( truncate && jQuery( elem ).is( until ) ) {
break;
}
matched.push( elem );
}
}
return matched;
},
sibling: function( n, elem ) {
var matched = [];
for ( ; n; n = n.nextSibling ) {
if ( n.nodeType === 1 && n !== elem ) {
matched.push( n );
}
}
return matched;
}
});
jQuery.fn.extend({
has: function( target ) {
var targets = jQuery( target, this ),
l = targets.length;
return this.filter(function() {
var i = 0;
for ( ; i < l; i++ ) {
if ( jQuery.contains( this, targets[i] ) ) {
return true;
}
}
});
},
closest: function( selectors, context ) {
var cur,
i = 0,
l = this.length,
matched = [],
pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
jQuery( selectors, context || this.context ) :
0;
for ( ; i < l; i++ ) {
for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) {
// Always skip document fragments
if ( cur.nodeType < 11 && (pos ?
pos.index(cur) > -1 :
// Don't pass non-elements to Sizzle
cur.nodeType === 1 &&
jQuery.find.matchesSelector(cur, selectors)) ) {
matched.push( cur );
break;
}
}
}
return this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched );
},
// Determine the position of an element within the set
index: function( elem ) {
// No argument, return index in parent
if ( !elem ) {
return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
}
// Index in selector
if ( typeof elem === "string" ) {
return indexOf.call( jQuery( elem ), this[ 0 ] );
}
// Locate the position of the desired element
return indexOf.call( this,
// If it receives a jQuery object, the first element is used
elem.jquery ? elem[ 0 ] : elem
);
},
add: function( selector, context ) {
return this.pushStack(
jQuery.unique(
jQuery.merge( this.get(), jQuery( selector, context ) )
)
);
},
addBack: function( selector ) {
return this.add( selector == null ?
this.prevObject : this.prevObject.filter(selector)
);
}
});
function sibling( cur, dir ) {
while ( (cur = cur[dir]) && cur.nodeType !== 1 ) {}
return cur;
}
jQuery.each({
parent: function( elem ) {
var parent = elem.parentNode;
return parent && parent.nodeType !== 11 ? parent : null;
},
parents: function( elem ) {
return jQuery.dir( elem, "parentNode" );
},
parentsUntil: function( elem, i, until ) {
return jQuery.dir( elem, "parentNode", until );
},
next: function( elem ) {
return sibling( elem, "nextSibling" );
},
prev: function( elem ) {
return sibling( elem, "previousSibling" );
},
nextAll: function( elem ) {
return jQuery.dir( elem, "nextSibling" );
},
prevAll: function( elem ) {
return jQuery.dir( elem, "previousSibling" );
},
nextUntil: function( elem, i, until ) {
return jQuery.dir( elem, "nextSibling", until );
},
prevUntil: function( elem, i, until ) {
return jQuery.dir( elem, "previousSibling", until );
},
siblings: function( elem ) {
return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
},
children: function( elem ) {
return jQuery.sibling( elem.firstChild );
},
contents: function( elem ) {
return elem.contentDocument || jQuery.merge( [], elem.childNodes );
}
}, function( name, fn ) {
jQuery.fn[ name ] = function( until, selector ) {
var matched = jQuery.map( this, fn, until );
if ( name.slice( -5 ) !== "Until" ) {
selector = until;
}
if ( selector && typeof selector === "string" ) {
matched = jQuery.filter( selector, matched );
}
if ( this.length > 1 ) {
// Remove duplicates
if ( !guaranteedUnique[ name ] ) {
jQuery.unique( matched );
}
// Reverse order for parents* and prev-derivatives
if ( rparentsprev.test( name ) ) {
matched.reverse();
}
}
return this.pushStack( matched );
};
});
var rnotwhite = (/\S+/g);
// String to Object options format cache
var optionsCache = {};
// Convert String-formatted options into Object-formatted ones and store in cache
function createOptions( options ) {
var object = optionsCache[ options ] = {};
jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {
object[ flag ] = true;
});
return object;
}
/*
* Create a callback list using the following parameters:
*
* options: an optional list of space-separated options that will change how
* the callback list behaves or a more traditional option object
*
* By default a callback list will act like an event callback list and can be
* "fired" multiple times.
*
* Possible options:
*
* once: will ensure the callback list can only be fired once (like a Deferred)
*
* memory: will keep track of previous values and will call any callback added
* after the list has been fired right away with the latest "memorized"
* values (like a Deferred)
*
* unique: will ensure a callback can only be added once (no duplicate in the list)
*
* stopOnFalse: interrupt callings when a callback returns false
*
*/
jQuery.Callbacks = function( options ) {
// Convert options from String-formatted to Object-formatted if needed
// (we check in cache first)
options = typeof options === "string" ?
( optionsCache[ options ] || createOptions( options ) ) :
jQuery.extend( {}, options );
var // Last fire value (for non-forgettable lists)
memory,
// Flag to know if list was already fired
fired,
// Flag to know if list is currently firing
firing,
// First callback to fire (used internally by add and fireWith)
firingStart,
// End of the loop when firing
firingLength,
// Index of currently firing callback (modified by remove if needed)
firingIndex,
// Actual callback list
list = [],
// Stack of fire calls for repeatable lists
stack = !options.once && [],
// Fire callbacks
fire = function( data ) {
memory = options.memory && data;
fired = true;
firingIndex = firingStart || 0;
firingStart = 0;
firingLength = list.length;
firing = true;
for ( ; list && firingIndex < firingLength; firingIndex++ ) {
if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {
memory = false; // To prevent further calls using add
break;
}
}
firing = false;
if ( list ) {
if ( stack ) {
if ( stack.length ) {
fire( stack.shift() );
}
} else if ( memory ) {
list = [];
} else {
self.disable();
}
}
},
// Actual Callbacks object
self = {
// Add a callback or a collection of callbacks to the list
add: function() {
if ( list ) {
// First, we save the current length
var start = list.length;
(function add( args ) {
jQuery.each( args, function( _, arg ) {
var type = jQuery.type( arg );
if ( type === "function" ) {
if ( !options.unique || !self.has( arg ) ) {
list.push( arg );
}
} else if ( arg && arg.length && type !== "string" ) {
// Inspect recursively
add( arg );
}
});
})( arguments );
// Do we need to add the callbacks to the
// current firing batch?
if ( firing ) {
firingLength = list.length;
// With memory, if we're not firing then
// we should call right away
} else if ( memory ) {
firingStart = start;
fire( memory );
}
}
return this;
},
// Remove a callback from the list
remove: function() {
if ( list ) {
jQuery.each( arguments, function( _, arg ) {
var index;
while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
list.splice( index, 1 );
// Handle firing indexes
if ( firing ) {
if ( index <= firingLength ) {
firingLength--;
}
if ( index <= firingIndex ) {
firingIndex--;
}
}
}
});
}
return this;
},
// Check if a given callback is in the list.
// If no argument is given, return whether or not list has callbacks attached.
has: function( fn ) {
return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );
},
// Remove all callbacks from the list
empty: function() {
list = [];
firingLength = 0;
return this;
},
// Have the list do nothing anymore
disable: function() {
list = stack = memory = undefined;
return this;
},
// Is it disabled?
disabled: function() {
return !list;
},
// Lock the list in its current state
lock: function() {
stack = undefined;
if ( !memory ) {
self.disable();
}
return this;
},
// Is it locked?
locked: function() {
return !stack;
},
// Call all callbacks with the given context and arguments
fireWith: function( context, args ) {
if ( list && ( !fired || stack ) ) {
args = args || [];
args = [ context, args.slice ? args.slice() : args ];
if ( firing ) {
stack.push( args );
} else {
fire( args );
}
}
return this;
},
// Call all the callbacks with the given arguments
fire: function() {
self.fireWith( this, arguments );
return this;
},
// To know if the callbacks have already been called at least once
fired: function() {
return !!fired;
}
};
return self;
};
jQuery.extend({
Deferred: function( func ) {
var tuples = [
// action, add listener, listener list, final state
[ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],
[ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],
[ "notify", "progress", jQuery.Callbacks("memory") ]
],
state = "pending",
promise = {
state: function() {
return state;
},
always: function() {
deferred.done( arguments ).fail( arguments );
return this;
},
then: function( /* fnDone, fnFail, fnProgress */ ) {
var fns = arguments;
return jQuery.Deferred(function( newDefer ) {
jQuery.each( tuples, function( i, tuple ) {
var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
// deferred[ done | fail | progress ] for forwarding actions to newDefer
deferred[ tuple[1] ](function() {
var returned = fn && fn.apply( this, arguments );
if ( returned && jQuery.isFunction( returned.promise ) ) {
returned.promise()
.done( newDefer.resolve )
.fail( newDefer.reject )
.progress( newDefer.notify );
} else {
newDefer[ tuple[ 0 ] + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );
}
});
});
fns = null;
}).promise();
},
// Get a promise for this deferred
// If obj is provided, the promise aspect is added to the object
promise: function( obj ) {
return obj != null ? jQuery.extend( obj, promise ) : promise;
}
},
deferred = {};
// Keep pipe for back-compat
promise.pipe = promise.then;
// Add list-specific methods
jQuery.each( tuples, function( i, tuple ) {
var list = tuple[ 2 ],
stateString = tuple[ 3 ];
// promise[ done | fail | progress ] = list.add
promise[ tuple[1] ] = list.add;
// Handle state
if ( stateString ) {
list.add(function() {
// state = [ resolved
gitextract_ljy0z57z/
├── .gitignore
├── .travis.yml
├── LICENSE
├── README.md
├── app/
│ ├── .htaccess
│ ├── AppCache.php
│ ├── AppKernel.php
│ ├── Resources/
│ │ ├── TwigBundle/
│ │ │ └── views/
│ │ │ └── Exception/
│ │ │ ├── error.html.twig
│ │ │ ├── error403.html.twig
│ │ │ ├── error404.html.twig
│ │ │ └── error500.html.twig
│ │ ├── assets/
│ │ │ ├── css/
│ │ │ │ ├── font-lato.css
│ │ │ │ └── highlight-solarized-light.css
│ │ │ ├── js/
│ │ │ │ ├── bootstrap-3.3.4.js
│ │ │ │ ├── highlight.pack.js
│ │ │ │ ├── jquery-2.1.4.js
│ │ │ │ └── main.js
│ │ │ └── scss/
│ │ │ ├── bootstrap/
│ │ │ │ ├── _alerts.scss
│ │ │ │ ├── _badges.scss
│ │ │ │ ├── _breadcrumbs.scss
│ │ │ │ ├── _button-groups.scss
│ │ │ │ ├── _buttons.scss
│ │ │ │ ├── _carousel.scss
│ │ │ │ ├── _close.scss
│ │ │ │ ├── _code.scss
│ │ │ │ ├── _component-animations.scss
│ │ │ │ ├── _dropdowns.scss
│ │ │ │ ├── _forms.scss
│ │ │ │ ├── _glyphicons.scss
│ │ │ │ ├── _grid.scss
│ │ │ │ ├── _input-groups.scss
│ │ │ │ ├── _jumbotron.scss
│ │ │ │ ├── _labels.scss
│ │ │ │ ├── _list-group.scss
│ │ │ │ ├── _media.scss
│ │ │ │ ├── _mixins.scss
│ │ │ │ ├── _modals.scss
│ │ │ │ ├── _navbar.scss
│ │ │ │ ├── _navs.scss
│ │ │ │ ├── _normalize.scss
│ │ │ │ ├── _pager.scss
│ │ │ │ ├── _pagination.scss
│ │ │ │ ├── _panels.scss
│ │ │ │ ├── _popovers.scss
│ │ │ │ ├── _print.scss
│ │ │ │ ├── _progress-bars.scss
│ │ │ │ ├── _responsive-embed.scss
│ │ │ │ ├── _responsive-utilities.scss
│ │ │ │ ├── _scaffolding.scss
│ │ │ │ ├── _tables.scss
│ │ │ │ ├── _theme.scss
│ │ │ │ ├── _thumbnails.scss
│ │ │ │ ├── _tooltip.scss
│ │ │ │ ├── _type.scss
│ │ │ │ ├── _utilities.scss
│ │ │ │ ├── _variables.scss
│ │ │ │ ├── _wells.scss
│ │ │ │ ├── flatly-theme/
│ │ │ │ │ ├── _bootswatch.scss
│ │ │ │ │ └── _variables.scss
│ │ │ │ └── mixins/
│ │ │ │ ├── _alerts.scss
│ │ │ │ ├── _background-variant.scss
│ │ │ │ ├── _border-radius.scss
│ │ │ │ ├── _buttons.scss
│ │ │ │ ├── _center-block.scss
│ │ │ │ ├── _clearfix.scss
│ │ │ │ ├── _forms.scss
│ │ │ │ ├── _gradients.scss
│ │ │ │ ├── _grid-framework.scss
│ │ │ │ ├── _grid.scss
│ │ │ │ ├── _hide-text.scss
│ │ │ │ ├── _image.scss
│ │ │ │ ├── _labels.scss
│ │ │ │ ├── _list-group.scss
│ │ │ │ ├── _nav-divider.scss
│ │ │ │ ├── _nav-vertical-align.scss
│ │ │ │ ├── _opacity.scss
│ │ │ │ ├── _pagination.scss
│ │ │ │ ├── _panels.scss
│ │ │ │ ├── _progress-bar.scss
│ │ │ │ ├── _reset-filter.scss
│ │ │ │ ├── _resize.scss
│ │ │ │ ├── _responsive-visibility.scss
│ │ │ │ ├── _size.scss
│ │ │ │ ├── _tab-focus.scss
│ │ │ │ ├── _table-row.scss
│ │ │ │ ├── _text-emphasis.scss
│ │ │ │ ├── _text-overflow.scss
│ │ │ │ └── _vendor-prefixes.scss
│ │ │ ├── bootstrap.scss
│ │ │ ├── font-awesome/
│ │ │ │ ├── _animated.scss
│ │ │ │ ├── _bordered-pulled.scss
│ │ │ │ ├── _core.scss
│ │ │ │ ├── _fixed-width.scss
│ │ │ │ ├── _icons.scss
│ │ │ │ ├── _larger.scss
│ │ │ │ ├── _list.scss
│ │ │ │ ├── _mixins.scss
│ │ │ │ ├── _path.scss
│ │ │ │ ├── _rotated-flipped.scss
│ │ │ │ ├── _stacked.scss
│ │ │ │ └── _variables.scss
│ │ │ ├── font-awesome.scss
│ │ │ └── main.scss
│ │ ├── translations/
│ │ │ ├── messages.ca.xliff
│ │ │ ├── messages.cs.xliff
│ │ │ ├── messages.de.xliff
│ │ │ ├── messages.en.xliff
│ │ │ ├── messages.es.xliff
│ │ │ ├── messages.fr.xliff
│ │ │ ├── messages.id.xliff
│ │ │ ├── messages.it.xliff
│ │ │ ├── messages.ja.xliff
│ │ │ ├── messages.nl.xliff
│ │ │ ├── messages.pl.xliff
│ │ │ ├── messages.pt_BR.xliff
│ │ │ ├── messages.ro.xliff
│ │ │ ├── messages.ru.xliff
│ │ │ ├── messages.uk.xliff
│ │ │ ├── validators.ca.xliff
│ │ │ ├── validators.cs.xliff
│ │ │ ├── validators.de.xliff
│ │ │ ├── validators.en.xliff
│ │ │ ├── validators.es.xliff
│ │ │ ├── validators.fr.xliff
│ │ │ ├── validators.id.xliff
│ │ │ ├── validators.it.xliff
│ │ │ ├── validators.ja.xliff
│ │ │ ├── validators.nl.xliff
│ │ │ ├── validators.pl.xliff
│ │ │ ├── validators.pt_BR.xliff
│ │ │ ├── validators.ro.xliff
│ │ │ ├── validators.ru.xliff
│ │ │ └── validators.uk.xliff
│ │ └── views/
│ │ ├── admin/
│ │ │ ├── blog/
│ │ │ │ ├── _form.html.twig
│ │ │ │ ├── edit.html.twig
│ │ │ │ ├── index.html.twig
│ │ │ │ ├── new.html.twig
│ │ │ │ └── show.html.twig
│ │ │ └── layout.html.twig
│ │ ├── base.html.twig
│ │ ├── blog/
│ │ │ ├── _comment_form.html.twig
│ │ │ ├── _delete_post_confirmation.html.twig
│ │ │ ├── comment_form_error.html.twig
│ │ │ ├── index.html.twig
│ │ │ └── post_show.html.twig
│ │ ├── default/
│ │ │ ├── _flash_messages.html.twig
│ │ │ └── homepage.html.twig
│ │ ├── form/
│ │ │ └── fields.html.twig
│ │ └── security/
│ │ └── login.html.twig
│ ├── SymfonyRequirements.php
│ ├── autoload.php
│ ├── check.php
│ ├── config/
│ │ ├── config.yml
│ │ ├── config_dev.yml
│ │ ├── config_prod.yml
│ │ ├── config_test.yml
│ │ ├── parameters.yml.dist
│ │ ├── routing.yml
│ │ ├── routing_dev.yml
│ │ ├── security.yml
│ │ └── services.yml
│ ├── console
│ ├── logs/
│ │ └── .gitkeep
│ └── phpunit.xml.dist
├── composer.json
├── src/
│ ├── .htaccess
│ ├── AppBundle/
│ │ ├── AppBundle.php
│ │ ├── Command/
│ │ │ ├── AddUserCommand.php
│ │ │ ├── DeleteUserCommand.php
│ │ │ └── ListUsersCommand.php
│ │ ├── Controller/
│ │ │ ├── Admin/
│ │ │ │ └── BlogController.php
│ │ │ ├── BlogController.php
│ │ │ └── SecurityController.php
│ │ ├── DataFixtures/
│ │ │ └── ORM/
│ │ │ └── LoadFixtures.php
│ │ ├── Entity/
│ │ │ ├── Comment.php
│ │ │ ├── Post.php
│ │ │ └── User.php
│ │ ├── EventListener/
│ │ │ └── RedirectToPreferredLocaleListener.php
│ │ ├── Form/
│ │ │ ├── CommentType.php
│ │ │ ├── PostType.php
│ │ │ └── Type/
│ │ │ └── DateTimePickerType.php
│ │ ├── Repository/
│ │ │ ├── PostRepository.php
│ │ │ └── UserRepository.php
│ │ ├── Tests/
│ │ │ ├── Controller/
│ │ │ │ ├── Admin/
│ │ │ │ │ └── BlogControllerTest.php
│ │ │ │ ├── BlogControllerTest.php
│ │ │ │ └── DefaultControllerTest.php
│ │ │ └── Utils/
│ │ │ └── SluggerTest.php
│ │ ├── Twig/
│ │ │ └── AppExtension.php
│ │ └── Utils/
│ │ ├── Markdown.php
│ │ ├── MomentFormatConverter.php
│ │ └── Slugger.php
│ ├── CodeExplorerBundle/
│ │ ├── CodeExplorerBundle.php
│ │ ├── DependencyInjection/
│ │ │ └── CodeExplorerExtension.php
│ │ ├── EventListener/
│ │ │ └── ControllerListener.php
│ │ ├── Resources/
│ │ │ ├── config/
│ │ │ │ └── services.yml
│ │ │ └── views/
│ │ │ └── source_code.html.twig
│ │ └── Twig/
│ │ └── SourceCodeExtension.php
│ ├── ElasticSearchBundle/
│ │ ├── Controller/
│ │ │ └── ElasticSearchController.php
│ │ ├── ElasticSearchBundle.php
│ │ ├── Resources/
│ │ │ ├── config/
│ │ │ │ ├── config.yml
│ │ │ │ ├── routing.yml
│ │ │ │ └── services.yml
│ │ │ └── views/
│ │ │ └── elastica_search_results.html.twig
│ │ └── Tests/
│ │ └── Controller/
│ │ └── ElasticSearchControllerTest.php
│ ├── OAuthBundle/
│ │ ├── Controller/
│ │ │ └── OAuthController.php
│ │ ├── DependencyInjection/
│ │ │ ├── Configuration.php
│ │ │ └── OAuthExtension.php
│ │ ├── OAuthBundle.php
│ │ ├── Provider/
│ │ │ └── UserProvider.php
│ │ ├── Resources/
│ │ │ └── config/
│ │ │ ├── config.yml
│ │ │ ├── routing.yml
│ │ │ └── services.yml
│ │ ├── Services/
│ │ │ └── AuthenticationSuccessHandler.php
│ │ └── Tests/
│ │ ├── Controller/
│ │ │ └── OAuthControllerTest.php
│ │ └── OAuthTest.php
│ ├── RabbitMQBundle/
│ │ ├── Controller/
│ │ │ └── RabbitMQController.php
│ │ ├── DependencyInjection/
│ │ │ ├── Configuration.php
│ │ │ └── RabbitMQExtension.php
│ │ ├── RabbitMQBundle.php
│ │ ├── Resources/
│ │ │ ├── config/
│ │ │ │ ├── config.yml
│ │ │ │ ├── config_dev.yml
│ │ │ │ ├── config_test.yml
│ │ │ │ ├── routing.yml
│ │ │ │ └── services.yml
│ │ │ └── views/
│ │ │ └── pdf_post_view.html.twig
│ │ ├── Services/
│ │ │ ├── PDFGenerator.php
│ │ │ └── RabbitMQ/
│ │ │ └── PDFGeneratorConsumer.php
│ │ └── Tests/
│ │ └── Controller/
│ │ └── RabbitMQControllerTest.php
│ ├── RedisBundle/
│ │ ├── Controller/
│ │ │ └── RedisController.php
│ │ ├── RedisBundle.php
│ │ ├── Resources/
│ │ │ ├── config/
│ │ │ │ ├── config.yml
│ │ │ │ ├── routing.yml
│ │ │ │ └── services.yml
│ │ │ └── views/
│ │ │ └── blog/
│ │ │ └── top_posts.html.twig
│ │ └── Tests/
│ │ └── Controller/
│ │ └── RedisControllerTest.php
│ └── RestBundle/
│ ├── Controller/
│ │ └── RestController.php
│ ├── DependencyInjection/
│ │ ├── Configuration.php
│ │ └── RestExtension.php
│ ├── Form/
│ │ ├── CommentRestType.php
│ │ └── PostRestType.php
│ ├── Resources/
│ │ ├── config/
│ │ │ ├── config.yml
│ │ │ ├── routing.yml
│ │ │ ├── serializer/
│ │ │ │ └── AppBundle/
│ │ │ │ ├── Entity.Comment.yml
│ │ │ │ └── Entity.Post.yml
│ │ │ └── services.yml
│ │ └── views/
│ │ ├── Comment/
│ │ │ ├── editComment.html.twig
│ │ │ ├── getComment.html.twig
│ │ │ ├── getComments.html.twig
│ │ │ └── newComment.html.twig
│ │ ├── Post/
│ │ │ ├── editPost.html.twig
│ │ │ ├── getPost.html.twig
│ │ │ ├── getPosts.html.twig
│ │ │ └── newPost.html.twig
│ │ ├── api_base_layout.html.twig
│ │ └── api_index.html.twig
│ ├── RestBundle.php
│ └── Tests/
│ └── Controller/
│ └── RestControllerTest.php
├── vagrant/
│ ├── Vagrantfile
│ └── ansible/
│ ├── hosts_inventory
│ ├── roles/
│ │ ├── Stouts.rabbitmq/
│ │ │ ├── .bumpversion.cfg
│ │ │ ├── .travis.yml
│ │ │ ├── CONTRIBUTORS
│ │ │ ├── LICENSE
│ │ │ ├── Makefile
│ │ │ ├── README.md
│ │ │ ├── defaults/
│ │ │ │ └── main.yml
│ │ │ ├── handlers/
│ │ │ │ └── main.yml
│ │ │ ├── meta/
│ │ │ │ ├── .galaxy_install_info
│ │ │ │ └── main.yml
│ │ │ ├── tasks/
│ │ │ │ ├── install.deb.yml
│ │ │ │ ├── main.yml
│ │ │ │ └── rabbitmq.yml
│ │ │ └── test.yml
│ │ ├── geerlingguy.composer/
│ │ │ ├── .travis.yml
│ │ │ ├── README.md
│ │ │ ├── defaults/
│ │ │ │ └── main.yml
│ │ │ ├── meta/
│ │ │ │ ├── .galaxy_install_info
│ │ │ │ └── main.yml
│ │ │ ├── tasks/
│ │ │ │ ├── global-require.yml
│ │ │ │ └── main.yml
│ │ │ ├── templates/
│ │ │ │ ├── auth.json.j2
│ │ │ │ └── composer.sh.j2
│ │ │ └── tests/
│ │ │ ├── inventory
│ │ │ ├── test-global-require.yml
│ │ │ └── test.yml
│ │ ├── geerlingguy.nginx/
│ │ │ ├── .travis.yml
│ │ │ ├── README.md
│ │ │ ├── defaults/
│ │ │ │ └── main.yml
│ │ │ ├── handlers/
│ │ │ │ └── main.yml
│ │ │ ├── meta/
│ │ │ │ ├── .galaxy_install_info
│ │ │ │ └── main.yml
│ │ │ ├── tasks/
│ │ │ │ ├── main.yml
│ │ │ │ ├── setup-Debian.yml
│ │ │ │ ├── setup-RedHat.yml
│ │ │ │ └── vhosts.yml
│ │ │ ├── templates/
│ │ │ │ ├── nginx.conf.j2
│ │ │ │ ├── nginx.repo.j2
│ │ │ │ └── vhosts.j2
│ │ │ ├── tests/
│ │ │ │ ├── inventory
│ │ │ │ └── test.yml
│ │ │ └── vars/
│ │ │ ├── Debian.yml
│ │ │ └── RedHat.yml
│ │ ├── geerlingguy.php/
│ │ │ ├── .travis.yml
│ │ │ ├── README.md
│ │ │ ├── defaults/
│ │ │ │ └── main.yml
│ │ │ ├── handlers/
│ │ │ │ └── main.yml
│ │ │ ├── meta/
│ │ │ │ ├── .galaxy_install_info
│ │ │ │ └── main.yml
│ │ │ ├── tasks/
│ │ │ │ ├── configure-fpm.yml
│ │ │ │ ├── configure.yml
│ │ │ │ ├── install-from-source.yml
│ │ │ │ ├── main.yml
│ │ │ │ ├── setup-Debian.yml
│ │ │ │ └── setup-RedHat.yml
│ │ │ ├── templates/
│ │ │ │ ├── apc.ini.j2
│ │ │ │ ├── fpm-init.j2
│ │ │ │ ├── opcache.ini.j2
│ │ │ │ ├── php-fpm.conf.j2
│ │ │ │ └── php.ini.j2
│ │ │ ├── tests/
│ │ │ │ ├── inventory
│ │ │ │ ├── test-install-from-source.yml
│ │ │ │ └── test-install-package.yml
│ │ │ └── vars/
│ │ │ ├── Debian.yml
│ │ │ └── RedHat.yml
│ │ ├── geerlingguy.redis/
│ │ │ ├── .travis.yml
│ │ │ ├── README.md
│ │ │ ├── defaults/
│ │ │ │ └── main.yml
│ │ │ ├── handlers/
│ │ │ │ └── main.yml
│ │ │ ├── meta/
│ │ │ │ ├── .galaxy_install_info
│ │ │ │ └── main.yml
│ │ │ ├── tasks/
│ │ │ │ ├── main.yml
│ │ │ │ ├── setup-Debian.yml
│ │ │ │ └── setup-RedHat.yml
│ │ │ ├── templates/
│ │ │ │ └── redis.conf.j2
│ │ │ ├── tests/
│ │ │ │ ├── inventory
│ │ │ │ └── test.yml
│ │ │ └── vars/
│ │ │ ├── Debian.yml
│ │ │ └── RedHat.yml
│ │ └── gpstathis.elasticsearch/
│ │ ├── .gitignore
│ │ ├── .travis.yml
│ │ ├── README.md
│ │ ├── Vagrantfile
│ │ ├── defaults/
│ │ │ └── main.yml
│ │ ├── handlers/
│ │ │ └── main.yml
│ │ ├── meta/
│ │ │ ├── .galaxy_install_info
│ │ │ └── main.yml
│ │ ├── tasks/
│ │ │ ├── aws.yml
│ │ │ ├── custom-jars.yml
│ │ │ ├── elastic-install.yml
│ │ │ ├── java.yml
│ │ │ ├── main.yml
│ │ │ ├── marvel.yml
│ │ │ ├── plugins.yml
│ │ │ ├── post-run.yml
│ │ │ ├── spm.yml
│ │ │ └── timezone.yml
│ │ ├── templates/
│ │ │ ├── elasticsearch.default.j2
│ │ │ ├── elasticsearch.in.sh.j2
│ │ │ └── elasticsearch.yml.j2
│ │ ├── tests/
│ │ │ ├── ansible.cfg
│ │ │ ├── elastic_test.sh
│ │ │ ├── local.ini
│ │ │ ├── test1.yml
│ │ │ └── test1_var.yml
│ │ ├── vagrant-inventory.ini
│ │ ├── vagrant-main.yml
│ │ └── vars/
│ │ ├── sample.yml
│ │ └── vagrant.yml
│ ├── setup.yml
│ └── templates/
│ └── rabbitmq-consumers.j2
└── web/
├── .htaccess
├── app.php
├── app_dev.php
├── config.php
├── css/
│ ├── api.css
│ └── app.css
├── fonts/
│ └── font-awesome/
│ └── FontAwesome.otf
├── js/
│ └── app.js
└── robots.txt
SYMBOL INDEX (755 symbols across 65 files)
FILE: app/AppCache.php
class AppCache (line 5) | class AppCache extends HttpCache
FILE: app/AppKernel.php
class AppKernel (line 6) | class AppKernel extends Kernel
method registerBundles (line 8) | public function registerBundles()
method registerContainerConfiguration (line 60) | public function registerContainerConfiguration(LoaderInterface $loader)
FILE: app/Resources/assets/js/bootstrap-3.3.4.js
function transitionEnd (line 34) | function transitionEnd() {
function removeElement (line 126) | function removeElement() {
function Plugin (line 142) | function Plugin(option) {
function Plugin (line 247) | function Plugin(option) {
function Plugin (line 466) | function Plugin(option) {
function getTargetFromTrigger (line 685) | function getTargetFromTrigger($trigger) {
function Plugin (line 697) | function Plugin(option) {
function clearMenus (line 829) | function clearMenus(e) {
function getParent (line 848) | function getParent($this) {
function Plugin (line 865) | function Plugin(option) {
function Plugin (line 1194) | function Plugin(option, _relatedTarget) {
function complete (line 1540) | function complete() {
function Plugin (line 1692) | function Plugin(option) {
function Plugin (line 1801) | function Plugin(option) {
function ScrollSpy (line 1844) | function ScrollSpy(element, options) {
function Plugin (line 1964) | function Plugin(option) {
function next (line 2071) | function next() {
function Plugin (line 2117) | function Plugin(option) {
function Plugin (line 2274) | function Plugin(option) {
FILE: app/Resources/assets/js/highlight.pack.js
function n (line 1) | function n(e){return e.replace(/&/gm,"&").replace(/</gm,"<").repl...
function t (line 1) | function t(e){return e.nodeName.toLowerCase()}
function r (line 1) | function r(e,n){var t=e&&e.exec(n);return t&&0==t.index}
function a (line 1) | function a(e){var n=(e.className+" "+(e.parentNode?e.parentNode.classNam...
function o (line 1) | function o(e,n){var t={};for(var r in e)t[r]=e[r];if(n)for(var r in n)t[...
function i (line 1) | function i(e){var n=[];return function r(e,a){for(var o=e.firstChild;o;o...
function c (line 1) | function c(e,r,a){function o(){return e.length&&r.length?e[0].offset!=r[...
function u (line 1) | function u(e){function n(e){return e&&e.source||e}function t(t,r){return...
function s (line 1) | function s(e,t,a,o){function i(e,n){for(var t=0;t<n.c.length;t++)if(r(n....
function l (line 1) | function l(e,t){t=t||E.languages||Object.keys(R);var r={r:0,value:n(e)},...
function f (line 1) | function f(e){return E.tabReplace&&(e=e.replace(/^((<[^>]+>|\t)+)/gm,fun...
function g (line 1) | function g(e,n,t){var r=n?x[n]:t,a=[e.trim()];return e.match(/(\s|^)hljs...
function p (line 1) | function p(e){var n=a(e);if(!/no(-?)highlight/.test(n)){var t;E.useBR?(t...
function d (line 1) | function d(e){E=o(E,e)}
function h (line 1) | function h(){if(!h.called){h.called=!0;var e=document.querySelectorAll("...
function v (line 1) | function v(){addEventListener("DOMContentLoaded",h,!1),addEventListener(...
function b (line 1) | function b(n,t){var r=R[n]=t(e);r.aliases&&r.aliases.forEach(function(e)...
function m (line 1) | function m(){return Object.keys(R)}
function N (line 1) | function N(e){return R[e]||R[x[e]]}
FILE: app/Resources/assets/js/jquery-2.1.4.js
function isArraylike (line 533) | function isArraylike( obj ) {
function Sizzle (line 750) | function Sizzle( selector, context, results, seed ) {
function createCache (line 864) | function createCache() {
function markFunction (line 882) | function markFunction( fn ) {
function assert (line 891) | function assert( fn ) {
function addHandle (line 913) | function addHandle( attrs, handler ) {
function siblingCheck (line 928) | function siblingCheck( a, b ) {
function createInputPseudo (line 955) | function createInputPseudo( type ) {
function createButtonPseudo (line 966) | function createButtonPseudo( type ) {
function createPositionalPseudo (line 977) | function createPositionalPseudo( fn ) {
function testContext (line 1000) | function testContext( context ) {
function setFilters (line 2009) | function setFilters() {}
function toSelector (line 2080) | function toSelector( tokens ) {
function addCombinator (line 2090) | function addCombinator( matcher, combinator, base ) {
function elementMatcher (line 2143) | function elementMatcher( matchers ) {
function multipleContexts (line 2157) | function multipleContexts( selector, contexts, results ) {
function condense (line 2166) | function condense( unmatched, map, filter, context, xml ) {
function setMatcher (line 2187) | function setMatcher( preFilter, selector, matcher, postFilter, postFinde...
function matcherFromTokens (line 2280) | function matcherFromTokens( tokens ) {
function matcherFromGroupMatchers (line 2338) | function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
function winnow (line 2634) | function winnow( elements, qualifier, not ) {
function sibling (line 2958) | function sibling( cur, dir ) {
function createOptions (line 3036) | function createOptions( options ) {
function completed (line 3430) | function completed() {
function Data (line 3535) | function Data() {
function dataAttr (line 3726) | function dataAttr( elem, key, data ) {
function returnTrue (line 4066) | function returnTrue() {
function returnFalse (line 4070) | function returnFalse() {
function safeActiveElement (line 4074) | function safeActiveElement() {
function manipulationTarget (line 4946) | function manipulationTarget( elem, content ) {
function disableScript (line 4956) | function disableScript( elem ) {
function restoreScript (line 4960) | function restoreScript( elem ) {
function setGlobalEval (line 4973) | function setGlobalEval( elems, refElements ) {
function cloneCopyEvent (line 4984) | function cloneCopyEvent( src, dest ) {
function getAll (line 5018) | function getAll( context, tag ) {
function fixInput (line 5029) | function fixInput( src, dest ) {
function actualDisplay (line 5484) | function actualDisplay( name, doc ) {
function defaultDisplay (line 5506) | function defaultDisplay( nodeName ) {
function curCSS (line 5553) | function curCSS( elem, name, computed ) {
function addGetHookIf (line 5601) | function addGetHookIf( conditionFn, hookFn ) {
function computePixelPositionAndBoxSizingReliable (line 5641) | function computePixelPositionAndBoxSizingReliable() {
function vendorPropName (line 5746) | function vendorPropName( style, name ) {
function setPositiveNumber (line 5768) | function setPositiveNumber( elem, value, subtract ) {
function augmentWidthOrHeight (line 5776) | function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
function getWidthOrHeight (line 5815) | function getWidthOrHeight( elem, name, extra ) {
function showHide (line 5859) | function showHide( elements, show ) {
function Tween (line 6157) | function Tween( elem, options, prop, end, easing ) {
function createFxNow (line 6326) | function createFxNow() {
function genFx (line 6334) | function genFx( type, includeWidth ) {
function createTween (line 6354) | function createTween( value, prop, animation ) {
function defaultPrefilter (line 6368) | function defaultPrefilter( elem, props, opts ) {
function propFilter (line 6501) | function propFilter( props, specialEasing ) {
function Animation (line 6538) | function Animation( elem, properties, options ) {
function addToPrefiltersOrTransports (line 7586) | function addToPrefiltersOrTransports( structure ) {
function inspectPrefiltersOrTransports (line 7618) | function inspectPrefiltersOrTransports( structure, options, originalOpti...
function ajaxExtend (line 7645) | function ajaxExtend( target, src ) {
function ajaxHandleResponses (line 7665) | function ajaxHandleResponses( s, jqXHR, responses ) {
function ajaxConvert (line 7721) | function ajaxConvert( s, response, jqXHR, isSuccess ) {
function done (line 8179) | function done( status, nativeStatusText, responses, headers ) {
function buildParams (line 8423) | function buildParams( prefix, obj, traditional, add ) {
function getWindow (line 8917) | function getWindow( elem ) {
FILE: app/SymfonyRequirements.php
class Requirement (line 33) | class Requirement
method __construct (line 50) | public function __construct($fulfilled, $testMessage, $helpHtml, $help...
method isFulfilled (line 64) | public function isFulfilled()
method getTestMessage (line 74) | public function getTestMessage()
method getHelpText (line 84) | public function getHelpText()
method getHelpHtml (line 94) | public function getHelpHtml()
method isOptional (line 104) | public function isOptional()
class PhpIniRequirement (line 115) | class PhpIniRequirement extends Requirement
method __construct (line 131) | public function __construct($cfgName, $evaluation, $approveCfgAbsence ...
class RequirementCollection (line 169) | class RequirementCollection implements IteratorAggregate
method getIterator (line 178) | public function getIterator()
method add (line 188) | public function add(Requirement $requirement)
method addRequirement (line 201) | public function addRequirement($fulfilled, $testMessage, $helpHtml, $h...
method addRecommendation (line 214) | public function addRecommendation($fulfilled, $testMessage, $helpHtml,...
method addPhpIniRequirement (line 232) | public function addPhpIniRequirement($cfgName, $evaluation, $approveCf...
method addPhpIniRecommendation (line 250) | public function addPhpIniRecommendation($cfgName, $evaluation, $approv...
method addCollection (line 260) | public function addCollection(RequirementCollection $collection)
method all (line 270) | public function all()
method getRequirements (line 280) | public function getRequirements()
method getFailedRequirements (line 297) | public function getFailedRequirements()
method getRecommendations (line 314) | public function getRecommendations()
method getFailedRecommendations (line 331) | public function getFailedRecommendations()
method hasPhpIniConfigIssue (line 348) | public function hasPhpIniConfigIssue()
method getPhpIniConfigPath (line 364) | public function getPhpIniConfigPath()
class SymfonyRequirements (line 377) | class SymfonyRequirements extends RequirementCollection
method __construct (line 384) | public function __construct()
method getRealpathCacheSize (line 748) | protected function getRealpathCacheSize()
FILE: app/check.php
function get_error_message (line 77) | function get_error_message(Requirement $requirement, $lineSize)
function echo_title (line 89) | function echo_title($title, $style = null)
function echo_style (line 99) | function echo_style($style, $message)
function echo_block (line 116) | function echo_block($style, $title, $message)
function has_color_support (line 129) | function has_color_support()
FILE: src/AppBundle/AppBundle.php
class AppBundle (line 36) | class AppBundle extends Bundle
FILE: src/AppBundle/Command/AddUserCommand.php
class AddUserCommand (line 38) | class AddUserCommand extends ContainerAwareCommand
method configure (line 50) | protected function configure()
method initialize (line 74) | protected function initialize(InputInterface $input, OutputInterface $...
method interact (line 89) | protected function interact(InputInterface $input, OutputInterface $ou...
method execute (line 170) | protected function execute(InputInterface $input, OutputInterface $out...
method passwordValidator (line 217) | public function passwordValidator($plainPassword)
method emailValidator (line 236) | public function emailValidator($email)
method getCommandHelp (line 254) | private function getCommandHelp()
FILE: src/AppBundle/Command/DeleteUserCommand.php
class DeleteUserCommand (line 35) | class DeleteUserCommand extends ContainerAwareCommand
method configure (line 47) | protected function configure()
method initialize (line 66) | protected function initialize(InputInterface $input, OutputInterface $...
method interact (line 71) | protected function interact(InputInterface $input, OutputInterface $ou...
method execute (line 106) | protected function execute(InputInterface $input, OutputInterface $out...
method usernameValidator (line 137) | public function usernameValidator($username)
FILE: src/AppBundle/Command/ListUsersCommand.php
class ListUsersCommand (line 33) | class ListUsersCommand extends ContainerAwareCommand
method configure (line 43) | protected function configure()
method initialize (line 77) | protected function initialize(InputInterface $input, OutputInterface $...
method execute (line 86) | protected function execute(InputInterface $input, OutputInterface $out...
method sendReport (line 129) | private function sendReport($contents, $recipient)
FILE: src/AppBundle/Controller/Admin/BlogController.php
class BlogController (line 36) | class BlogController extends Controller
method indexAction (line 53) | public function indexAction()
method newAction (line 71) | public function newAction(Request $request)
method showAction (line 118) | public function showAction(Post $post)
method editAction (line 141) | public function editAction(Post $post, Request $request)
method deleteAction (line 182) | public function deleteAction(Request $request, Post $post)
method createDeleteForm (line 212) | private function createDeleteForm(Post $post)
FILE: src/AppBundle/Controller/BlogController.php
class BlogController (line 33) | class BlogController extends Controller
method indexAction (line 39) | public function indexAction($page)
method postShowAction (line 58) | public function postShowAction(Post $post)
method commentNewAction (line 74) | public function commentNewAction(Request $request, Post $post)
method commentFormAction (line 110) | public function commentFormAction(Post $post)
FILE: src/AppBundle/Controller/SecurityController.php
class SecurityController (line 24) | class SecurityController extends Controller
method loginAction (line 29) | public function loginAction()
method loginCheckAction (line 49) | public function loginCheckAction()
method logoutAction (line 62) | public function logoutAction()
FILE: src/AppBundle/DataFixtures/ORM/LoadFixtures.php
class LoadFixtures (line 33) | class LoadFixtures implements FixtureInterface, ContainerAwareInterface
method load (line 41) | public function load(ObjectManager $manager)
method loadUsers (line 47) | private function loadUsers(ObjectManager $manager)
method loadPosts (line 69) | private function loadPosts(ObjectManager $manager)
method setContainer (line 102) | public function setContainer(ContainerInterface $container = null)
method getPostContent (line 107) | private function getPostContent()
method getPhrases (line 147) | private function getPhrases()
method getRandomPostTitle (line 168) | private function getRandomPostTitle()
method getRandomPostSummary (line 175) | private function getRandomPostSummary()
method getRandomCommentContent (line 185) | private function getRandomCommentContent()
FILE: src/AppBundle/Entity/Comment.php
class Comment (line 29) | class Comment
method __construct (line 68) | public function __construct()
method isLegitComment (line 76) | public function isLegitComment()
method getId (line 83) | public function getId()
method setId (line 88) | public function setId($id)
method getContent (line 93) | public function getContent()
method setContent (line 97) | public function setContent($content)
method getAuthorEmail (line 102) | public function getAuthorEmail()
method setAuthorEmail (line 106) | public function setAuthorEmail($authorEmail)
method getPublishedAt (line 111) | public function getPublishedAt()
method setPublishedAt (line 115) | public function setPublishedAt(\DateTime $publishedAt)
method getPost (line 120) | public function getPost()
method setPost (line 124) | public function setPost(Post $post)
FILE: src/AppBundle/Entity/Post.php
class Post (line 21) | class Post
method __construct (line 105) | public function __construct()
method getId (line 113) | public function getId()
method setId (line 118) | public function setId($id)
method getTitle (line 123) | public function getTitle()
method setTitle (line 128) | public function setTitle($title)
method getSlug (line 133) | public function getSlug()
method setSlug (line 138) | public function setSlug($slug)
method getContent (line 143) | public function getContent()
method setContent (line 148) | public function setContent($content)
method getAuthorEmail (line 153) | public function getAuthorEmail()
method setAuthorEmail (line 158) | public function setAuthorEmail($authorEmail)
method isAuthor (line 170) | public function isAuthor(User $user)
method getPublishedAt (line 175) | public function getPublishedAt()
method setPublishedAt (line 180) | public function setPublishedAt($publishedAt)
method getComments (line 185) | public function getComments()
method addComment (line 190) | public function addComment(Comment $comment)
method removeComment (line 196) | public function removeComment(Comment $comment)
method getSummary (line 202) | public function getSummary()
method setSummary (line 207) | public function setSummary($summary)
method getUpdatedAt (line 212) | public function getUpdatedAt()
method setUpdatedAt (line 217) | public function setUpdatedAt($updatedAt)
method getGeneratedAt (line 223) | public function getGeneratedAt()
method setGeneratedAt (line 228) | public function setGeneratedAt($generatedAt)
method getPdfName (line 234) | public function getPdfName()
method setPdfName (line 239) | public function setPdfName($pdfName)
method getIsPdfGenerated (line 244) | public function getIsPdfGenerated()
method setIsPdfGenerated (line 249) | public function setIsPdfGenerated($isPdfGenerated)
FILE: src/AppBundle/Entity/User.php
class User (line 20) | class User implements UserInterface
method getId (line 59) | public function getId()
method getUsername (line 67) | public function getUsername()
method setUsername (line 71) | public function setUsername($username)
method getEmail (line 76) | public function getEmail()
method setEmail (line 80) | public function setEmail($email)
method getPassword (line 88) | public function getPassword()
method setPassword (line 92) | public function setPassword($password)
method getRoles (line 100) | public function getRoles()
method setRoles (line 112) | public function setRoles(array $roles)
method getSalt (line 120) | public function getSalt()
method eraseCredentials (line 132) | public function eraseCredentials()
method getGithubId (line 141) | public function getGithubId()
method setGithubId (line 151) | public function setGithubId($github_id)
method getGithubAccessToken (line 159) | public function getGithubAccessToken()
method setGithubAccessToken (line 169) | public function setGithubAccessToken($github_access_token)
FILE: src/AppBundle/EventListener/RedirectToPreferredLocaleListener.php
class RedirectToPreferredLocaleListener (line 26) | class RedirectToPreferredLocaleListener
method __construct (line 52) | public function __construct(UrlGeneratorInterface $urlGenerator, $loca...
method onKernelRequest (line 76) | public function onKernelRequest(GetResponseEvent $event)
FILE: src/AppBundle/Form/CommentType.php
class CommentType (line 27) | class CommentType extends AbstractType
method buildForm (line 32) | public function buildForm(FormBuilderInterface $builder, array $options)
method configureOptions (line 49) | public function configureOptions(OptionsResolver $resolver)
FILE: src/AppBundle/Form/PostType.php
class PostType (line 24) | class PostType extends AbstractType
method buildForm (line 29) | public function buildForm(FormBuilderInterface $builder, array $options)
method configureOptions (line 61) | public function configureOptions(OptionsResolver $resolver)
FILE: src/AppBundle/Form/Type/DateTimePickerType.php
class DateTimePickerType (line 27) | class DateTimePickerType extends AbstractType
method __construct (line 34) | public function __construct()
method buildView (line 42) | public function buildView(FormView $view, FormInterface $form, array $...
method configureOptions (line 51) | public function configureOptions(OptionsResolver $resolver)
method getParent (line 61) | public function getParent()
FILE: src/AppBundle/Repository/PostRepository.php
class PostRepository (line 24) | class PostRepository extends EntityRepository
method queryLatest (line 26) | public function queryLatest()
method findLatest (line 39) | public function findLatest()
FILE: src/AppBundle/Repository/UserRepository.php
class UserRepository (line 25) | class UserRepository extends EntityRepository
FILE: src/AppBundle/Tests/Controller/Admin/BlogControllerTest.php
class BlogControllerTest (line 33) | class BlogControllerTest extends WebTestCase
method testRegularUsersCannotAccessToTheBackend (line 35) | public function testRegularUsersCannotAccessToTheBackend()
method testAdministratorUsersCanAccessToTheBackend (line 47) | public function testAdministratorUsersCanAccessToTheBackend()
method testIndex (line 59) | public function testIndex()
FILE: src/AppBundle/Tests/Controller/BlogControllerTest.php
class BlogControllerTest (line 27) | class BlogControllerTest extends WebTestCase
method testIndex (line 29) | public function testIndex()
FILE: src/AppBundle/Tests/Controller/DefaultControllerTest.php
class DefaultControllerTest (line 27) | class DefaultControllerTest extends WebTestCase
method testPublicUrls (line 36) | public function testPublicUrls($url)
method testSecureUrls (line 54) | public function testSecureUrls($url)
method getPublicUrls (line 68) | public function getPublicUrls()
method getSecureUrls (line 78) | public function getSecureUrls()
FILE: src/AppBundle/Tests/Utils/SluggerTest.php
class SluggerTest (line 26) | class SluggerTest extends \PHPUnit_Framework_TestCase
method testSlugify (line 31) | public function testSlugify($string, $slug)
method getSlugs (line 39) | public function getSlugs()
FILE: src/AppBundle/Twig/AppExtension.php
class AppExtension (line 29) | class AppExtension extends \Twig_Extension
method __construct (line 41) | public function __construct(Markdown $parser, $locales)
method getFilters (line 50) | public function getFilters()
method getFunctions (line 60) | public function getFunctions()
method markdownToHtml (line 74) | public function markdownToHtml($content)
method getLocales (line 86) | public function getLocales()
method getName (line 101) | public function getName()
FILE: src/AppBundle/Utils/Markdown.php
class Markdown (line 22) | class Markdown
method __construct (line 34) | public function __construct()
method toHtml (line 45) | public function toHtml($text)
FILE: src/AppBundle/Utils/MomentFormatConverter.php
class MomentFormatConverter (line 19) | class MomentFormatConverter
method convert (line 48) | public function convert($format)
FILE: src/AppBundle/Utils/Slugger.php
class Slugger (line 21) | class Slugger
method slugify (line 28) | public function slugify($string)
FILE: src/CodeExplorerBundle/CodeExplorerBundle.php
class CodeExplorerBundle (line 19) | class CodeExplorerBundle extends Bundle
FILE: src/CodeExplorerBundle/DependencyInjection/CodeExplorerExtension.php
class CodeExplorerExtension (line 22) | class CodeExplorerExtension extends Extension
method load (line 24) | public function load(array $configs, ContainerBuilder $container)
FILE: src/CodeExplorerBundle/EventListener/ControllerListener.php
class ControllerListener (line 29) | class ControllerListener
method __construct (line 33) | public function __construct(SourceCodeExtension $twigExtension)
method registerCurrentController (line 38) | public function registerCurrentController(FilterControllerEvent $event)
FILE: src/CodeExplorerBundle/Twig/SourceCodeExtension.php
class SourceCodeExtension (line 23) | class SourceCodeExtension extends \Twig_Extension
method __construct (line 28) | public function __construct($kernelRootDir)
method setController (line 33) | public function setController($controller)
method getFunctions (line 41) | public function getFunctions()
method showSourceCode (line 48) | public function showSourceCode(\Twig_Environment $twig, \Twig_Template...
method getController (line 56) | private function getController()
method getCallableReflector (line 85) | private function getCallableReflector($callable)
method getTemplateSource (line 100) | private function getTemplateSource(\Twig_Template $template)
method unindentCode (line 122) | private function unindentCode($code)
method getName (line 140) | public function getName()
FILE: src/ElasticSearchBundle/Controller/ElasticSearchController.php
class ElasticSearchController (line 8) | class ElasticSearchController extends Controller
method searchAction (line 10) | public function searchAction(Request $request, $page)
FILE: src/ElasticSearchBundle/ElasticSearchBundle.php
class ElasticSearchBundle (line 7) | class ElasticSearchBundle extends Bundle
FILE: src/ElasticSearchBundle/Tests/Controller/ElasticSearchControllerTest.php
class ElasticSearchControllerTest (line 9) | class ElasticSearchControllerTest extends WebTestCase
method __construct (line 13) | public function __construct()
method testElasticSearch (line 22) | public function testElasticSearch()
method populateElasticSearchIndices (line 55) | public function populateElasticSearchIndices()
FILE: src/OAuthBundle/Controller/OAuthController.php
class OAuthController (line 15) | class OAuthController extends Controller
method disconnectServiceAction (line 17) | public function disconnectServiceAction(Request $request, $service, $u...
FILE: src/OAuthBundle/DependencyInjection/Configuration.php
class Configuration (line 13) | class Configuration implements ConfigurationInterface
method getConfigTreeBuilder (line 18) | public function getConfigTreeBuilder()
FILE: src/OAuthBundle/DependencyInjection/OAuthExtension.php
class OAuthExtension (line 15) | class OAuthExtension extends Extension
method load (line 20) | public function load(array $configs, ContainerBuilder $container)
FILE: src/OAuthBundle/OAuthBundle.php
class OAuthBundle (line 7) | class OAuthBundle extends Bundle
FILE: src/OAuthBundle/Provider/UserProvider.php
class UserProvider (line 18) | class UserProvider extends OAuthUserProvider
method __construct (line 35) | public function __construct(EntityManager $entityManager, ContainerInt...
method loadUserByOAuthUserResponse (line 46) | public function loadUserByOAuthUserResponse(UserResponseInterface $res...
FILE: src/OAuthBundle/Services/AuthenticationSuccessHandler.php
class AuthenticationSuccessHandler (line 18) | class AuthenticationSuccessHandler implements AuthenticationSuccessHandl...
method __construct (line 35) | public function __construct(AuthorizationChecker $security, \Symfony\B...
method onAuthenticationSuccess (line 46) | public function onAuthenticationSuccess(Request $request, TokenInterfa...
FILE: src/OAuthBundle/Tests/Controller/OAuthControllerTest.php
class OAuthControllerTest (line 14) | class OAuthControllerTest extends WebTestCase
method __construct (line 18) | public function __construct()
method testDisconnectService (line 24) | public function testDisconnectService()
FILE: src/OAuthBundle/Tests/OAuthTest.php
class OAuthTest (line 16) | class OAuthTest extends WebTestCase
method testOAuth (line 18) | public function testOAuth()
FILE: src/RabbitMQBundle/Controller/RabbitMQController.php
class RabbitMQController (line 9) | class RabbitMQController extends Controller
method generatePdfAction (line 11) | public function generatePdfAction(Post $post)
FILE: src/RabbitMQBundle/DependencyInjection/Configuration.php
class Configuration (line 13) | class Configuration implements ConfigurationInterface
method getConfigTreeBuilder (line 18) | public function getConfigTreeBuilder()
FILE: src/RabbitMQBundle/DependencyInjection/RabbitMQExtension.php
class RabbitMQExtension (line 15) | class RabbitMQExtension extends Extension
method load (line 20) | public function load(array $configs, ContainerBuilder $container)
FILE: src/RabbitMQBundle/RabbitMQBundle.php
class RabbitMQBundle (line 7) | class RabbitMQBundle extends Bundle
FILE: src/RabbitMQBundle/Services/PDFGenerator.php
class PDFGenerator (line 15) | class PDFGenerator
method __construct (line 33) | public function __construct(Serializer $serializer, ContainerInterface...
method setPost (line 43) | public function setPost(Post $post)
method checkExistingUpdatedPdf (line 51) | public function checkExistingUpdatedPdf()
method generateNewPdf (line 63) | public function generateNewPdf()
method generateUniquePdfName (line 83) | public function generateUniquePdfName()
FILE: src/RabbitMQBundle/Services/RabbitMQ/PDFGeneratorConsumer.php
class PDFGeneratorConsumer (line 16) | class PDFGeneratorConsumer implements ConsumerInterface
method __construct (line 39) | public function __construct(ContainerInterface $container, TwigEngine ...
method execute (line 51) | public function execute(AMQPMessage $msg)
FILE: src/RabbitMQBundle/Tests/Controller/RabbitMQControllerTest.php
class RabbitMQControllerTest (line 9) | class RabbitMQControllerTest extends WebTestCase
method __construct (line 13) | public function __construct()
method testRabbitMQ (line 19) | public function testRabbitMQ()
FILE: src/RedisBundle/Controller/RedisController.php
class RedisController (line 15) | class RedisController extends Controller
method ListTopFivePopularPostAction (line 17) | public function ListTopFivePopularPostAction()
FILE: src/RedisBundle/RedisBundle.php
class RedisBundle (line 7) | class RedisBundle extends Bundle
FILE: src/RedisBundle/Tests/Controller/RedisControllerTest.php
class RedisControllerTest (line 14) | class RedisControllerTest extends WebTestCase
method __construct (line 18) | public function __construct()
method testRedisController (line 24) | public function testRedisController()
FILE: src/RestBundle/Controller/RestController.php
class RestController (line 31) | class RestController extends FOSRestController
method indexApiAction (line 47) | public function indexApiAction()
method getPostsAction (line 73) | public function getPostsAction()
method getPostAction (line 100) | public function getPostAction($id)
method newPostFormAction (line 129) | public function newPostFormAction()
method newPostAction (line 156) | public function newPostAction(Request $request)
method updatePostAction (line 198) | public function updatePostAction(Request $request, $id)
method editPostFormAction (line 241) | public function editPostFormAction($id)
method editPostAction (line 272) | public function editPostAction(Request $request, $id)
method deletePostAction (line 306) | public function deletePostAction($id)
method getCommentsAction (line 330) | public function getCommentsAction()
method getCommentAction (line 356) | public function getCommentAction($id)
method getCommentsFromPostAction (line 385) | public function getCommentsFromPostAction($id)
method newCommentFormAction (line 409) | public function newCommentFormAction()
method newCommentAction (line 438) | public function newCommentAction(Request $request, $id)
method updateCommentAction (line 481) | public function updateCommentAction(Request $request, $id)
method editCommentFormAction (line 524) | public function editCommentFormAction($id)
method editCommentAction (line 555) | public function editCommentAction(Request $request, $id)
method deleteCommentAction (line 590) | public function deleteCommentAction($id)
FILE: src/RestBundle/DependencyInjection/Configuration.php
class Configuration (line 13) | class Configuration implements ConfigurationInterface
method getConfigTreeBuilder (line 18) | public function getConfigTreeBuilder()
FILE: src/RestBundle/DependencyInjection/RestExtension.php
class RestExtension (line 15) | class RestExtension extends Extension
method load (line 20) | public function load(array $configs, ContainerBuilder $container)
FILE: src/RestBundle/Form/CommentRestType.php
class CommentRestType (line 29) | class CommentRestType extends AbstractType
method buildForm (line 34) | public function buildForm(FormBuilderInterface $builder, array $options)
method configureOptions (line 60) | public function configureOptions(OptionsResolver $resolver)
method getName (line 71) | public function getName()
FILE: src/RestBundle/Form/PostRestType.php
class PostRestType (line 11) | class PostRestType extends AbstractType
method buildForm (line 16) | public function buildForm(FormBuilderInterface $builder, array $options)
method configureOptions (line 44) | public function configureOptions(OptionsResolver $resolver)
method getName (line 55) | public function getName()
FILE: src/RestBundle/RestBundle.php
class RestBundle (line 7) | class RestBundle extends Bundle
FILE: src/RestBundle/Tests/Controller/RestControllerTest.php
class RestControllerTest (line 18) | class RestControllerTest extends WebTestCase
method __construct (line 22) | public function __construct()
method testResourcesIndex (line 28) | public function testResourcesIndex()
method testApiDocIndex (line 40) | public function testApiDocIndex()
method testResponseFormats (line 52) | public function testResponseFormats()
method testGetPosts (line 78) | public function testGetPosts()
method testGetPost (line 87) | public function testGetPost()
method testNewPost (line 105) | public function testNewPost()
method testEditPost (line 128) | public function testEditPost()
method testRemovePost (line 158) | public function testRemovePost()
method testGetComments (line 176) | public function testGetComments()
method testGetCommentsFromSpecificPost (line 184) | public function testGetCommentsFromSpecificPost()
method testGetComment (line 213) | public function testGetComment()
method testNewComment (line 234) | public function testNewComment()
method testEditComment (line 258) | public function testEditComment()
method testRemoveComment (line 291) | public function testRemoveComment()
method getExamplePostData (line 312) | public function getExamplePostData()
method getExampleCommentData (line 324) | public function getExampleCommentData()
method getExamplePostEntity (line 332) | public function getExamplePostEntity()
method getExampleCommentEntity (line 354) | public function getExampleCommentEntity()
FILE: web/js/app.js
function Y (line 23) | function Y(t){var n="length" in t&&t.length,i=e.type(t);if(i==="function...
function i (line 34) | function i(e,t,n,i){var m,l,d,c,w,g,x,h,b,v;if((t?t.ownerDocument||t:f)!...
function M (line 39) | function M(){var n=[];function e(i,r){if(n.push(i+" ")>t.cacheLength){de...
function l (line 39) | function l(e){e[o]=!0;return e}
function h (line 39) | function h(e){var n=a.createElement("div");try{return!!e(n)}catch(t){ret...
function V (line 39) | function V(e,n){var r=e.split("|"),i=e.length;while(i--){t.attrHandle[r[...
function K (line 39) | function K(e,t){var n=t&&e,i=n&&e.nodeType===1&&t.nodeType===1&&(~t.sour...
function ge (line 39) | function ge(e){return function(t){var n=t.nodeName.toLowerCase();return ...
function Ee (line 39) | function Ee(e){return function(t){var n=t.nodeName.toLowerCase();return(...
function w (line 39) | function w(e){return l(function(t){t=+t;return l(function(n,i){var r,s=e...
function G (line 39) | function G(e){return e&&typeof e.getElementsByTagName!=="undefined"&&e}
function J (line 53) | function J(){}
function P (line 53) | function P(e){var t=0,i=e.length,n="";for(;t<i;t++){n+=e[t].value};retur...
function B (line 53) | function B(e,t,n){var i=t.dir,r=n&&i==="parentNode",s=pe++;return t.firs...
function I (line 55) | function I(e){return e.length>1?function(t,n,i){var r=e.length;while(r--...
function ce (line 55) | function ce(e,t,n){var r=0,o=t.length;for(;r<o;r++){i(e,t[r],n)};return n}
function O (line 55) | function O(e,t,n,i,r){var s,a=[],o=0,f=e.length,u=t!=null;for(;o<f;o++){...
function z (line 55) | function z(e,t,n,i,r,s){if(i&&!i[o]){i=z(i)};if(r&&!r[o]){r=z(r,s)};retu...
function X (line 57) | function X(e){var u,r,i,a=e.length,f=t.relative[e[0].type],l=f||t.relati...
function de (line 58) | function de(e,n){var r=n.length>0,s=e.length>0,o=function(o,u,f,l,c){var...
function I (line 60) | function I(t,n,i){if(e.isFunction(n)){return e.grep(t,function(e,t){retu...
function de (line 67) | function de(e,t){while((e=e[t])&&e.nodeType!==1){};return e}
function Ke (line 67) | function Ke(t){var n=re[t]={};e.each(t.match(l)||[],function(e,t){n[t]=!...
function H (line 76) | function H(){r.removeEventListener("DOMContentLoaded",H,!1);t.removeEven...
function d (line 79) | function d(){Object.defineProperty(this.cache={},0,{get:function(){retur...
function ye (line 84) | function ye(t,n,i){var o;if(i===undefined&&t.nodeType===1){o="data-"+n.r...
function A (line 86) | function A(){return!0}
function x (line 86) | function x(){return!1}
function te (line 86) | function te(){try{return r.activeElement}catch(e){}}
function ue (line 93) | function ue(t,n){return e.nodeName(t,"table")&&e.nodeName(n.nodeType!==1...
function Ue (line 93) | function Ue(e){e.type=(e.getAttribute("type")!==null)+"/"+e.type;return e}
function Je (line 93) | function Je(e){var t=qt.exec(e.type);if(t){e.type=t[1]}
function z (line 94) | function z(e,t){var n=0,r=e.length;for(;n<r;n++){i.set(e[n],"globalEval"...
function Be (line 94) | function Be(t,n){var a,d,o,f,u,c,l,r;if(n.nodeType!==1){return};if(i.has...
function a (line 94) | function a(t,n){var i=t.getElementsByTagName?t.getElementsByTagName(n||"...
function Ze (line 94) | function Ze(e,t){var n=t.nodeName.toLowerCase();if(n==="input"&&We.test(...
function Xe (line 100) | function Xe(n,i){var o,r=e(i.createElement(n)).appendTo(i.body),s=t.getD...
function V (line 100) | function V(t){var i=r,n=Ne[t];if(!n){n=Xe(t,i);if(n==="none"||!n){O=(O||...
function C (line 100) | function C(t,n,i){var s,a,u,o,r=t.style;i=i||j(t);if(i){o=i.getPropertyV...
function be (line 100) | function be(e,t){return{get:function(){if(e()){delete this.get;return};r...
function u (line 100) | function u(){n.style.cssText="-webkit-box-sizing:border-box;-moz-box-siz...
function Ee (line 100) | function Ee(e,t){if(t in e){return t};var i=t[0].toUpperCase()+t.slice(1...
function Se (line 100) | function Se(e,t,n){var i=ut.exec(t);return i?Math.max(0,i[1]-(n||0))+(i[...
function qe (line 100) | function qe(t,n,i,r,o){var s=i===(r?"border":"content")?4:n==="width"?1:...
function Le (line 101) | function Le(t,n,i){var u=!0,r=n==="width"?t.offsetWidth:t.offsetHeight,s...
function je (line 101) | function je(t,n){var s,r,u,a=[],o=0,f=t.length;for(;o<f;o++){r=t[o];if(!...
function u (line 104) | function u(e,t,n,i,r){return new u.prototype.init(e,t,n,i,r)}
function De (line 109) | function De(){setTimeout(function(){m=undefined});return(m=e.now())}
function P (line 109) | function P(e,t){var i,r=0,n={height:e};t=t?1:0;for(;r<4;r+=2-t){i=h[r];n...
function xe (line 109) | function xe(e,t,n){var r,o=(b[t]||[]).concat(b["*"]),i=0,s=o.length;for(...
function Qe (line 109) | function Qe(t,n,r){var o,d,g,h,u,y,l,m,c=this,p={},a=t.style,f=t.nodeTyp...
function Ye (line 114) | function Ye(t,n){var i,o,a,r,s;for(i in t){o=e.camelCase(i);a=n[o];r=t[i...
function oe (line 115) | function oe(t,n,i){var u,f,a=0,c=N.length,o=e.Deferred().always(function...
function ae (line 132) | function ae(t){return function(n,i){if(typeof n!=="string"){i=n;n="*"};v...
function ne (line 133) | function ne(t,n,i,r){var o={},a=(t===X);function s(u){var f;o[u]=!0;e.ea...
function U (line 134) | function U(t,n){var i,r,o=e.ajaxSettings.flatOptions||{};for(i in n){if(...
function Ve (line 134) | function Ve(e,t,n){var s,o,r,u,a=e.contents,i=e.dataTypes;while(i[0]==="...
function Ge (line 135) | function Ge(e,t,n,i){var c,r,o,f,u,a={},l=e.dataTypes.slice();if(l[1]){f...
function g (line 141) | function g(t,n,o,l){var d,T,v,g,h,c=n;if(a===2){return};a=2;if(x){clearT...
function B (line 146) | function B(t,n,i,r){var o;if(e.isArray(n)){e.each(n,function(e,n){if(i||...
function ce (line 154) | function ce(t){return e.isWindow(t)?t:t.nodeType===9&&t.defaultView}
function n (line 159) | function n(){return ia.apply(null,arguments)}
function nd (line 159) | function nd(e){ia=e}
function Ae (line 159) | function Ae(e){return"[object Array]"===Object.prototype.toString.call(e)}
function Oe (line 159) | function Oe(e){return e instanceof Date||"[object Date]"===Object.protot...
function Xr (line 159) | function Xr(e,t){var a,n=[];for(a=0;a<e.length;++a)n.push(t(e[a],a));ret...
function B (line 159) | function B(e,t){return Object.prototype.hasOwnProperty.call(e,t)}
function Ee (line 159) | function Ee(e,t){for(var a in t)B(t,a)&&(e[a]=t[a]);return B(t,"toString...
function fe (line 159) | function fe(e,t,a,n){return Nt(e,t,a,n,!0).utc()}
function Br (line 159) | function Br(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2...
function o (line 159) | function o(e){return null==e._pf&&(e._pf=Br()),e._pf}
function fa (line 159) | function fa(e){if(null==e._isValid){var t=o(e);e._isValid=!(isNaN(e._d.g...
function ka (line 159) | function ka(e){var t=fe(NaN);return null!=e?Ee(o(t),e):o(t).userInvalida...
function Qe (line 159) | function Qe(e,t){var s,a,n;if("undefined"!=typeof t._isAMomentObject&&(e...
function Me (line 159) | function Me(e){Qe(this,e),this._d=new Date(null!=e._d?e._d.getTime():NaN...
function O (line 159) | function O(e){return e instanceof Me||null!=e&&null!=e._isAMomentObject}
function c (line 159) | function c(e){return 0>e?Math.ceil(e):Math.floor(e)}
function m (line 159) | function m(e){var t=+e,a=0;return 0!==t&&isFinite(t)&&(a=c(t)),a}
function ca (line 159) | function ca(e,t,a){var n,d=Math.min(e.length,t.length),r=Math.abs(e.leng...
function Ya (line 159) | function Ya(){}
function ua (line 159) | function ua(e){return e?e.toLowerCase().replace("_","-"):e}
function Qr (line 159) | function Qr(e){for(var a,t,r,n,s=0;s<e.length;){for(n=ua(e[s]).split("-"...
function St (line 159) | function St(e){var t=null;if(!K[e]&&"undefined"!=typeof module&&module&&...
function ce (line 159) | function ce(e,t){var a;return e&&(a="undefined"==typeof t?Q(e):wt(e,t),a...
function wt (line 159) | function wt(e,t){return null!==t?(t.abbr=e,K[e]=K[e]||new Ya,K[e].set(t)...
function Q (line 159) | function Q(e){var t;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr...
function M (line 159) | function M(e,t){var a=e.toLowerCase();pe[a]=pe[a+"s"]=pe[t]=e}
function T (line 159) | function T(e){return"string"==typeof e?pe[e]||pe[e.toLowerCase()]:void 0}
function Wt (line 159) | function Wt(e){var a,t,n={};for(t in e)B(e,t)&&(a=T(t),a&&(n[a]=e[t]));r...
function ne (line 159) | function ne(e,t){return function(a){return null!=a?(yt(this,e,a),n.updat...
function Ce (line 159) | function Ce(e,t){return e._d["get"+(e._isUTC?"UTC":"")+t]()}
function yt (line 159) | function yt(e,t,a){return e._d["set"+(e._isUTC?"UTC":"")+t](a)}
function pt (line 159) | function pt(e,t){var a;if("object"==typeof e)for(a in e)this.set(a,e[a])...
function at (line 159) | function at(e,t,a){var n=""+Math.abs(e),r=t-n.length,s=e>=0;return(s?a?"...
function s (line 159) | function s(e,t,a,n){var s=n;"string"==typeof n&&(s=function(){return thi...
function ed (line 159) | function ed(e){return e.match(/\[[\s\S]/)?e.replace(/^\[|\]$/g,""):e.rep...
function ad (line 159) | function ad(e){var t,n,a=e.match(da);for(t=0,n=a.length;n>t;t++)ue[a[t]]...
function nt (line 159) | function nt(e,t){return e.isValid()?(t=Tt(t,e.localeData()),Yt[t]=Yt[t]|...
function Tt (line 159) | function Tt(e,t){function n(e){return t.longDateFormat(e)||e};var a=5;fo...
function td (line 159) | function td(e){return"function"==typeof e&&"[object Function]"===Object....
function a (line 159) | function a(e,t,a){Ie[e]=td(t)?t:function(e){return e&&a?a:t}}
function ld (line 159) | function ld(e,t){return B(Ie,e)?Ie[e](t._strict,t._locale):new RegExp(Md...
function Md (line 159) | function Md(e){return e.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\...
function l (line 159) | function l(e,t){var a,n=t;for("string"==typeof e&&(e=[e]),"number"==type...
function Le (line 159) | function Le(e,t){l(e,function(e,a,n,s){n._w=n._w||{},t(e,n._w,n,s)})}
function Td (line 159) | function Td(e,t,a){null!=t&&B(Ve,e)&&Ve[e](t,a._a,a,e)}
function st (line 159) | function st(e,t){return new Date(Date.UTC(e,t+1,0)).getUTCDate()}
function kd (line 159) | function kd(e){return this._months[e.month()]}
function gd (line 159) | function gd(e){return this._monthsShort[e.month()]}
function wd (line 159) | function wd(e,t,a){var n,s,r;for(this._monthsParse||(this._monthsParse=[...
function Zt (line 159) | function Zt(e,t){var a;return"string"==typeof t&&(t=e.localeData().month...
function Kt (line 159) | function Kt(e){return null!=e?(Zt(this,e),n.updateOffset(this,!0),this):...
function Sd (line 159) | function Sd(){return st(this.year(),this.month())}
function Xe (line 159) | function Xe(e){var a,t=e._a;return t&&-2===o(e).overflow&&(a=t[F]<0||t[F...
function At (line 159) | function At(e){n.suppressDeprecationWarnings===!1&&"undefined"!=typeof c...
function g (line 159) | function g(e,t){var a=!0;return Ee(function(){return a&&(At(e+"\n"+(new ...
function vd (line 159) | function vd(e,t){na[e]||(At(t),na[e]=!0)}
function Rt (line 159) | function Rt(e){var t,n,a=e._i,s=rd.exec(a);if(s){for(o(e).iso=!0,t=0,n=M...
function Dd (line 160) | function Dd(e){var t=id.exec(e._i);return null!==t?void(e._d=new Date(+t...
function es (line 160) | function es(e,t,a,n,s,d,i){var r=new Date(e,t,a,n,s,d,i);return 1970>e&&...
function Be (line 160) | function Be(e){var t=new Date(Date.UTC.apply(null,arguments));return 197...
function Bt (line 160) | function Bt(e){return Ut(e)?366:365}
function Ut (line 160) | function Ut(e){return e%4===0&&e%100!==0||e%400===0}
function fd (line 160) | function fd(){return Ut(this.year())}
function ee (line 160) | function ee(e,t,a){var s,r=a-t,n=a-e.day();return n>r&&(n-=7),r-7>n&&(n+...
function hd (line 160) | function hd(e){return ee(e,this._week.dow,this._week.doy).week}
function Ld (line 160) | function Ld(){return this._week.dow}
function cd (line 160) | function cd(){return this._week.doy}
function Yd (line 160) | function Yd(e){var t=this.localeData().week(this);return null==e?t:this....
function pd (line 160) | function pd(e){var t=ee(this,1,4).week;return null==e?t:this.add(7*(e-t)...
function yd (line 160) | function yd(e,t,a,n,s){var r,i=6+s-n,o=Be(e,0,1+i),d=o.getUTCDay();retur...
function qr (line 160) | function qr(e){var t=Math.round((this.clone().startOf("day")-this.clone(...
function oe (line 160) | function oe(e,t,a){return null!=e?e:null!=t?t:a}
function Rr (line 160) | function Rr(e){var t=new Date;return e._useUTC?[t.getUTCFullYear(),t.get...
function Ke (line 160) | function Ke(e){var t,s,r,n,a=[];if(!e._d){for(r=Rr(e),e._w&&null==e._a[v...
function Sr (line 160) | function Sr(e){var t,o,r,n,a,s,d;t=e._w,null!=t.GG||null!=t.W||null!=t.E...
function Ze (line 160) | function Ze(e){if(e._f===n.ISO_8601)return void Rt(e);e._a=[],o(e).empty...
function vr (line 160) | function vr(e,t,a){var n;return null==a?t:null!=e.meridiemHour?e.meridie...
function Hr (line 160) | function Hr(e){var t,r,s,n,a;if(0===e._f.length)return o(e).invalidForma...
function br (line 160) | function br(e){if(!e._d){var t=Wt(e._i);e._a=[t.year,t.month,t.day||t.da...
function Wr (line 160) | function Wr(e){var t=new Me(Xe(Jt(e)));return t._nextDay&&(t.add(1,"d"),...
function Jt (line 160) | function Jt(e){var t=e._i,a=e._f;return e._locale=e._locale||Q(e._l),nul...
function jr (line 160) | function jr(e){var t=e._i;void 0===t?e._d=new Date:Oe(t)?e._d=new Date(+...
function Nt (line 160) | function Nt(e,t,a,n,r){var s={};return"boolean"==typeof a&&(n=a,a=void 0...
function i (line 160) | function i(e,t,a,n){return Nt(e,t,a,n,!1)}
function Gt (line 160) | function Gt(e,t){var n,a;if(1===t.length&&Ae(t[0])&&(t=t[0]),!t.length)r...
function wr (line 160) | function wr(){var e=[].slice.call(arguments,0);return Gt("isBefore",e)}
function gr (line 160) | function gr(){var e=[].slice.call(arguments,0);return Gt("isAfter",e)}
function Pe (line 160) | function Pe(e){var t=Wt(e),i=t.year||0,o=t.quarter||0,m=t.month||0,d=t.w...
function dt (line 160) | function dt(e){return e instanceof Pe}
function Vt (line 160) | function Vt(e,t){s(e,0,0,function(){var e=this.utcOffset(),a="+";return ...
function ht (line 160) | function ht(e){var a=(e||"").match(Je)||[],s=a[a.length-1]||[],t=(s+"")....
function Lt (line 160) | function Lt(e,t){var a,s;return t._isUTC?(a=t.clone(),s=(O(e)||Oe(e)?+e:...
function ut (line 160) | function ut(e){return 15*-Math.round(e._d.getTimezoneOffset()/15)}
function pr (line 160) | function pr(e,t){var s,a=this._offset||0;return null!=e?("string"==typeo...
function yr (line 160) | function yr(e,t){return null!=e?("string"!=typeof e&&(e=-e),this.utcOffs...
function Yr (line 160) | function Yr(e){return this.utcOffset(0,e)}
function fr (line 160) | function fr(e){return this._isUTC&&(this.utcOffset(0,e),this._isUTC=!1,e...
function Dr (line 160) | function Dr(){return this._tzm?this.utcOffset(this._tzm):"string"==typeo...
function Tr (line 160) | function Tr(e){return e=e?i(e).utcOffset():0,(this.utcOffset()-e)%60===0}
function kr (line 160) | function kr(){return this.utcOffset()>this.clone().month(0).utcOffset()|...
function xr (line 160) | function xr(){if("undefined"!=typeof this._isDSTShifted)return this._isD...
function Fr (line 161) | function Fr(){return!this._isUTC}
function Ur (line 161) | function Ur(){return this._isUTC}
function It (line 161) | function It(){return this._isUTC&&0===this._offset}
function C (line 161) | function C(e,t){var s,r,d,a=e,n=null;return dt(e)?a={ms:e._milliseconds,...
function R (line 161) | function R(e,t){var a=e&&parseFloat(e.replace(",","."));return(isNaN(a)?...
function Xt (line 161) | function Xt(e,t){var a={milliseconds:0,months:0};return a.months=t.month...
function Nr (line 161) | function Nr(e,t){var a;return t=Lt(t,e),e.isBefore(t)?a=Xt(e,t):(a=Xt(t,...
function jt (line 161) | function jt(e,t){return function(a,n){var r,s;return null===n||isNaN(+n)...
function Dt (line 161) | function Dt(e,t,a,s){var i=t._milliseconds,d=t._days,r=t._months;s=null=...
function Ir (line 161) | function Ir(e,t){var s=e||i(),r=Lt(s,this).startOf("day"),a=this.diff(r,...
function Vr (line 161) | function Vr(){return new Me(this)}
function Zr (line 161) | function Zr(e,t){var a;return t=T("undefined"!=typeof t?t:"millisecond")...
function Kr (line 161) | function Kr(e,t){var a;return t=T("undefined"!=typeof t?t:"millisecond")...
function Cr (line 161) | function Cr(e,t,a){return this.isAfter(e,a)&&this.isBefore(t,a)}
function Gr (line 161) | function Gr(e,t){var a;return t=T(t||"millisecond"),"millisecond"===t?(e...
function Pr (line 161) | function Pr(e,t,a){var n,s,r=Lt(e,this),d=6e4*(r.utcOffset()-this.utcOff...
function Ar (line 161) | function Ar(e,t){var s,r,n=12*(t.year()-e.year())+(t.month()-e.month()),...
function zr (line 161) | function zr(){return this.clone().locale("en").format("ddd MMM DD YYYY H...
function gt (line 161) | function gt(){var e=this.clone().utc();return 0<e.year()&&e.year()<=9999...
function Er (line 161) | function Er(e){var t=nt(this,e||n.defaultFormat);return this.localeData(...
function Jr (line 161) | function Jr(e,t){return this.isValid()?C({to:this,from:e}).locale(this.l...
function Or (line 161) | function Or(e){return this.from(i(),e)}
function Hd (line 161) | function Hd(e,t){return this.isValid()?C({from:this,to:e}).locale(this.l...
function Rn (line 161) | function Rn(e){return this.to(i(),e)}
function vt (line 161) | function vt(e){var t;return void 0===e?this._locale._abbr:(t=Q(e),null!=...
function bt (line 161) | function bt(){return this._locale}
function Ka (line 161) | function Ka(e){switch(e=T(e)){case"year":this.month(0);case"quarter":cas...
function Ia (line 161) | function Ia(e){return e=T(e),void 0===e||"millisecond"===e?this:this.sta...
function Ua (line 161) | function Ua(){return+this._d-6e4*(this._offset||0)}
function Ja (line 161) | function Ja(){return Math.floor(+this/1e3)}
function Ga (line 161) | function Ga(){return this._offset?new Date(+this):this._d}
function Ca (line 161) | function Ca(){var e=this;return[e.year(),e.month(),e.date(),e.hour(),e.m...
function Na (line 161) | function Na(){var e=this;return{years:e.year(),months:e.month(),date:e.d...
function Ra (line 161) | function Ra(){return fa(this)}
function qa (line 161) | function qa(){return Ee({},o(this))}
function nn (line 161) | function nn(){return o(this).overflow}
function ze (line 161) | function ze(e,t){s(0,[e,e.length],0,t)}
function zt (line 161) | function zt(e,t,a){return ee(i([e,11,31+t-a]),t,a).week}
function Qa (line 161) | function Qa(e){var t=ee(this,this.localeData()._week.dow,this.localeData...
function en (line 161) | function en(e){var t=ee(this,1,4).year;return null==e?t:this.add(e-t,"y")}
function dn (line 161) | function dn(){return zt(this.year(),1,4)}
function ja (line 161) | function ja(){var e=this.localeData()._week;return zt(this.year(),e.dow,...
function wa (line 161) | function wa(e){return null==e?Math.ceil((this.month()+1)/3):this.month(3...
function ga (line 161) | function ga(e,t){return"string"!=typeof e?e:isNaN(e)?(e=t.weekdaysParse(...
function va (line 161) | function va(e){return this._weekdays[e.day()]}
function Sa (line 161) | function Sa(e){return this._weekdaysShort[e.day()]}
function Ha (line 161) | function Ha(e){return this._weekdaysMin[e.day()]}
function Aa (line 161) | function Aa(e){var t,a,n;for(this._weekdaysParse=this._weekdaysParse||[]...
function Fa (line 161) | function Fa(e){var t=this._isUTC?this._d.getUTCDay():this._d.getDay();re...
function xa (line 161) | function xa(e){var t=(this.day()+7-this.localeData()._week.dow)%7;return...
function tn (line 161) | function tn(e){return null==e?this.day()||7:this.day(this.day()%7?e:e-7)}
function Ot (line 161) | function Ot(e,t){s(e,0,0,function(){return this.localeData().meridiem(th...
function Pt (line 161) | function Pt(e,t){return t._meridiemParse}
function Qn (line 161) | function Qn(e){return"p"===(e+"").toLowerCase().charAt(0)}
function Jn (line 161) | function Jn(e,t,a){return e>11?a?"pm":"PM":a?"am":"AM"}
function En (line 161) | function En(e,t){t[X]=m(1e3*("0."+e))}
function zn (line 161) | function zn(){return this._isUTC?"UTC":""}
function xn (line 161) | function xn(){return this._isUTC?"Coordinated Universal Time":""}
function Fn (line 161) | function Fn(e){return i(1e3*e)}
function An (line 161) | function An(){return i.apply(null,arguments).parseZone()}
function Pn (line 161) | function Pn(e,t,a){var n=this._calendar[e];return"function"==typeof n?n....
function Cn (line 161) | function Cn(e){var a=this._longDateFormat[e],t=this._longDateFormat[e.to...
function Nn (line 161) | function Nn(){return this._invalidDate}
function Bn (line 161) | function Bn(e){return this._ordinal.replace("%d",e)}
function qt (line 161) | function qt(e){return e}
function Kn (line 161) | function Kn(e,t,a,n){var s=this._relativeTime[a];return"function"==typeo...
function cn (line 161) | function cn(e,t){var a=this._relativeTime[e>0?"future":"past"];return"fu...
function hn (line 161) | function hn(e){var a,t;for(t in e)a=e[t],"function"==typeof a?this[t]=a:...
function Qt (line 161) | function Qt(e,t,a,n){var r=Q(),s=fe().set(n,t);return r[a](s,e)}
function he (line 161) | function he(e,t,a,n,s){if("number"==typeof e&&(t=e,e=void 0),e=e||"",nul...
function un (line 161) | function un(e,t){return he(e,t,"months",12,"month")}
function pn (line 161) | function pn(e,t){return he(e,t,"monthsShort",12,"month")}
function fn (line 161) | function fn(e,t){return he(e,t,"weekdays",7,"day")}
function Hn (line 161) | function Hn(e,t){return he(e,t,"weekdaysShort",7,"day")}
function bn (line 161) | function bn(e,t){return he(e,t,"weekdaysMin",7,"day")}
function vn (line 161) | function vn(){var e=this._data;return this._milliseconds=x(this._millise...
function Et (line 161) | function Et(e,t,a,n){var s=C(t,a);return e._milliseconds+=n*s._milliseco...
function Dn (line 161) | function Dn(e,t){return Et(this,e,t,1)}
function ln (line 161) | function ln(e,t){return Et(this,e,t,-1)}
function sa (line 161) | function sa(e){return 0>e?Math.floor(e):Math.ceil(e)}
function Gn (line 161) | function Gn(){var d,i,r,o,s,n=this._milliseconds,e=this._days,t=this._mo...
function Da (line 161) | function Da(e){return 4800*e/146097}
function ot (line 161) | function ot(e){return 146097*e/4800}
function rn (line 161) | function rn(e){var t,n,a=this._milliseconds;if(e=T(e),"month"===e||"year...
function sn (line 161) | function sn(){return this._milliseconds+864e5*this._days+this._months%12...
function P (line 161) | function P(e){return function(){return this.as(e)}}
function Va (line 161) | function Va(e){return e=T(e),this[e+"s"]()}
function Z (line 161) | function Z(e){return function(){return this._data[e]}}
function Sn (line 161) | function Sn(){return c(this.days()/7)}
function Ba (line 161) | function Ba(e,t,a,n,s){return s.relativeTime(t||1,!!a,e,n)}
function Xa (line 161) | function Xa(e,t,a){var n=C(e).abs(),m=se(n.as("s")),i=se(n.as("m")),o=se...
function Ea (line 161) | function Ea(e,t){return void 0===z[e]?!1:void 0===t?z[e]:(z[e]=t,!0)}
function ba (line 161) | function ba(e){var a=this.localeData(),t=Xa(this,!e,a);return e&&(t=a.pa...
function Ue (line 161) | function Ue(){var e,d,i,r=it(this._milliseconds)/1e3,M=it(this._days),s=...
function On (line 161) | function On(e,t){var a=e.split("_");return t%10===1&&t%100!==11?a[0]:t%1...
function V (line 161) | function V(e,t,a){var n={mm:t?"хвіліна_хвіліны_хвілін":"хвіліну_хвіліны_...
function Zn (line 161) | function Zn(e,t){var n={nominative:"студзень_люты_сакавік_красавік_траве...
function mn (line 161) | function mn(e,t){var n={nominative:"нядзеля_панядзелак_аўторак_серада_ча...
function rt (line 161) | function rt(e,t,a){var n={mm:"munutenn",MM:"miz",dd:"devezh"};return e+"...
function Mn (line 161) | function Mn(e){switch(ra(e)){case 1:case 3:case 4:case 5:case 9:return e...
function ra (line 161) | function ra(e){return e>9?ra(e%10):e}
function Ln (line 161) | function Ln(e,t){return 2===t?an(e):e}
function an (line 161) | function an(e){var t={m:"v",b:"v",d:"z"};return void 0===t[e.charAt(0)]?...
function te (line 161) | function te(e,t,a){var n=e+" ";switch(a){case"m":return t?"jedna minuta"...
function De (line 161) | function De(e){return e>1&&5>e&&1!==~~(e/10)}
function y (line 161) | function y(e,t,a,n){var s=e+" ";switch(a){case"s":return t||n?"pár sekun...
function J (line 161) | function J(e,t,a,n){var s={m:["eine Minute","einer Minute"],h:["eine Stu...
function G (line 161) | function G(e,t,a,n){var s={m:["eine Minute","einer Minute"],h:["eine Stu...
function H (line 161) | function H(e,t,a,n){var s={s:["mõne sekundi","mõni sekund","paar sekundi...
function p (line 161) | function p(e,t,a,n){var s="";switch(a){case"s":return n?"muutaman sekunn...
function Za (line 161) | function Za(e,t){return 10>e?t?Ns[e]:Fe[e]:e}
function q (line 161) | function q(e,t,a){var n=e+" ";switch(a){case"m":return t?"jedna minuta":...
function k (line 161) | function k(e,t,a,n){var s=e;switch(a){case"s":return n||t?"néhány másodp...
function oa (line 161) | function oa(e){return(e?"":"[múlt] ")+"["+or[this.day()]+"] LT[-kor]"}
function Pa (line 161) | function Pa(e,t){var n={nominative:"հունվար_փետրվար_մարտ_ապրիլ_մայիս_հու...
function Wa (line 161) | function Wa(e,t){var a="հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ"...
function Xn (line 161) | function Xn(e,t){var a="կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի...
function Te (line 161) | function Te(e){return e%100===11?!0:e%10===1?!1:!0}
function S (line 161) | function S(e,t,a,n){var s=e+" ";switch(a){case"s":return t||n?"nokkrar s...
function jn (line 161) | function jn(e,t){var n={nominative:"იანვარი_თებერვალი_მარტი_აპრილი_მაისი...
function Yn (line 161) | function Yn(e,t){var n={nominative:"კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხ...
function ke (line 161) | function ke(e,t,a,n){var s={m:["eng Minutt","enger Minutt"],h:["eng Ston...
function Tn (line 161) | function Tn(e){var t=e.substr(0,e.indexOf(" "));return we(t)?"a "+e:"an ...
function gn (line 161) | function gn(e){var t=e.substr(0,e.indexOf(" "));return we(t)?"viru "+e:"...
function we (line 161) | function we(e){if(e=parseInt(e,10),isNaN(e))return!1;if(0>e)return!0;if(...
function qn (line 161) | function qn(e,t,a,n){return t?"kelios sekundės":n?"kelių sekundžių":"kel...
function on (line 161) | function on(e,t){var n={nominative:"sausis_vasaris_kovas_balandis_gegužė...
function ie (line 161) | function ie(e,t,a,n){return t?N(a)[0]:n?N(a)[1]:N(a)[2]}
function Ct (line 161) | function Ct(e){return e%10===0||e>10&&20>e}
function N (line 161) | function N(e){return ur[e].split("_")}
function ve (line 161) | function ve(e,t,a,n){var s=e+" ";return 1===e?s+ie(e,t,a[0],n):t?s+(Ct(e...
function Oa (line 161) | function Oa(e,t){var n=-1===t.indexOf("dddd HH:mm"),a=lr[e.day()];return...
function ma (line 161) | function ma(e,t,a){return a?t%10===1&&11!==t?e[2]:e[3]:t%10===1&&11!==t?...
function Se (line 161) | function Se(e,t,a){return e+" "+ma(ta[a],e,t)}
function ge (line 161) | function ge(e,t,a){return ma(ta[a],e,t)}
function kn (line 161) | function kn(e,t){return t?"dažas sekundes":"dažām sekundēm"}
function Ne (line 161) | function Ne(e){return 5>e%10&&e%10>1&&~~(e/10)%10!==1}
function ae (line 161) | function ae(e,t,a){var n=e+" ";switch(a){case"m":return t?"minuta":"minu...
function le (line 161) | function le(e,t,a){var s={mm:"minute",hh:"ore",dd:"zile",MM:"luni",yy:"a...
function za (line 161) | function za(e,t){var a=e.split("_");return t%10===1&&t%100!==11?a[0]:t%1...
function re (line 161) | function re(e,t,a){var n={mm:t?"минута_минуты_минут":"минуту_минуты_мину...
function In (line 161) | function In(e,t){var n={nominative:"январь_февраль_март_апрель_май_июнь_...
function Vn (line 161) | function Vn(e,t){var n={nominative:"янв_фев_март_апр_май_июнь_июль_авг_с...
function yn (line 161) | function yn(e,t){var n={nominative:"воскресенье_понедельник_вторник_сред...
function Ye (line 161) | function Ye(e){return e>1&&5>e}
function D (line 161) | function D(e,t,a,n){var s=e+" ";switch(a){case"s":return t||n?"pár sekún...
function f (line 161) | function f(e,t,a,n){var s=e+" ";switch(a){case"s":return t||n?"nekaj sek...
function w (line 161) | function w(e,t,a,n){var s={s:["viensas secunds","'iensas secunds"],m:["'...
function wn (line 161) | function wn(e,t){var a=e.split("_");return t%10===1&&t%100!==11?a[0]:t%1...
function me (line 161) | function me(e,t,a){var n={mm:"хвилина_хвилини_хвилин",hh:"година_години_...
function Wn (line 161) | function Wn(e,t){var n={nominative:"січень_лютий_березень_квітень_травен...
function Un (line 161) | function Un(e,t){var n={nominative:"неділя_понеділок_вівторок_середа_чет...
function de (line 161) | function de(e){return function(){return e+"о"+(11===this.hours()?"б":"")...
function e (line 167) | function e(){var i=document.createElement('bootstrap'),e={WebkitTransiti...
function r (line 167) | function r(){o.detach().trigger('closed.bs.alert').remove()}
function o (line 167) | function o(i){return this.each(function(){var n=t(this),o=n.data('bs.ale...
function i (line 169) | function i(i){return this.each(function(){var n=t(this),o=n.data('bs.but...
function i (line 170) | function i(i){return this.each(function(){var s=t(this),o=s.data('bs.car...
function o (line 171) | function o(e){var i,o=e.attr('data-target')||(i=e.attr('href'))&&i.repla...
function i (line 171) | function i(i){return this.each(function(){var s=t(this),o=s.data('bs.col...
function n (line 171) | function n(e){if(e&&e.which===3)return;t(a).remove();t(i).each(function(...
function o (line 171) | function o(e){var i=e.attr('data-target');if(!i){i=e.attr('href');i=i&&/...
function s (line 171) | function s(i){return this.each(function(){var n=t(this),o=n.data('bs.dro...
function i (line 175) | function i(i,o){return this.each(function(){var s=t(this),n=s.data('bs.m...
function s (line 176) | function s(){if(n.hoverState!='in')o.detach();n.$element.removeAttr('ari...
function i (line 179) | function i(i){return this.each(function(){var n=t(this),o=n.data('bs.too...
function i (line 179) | function i(i){return this.each(function(){var n=t(this),o=n.data('bs.pop...
function e (line 179) | function e(i,o){this.$body=t(document.body);this.$scrollElement=t(i).is(...
function i (line 179) | function i(i){return this.each(function(){var n=t(this),o=n.data('bs.scr...
function r (line 179) | function r(){s.removeClass('active').find('> .dropdown-menu > .active')....
function o (line 180) | function o(i){return this.each(function(){var n=t(this),o=n.data('bs.tab...
function i (line 180) | function i(i){return this.each(function(){var n=t(this),o=n.data('bs.aff...
function t (line 181) | function t(e){return e.replace(/&/gm,'&').replace(/</gm,'<').repl...
function l (line 181) | function l(e){return e.nodeName.toLowerCase()}
function u (line 181) | function u(e,t){var r=e&&e.exec(t);return r&&0==r.index}
function N (line 181) | function N(e){var t=(e.className+' '+(e.parentNode?e.parentNode.classNam...
function o (line 181) | function o(e,t){var n={};for(var r in e)n[r]=e[r];if(t)for(var r in t)n[...
function b (line 181) | function b(e){var t=[];return function r(e,n){for(var a=e.firstChild;a;a...
function y (line 181) | function y(e,r,i){function p(){return e.length&&r.length?e[0].offset!=r[...
function v (line 182) | function v(e){function n(e){return e&&e.source||e};function t(t,r){retur...
function s (line 182) | function s(e,o,h,M){function B(e,t){for(var r=0;r<t.c.length;r++)if(u(t....
function c (line 182) | function c(e,a){a=a||r.languages||Object.keys(n);var c={r:0,value:t(e)},...
function f (line 182) | function f(e){return r.tabReplace&&(e=e.replace(/^((<[^>]+>|\t)+)/gm,fun...
function w (line 182) | function w(e,t,r){var a=t?d[t]:r,n=[e.trim()];return e.match(/(\s|^)hljs...
function p (line 182) | function p(e){var a=N(e);if(!/no(-?)highlight/.test(a)){var n;r.useBR?(n...
function k (line 182) | function k(e){r=o(r,e)}
function a (line 182) | function a(){if(!a.called){a.called=!0;var e=document.querySelectorAll('...
function m (line 182) | function m(){addEventListener('DOMContentLoaded',a,!1),addEventListener(...
function g (line 182) | function g(t,r){var a=n[t]=r(e);a.aliases&&a.aliases.forEach(function(e)...
function h (line 182) | function h(){return Object.keys(n)}
function i (line 182) | function i(e){return n[e]||n[d[e]]}
Condensed preview — 379 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,917K chars).
[
{
"path": ".gitignore",
"chars": 591,
"preview": "# Cache and logs (Symfony2)\n/app/cache/*\n/app/logs/*\n!app/cache/.gitkeep\n!app/logs/.gitkeep\n\n# Cache and logs (Symfony3)"
},
{
"path": ".travis.yml",
"chars": 731,
"preview": "language: php\n\nsudo: required\n\ncache:\n directories:\n - $HOME/.composer/cache/files\n\nmatrix:\n fast_finish: true\n in"
},
{
"path": "LICENSE",
"chars": 1078,
"preview": "The MIT License (MIT)\n\nCopyright (c) 2015 Alfonso M.\n\nPermission is hereby granted, free of charge, to any person obtain"
},
{
"path": "README.md",
"chars": 6892,
"preview": "# The Symfony Demo Application on Roids!\n[](h"
},
{
"path": "app/.htaccess",
"chars": 143,
"preview": "<IfModule mod_authz_core.c>\n Require all denied\n</IfModule>\n<IfModule !mod_authz_core.c>\n Order deny,allow\n Den"
},
{
"path": "app/AppCache.php",
"chars": 101,
"preview": "<?php\n\nuse Symfony\\Bundle\\FrameworkBundle\\HttpCache\\HttpCache;\n\nclass AppCache extends HttpCache\n{\n}\n"
},
{
"path": "app/AppKernel.php",
"chars": 3166,
"preview": "<?php\n\nuse Symfony\\Component\\HttpKernel\\Kernel;\nuse Symfony\\Component\\Config\\Loader\\LoaderInterface;\n\nclass AppKernel ex"
},
{
"path": "app/Resources/TwigBundle/views/Exception/error.html.twig",
"chars": 947,
"preview": "{#\n This template is used to render any error different from 403, 404 and 500.\n\n This is the simplest way to custo"
},
{
"path": "app/Resources/TwigBundle/views/Exception/error403.html.twig",
"chars": 898,
"preview": "{#\n This template is used to render errors of type HTTP 403 (Forbidden)\n\n This is the simplest way to customize er"
},
{
"path": "app/Resources/TwigBundle/views/Exception/error404.html.twig",
"chars": 877,
"preview": "{#\n This template is used to render errors of type HTTP 404 (Not Found)\n\n This is the simplest way to customize er"
},
{
"path": "app/Resources/TwigBundle/views/Exception/error500.html.twig",
"chars": 891,
"preview": "{#\n This template is used to render errors of type HTTP 500 (Internal Server Error)\n\n This is the simplest way to "
},
{
"path": "app/Resources/assets/css/font-lato.css",
"chars": 750,
"preview": "@font-face {\n font-family: 'Lato';\n font-style: normal;\n font-weight: 400;\n src: local('Lato Regular'), local('Lato-"
},
{
"path": "app/Resources/assets/css/highlight-solarized-light.css",
"chars": 1616,
"preview": "/*\n\nOrginal Style from ethanschoonover.com/solarized (c) Jeremy Hull <sourdrums@gmail.com>\n\n*/\n\n.hljs {\n display: block"
},
{
"path": "app/Resources/assets/js/bootstrap-3.3.4.js",
"chars": 67546,
"preview": "/*!\n * Bootstrap v3.3.4 (http://getbootstrap.com)\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://gi"
},
{
"path": "app/Resources/assets/js/highlight.pack.js",
"chars": 21544,
"preview": "!function(e){\"undefined\"!=typeof exports?e(exports):(window.hljs=e({}),\"function\"==typeof define&&define.amd&&define([],"
},
{
"path": "app/Resources/assets/js/jquery-2.1.4.js",
"chars": 247597,
"preview": "/*!\n * jQuery JavaScript Library v2.1.4\n * http://jquery.com/\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n *\n * Cop"
},
{
"path": "app/Resources/assets/js/main.js",
"chars": 1627,
"preview": "/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyr"
},
{
"path": "app/Resources/assets/scss/bootstrap/_alerts.scss",
"chars": 1550,
"preview": "//\n// Alerts\n// --------------------------------------------------\n\n\n// Base styles\n// -------------------------\n\n.alert"
},
{
"path": "app/Resources/assets/scss/bootstrap/_badges.scss",
"chars": 1230,
"preview": "//\n// Badges\n// --------------------------------------------------\n\n\n// Base class\n.badge {\n display: inline-block;\n m"
},
{
"path": "app/Resources/assets/scss/bootstrap/_breadcrumbs.scss",
"chars": 595,
"preview": "//\n// Breadcrumbs\n// --------------------------------------------------\n\n\n.breadcrumb {\n padding: $breadcrumb-padding-v"
},
{
"path": "app/Resources/assets/scss/bootstrap/_button-groups.scss",
"chars": 5721,
"preview": "//\n// Button groups\n// --------------------------------------------------\n\n// Make the div behave like a button\n.btn-gro"
},
{
"path": "app/Resources/assets/scss/bootstrap/_buttons.scss",
"chars": 3691,
"preview": "//\n// Buttons\n// --------------------------------------------------\n\n\n// Base styles\n// --------------------------------"
},
{
"path": "app/Resources/assets/scss/bootstrap/_carousel.scss",
"chars": 5479,
"preview": "//\n// Carousel\n// --------------------------------------------------\n\n\n// Wrapper for the slide container and indicators"
},
{
"path": "app/Resources/assets/scss/bootstrap/_close.scss",
"chars": 815,
"preview": "//\n// Close icons\n// --------------------------------------------------\n\n\n.close {\n float: right;\n font-size: ($font-s"
},
{
"path": "app/Resources/assets/scss/bootstrap/_code.scss",
"chars": 1401,
"preview": "//\n// Code (inline and block)\n// --------------------------------------------------\n\n\n// Inline and block code styles\nco"
},
{
"path": "app/Resources/assets/scss/bootstrap/_component-animations.scss",
"chars": 819,
"preview": "//\n// Component animations\n// --------------------------------------------------\n\n// Heads up!\n//\n// We don't use the `."
},
{
"path": "app/Resources/assets/scss/bootstrap/_dropdowns.scss",
"chars": 4783,
"preview": "//\n// Dropdown menus\n// --------------------------------------------------\n\n\n// Dropdown arrow/caret\n.caret {\n display:"
},
{
"path": "app/Resources/assets/scss/bootstrap/_forms.scss",
"chars": 15281,
"preview": "//\n// Forms\n// --------------------------------------------------\n\n\n// Normalize non-controls\n//\n// Restyle and baseline"
},
{
"path": "app/Resources/assets/scss/bootstrap/_glyphicons.scss",
"chars": 20411,
"preview": "//\n// Glyphicons for Bootstrap\n//\n// Since icons are fonts, they can be placed anywhere text is placed and are\n// thus a"
},
{
"path": "app/Resources/assets/scss/bootstrap/_grid.scss",
"chars": 1443,
"preview": "//\n// Grid system\n// --------------------------------------------------\n\n\n// Container widths\n//\n// Set the container wi"
},
{
"path": "app/Resources/assets/scss/bootstrap/_input-groups.scss",
"chars": 4243,
"preview": "//\n// Input groups\n// --------------------------------------------------\n\n// Base styles\n// -------------------------\n.i"
},
{
"path": "app/Resources/assets/scss/bootstrap/_jumbotron.scss",
"chars": 984,
"preview": "//\n// Jumbotron\n// --------------------------------------------------\n\n\n.jumbotron {\n padding: $jumbotron-padding ($jum"
},
{
"path": "app/Resources/assets/scss/bootstrap/_labels.scss",
"chars": 1156,
"preview": "//\n// Labels\n// --------------------------------------------------\n\n.label {\n display: inline;\n padding: .2em .6em .3e"
},
{
"path": "app/Resources/assets/scss/bootstrap/_list-group.scss",
"chars": 3070,
"preview": "//\n// List groups\n// --------------------------------------------------\n\n\n// Base class\n//\n// Easily usable on <ul>, <ol"
},
{
"path": "app/Resources/assets/scss/bootstrap/_media.scss",
"chars": 780,
"preview": ".media {\n // Proper spacing between instances of .media\n margin-top: 15px;\n\n &:first-child {\n margin-top: 0;\n }\n}"
},
{
"path": "app/Resources/assets/scss/bootstrap/_mixins.scss",
"chars": 957,
"preview": "// Mixins\n// --------------------------------------------------\n\n// Utilities\n@import \"mixins/hide-text\";\n@import \"mixin"
},
{
"path": "app/Resources/assets/scss/bootstrap/_modals.scss",
"chars": 3612,
"preview": "//\n// Modals\n// --------------------------------------------------\n\n// .modal-open - body class for killing the scr"
},
{
"path": "app/Resources/assets/scss/bootstrap/_navbar.scss",
"chars": 14729,
"preview": "//\n// Navbars\n// --------------------------------------------------\n\n\n// Wrapper and base class\n//\n// Provide a static n"
},
{
"path": "app/Resources/assets/scss/bootstrap/_navs.scss",
"chars": 4950,
"preview": "//\n// Navs\n// --------------------------------------------------\n\n\n// Base class\n// ------------------------------------"
},
{
"path": "app/Resources/assets/scss/bootstrap/_normalize.scss",
"chars": 7650,
"preview": "/*! normalize.css v3.0.2 | MIT License | git.io/normalize */\n\n//\n// 1. Set default font family to sans-serif.\n// 2. Prev"
},
{
"path": "app/Resources/assets/scss/bootstrap/_pager.scss",
"chars": 855,
"preview": "//\n// Pager pagination\n// --------------------------------------------------\n\n\n.pager {\n padding-left: 0;\n margin: $li"
},
{
"path": "app/Resources/assets/scss/bootstrap/_pagination.scss",
"chars": 2033,
"preview": "//\n// Pagination (multiple pages)\n// --------------------------------------------------\n.pagination {\n display: inline-"
},
{
"path": "app/Resources/assets/scss/bootstrap/_panels.scss",
"chars": 6249,
"preview": "//\n// Panels\n// --------------------------------------------------\n\n\n// Base class\n.panel {\n margin-bottom: $line-heigh"
},
{
"path": "app/Resources/assets/scss/bootstrap/_popovers.scss",
"chars": 3517,
"preview": "//\n// Popovers\n// --------------------------------------------------\n\n\n.popover {\n position: absolute;\n top: 0;\n left"
},
{
"path": "app/Resources/assets/scss/bootstrap/_print.scss",
"chars": 2133,
"preview": "/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n\n// =============================="
},
{
"path": "app/Resources/assets/scss/bootstrap/_progress-bars.scss",
"chars": 1992,
"preview": "//\n// Progress bars\n// --------------------------------------------------\n\n\n// Bar animations\n// -----------------------"
},
{
"path": "app/Resources/assets/scss/bootstrap/_responsive-embed.scss",
"chars": 546,
"preview": "// Embeds responsive\n//\n// Credit: Nicolas Gallagher and SUIT CSS.\n\n.embed-responsive {\n position: relative;\n display:"
},
{
"path": "app/Resources/assets/scss/bootstrap/_responsive-utilities.scss",
"chars": 4390,
"preview": "//\n// Responsive: Utility classes\n// --------------------------------------------------\n\n\n// IE10 in Windows (Phone) 8\n/"
},
{
"path": "app/Resources/assets/scss/bootstrap/_scaffolding.scss",
"chars": 3166,
"preview": "//\n// Scaffolding\n// --------------------------------------------------\n\n\n// Reset the box-sizing\n//\n// Heads up! This r"
},
{
"path": "app/Resources/assets/scss/bootstrap/_tables.scss",
"chars": 4662,
"preview": "//\n// Tables\n// --------------------------------------------------\n\n\ntable {\n background-color: $table-bg;\n}\ncaption {\n"
},
{
"path": "app/Resources/assets/scss/bootstrap/_theme.scss",
"chars": 8165,
"preview": "\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables\";\n@impor"
},
{
"path": "app/Resources/assets/scss/bootstrap/_thumbnails.scss",
"chars": 892,
"preview": "//\n// Thumbnails\n// --------------------------------------------------\n\n\n// Mixin and adjust the regular image class\n.th"
},
{
"path": "app/Resources/assets/scss/bootstrap/_tooltip.scss",
"chars": 2953,
"preview": "//\n// Tooltips\n// --------------------------------------------------\n\n\n// Base class\n.tooltip {\n position: absolute;\n "
},
{
"path": "app/Resources/assets/scss/bootstrap/_type.scss",
"chars": 6146,
"preview": "//\n// Typography\n// --------------------------------------------------\n\n\n// Headings\n// -------------------------\n\nh1, h"
},
{
"path": "app/Resources/assets/scss/bootstrap/_utilities.scss",
"chars": 765,
"preview": "//\n// Utility classes\n// --------------------------------------------------\n\n\n// Floats\n// -------------------------\n\n.c"
},
{
"path": "app/Resources/assets/scss/bootstrap/_variables.scss",
"chars": 30826,
"preview": "$bootstrap-sass-asset-helper: false !default;\n//\n// Variables\n// --------------------------------------------------\n\n\n//"
},
{
"path": "app/Resources/assets/scss/bootstrap/_wells.scss",
"chars": 535,
"preview": "//\n// Wells\n// --------------------------------------------------\n\n\n// Base class\n.well {\n min-height: 20px;\n padding:"
},
{
"path": "app/Resources/assets/scss/bootstrap/flatly-theme/_bootswatch.scss",
"chars": 4749,
"preview": "// Flatly 3.3.4 theme by https://bootswatch.com/flatly/\n// Bootswatch\n// -----------------------------------------------"
},
{
"path": "app/Resources/assets/scss/bootstrap/flatly-theme/_variables.scss",
"chars": 27154,
"preview": "// Flatly 3.3.4 theme by https://bootswatch.com/flatly/\n// Variables\n// ------------------------------------------------"
},
{
"path": "app/Resources/assets/scss/bootstrap/mixins/_alerts.scss",
"chars": 263,
"preview": "// Alerts\n\n@mixin alert-variant($background, $border, $text-color) {\n background-color: $background;\n border-color: $b"
},
{
"path": "app/Resources/assets/scss/bootstrap/mixins/_background-variant.scss",
"chars": 212,
"preview": "// Contextual backgrounds\n\n// [converter] $parent hack\n@mixin bg-variant($parent, $color) {\n #{$parent} {\n backgroun"
},
{
"path": "app/Resources/assets/scss/bootstrap/mixins/_border-radius.scss",
"chars": 492,
"preview": "// Single side border-radius\n\n@mixin border-top-radius($radius) {\n border-top-right-radius: $radius;\n border-top-left"
},
{
"path": "app/Resources/assets/scss/bootstrap/mixins/_buttons.scss",
"chars": 1092,
"preview": "// Button variants\n//\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for"
},
{
"path": "app/Resources/assets/scss/bootstrap/mixins/_center-block.scss",
"chars": 126,
"preview": "// Center-align a block level element\n\n@mixin center-block() {\n display: block;\n margin-left: auto;\n margin-right: au"
},
{
"path": "app/Resources/assets/scss/bootstrap/mixins/_clearfix.scss",
"chars": 611,
"preview": "// Clearfix\n//\n// For modern browsers\n// 1. The space content is one way to avoid an Opera bug when the\n// contentedi"
},
{
"path": "app/Resources/assets/scss/bootstrap/mixins/_forms.scss",
"chars": 2771,
"preview": "// Form validation states\n//\n// Used in forms.less to generate the form validation CSS for warnings, errors,\n// and succ"
},
{
"path": "app/Resources/assets/scss/bootstrap/mixins/_gradients.scss",
"chars": 4392,
"preview": "// Gradients\n\n\n\n// Horizontal gradient, from left to right\n//\n// Creates two color stops, start and end, by specifying a"
},
{
"path": "app/Resources/assets/scss/bootstrap/mixins/_grid-framework.scss",
"chars": 2347,
"preview": "// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any va"
},
{
"path": "app/Resources/assets/scss/bootstrap/mixins/_grid.scss",
"chars": 3190,
"preview": "// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n// Centered container element\n@mixin container-f"
},
{
"path": "app/Resources/assets/scss/bootstrap/mixins/_hide-text.scss",
"chars": 594,
"preview": "// CSS image replacement\n//\n// Heads up! v3 launched with with only `.hide-text()`, but per our pattern for\n// mixins be"
},
{
"path": "app/Resources/assets/scss/bootstrap/mixins/_image.scss",
"chars": 1208,
"preview": "// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the "
},
{
"path": "app/Resources/assets/scss/bootstrap/mixins/_labels.scss",
"chars": 167,
"preview": "// Labels\n\n@mixin label-variant($color) {\n background-color: $color;\n\n &[href] {\n &:hover,\n &:focus {\n back"
},
{
"path": "app/Resources/assets/scss/bootstrap/mixins/_list-group.scss",
"chars": 593,
"preview": "// List Groups\n\n@mixin list-group-item-variant($state, $background, $color) {\n .list-group-item-#{$state} {\n color: "
},
{
"path": "app/Resources/assets/scss/bootstrap/mixins/_nav-divider.scss",
"chars": 238,
"preview": "// Horizontal dividers\n//\n// Dividers (basically an hr) within dropdowns and nav lists\n\n@mixin nav-divider($color: #e5e5"
},
{
"path": "app/Resources/assets/scss/bootstrap/mixins/_nav-vertical-align.scss",
"chars": 370,
"preview": "// Navbar vertical align\n//\n// Vertically center elements in the navbar.\n// Example: an element has a height of 30px, so"
},
{
"path": "app/Resources/assets/scss/bootstrap/mixins/_opacity.scss",
"chars": 149,
"preview": "// Opacity\n\n@mixin opacity($opacity) {\n opacity: $opacity;\n // IE8 filter\n $opacity-ie: ($opacity * 100);\n filter: a"
},
{
"path": "app/Resources/assets/scss/bootstrap/mixins/_pagination.scss",
"chars": 460,
"preview": "// Pagination\n\n@mixin pagination-size($padding-vertical, $padding-horizontal, $font-size, $border-radius) {\n > li {\n "
},
{
"path": "app/Resources/assets/scss/bootstrap/mixins/_panels.scss",
"chars": 543,
"preview": "// Panels\n\n@mixin panel-variant($border, $heading-text-color, $heading-bg-color, $heading-border) {\n border-color: $bor"
},
{
"path": "app/Resources/assets/scss/bootstrap/mixins/_progress-bar.scss",
"chars": 200,
"preview": "// Progress bars\n\n@mixin progress-bar-variant($color) {\n background-color: $color;\n\n // Deprecated parent class requir"
},
{
"path": "app/Resources/assets/scss/bootstrap/mixins/_reset-filter.scss",
"chars": 246,
"preview": "// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the I"
},
{
"path": "app/Resources/assets/scss/bootstrap/mixins/_resize.scss",
"chars": 202,
"preview": "// Resize anything\n\n@mixin resizable($direction) {\n resize: $direction; // Options: horizontal, vertical, both\n overfl"
},
{
"path": "app/Resources/assets/scss/bootstrap/mixins/_responsive-visibility.scss",
"chars": 503,
"preview": "// Responsive utilities\n\n//\n// More easily include all the states for responsive-utilities.less.\n// [converter] $parent "
},
{
"path": "app/Resources/assets/scss/bootstrap/mixins/_size.scss",
"chars": 147,
"preview": "// Sizing shortcuts\n\n@mixin size($width, $height) {\n width: $width;\n height: $height;\n}\n\n@mixin square($size) {\n @inc"
},
{
"path": "app/Resources/assets/scss/bootstrap/mixins/_tab-focus.scss",
"chars": 165,
"preview": "// WebKit-style focus\n\n@mixin tab-focus() {\n // Default\n outline: thin dotted;\n // WebKit\n outline: 5px auto -webkit"
},
{
"path": "app/Resources/assets/scss/bootstrap/mixins/_table-row.scss",
"chars": 715,
"preview": "// Tables\n\n@mixin table-row-variant($state, $background) {\n // Exact selectors below required to override `.table-strip"
},
{
"path": "app/Resources/assets/scss/bootstrap/mixins/_text-emphasis.scss",
"chars": 189,
"preview": "// Typography\n\n// [converter] $parent hack\n@mixin text-emphasis-variant($parent, $color) {\n #{$parent} {\n color: $co"
},
{
"path": "app/Resources/assets/scss/bootstrap/mixins/_text-overflow.scss",
"chars": 168,
"preview": "// Text overflow\n// Requires inline-block or block for proper styling\n\n@mixin text-overflow() {\n overflow: hidden;\n te"
},
{
"path": "app/Resources/assets/scss/bootstrap/mixins/_vendor-prefixes.scss",
"chars": 6642,
"preview": "// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our"
},
{
"path": "app/Resources/assets/scss/bootstrap.scss",
"chars": 1485,
"preview": "// Core variables and mixins\n@import \"bootstrap/variables\";\n@import \"bootstrap/mixins\";\n\n// Flatly Theme\n@import \"bootst"
},
{
"path": "app/Resources/assets/scss/font-awesome/_animated.scss",
"chars": 715,
"preview": "// Spinning Icons\n// --------------------------\n\n.#{$fa-css-prefix}-spin {\n -webkit-animation: fa-spin 2s infinite line"
},
{
"path": "app/Resources/assets/scss/font-awesome/_bordered-pulled.scss",
"chars": 332,
"preview": "// Bordered & Pulled\n// -------------------------\n\n.#{$fa-css-prefix}-border {\n padding: .2em .25em .15em;\n border: so"
},
{
"path": "app/Resources/assets/scss/font-awesome/_core.scss",
"chars": 513,
"preview": "// Base Class Definition\n// -------------------------\n\n.#{$fa-css-prefix} {\n display: inline-block;\n font: normal norm"
},
{
"path": "app/Resources/assets/scss/font-awesome/_fixed-width.scss",
"chars": 120,
"preview": "// Fixed Width Icons\n// -------------------------\n.#{$fa-css-prefix}-fw {\n width: (18em / 14);\n text-align: center;\n}\n"
},
{
"path": "app/Resources/assets/scss/font-awesome/_icons.scss",
"chars": 37883,
"preview": "/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\n readers do not read off random characters th"
},
{
"path": "app/Resources/assets/scss/font-awesome/_larger.scss",
"chars": 375,
"preview": "// Icon Sizes\n// -------------------------\n\n/* makes the font 33% larger relative to the icon container */\n.#{$fa-css-pr"
},
{
"path": "app/Resources/assets/scss/font-awesome/_list.scss",
"chars": 378,
"preview": "// List Icons\n// -------------------------\n\n.#{$fa-css-prefix}-ul {\n padding-left: 0;\n margin-left: $fa-li-width;\n li"
},
{
"path": "app/Resources/assets/scss/font-awesome/_mixins.scss",
"chars": 1000,
"preview": "// Mixins\n// --------------------------\n\n@mixin fa-icon() {\n display: inline-block;\n font: normal normal normal #{$fa-"
},
{
"path": "app/Resources/assets/scss/font-awesome/_path.scss",
"chars": 783,
"preview": "/* FONT PATH\n * -------------------------- */\n\n@font-face {\n font-family: 'FontAwesome';\n src: url('#{$fa-font-path}/f"
},
{
"path": "app/Resources/assets/scss/font-awesome/_rotated-flipped.scss",
"chars": 672,
"preview": "// Rotated & Flipped Icons\n// -------------------------\n\n.#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, "
},
{
"path": "app/Resources/assets/scss/font-awesome/_stacked.scss",
"chars": 482,
"preview": "// Stacked Icons\n// -------------------------\n\n.#{$fa-css-prefix}-stack {\n position: relative;\n display: inline-block;"
},
{
"path": "app/Resources/assets/scss/font-awesome/_variables.scss",
"chars": 16877,
"preview": "// Variables\n// --------------------------\n\n$fa-font-path: \"../fonts/font-awesome\" !default;\n$fa-font-size-base: "
},
{
"path": "app/Resources/assets/scss/font-awesome.scss",
"chars": 561,
"preview": "/*!\n * Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome\n * License - http://fontawesome.io/lice"
},
{
"path": "app/Resources/assets/scss/main.scss",
"chars": 5136,
"preview": "/*!\n * Symfony Demo Application by @symfony\n * License: MIT License\n */\n\n@import \"bootstrap/variables\";\n@import \"boots"
},
{
"path": "app/Resources/translations/messages.ca.xliff",
"chars": 12171,
"preview": "<?xml version=\"1.0\"?>\n<xliff version=\"1.2\" xmlns=\"urn:oasis:names:tc:xliff:document:1.2\">\n <file source-language=\"en\""
},
{
"path": "app/Resources/translations/messages.cs.xliff",
"chars": 10828,
"preview": "<?xml version=\"1.0\"?>\n<xliff version=\"1.2\" xmlns=\"urn:oasis:names:tc:xliff:document:1.2\">\n <file source-language=\"en\""
},
{
"path": "app/Resources/translations/messages.de.xliff",
"chars": 12898,
"preview": "<?xml version=\"1.0\"?>\n<xliff version=\"1.2\" xmlns=\"urn:oasis:names:tc:xliff:document:1.2\">\n <file source-language=\"en\""
},
{
"path": "app/Resources/translations/messages.en.xliff",
"chars": 12526,
"preview": "<?xml version=\"1.0\"?>\n<xliff version=\"1.2\" xmlns=\"urn:oasis:names:tc:xliff:document:1.2\">\n <file source-language=\"en\""
},
{
"path": "app/Resources/translations/messages.es.xliff",
"chars": 12442,
"preview": "<?xml version=\"1.0\"?>\n<xliff version=\"1.2\" xmlns=\"urn:oasis:names:tc:xliff:document:1.2\">\n <file source-language=\"en\""
},
{
"path": "app/Resources/translations/messages.fr.xliff",
"chars": 10831,
"preview": "<?xml version=\"1.0\"?>\n<xliff version=\"1.2\" xmlns=\"urn:oasis:names:tc:xliff:document:1.2\">\n <file source-language=\"en\""
},
{
"path": "app/Resources/translations/messages.id.xliff",
"chars": 10682,
"preview": "<?xml version=\"1.0\"?>\n<xliff version=\"1.2\" xmlns=\"urn:oasis:names:tc:xliff:document:1.2\">\n <file source-language=\"en\""
},
{
"path": "app/Resources/translations/messages.it.xliff",
"chars": 10783,
"preview": "<?xml version=\"1.0\"?>\n<xliff version=\"1.2\" xmlns=\"urn:oasis:names:tc:xliff:document:1.2\">\n <file source-language=\"en\""
},
{
"path": "app/Resources/translations/messages.ja.xliff",
"chars": 10017,
"preview": "<?xml version=\"1.0\"?>\n<xliff version=\"1.2\" xmlns=\"urn:oasis:names:tc:xliff:document:1.2\">\n <file source-language=\"en\""
},
{
"path": "app/Resources/translations/messages.nl.xliff",
"chars": 11836,
"preview": "<?xml version=\"1.0\"?>\n<xliff version=\"1.2\" xmlns=\"urn:oasis:names:tc:xliff:document:1.2\">\n <file source-language=\"en\""
},
{
"path": "app/Resources/translations/messages.pl.xliff",
"chars": 12787,
"preview": "<?xml version=\"1.0\"?>\n<xliff version=\"1.2\" xmlns=\"urn:oasis:names:tc:xliff:document:1.2\">\n <file source-language=\"en\""
},
{
"path": "app/Resources/translations/messages.pt_BR.xliff",
"chars": 12558,
"preview": "<?xml version=\"1.0\"?>\n<xliff version=\"1.2\" xmlns=\"urn:oasis:names:tc:xliff:document:1.2\">\n <file source-language=\"en\""
},
{
"path": "app/Resources/translations/messages.ro.xliff",
"chars": 12863,
"preview": "<?xml version=\"1.0\"?>\n<xliff version=\"1.2\" xmlns=\"urn:oasis:names:tc:xliff:document:1.2\">\n <file source-language=\"en\""
},
{
"path": "app/Resources/translations/messages.ru.xliff",
"chars": 12862,
"preview": "<?xml version=\"1.0\"?>\n<xliff version=\"1.2\" xmlns=\"urn:oasis:names:tc:xliff:document:1.2\">\n <file source-language=\"en\""
},
{
"path": "app/Resources/translations/messages.uk.xliff",
"chars": 12788,
"preview": "<?xml version=\"1.0\"?>\n<xliff version=\"1.2\" xmlns=\"urn:oasis:names:tc:xliff:document:1.2\">\n <file source-language=\"en\""
},
{
"path": "app/Resources/translations/validators.ca.xliff",
"chars": 1750,
"preview": "<?xml version=\"1.0\"?>\n<xliff version=\"1.2\" xmlns=\"urn:oasis:names:tc:xliff:document:1.2\">\n <file source-language=\"en\""
},
{
"path": "app/Resources/translations/validators.cs.xliff",
"chars": 1871,
"preview": "<?xml version=\"1.0\"?>\n<xliff version=\"1.2\" xmlns=\"urn:oasis:names:tc:xliff:document:1.2\">\n <file source-language=\"en\""
},
{
"path": "app/Resources/translations/validators.de.xliff",
"chars": 1573,
"preview": "<?xml version=\"1.0\"?>\n<xliff version=\"1.2\" xmlns=\"urn:oasis:names:tc:xliff:document:1.2\">\n <file source-language=\"en\""
},
{
"path": "app/Resources/translations/validators.en.xliff",
"chars": 1657,
"preview": "<?xml version=\"1.0\"?>\n<xliff version=\"1.2\" xmlns=\"urn:oasis:names:tc:xliff:document:1.2\">\n <file source-language=\"en\""
},
{
"path": "app/Resources/translations/validators.es.xliff",
"chars": 1770,
"preview": "<?xml version=\"1.0\"?>\n<xliff version=\"1.2\" xmlns=\"urn:oasis:names:tc:xliff:document:1.2\">\n <file source-language=\"en\""
},
{
"path": "app/Resources/translations/validators.fr.xliff",
"chars": 1736,
"preview": "<?xml version=\"1.0\"?>\n<xliff version=\"1.2\" xmlns=\"urn:oasis:names:tc:xliff:document:1.2\">\n <file source-language=\"en\""
},
{
"path": "app/Resources/translations/validators.id.xliff",
"chars": 1659,
"preview": "<?xml version=\"1.0\"?>\n<xliff version=\"1.2\" xmlns=\"urn:oasis:names:tc:xliff:document:1.2\">\n <file source-language=\"en\""
},
{
"path": "app/Resources/translations/validators.it.xliff",
"chars": 1698,
"preview": "<?xml version=\"1.0\"?>\n<xliff version=\"1.2\" xmlns=\"urn:oasis:names:tc:xliff:document:1.2\">\n <file source-language=\"en\""
},
{
"path": "app/Resources/translations/validators.ja.xliff",
"chars": 1507,
"preview": "<?xml version=\"1.0\"?>\n<xliff version=\"1.2\" xmlns=\"urn:oasis:names:tc:xliff:document:1.2\">\n <file source-language=\"en\""
},
{
"path": "app/Resources/translations/validators.nl.xliff",
"chars": 1659,
"preview": "<?xml version=\"1.0\"?>\n<xliff version=\"1.2\" xmlns=\"urn:oasis:names:tc:xliff:document:1.2\">\n <file source-language=\"en\""
},
{
"path": "app/Resources/translations/validators.pl.xliff",
"chars": 1668,
"preview": "<?xml version=\"1.0\"?>\n<xliff version=\"1.2\" xmlns=\"urn:oasis:names:tc:xliff:document:1.2\">\n <file source-language=\"en\""
},
{
"path": "app/Resources/translations/validators.pt_BR.xliff",
"chars": 1711,
"preview": "<?xml version=\"1.0\"?>\n<xliff version=\"1.2\" xmlns=\"urn:oasis:names:tc:xliff:document:1.2\">\n <file source-language=\"en\""
},
{
"path": "app/Resources/translations/validators.ro.xliff",
"chars": 1699,
"preview": "<?xml version=\"1.0\"?>\n<xliff version=\"1.2\" xmlns=\"urn:oasis:names:tc:xliff:document:1.2\">\n <file source-language=\"en\""
},
{
"path": "app/Resources/translations/validators.ru.xliff",
"chars": 1735,
"preview": "<?xml version=\"1.0\"?>\n<xliff version=\"1.2\" xmlns=\"urn:oasis:names:tc:xliff:document:1.2\">\n <file source-language=\"en\""
},
{
"path": "app/Resources/translations/validators.uk.xliff",
"chars": 1694,
"preview": "<?xml version=\"1.0\"?>\n<xliff version=\"1.2\" xmlns=\"urn:oasis:names:tc:xliff:document:1.2\">\n <file source-language=\"en\""
},
{
"path": "app/Resources/views/admin/blog/_form.html.twig",
"chars": 914,
"preview": "{#\n By default, forms enable client-side validation. This means that you can't\n test the server-side validation er"
},
{
"path": "app/Resources/views/admin/blog/edit.html.twig",
"chars": 822,
"preview": "{% extends 'admin/layout.html.twig' %}\n\n{% block body_id 'admin_post_edit' %}\n\n{% block main %}\n <h1>{{ 'title.edit_p"
},
{
"path": "app/Resources/views/admin/blog/index.html.twig",
"chars": 2845,
"preview": "{% extends 'admin/layout.html.twig' %}\n\n{% block body_id 'admin_post_index' %}\n\n{% block main %}\n <h1>{{ 'title.post_"
},
{
"path": "app/Resources/views/admin/blog/new.html.twig",
"chars": 840,
"preview": "{% extends 'admin/layout.html.twig' %}\n\n{% block body_id 'admin_post_new' %}\n\n{% block main %}\n <h1>{{ 'title.post_ne"
},
{
"path": "app/Resources/views/admin/blog/show.html.twig",
"chars": 1424,
"preview": "{% extends 'admin/layout.html.twig' %}\n\n{% block body_id 'admin_post_show' %}\n\n{% block main %}\n <h1>{{ post.title }}"
},
{
"path": "app/Resources/views/admin/layout.html.twig",
"chars": 800,
"preview": "{#\n This is the base template of the all backend pages. Since this layout is similar\n to the global layout, we inher"
},
{
"path": "app/Resources/views/base.html.twig",
"chars": 8545,
"preview": "{#\n This is the base template used as the application layout which contains the\n common elements and decorates all t"
},
{
"path": "app/Resources/views/blog/_comment_form.html.twig",
"chars": 1451,
"preview": "{#\n By default, forms enable client-side validation. This means that you can't\n test the server-side validation er"
},
{
"path": "app/Resources/views/blog/_delete_post_confirmation.html.twig",
"chars": 810,
"preview": "{# Bootstrap modal, see http://getbootstrap.com/javascript/#modals #}\n<div class=\"modal fade\" id=\"confirmationModal\" tab"
},
{
"path": "app/Resources/views/blog/comment_form_error.html.twig",
"chars": 262,
"preview": "{% extends 'base.html.twig' %}\n\n{% block body_id 'comment_form_error' %}\n\n{% block main %}\n <h1 class=\"text-danger\">{"
},
{
"path": "app/Resources/views/blog/index.html.twig",
"chars": 866,
"preview": "{% extends 'base.html.twig' %}\n\n{% block body_id 'blog_index' %}\n\n{% block main %}\n {% for post in posts %}\n <"
},
{
"path": "app/Resources/views/blog/post_show.html.twig",
"chars": 4731,
"preview": "{% extends 'base.html.twig' %}\n\n{% block body_id 'blog_post_show' %}\n\n{% block main %}\n <h1>{{ post.title }}</h1>\n\n "
},
{
"path": "app/Resources/views/default/_flash_messages.html.twig",
"chars": 951,
"preview": "{#\n This is a template fragment designed to be included in other templates\n See http://symfony.com/doc/current/book/"
},
{
"path": "app/Resources/views/default/homepage.html.twig",
"chars": 1571,
"preview": "{% extends 'base.html.twig' %}\n\n{% block body_id 'homepage' %}\n\n{#\n the homepage is a special page which displays nei"
},
{
"path": "app/Resources/views/form/fields.html.twig",
"chars": 604,
"preview": "{#\n Each field type is rendered by a template fragment, which is determined\n by the value of your getName() method a"
},
{
"path": "app/Resources/views/security/login.html.twig",
"chars": 4207,
"preview": "{% extends 'base.html.twig' %}\n\n{% block body_id 'login' %}\n\n{% block main %}\n {% if error %}\n <div class=\"ale"
},
{
"path": "app/SymfonyRequirements.php",
"chars": 31511,
"preview": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the ful"
},
{
"path": "app/autoload.php",
"chars": 325,
"preview": "<?php\n\nuse Doctrine\\Common\\Annotations\\AnnotationRegistry;\nuse Composer\\Autoload\\ClassLoader;\n\nerror_reporting(error_rep"
},
{
"path": "app/check.php",
"chars": 3943,
"preview": "<?php\n\nrequire_once dirname(__FILE__).'/SymfonyRequirements.php';\n\n$lineSize = 70;\n$symfonyRequirements = new SymfonyReq"
},
{
"path": "app/config/config.yml",
"chars": 4465,
"preview": "# This is the main configuration file of your application. It stores all the\n# common options for every execution enviro"
},
{
"path": "app/config/config_dev.yml",
"chars": 943,
"preview": "imports:\n - { resource: config.yml }\n - { resource: '@RabbitMQBundle/Resources/config/config_dev.yml' }\n\nframework"
},
{
"path": "app/config/config_prod.yml",
"chars": 535,
"preview": "imports:\n - { resource: config.yml }\n\n#framework:\n# validation:\n# cache: apc\n\n#doctrine:\n# orm:\n# "
},
{
"path": "app/config/config_test.yml",
"chars": 1214,
"preview": "imports:\n - { resource: config_dev.yml }\n - { resource: '@RabbitMQBundle/Resources/config/config_test.yml' }\n\nfram"
},
{
"path": "app/config/parameters.yml.dist",
"chars": 2117,
"preview": "# This file defines the canonical configuration parameters of the application.\n# Symfony uses this file as a template to"
},
{
"path": "app/config/routing.yml",
"chars": 1599,
"preview": "# These first lines load the all routes defined as @Route() annotations in any\n# controller defined inside the src/AppBu"
},
{
"path": "app/config/routing_dev.yml",
"chars": 238,
"preview": "_wdt:\n resource: \"@WebProfilerBundle/Resources/config/routing/wdt.xml\"\n prefix: /_wdt\n\n_profiler:\n resource: "
},
{
"path": "app/config/security.yml",
"chars": 2541,
"preview": "security:\n encoders:\n # Our user class and the algorithm we'll use to encode passwords\n # http://symfon"
},
{
"path": "app/config/services.yml",
"chars": 1690,
"preview": "services:\n # First we define some basic services to make these utilities available in\n # the entire application\n "
},
{
"path": "app/console",
"chars": 880,
"preview": "#!/usr/bin/env php\n<?php\n\nuse Symfony\\Bundle\\FrameworkBundle\\Console\\Application;\nuse Symfony\\Component\\Console\\Input\\Ar"
},
{
"path": "app/logs/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "app/phpunit.xml.dist",
"chars": 1496,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n<!-- http://phpunit.de/manual/current/en/appendixes.configuration.html -->\n<phpu"
},
{
"path": "composer.json",
"chars": 3776,
"preview": "{\n \"name\": \"alfonsomga/symfony.demo.on.roids\",\n \"license\": \"MIT\",\n \"type\": \"project\",\n \"description\": \"The S"
},
{
"path": "src/.htaccess",
"chars": 143,
"preview": "<IfModule mod_authz_core.c>\n Require all denied\n</IfModule>\n<IfModule !mod_authz_core.c>\n Order deny,allow\n Den"
},
{
"path": "src/AppBundle/AppBundle.php",
"chars": 1671,
"preview": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the ful"
},
{
"path": "src/AppBundle/Command/AddUserCommand.php",
"chars": 10547,
"preview": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the ful"
},
{
"path": "src/AppBundle/Command/DeleteUserCommand.php",
"chars": 4822,
"preview": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the ful"
},
{
"path": "src/AppBundle/Command/ListUsersCommand.php",
"chars": 5466,
"preview": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the ful"
},
{
"path": "src/AppBundle/Controller/Admin/BlogController.php",
"chars": 8193,
"preview": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the ful"
},
{
"path": "src/AppBundle/Controller/BlogController.php",
"chars": 4124,
"preview": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the ful"
},
{
"path": "src/AppBundle/Controller/SecurityController.php",
"chars": 1981,
"preview": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the ful"
},
{
"path": "src/AppBundle/DataFixtures/ORM/LoadFixtures.php",
"chars": 6847,
"preview": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the ful"
},
{
"path": "src/AppBundle/Entity/Comment.php",
"chars": 2764,
"preview": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the ful"
},
{
"path": "src/AppBundle/Entity/Post.php",
"chars": 5137,
"preview": "<?php\n\nnamespace AppBundle\\Entity;\n\nuse Doctrine\\ORM\\Mapping as ORM;\nuse Doctrine\\Common\\Collections\\ArrayCollection;\nus"
},
{
"path": "src/AppBundle/Entity/User.php",
"chars": 3780,
"preview": "<?php\n\nnamespace AppBundle\\Entity;\n\nuse Doctrine\\ORM\\Mapping as ORM;\nuse Symfony\\Component\\Security\\Core\\User\\UserInterf"
},
{
"path": "src/AppBundle/EventListener/RedirectToPreferredLocaleListener.php",
"chars": 2857,
"preview": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the ful"
},
{
"path": "src/AppBundle/Form/CommentType.php",
"chars": 1659,
"preview": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the ful"
},
{
"path": "src/AppBundle/Form/PostType.php",
"chars": 2194,
"preview": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the ful"
},
{
"path": "src/AppBundle/Form/Type/DateTimePickerType.php",
"chars": 1667,
"preview": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the ful"
},
{
"path": "src/AppBundle/Repository/PostRepository.php",
"chars": 1099,
"preview": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the ful"
},
{
"path": "src/AppBundle/Repository/UserRepository.php",
"chars": 798,
"preview": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the ful"
},
{
"path": "src/AppBundle/Tests/Controller/Admin/BlogControllerTest.php",
"chars": 2220,
"preview": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the ful"
},
{
"path": "src/AppBundle/Tests/Controller/BlogControllerTest.php",
"chars": 1034,
"preview": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the ful"
},
{
"path": "src/AppBundle/Tests/Controller/DefaultControllerTest.php",
"chars": 2496,
"preview": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the ful"
},
{
"path": "src/AppBundle/Tests/Utils/SluggerTest.php",
"chars": 1199,
"preview": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the ful"
},
{
"path": "src/AppBundle/Twig/AppExtension.php",
"chars": 2733,
"preview": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the ful"
},
{
"path": "src/AppBundle/Utils/Markdown.php",
"chars": 1154,
"preview": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the ful"
},
{
"path": "src/AppBundle/Utils/MomentFormatConverter.php",
"chars": 1345,
"preview": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the ful"
},
{
"path": "src/AppBundle/Utils/Slugger.php",
"chars": 728,
"preview": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the ful"
},
{
"path": "src/CodeExplorerBundle/CodeExplorerBundle.php",
"chars": 427,
"preview": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the ful"
},
{
"path": "src/CodeExplorerBundle/DependencyInjection/CodeExplorerExtension.php",
"chars": 857,
"preview": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the ful"
},
{
"path": "src/CodeExplorerBundle/EventListener/ControllerListener.php",
"chars": 1609,
"preview": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the ful"
},
{
"path": "src/CodeExplorerBundle/Resources/config/services.yml",
"chars": 533,
"preview": "services:\n code_explorer.twig.source_code_extension:\n public: false\n class: CodeExplorerBundle\\T"
},
{
"path": "src/CodeExplorerBundle/Resources/views/source_code.html.twig",
"chars": 1672,
"preview": "<div class=\"section source-code\">\n <p>\n {{ 'help.show_code'|trans|raw }}\n </p>\n\n <button type=\"button\" c"
},
{
"path": "src/CodeExplorerBundle/Twig/SourceCodeExtension.php",
"chars": 4672,
"preview": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the ful"
},
{
"path": "src/ElasticSearchBundle/Controller/ElasticSearchController.php",
"chars": 1653,
"preview": "<?php\n\nnamespace ElasticSearchBundle\\Controller;\n\nuse Symfony\\Bundle\\FrameworkBundle\\Controller\\Controller;\nuse Symfony\\"
},
{
"path": "src/ElasticSearchBundle/ElasticSearchBundle.php",
"chars": 133,
"preview": "<?php\n\nnamespace ElasticSearchBundle;\n\nuse Symfony\\Component\\HttpKernel\\Bundle\\Bundle;\n\nclass ElasticSearchBundle extend"
},
{
"path": "src/ElasticSearchBundle/Resources/config/config.yml",
"chars": 888,
"preview": "fos_elastica:\n clients:\n default: { host: localhost, port: 9200 }\n indexes:\n app:\n index_"
}
]
// ... and 179 more files (download for full content)
About this extraction
This page contains the full source code of the alfonsomga/symfony.demo.on.roids GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 379 files (1.7 MB), approximately 508.3k tokens, and a symbol index with 755 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.