diff --git a/.gitignore b/.gitignore
old mode 100644
new mode 100755
diff --git a/Procfile b/Procfile
old mode 100644
new mode 100755
diff --git a/README.md b/README.md
old mode 100644
new mode 100755
diff --git a/Vagrantfile b/Vagrantfile
old mode 100644
new mode 100755
index 0d19e07..eb4766d
--- a/Vagrantfile
+++ b/Vagrantfile
@@ -19,10 +19,6 @@ Vagrant.configure('2') do |config|
config.vm.network :private_network, ip: '10.10.10.30'
config.vm.network :public_network, :bridge => 'en0: Wi-Fi (AirPort)'
config.vm.synced_folder '.', '/home/vagrant/admin-panel', :type => synced_folder_type, :rsync__args => ["--verbose", "--archive", "--delete", "-z"]
- config.vm.synced_folder '../feedify', '/home/vagrant/feedify', :type => synced_folder_type if Dir.exists? '../feedify'
- config.vm.synced_folder '../api', '/home/vagrant/api', :type => synced_folder_type if Dir.exists? '../api'
- config.vm.synced_folder '../scenario-engine', '/home/vagrant/scenario-engine', :type => synced_folder_type if Dir.exists? '../scenario-engine'
- config.vm.synced_folder '../sdk-js', '/home/vagrant/sdk-js', :type => synced_folder_type if Dir.exists? '../sdk-js'
config.vm.synced_folder '../sdk-php', '/home/vagrant/sdk-php', :type => synced_folder_type if Dir.exists? '../sdk-php'
config.librarian_puppet.puppetfile_dir = 'puppet'
@@ -38,6 +34,14 @@ Vagrant.configure('2') do |config|
'composer --no-interaction install --dev',
].join(' && ')
+ if ENV['LINK']
+ config.vm.provision 'shell', run: 'always', inline: [
+ 'cd /home/vagrant/admin-panel',
+ 'rm -rf vendor/feedlabs/sdk-php',
+ 'ln -s ../../../sdk-php vendor/feedlabs/sdk-php',
+ ].join(' && ')
+ end
+
config.vm.provision 'shell', run: 'always', inline: [
'cd /home/vagrant/admin-panel',
'cp resources/config/local.dev.php resources/config/local.php',
diff --git a/composer.json b/composer.json
old mode 100644
new mode 100755
index ceed75b..9f950cd
--- a/composer.json
+++ b/composer.json
@@ -6,12 +6,12 @@
}
},
"require": {
- "cargomedia/cm": "~1.71.0",
+ "cargomedia/cm": "~1.72.0",
"feedlabs/sdk-php": "dev-master"
},
"require-dev": {
- "phpunit/phpunit": "~4.3.0",
- "tomaszdurka/mocka": "~0.8.0"
+ "phpunit/phpunit": "~4.1.3",
+ "tomaszdurka/mocka": "~0.7.0"
},
"repositories": [
{
@@ -22,7 +22,8 @@
"minimum-stability": "alpha",
"autoload": {
"psr-0": {
- "AP_": "library/AP/library/"
+ "AP_": "library/AP/library/",
+ "APTest_": "tests/helpers/"
}
},
"extra": {
diff --git a/composer.lock b/composer.lock
old mode 100644
new mode 100755
index afee53a..da5e979
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically"
],
- "hash": "e7f399f966d22dccc28ce7100231894a",
+ "hash": "aaa1dd1421a1f8cf7fe55dc32024c67d",
"packages": [
{
"name": "aws/aws-sdk-php",
@@ -16,9 +16,9 @@
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/36434f2cd96ea78844478d897fb568a1866bce5a",
+ "url": "http://satis.cargomedia.ch/dist/dist/aws-aws-sdk-php-36434f2cd96ea78844478d897fb568a1866bce5a-zip-7b8f23.zip",
"reference": "36434f2cd96ea78844478d897fb568a1866bce5a",
- "shasum": ""
+ "shasum": "4d9fe18d7a5e56104718980becbb55823a51e3bf"
},
"require": {
"guzzle/guzzle": ">=3.7.0,<=3.9.9",
@@ -75,17 +75,17 @@
},
{
"name": "cargomedia/cm",
- "version": "1.71.8",
+ "version": "1.72.0",
"source": {
"type": "git",
"url": "https://github.com/cargomedia/CM.git",
- "reference": "0d2355a45283c3c5901bfa0fd59c977ba6d3cb9a"
+ "reference": "665d45cbe89e5fecd0fefdc341fed28f8eb1b6fa"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/cargomedia/CM/zipball/0d2355a45283c3c5901bfa0fd59c977ba6d3cb9a",
- "reference": "0d2355a45283c3c5901bfa0fd59c977ba6d3cb9a",
- "shasum": ""
+ "url": "http://satis.cargomedia.ch/dist/dist/cargomedia-cm-665d45cbe89e5fecd0fefdc341fed28f8eb1b6fa-zip-6e8712.zip",
+ "reference": "665d45cbe89e5fecd0fefdc341fed28f8eb1b6fa",
+ "shasum": "0ae315a6e9ca86898b93595f4577779a6c9b3064"
},
"require": {
"aws/aws-sdk-php": "~2.6.0",
@@ -128,7 +128,7 @@
"license": [
"MIT"
],
- "time": "2014-09-29 15:06:48"
+ "time": "2014-10-06 10:43:02"
},
{
"name": "composer/composer",
@@ -140,9 +140,9 @@
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/composer/zipball/1eb1df44a97fb2daca1bb8b007f3bee012f0aa46",
+ "url": "http://satis.cargomedia.ch/dist/dist/composer-composer-1eb1df44a97fb2daca1bb8b007f3bee012f0aa46-zip-b3273d.zip",
"reference": "1eb1df44a97fb2daca1bb8b007f3bee012f0aa46",
- "shasum": ""
+ "shasum": "ccb2c240b9aa72653440934212dd534446aa67b2"
},
"require": {
"justinrainbow/json-schema": "1.1.*",
@@ -187,8 +187,7 @@
{
"name": "Nils Adermann",
"email": "naderman@naderman.de",
- "homepage": "http://www.naderman.de",
- "role": "Developer"
+ "homepage": "http://www.naderman.de"
}
],
"description": "Dependency Manager",
@@ -210,9 +209,9 @@
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/easybook/geshi/zipball/2582e8134c8af41d7f367e421ee0b8b111e89f36",
+ "url": "http://satis.cargomedia.ch/dist/dist/easybook-geshi-2582e8134c8af41d7f367e421ee0b8b111e89f36-zip-f3a77f.zip",
"reference": "2582e8134c8af41d7f367e421ee0b8b111e89f36",
- "shasum": ""
+ "shasum": "58898963f2e942961d71cb664212e57cec07fb3c"
},
"require": {
"php": ">4.3.0"
@@ -230,9 +229,7 @@
"authors": [
{
"name": "Benny Baumann",
- "email": "BenBE@geshi.org",
- "homepage": "http://blog.benny-baumann.de/",
- "role": "Developer"
+ "email": "BenBE@geshi.org"
},
{
"name": "Nigel McNie",
@@ -315,9 +312,9 @@
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/guzzle/zipball/4de0618a01b34aa1c8c33a3f13f396dcd3882eba",
+ "url": "http://satis.cargomedia.ch/dist/dist/guzzle-guzzle-4de0618a01b34aa1c8c33a3f13f396dcd3882eba-zip-52886a.zip",
"reference": "4de0618a01b34aa1c8c33a3f13f396dcd3882eba",
- "shasum": ""
+ "shasum": "8a1150e986acca9b715c25b3997f905b6cfbaa8e"
},
"require": {
"ext-curl": "*",
@@ -407,9 +404,9 @@
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/guzzle/zipball/e196b8f44f9492a11261ea8f7b9724613a198daf",
+ "url": "http://satis.cargomedia.ch/dist/dist/guzzlehttp-guzzle-e196b8f44f9492a11261ea8f7b9724613a198daf-zip-3a5237.zip",
"reference": "e196b8f44f9492a11261ea8f7b9724613a198daf",
- "shasum": ""
+ "shasum": "15caf8ea3172852218a4f0976b870b1347df74fb"
},
"require": {
"ext-json": "*",
@@ -472,9 +469,9 @@
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/streams/zipball/fb0d1ee29987c2bdc59867bffaade6fc88c2675f",
+ "url": "http://satis.cargomedia.ch/dist/dist/guzzlehttp-streams-fb0d1ee29987c2bdc59867bffaade6fc88c2675f-zip-88ddd8.zip",
"reference": "fb0d1ee29987c2bdc59867bffaade6fc88c2675f",
- "shasum": ""
+ "shasum": "7ece855e280b334874427aa175a51e30f866b305"
},
"require": {
"php": ">=5.4.0"
@@ -525,9 +522,9 @@
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/05ff6d8d79fe3ad190b0663d80d3f9deee79416c",
+ "url": "http://satis.cargomedia.ch/dist/dist/justinrainbow-json-schema-05ff6d8d79fe3ad190b0663d80d3f9deee79416c-zip-ce5f8b.zip",
"reference": "05ff6d8d79fe3ad190b0663d80d3f9deee79416c",
- "shasum": ""
+ "shasum": "3f76e8896d89cde5a0040baff2dac3e5bdf675fc"
},
"require": {
"php": ">=5.3.0"
@@ -558,7 +555,7 @@
},
{
"name": "Robert Schönthal",
- "email": "robert.schoenthal@gmail.com",
+ "email": "seroscho@googlemail.com",
"homepage": "http://digitalkaoz.net"
}
],
@@ -580,9 +577,9 @@
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/kickboxio/kickbox-php/zipball/719ba1df640465462c083b79fb726cc84eaeb606",
+ "url": "http://satis.cargomedia.ch/dist/dist/kickbox-kickbox-719ba1df640465462c083b79fb726cc84eaeb606-zip-94241e.zip",
"reference": "719ba1df640465462c083b79fb726cc84eaeb606",
- "shasum": ""
+ "shasum": "5fdba0348de3c14f47871aeb01ab344cbd1db4f0"
},
"require": {
"ext-json": "*",
@@ -628,9 +625,9 @@
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/kissmetrics/kissmetrics-php/zipball/9e4ad11cf9f26222499a6f255b4ce2ce3038be6d",
+ "url": "http://satis.cargomedia.ch/dist/dist/kissmetrics-kissmetrics-php-9e4ad11cf9f26222499a6f255b4ce2ce3038be6d-zip-b48779.zip",
"reference": "9e4ad11cf9f26222499a6f255b4ce2ce3038be6d",
- "shasum": ""
+ "shasum": "41b1e0102f31d6979cfa1075239663598c04f6af"
},
"require": {
"php": ">=5.3"
@@ -673,9 +670,9 @@
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/leafo/lessphp/zipball/a11a6141b5715162b933c405379765d817891c5d",
+ "url": "http://satis.cargomedia.ch/dist/dist/leafo-lessphp-a11a6141b5715162b933c405379765d817891c5d-zip-5c3bef.zip",
"reference": "a11a6141b5715162b933c405379765d817891c5d",
- "shasum": ""
+ "shasum": "52384b7a566d6a832ede493ae7e10531bc93330f"
},
"type": "library",
"extra": {
@@ -714,9 +711,9 @@
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/lstrojny/functional-php/zipball/a3972246bacb52d9080f89fd56d9ab4df60e874f",
+ "url": "http://satis.cargomedia.ch/dist/dist/lstrojny-functional-php-a3972246bacb52d9080f89fd56d9ab4df60e874f-zip-bf2880.zip",
"reference": "a3972246bacb52d9080f89fd56d9ab4df60e874f",
- "shasum": ""
+ "shasum": "26ece59fadbdcfd1fd6caa91eb516639f70cb228"
},
"require": {
"php": ">=5.3.0"
@@ -758,9 +755,9 @@
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/michelf/php-markdown/zipball/96d8150406f67e683ef4acc09fef91785fef1266",
+ "url": "http://satis.cargomedia.ch/dist/dist/michelf-php-markdown-96d8150406f67e683ef4acc09fef91785fef1266-zip-ca9bc4.zip",
"reference": "96d8150406f67e683ef4acc09fef91785fef1266",
- "shasum": ""
+ "shasum": "61fd5f0deac27f96eb7deea02f8d89a98c475db6"
},
"require": {
"php": ">=5.3.0"
@@ -809,9 +806,9 @@
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nicmart/Tree/zipball/db8b5818e90da03d50662b5ed91ba19dd98e7c50",
+ "url": "http://satis.cargomedia.ch/dist/dist/nicmart-tree-db8b5818e90da03d50662b5ed91ba19dd98e7c50-zip-c00719.zip",
"reference": "db8b5818e90da03d50662b5ed91ba19dd98e7c50",
- "shasum": ""
+ "shasum": "2b84a82655a16386b53ecf76b0a133577deb61c8"
},
"require": {
"php": ">=5.4"
@@ -847,9 +844,9 @@
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/4d9434e394496a5bb7acd9e73046587184b413df",
+ "url": "http://satis.cargomedia.ch/dist/dist/phpmailer-phpmailer-4d9434e394496a5bb7acd9e73046587184b413df-zip-244a31.zip",
"reference": "4d9434e394496a5bb7acd9e73046587184b413df",
- "shasum": ""
+ "shasum": "3c2279e86f4243d35e3aec8cf3e4f2d5910ee9c4"
},
"require": {
"php": ">=5.0.0"
@@ -900,9 +897,9 @@
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/ruflin/Elastica/zipball/92155a36c94ebe15b09661ae804acbe4bdd4ad6b",
+ "url": "http://satis.cargomedia.ch/dist/dist/ruflin-elastica-92155a36c94ebe15b09661ae804acbe4bdd4ad6b-zip-762852.zip",
"reference": "92155a36c94ebe15b09661ae804acbe4bdd4ad6b",
- "shasum": ""
+ "shasum": "aaa0de1a98ef45dc0a8f14d44504676ae3508658"
},
"require": {
"php": ">=5.3.3"
@@ -931,7 +928,6 @@
"Elastica\\Test": "test/lib/"
}
},
- "notification-url": "https://packagist.org/downloads/",
"license": [
"Apache 2.0"
],
@@ -959,9 +955,9 @@
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/a7bc2ec9520ad15382292591b617c43bdb1fec35",
+ "url": "http://satis.cargomedia.ch/dist/dist/seld-jsonlint-a7bc2ec9520ad15382292591b617c43bdb1fec35-zip-7b1070.zip",
"reference": "a7bc2ec9520ad15382292591b617c43bdb1fec35",
- "shasum": ""
+ "shasum": "375f1d3ef51f63a75b3e302ae7a0a1656e10f538"
},
"require": {
"php": ">=5.3.0"
@@ -1003,6 +999,12 @@
"url": "http://smarty-php.googlecode.com/svn",
"reference": "/tags/v3.1.16/@4802"
},
+ "dist": {
+ "type": "zip",
+ "url": "http://satis.cargomedia.ch/dist/dist/smarty-smarty-v3.1.16-2e0f6e.zip",
+ "reference": "/tags/v3.1.16/@4802",
+ "shasum": "b59a38c92ddee5e064db000df6166b4f6b7a820f"
+ },
"require": {
"php": ">=5.2"
},
@@ -1050,9 +1052,9 @@
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/Console/zipball/ca053eaa031c93afb68a71e4eb1f4168dfd4a661",
+ "url": "http://satis.cargomedia.ch/dist/dist/symfony-console-ca053eaa031c93afb68a71e4eb1f4168dfd4a661-zip-12c193.zip",
"reference": "ca053eaa031c93afb68a71e4eb1f4168dfd4a661",
- "shasum": ""
+ "shasum": "085a0573fc1485c189edb9eb29a9054ec048b363"
},
"require": {
"php": ">=5.3.3"
@@ -1105,9 +1107,9 @@
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/EventDispatcher/zipball/f6281337bf5f985f585d1db6a83adb05ce531f46",
+ "url": "http://satis.cargomedia.ch/dist/dist/symfony-event-dispatcher-f6281337bf5f985f585d1db6a83adb05ce531f46-zip-468d26.zip",
"reference": "f6281337bf5f985f585d1db6a83adb05ce531f46",
- "shasum": ""
+ "shasum": "d9dea195f767f68f63a8a72bbc98c0f116d44069"
},
"require": {
"php": ">=5.3.3"
@@ -1162,9 +1164,9 @@
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/Finder/zipball/d5033742b9a6206ef6d06e813870bca18e9205df",
+ "url": "http://satis.cargomedia.ch/dist/dist/symfony-finder-d5033742b9a6206ef6d06e813870bca18e9205df-zip-20b6c6.zip",
"reference": "d5033742b9a6206ef6d06e813870bca18e9205df",
- "shasum": ""
+ "shasum": "71b23950c71464c29146fad99eeb3a7abc137625"
},
"require": {
"php": ">=5.3.3"
@@ -1209,9 +1211,9 @@
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/Process/zipball/8a1ec96c4e519cee0fb971ea48a1eb7369dda54b",
+ "url": "http://satis.cargomedia.ch/dist/dist/symfony-process-8a1ec96c4e519cee0fb971ea48a1eb7369dda54b-zip-fc05f3.zip",
"reference": "8a1ec96c4e519cee0fb971ea48a1eb7369dda54b",
- "shasum": ""
+ "shasum": "3c89d1565feca080012b2f441716dc8a9fb2d9f5"
},
"require": {
"php": ">=5.3.3"
@@ -1247,60 +1249,6 @@
}
],
"packages-dev": [
- {
- "name": "doctrine/instantiator",
- "version": "1.0.2",
- "source": {
- "type": "git",
- "url": "https://github.com/doctrine/instantiator.git",
- "reference": "26404e0c90565b614ee76b988b9bc8790d77f590"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/doctrine/instantiator/zipball/26404e0c90565b614ee76b988b9bc8790d77f590",
- "reference": "26404e0c90565b614ee76b988b9bc8790d77f590",
- "shasum": ""
- },
- "require": {
- "php": "~5.3"
- },
- "require-dev": {
- "athletic/athletic": "~0.1.8",
- "ext-pdo": "*",
- "ext-phar": "*",
- "phpunit/phpunit": "~4.0",
- "squizlabs/php_codesniffer": "2.0.*@ALPHA"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0.x-dev"
- }
- },
- "autoload": {
- "psr-0": {
- "Doctrine\\Instantiator\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Marco Pivetta",
- "email": "ocramius@gmail.com",
- "homepage": "http://ocramius.github.com/"
- }
- ],
- "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
- "homepage": "https://github.com/doctrine/instantiator",
- "keywords": [
- "constructor",
- "instantiate"
- ],
- "time": "2014-08-25 15:09:25"
- },
{
"name": "phpunit/php-code-coverage",
"version": "2.0.11",
@@ -1311,9 +1259,9 @@
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/53603b3c995f5aab6b59c8e08c3a663d2cc810b7",
+ "url": "http://satis.cargomedia.ch/dist/dist/phpunit-php-code-coverage-53603b3c995f5aab6b59c8e08c3a663d2cc810b7-zip-fe3875.zip",
"reference": "53603b3c995f5aab6b59c8e08c3a663d2cc810b7",
- "shasum": ""
+ "shasum": "8a64619f481908876c7c9c817ed01459be8a6436"
},
"require": {
"php": ">=5.3.3",
@@ -1376,9 +1324,9 @@
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/acd690379117b042d1c8af1fafd61bde001bf6bb",
+ "url": "http://satis.cargomedia.ch/dist/dist/phpunit-php-file-iterator-acd690379117b042d1c8af1fafd61bde001bf6bb-zip-831201.zip",
"reference": "acd690379117b042d1c8af1fafd61bde001bf6bb",
- "shasum": ""
+ "shasum": "51620effbec0558e41277a94a78da1599016e3e0"
},
"require": {
"php": ">=5.3.3"
@@ -1421,9 +1369,9 @@
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/206dfefc0ffe9cebf65c413e3d0e809c82fbf00a",
+ "url": "http://satis.cargomedia.ch/dist/dist/phpunit-php-text-template-206dfefc0ffe9cebf65c413e3d0e809c82fbf00a-zip-dce9d3.zip",
"reference": "206dfefc0ffe9cebf65c413e3d0e809c82fbf00a",
- "shasum": ""
+ "shasum": "06b281eae707c5b60ec53e028086e9a6d3bd81db"
},
"require": {
"php": ">=5.3.3"
@@ -1465,9 +1413,9 @@
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/19689d4354b295ee3d8c54b4f42c3efb69cbc17c",
+ "url": "http://satis.cargomedia.ch/dist/dist/phpunit-php-timer-19689d4354b295ee3d8c54b4f42c3efb69cbc17c-zip-04e2aa.zip",
"reference": "19689d4354b295ee3d8c54b4f42c3efb69cbc17c",
- "shasum": ""
+ "shasum": "5c8a1f0e9ab7cdee0511357040d1694fef51b55f"
},
"require": {
"php": ">=5.3.3"
@@ -1509,9 +1457,9 @@
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/f8d5d08c56de5cfd592b3340424a81733259a876",
+ "url": "http://satis.cargomedia.ch/dist/dist/phpunit-php-token-stream-f8d5d08c56de5cfd592b3340424a81733259a876-zip-dd5952.zip",
"reference": "f8d5d08c56de5cfd592b3340424a81733259a876",
- "shasum": ""
+ "shasum": "606a19e84d23290dc8add1d1a8c0b325a4cc2698"
},
"require": {
"ext-tokenizer": "*",
@@ -1550,17 +1498,17 @@
},
{
"name": "phpunit/phpunit",
- "version": "4.3.0",
+ "version": "4.1.6",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "6913ac6c2f71ce18ff09b605df2fa37a6d789fd9"
+ "reference": "241116219bb7e3b8111a36ffd8f37546888738d6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/6913ac6c2f71ce18ff09b605df2fa37a6d789fd9",
- "reference": "6913ac6c2f71ce18ff09b605df2fa37a6d789fd9",
- "shasum": ""
+ "url": "http://satis.cargomedia.ch/dist/dist/phpunit-phpunit-241116219bb7e3b8111a36ffd8f37546888738d6-zip-8be8f5.zip",
+ "reference": "241116219bb7e3b8111a36ffd8f37546888738d6",
+ "shasum": "2878421ed3a8b4e026ec7e3181ffcfbfd338c8f9"
},
"require": {
"ext-dom": "*",
@@ -1573,7 +1521,7 @@
"phpunit/php-file-iterator": "~1.3.1",
"phpunit/php-text-template": "~1.2",
"phpunit/php-timer": "~1.0.2",
- "phpunit/phpunit-mock-objects": "~2.3",
+ "phpunit/phpunit-mock-objects": "2.1.5",
"sebastian/comparator": "~1.0",
"sebastian/diff": "~1.1",
"sebastian/environment": "~1.0",
@@ -1590,7 +1538,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "4.3.x-dev"
+ "dev-master": "4.1.x-dev"
}
},
"autoload": {
@@ -1620,29 +1568,28 @@
"testing",
"xunit"
],
- "time": "2014-10-03 05:17:00"
+ "time": "2014-08-17 08:07:02"
},
{
"name": "phpunit/phpunit-mock-objects",
- "version": "2.3.0",
+ "version": "2.1.5",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
- "reference": "c63d2367247365f688544f0d500af90a11a44c65"
+ "reference": "7878b9c41edb3afab92b85edf5f0981014a2713a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/c63d2367247365f688544f0d500af90a11a44c65",
- "reference": "c63d2367247365f688544f0d500af90a11a44c65",
- "shasum": ""
+ "url": "http://satis.cargomedia.ch/dist/dist/phpunit-phpunit-mock-objects-7878b9c41edb3afab92b85edf5f0981014a2713a-zip-d50911.zip",
+ "reference": "7878b9c41edb3afab92b85edf5f0981014a2713a",
+ "shasum": "07597511ea9723877edd74b7a6602d8fcc69bd16"
},
"require": {
- "doctrine/instantiator": "~1.0,>=1.0.1",
"php": ">=5.3.3",
"phpunit/php-text-template": "~1.2"
},
"require-dev": {
- "phpunit/phpunit": "~4.3"
+ "phpunit/phpunit": "~4.1"
},
"suggest": {
"ext-soap": "*"
@@ -1650,7 +1597,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.3.x-dev"
+ "dev-master": "2.1.x-dev"
}
},
"autoload": {
@@ -1659,6 +1606,9 @@
]
},
"notification-url": "https://packagist.org/downloads/",
+ "include-path": [
+ ""
+ ],
"license": [
"BSD-3-Clause"
],
@@ -1675,21 +1625,21 @@
"mock",
"xunit"
],
- "time": "2014-10-03 05:12:11"
+ "time": "2014-06-12 07:22:15"
},
{
"name": "sebastian/comparator",
- "version": "1.0.0",
+ "version": "1.0.1",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/comparator.git",
- "reference": "f7069ee51fa9fb6c038e16a9d0e3439f5449dcf2"
+ "reference": "e54a01c0da1b87db3c5a3c4c5277ddf331da4aef"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/f7069ee51fa9fb6c038e16a9d0e3439f5449dcf2",
- "reference": "f7069ee51fa9fb6c038e16a9d0e3439f5449dcf2",
- "shasum": ""
+ "url": "http://satis.cargomedia.ch/dist/dist/sebastian-comparator-e54a01c0da1b87db3c5a3c4c5277ddf331da4aef-zip-c2bfb9.zip",
+ "reference": "e54a01c0da1b87db3c5a3c4c5277ddf331da4aef",
+ "shasum": "83ad766255ea7d17b40a2ae6fee46ce9680e1029"
},
"require": {
"php": ">=5.3.3",
@@ -1715,11 +1665,6 @@
"BSD-3-Clause"
],
"authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- },
{
"name": "Jeff Welch",
"email": "whatthejeff@gmail.com"
@@ -1731,6 +1676,10 @@
{
"name": "Bernhard Schussek",
"email": "bschussek@2bepublished.at"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
}
],
"description": "Provides the functionality to compare PHP values for equality",
@@ -1740,7 +1689,7 @@
"compare",
"equality"
],
- "time": "2014-05-02 07:05:58"
+ "time": "2014-05-11 23:00:21"
},
{
"name": "sebastian/diff",
@@ -1752,9 +1701,9 @@
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/5843509fed39dee4b356a306401e9dd1a931fec7",
+ "url": "http://satis.cargomedia.ch/dist/dist/sebastian-diff-5843509fed39dee4b356a306401e9dd1a931fec7-zip-8a1f8b.zip",
"reference": "5843509fed39dee4b356a306401e9dd1a931fec7",
- "shasum": ""
+ "shasum": "0645da2bd60ed77c8478548b10e3877340f84805"
},
"require": {
"php": ">=5.3.3"
@@ -1796,28 +1745,28 @@
},
{
"name": "sebastian/environment",
- "version": "1.0.0",
+ "version": "1.1.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/environment.git",
- "reference": "79517609ec01139cd7e9fded0dd7ce08c952ef6a"
+ "reference": "6288ebbf6fa3ed2b2ff2d69c356fbaaf4f0971a7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/79517609ec01139cd7e9fded0dd7ce08c952ef6a",
- "reference": "79517609ec01139cd7e9fded0dd7ce08c952ef6a",
+ "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/6288ebbf6fa3ed2b2ff2d69c356fbaaf4f0971a7",
+ "reference": "6288ebbf6fa3ed2b2ff2d69c356fbaaf4f0971a7",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"require-dev": {
- "phpunit/phpunit": "4.0.*@dev"
+ "phpunit/phpunit": "~4.3"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.0.x-dev"
+ "dev-master": "1.1.x-dev"
}
},
"autoload": {
@@ -1832,8 +1781,7 @@
"authors": [
{
"name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
+ "email": "sebastian@phpunit.de"
}
],
"description": "Provides functionality to handle HHVM/PHP environments",
@@ -1843,27 +1791,27 @@
"environment",
"hhvm"
],
- "time": "2014-02-18 16:17:19"
+ "time": "2014-10-07 09:23:16"
},
{
"name": "sebastian/exporter",
- "version": "1.0.1",
+ "version": "1.0.2",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/exporter.git",
- "reference": "1f9a98e6f5dfe0524cb8c6166f7c82f3e9ae1529"
+ "reference": "c7d59948d6e82818e1bdff7cadb6c34710eb7dc0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/1f9a98e6f5dfe0524cb8c6166f7c82f3e9ae1529",
- "reference": "1f9a98e6f5dfe0524cb8c6166f7c82f3e9ae1529",
- "shasum": ""
+ "url": "http://satis.cargomedia.ch/dist/dist/sebastian-exporter-c7d59948d6e82818e1bdff7cadb6c34710eb7dc0-zip-a859f0.zip",
+ "reference": "c7d59948d6e82818e1bdff7cadb6c34710eb7dc0",
+ "shasum": "f3e47ba2b24a850908e234c152a67e28f222c44d"
},
"require": {
"php": ">=5.3.3"
},
"require-dev": {
- "phpunit/phpunit": "4.0.*@dev"
+ "phpunit/phpunit": "~4.0"
},
"type": "library",
"extra": {
@@ -1881,11 +1829,6 @@
"BSD-3-Clause"
],
"authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- },
{
"name": "Jeff Welch",
"email": "whatthejeff@gmail.com"
@@ -1894,14 +1837,17 @@
"name": "Volker Dusch",
"email": "github@wallbash.com"
},
- {
- "name": "Adam Harvey",
- "email": "aharvey@php.net",
- "role": "Lead"
- },
{
"name": "Bernhard Schussek",
"email": "bschussek@2bepublished.at"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Adam Harvey",
+ "email": "aharvey@php.net"
}
],
"description": "Provides the functionality to export PHP variables for visualization",
@@ -1910,7 +1856,7 @@
"export",
"exporter"
],
- "time": "2014-02-16 08:26:31"
+ "time": "2014-09-10 00:51:36"
},
{
"name": "sebastian/version",
@@ -1922,9 +1868,9 @@
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/b6e1f0cf6b9e1ec409a0d3e2f2a5fb0998e36b43",
+ "url": "http://satis.cargomedia.ch/dist/dist/sebastian-version-b6e1f0cf6b9e1ec409a0d3e2f2a5fb0998e36b43-zip-ee05a0.zip",
"reference": "b6e1f0cf6b9e1ec409a0d3e2f2a5fb0998e36b43",
- "shasum": ""
+ "shasum": "252d5509a896bd7a72985dbb22533b0c799609b1"
},
"type": "library",
"autoload": {
@@ -1958,9 +1904,9 @@
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/Yaml/zipball/b1dbc53593b98c2d694ebf383660ac9134d30b96",
+ "url": "http://satis.cargomedia.ch/dist/dist/symfony-yaml-b1dbc53593b98c2d694ebf383660ac9134d30b96-zip-5b20d2.zip",
"reference": "b1dbc53593b98c2d694ebf383660ac9134d30b96",
- "shasum": ""
+ "shasum": "9f11692f428ea788070d7e792e6a185a12a93819"
},
"require": {
"php": ">=5.3.3"
@@ -2004,9 +1950,9 @@
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/tomaszdurka/codegenerator/zipball/7a90518e83d3b9a91d50c73b00ffb375e550624c",
+ "url": "http://satis.cargomedia.ch/dist/dist/tomaszdurka-codegenerator-7a90518e83d3b9a91d50c73b00ffb375e550624c-zip-848e56.zip",
"reference": "7a90518e83d3b9a91d50c73b00ffb375e550624c",
- "shasum": ""
+ "shasum": "f1ee2ccf0742298071b816eeb5b06f78390f7338"
},
"require-dev": {
"phpunit/phpunit": "~3.7.10",
@@ -2029,17 +1975,17 @@
},
{
"name": "tomaszdurka/mocka",
- "version": "0.8.1",
+ "version": "0.7.0",
"source": {
"type": "git",
"url": "https://github.com/tomaszdurka/mocka.git",
- "reference": "4b51bc6e69b896f952224a6eeb09465a2e9387ed"
+ "reference": "2b4cc3246b87523d122416325ae27809ad5eafbb"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/tomaszdurka/mocka/zipball/4b51bc6e69b896f952224a6eeb09465a2e9387ed",
- "reference": "4b51bc6e69b896f952224a6eeb09465a2e9387ed",
- "shasum": ""
+ "url": "http://satis.cargomedia.ch/dist/dist/tomaszdurka-mocka-2b4cc3246b87523d122416325ae27809ad5eafbb-zip-2c42d7.zip",
+ "reference": "2b4cc3246b87523d122416325ae27809ad5eafbb",
+ "shasum": "2075e9c5bfd30a72391f91f33f3506e5446372e9"
},
"require": {
"tomaszdurka/codegenerator": "~0.4.1"
@@ -2058,7 +2004,7 @@
"license": [
"MIT"
],
- "time": "2014-08-25 13:55:06"
+ "time": "2014-07-18 14:24:06"
}
],
"aliases": [],
diff --git a/library/AP/client-vendor/after-body/01-media-match/media.match.js b/library/AP/client-vendor/after-body/01-media-match/media.match.js
new file mode 100755
index 0000000..ffd0b06
--- /dev/null
+++ b/library/AP/client-vendor/after-body/01-media-match/media.match.js
@@ -0,0 +1,325 @@
+/* MediaMatch v.2.0.1 - Testing css media queries in Javascript. Authors & copyright (c) 2013: WebLinc, David Knight. */
+
+window.matchMedia || (window.matchMedia = function (win) {
+ 'use strict';
+
+ // Internal globals
+ var _doc = win.document,
+ _viewport = _doc.documentElement,
+ _queries = [],
+ _queryID = 0,
+ _type = '',
+ _features = {},
+ // only screen
+ // only screen and
+ // not screen
+ // not screen and
+ // screen
+ // screen and
+ _typeExpr = /\s*(only|not)?\s*(screen|print|[a-z\-]+)\s*(and)?\s*/i,
+ // (-vendor-min-width: 300px)
+ // (min-width: 300px)
+ // (width: 300px)
+ // (width)
+ // (orientation: portrait|landscape)
+ _mediaExpr = /^\s*\(\s*(-[a-z]+-)?(min-|max-)?([a-z\-]+)\s*(:?\s*([0-9]+(\.[0-9]+)?|portrait|landscape)(px|em|dppx|dpcm|rem|%|in|cm|mm|ex|pt|pc|\/([0-9]+(\.[0-9]+)?))?)?\s*\)\s*$/,
+ _timer = 0,
+
+ // Helper methods
+
+ /*
+ _matches
+ */
+ _matches = function (media) {
+ // screen and (min-width: 400px), screen and (max-width: 500px)
+ var mql = (media.indexOf(',') !== -1 && media.split(',')) || [media],
+ mqIndex = mql.length - 1,
+ mqLength = mqIndex,
+ mq = null,
+
+ // not screen, screen
+ negateType = null,
+ negateTypeFound = '',
+ negateTypeIndex = 0,
+ negate = false,
+ type = '',
+
+ // (min-width: 400px), (min-width)
+ exprListStr = '',
+ exprList = null,
+ exprIndex = 0,
+ exprLength = 0,
+ expr = null,
+
+ prefix = '',
+ length = '',
+ unit = '',
+ value = '',
+ feature = '',
+
+ match = false;
+
+ if (media === '') {
+ return true;
+ }
+
+ do {
+ mq = mql[mqLength - mqIndex];
+ negate = false;
+ negateType = mq.match(_typeExpr);
+
+ if (negateType) {
+ negateTypeFound = negateType[0];
+ negateTypeIndex = negateType.index;
+ }
+
+ if (!negateType || ((mq.substring(0, negateTypeIndex).indexOf('(') === -1) && (negateTypeIndex || (!negateType[3] && negateTypeFound !== negateType.input)))) {
+ match = false;
+ continue;
+ }
+
+ exprListStr = mq;
+
+ negate = negateType[1] === 'not';
+
+ if (!negateTypeIndex) {
+ type = negateType[2];
+ exprListStr = mq.substring(negateTypeFound.length);
+ }
+
+ // Test media type
+ // Test type against this device or if 'all' or empty ''
+ match = type === _type || type === 'all' || type === '';
+
+ exprList = (exprListStr.indexOf(' and ') !== -1 && exprListStr.split(' and ')) || [exprListStr];
+ exprIndex = exprList.length - 1;
+ exprLength = exprIndex;
+
+ if (match && exprIndex >= 0 && exprListStr !== '') {
+ do {
+ expr = exprList[exprIndex].match(_mediaExpr);
+
+ if (!expr || !_features[expr[3]]) {
+ match = false;
+ break;
+ }
+
+ prefix = expr[2];
+ length = expr[5];
+ value = length;
+ unit = expr[7];
+ feature = _features[expr[3]];
+
+ // Convert unit types
+ if (unit) {
+ if (unit === 'px') {
+ // If unit is px
+ value = Number(length);
+ } else if (unit === 'em' || unit === 'rem') {
+ // Convert relative length unit to pixels
+ // Assumed base font size is 16px
+ value = 16 * length;
+ } else if (expr[8]) {
+ // Convert aspect ratio to decimal
+ value = (length / expr[8]).toFixed(2);
+ } else if (unit === 'dppx') {
+ // Convert resolution dppx unit to pixels
+ value = length * 96;
+ } else if (unit === 'dpcm') {
+ // Convert resolution dpcm unit to pixels
+ value = length * 0.3937;
+ } else {
+ // default
+ value = Number(length);
+ }
+ }
+
+ // Test for prefix min or max
+ // Test value against feature
+ if (prefix === 'min-' && value) {
+ match = feature >= value;
+ } else if (prefix === 'max-' && value) {
+ match = feature <= value;
+ } else if (value) {
+ match = feature === value;
+ } else {
+ match = !!feature;
+ }
+
+ // If 'match' is false, break loop
+ // Continue main loop through query list
+ if (!match) {
+ break;
+ }
+ } while (exprIndex--);
+ }
+
+ // If match is true, break loop
+ // Once matched, no need to check other queries
+ if (match) {
+ break;
+ }
+ } while (mqIndex--);
+
+ return negate ? !match : match;
+ },
+
+ /*
+ _setFeature
+ */
+ _setFeature = function () {
+ // Sets properties of '_features' that change on resize and/or orientation.
+ var w = win.innerWidth || _viewport.clientWidth,
+ h = win.innerHeight || _viewport.clientHeight,
+ dw = win.screen.width,
+ dh = win.screen.height,
+ c = win.screen.colorDepth,
+ x = win.devicePixelRatio;
+
+ _features.width = w;
+ _features.height = h;
+ _features['aspect-ratio'] = (w / h).toFixed(2);
+ _features['device-width'] = dw;
+ _features['device-height'] = dh;
+ _features['device-aspect-ratio'] = (dw / dh).toFixed(2);
+ _features.color = c;
+ _features['color-index'] = Math.pow(2, c);
+ _features.orientation = (h >= w ? 'portrait' : 'landscape');
+ _features.resolution = (x && x * 96) || win.screen.deviceXDPI || 96;
+ _features['device-pixel-ratio'] = x || 1;
+ },
+
+ /*
+ _watch
+ */
+ _watch = function () {
+ clearTimeout(_timer);
+
+ _timer = setTimeout(function () {
+ var query = null,
+ qIndex = _queryID - 1,
+ qLength = qIndex,
+ match = false;
+
+ if (qIndex >= 0) {
+ _setFeature();
+
+ do {
+ query = _queries[qLength - qIndex];
+
+ if (query) {
+ match = _matches(query.mql.media);
+
+ if ((match && !query.mql.matches) || (!match && query.mql.matches)) {
+ query.mql.matches = match;
+
+ if (query.listeners) {
+ for (var i = 0, il = query.listeners.length; i < il; i++) {
+ if (query.listeners[i]) {
+ query.listeners[i].call(win, query.mql);
+ }
+ }
+ }
+ }
+ }
+ } while(qIndex--);
+ }
+
+
+ }, 10);
+ },
+
+ /*
+ _init
+ */
+ _init = function () {
+ var head = _doc.getElementsByTagName('head')[0],
+ style = _doc.createElement('style'),
+ info = null,
+ typeList = ['screen', 'print', 'speech', 'projection', 'handheld', 'tv', 'braille', 'embossed', 'tty'],
+ typeIndex = 0,
+ typeLength = typeList.length,
+ cssText = '#mediamatchjs { position: relative; z-index: 0; }',
+ eventPrefix = '',
+ addEvent = win.addEventListener || (eventPrefix = 'on') && win.attachEvent;
+
+ style.type = 'text/css';
+ style.id = 'mediamatchjs';
+
+ head.appendChild(style);
+
+ // Must be placed after style is inserted into the DOM for IE
+ info = (win.getComputedStyle && win.getComputedStyle(style)) || style.currentStyle;
+
+ // Create media blocks to test for media type
+ for ( ; typeIndex < typeLength; typeIndex++) {
+ cssText += '@media ' + typeList[typeIndex] + ' { #mediamatchjs { z-index: ' + typeIndex + ' } }';
+ }
+
+ // Add rules to style element
+ if (style.styleSheet) {
+ style.styleSheet.cssText = cssText;
+ } else {
+ style.textContent = cssText;
+ }
+
+ // Get media type
+ _type = typeList[(info.zIndex * 1) || 0];
+
+ head.removeChild(style);
+
+ _setFeature();
+
+ // Set up listeners
+ addEvent(eventPrefix + 'resize', _watch);
+ addEvent(eventPrefix + 'orientationchange', _watch);
+ };
+
+ _init();
+
+ /*
+ A list of parsed media queries, ex. screen and (max-width: 400px), screen and (max-width: 800px)
+ */
+ return function (media) {
+ var id = _queryID,
+ mql = {
+ matches : false,
+ media : media,
+ addListener : function addListener(listener) {
+ _queries[id].listeners || (_queries[id].listeners = []);
+ listener && _queries[id].listeners.push(listener);
+ },
+ removeListener : function removeListener(listener) {
+ var query = _queries[id],
+ i = 0,
+ il = 0;
+
+ if (!query) {
+ return;
+ }
+
+ il = query.listeners.length;
+
+ for ( ; i < il; i++) {
+ if (query.listeners[i] === listener) {
+ query.listeners.splice(i, 1);
+ }
+ }
+ }
+ };
+
+ if (media === '') {
+ mql.matches = true;
+ return mql;
+ }
+
+ mql.matches = _matches(media);
+
+ _queryID = _queries.push({
+ mql : mql,
+ listeners : null
+ });
+
+ return mql;
+ };
+}(window));
\ No newline at end of file
diff --git a/library/AP/client-vendor/after-body/02-enquire/enquire.js b/library/AP/client-vendor/after-body/02-enquire/enquire.js
new file mode 100755
index 0000000..30a0937
--- /dev/null
+++ b/library/AP/client-vendor/after-body/02-enquire/enquire.js
@@ -0,0 +1,293 @@
+/*!
+ * enquire.js v2.1.0 - Awesome Media Queries in JavaScript
+ * Copyright (c) 2013 Nick Williams - http://wicky.nillia.ms/enquire.js
+ * License: MIT (http://www.opensource.org/licenses/mit-license.php)
+ */
+
+;(function (name, context, factory) {
+ var matchMedia = context.matchMedia;
+
+ if (typeof module !== 'undefined' && module.exports) {
+ module.exports = factory(matchMedia);
+ }
+ else if (typeof define === 'function' && define.amd) {
+ define(function() {
+ return (context[name] = factory(matchMedia));
+ });
+ }
+ else {
+ context[name] = factory(matchMedia);
+ }
+}('enquire', this, function (matchMedia) {
+
+ 'use strict';
+
+ /*jshint unused:false */
+ /**
+ * Helper function for iterating over a collection
+ *
+ * @param collection
+ * @param fn
+ */
+ function each(collection, fn) {
+ var i = 0,
+ length = collection.length,
+ cont;
+
+ for(i; i < length; i++) {
+ cont = fn(collection[i], i);
+ if(cont === false) {
+ break; //allow early exit
+ }
+ }
+ }
+
+ /**
+ * Helper function for determining whether target object is an array
+ *
+ * @param target the object under test
+ * @return {Boolean} true if array, false otherwise
+ */
+ function isArray(target) {
+ return Object.prototype.toString.apply(target) === '[object Array]';
+ }
+
+ /**
+ * Helper function for determining whether target object is a function
+ *
+ * @param target the object under test
+ * @return {Boolean} true if function, false otherwise
+ */
+ function isFunction(target) {
+ return typeof target === 'function';
+ }
+
+ /**
+ * Delegate to handle a media query being matched and unmatched.
+ *
+ * @param {object} options
+ * @param {function} options.match callback for when the media query is matched
+ * @param {function} [options.unmatch] callback for when the media query is unmatched
+ * @param {function} [options.setup] one-time callback triggered the first time a query is matched
+ * @param {boolean} [options.deferSetup=false] should the setup callback be run immediately, rather than first time query is matched?
+ * @constructor
+ */
+ function QueryHandler(options) {
+ this.options = options;
+ !options.deferSetup && this.setup();
+ }
+ QueryHandler.prototype = {
+
+ /**
+ * coordinates setup of the handler
+ *
+ * @function
+ */
+ setup : function() {
+ if(this.options.setup) {
+ this.options.setup();
+ }
+ this.initialised = true;
+ },
+
+ /**
+ * coordinates setup and triggering of the handler
+ *
+ * @function
+ */
+ on : function() {
+ !this.initialised && this.setup();
+ this.options.match && this.options.match();
+ },
+
+ /**
+ * coordinates the unmatch event for the handler
+ *
+ * @function
+ */
+ off : function() {
+ this.options.unmatch && this.options.unmatch();
+ },
+
+ /**
+ * called when a handler is to be destroyed.
+ * delegates to the destroy or unmatch callbacks, depending on availability.
+ *
+ * @function
+ */
+ destroy : function() {
+ this.options.destroy ? this.options.destroy() : this.off();
+ },
+
+ /**
+ * determines equality by reference.
+ * if object is supplied compare options, if function, compare match callback
+ *
+ * @function
+ * @param {object || function} [target] the target for comparison
+ */
+ equals : function(target) {
+ return this.options === target || this.options.match === target;
+ }
+
+ };
+ /**
+ * Represents a single media query, manages it's state and registered handlers for this query
+ *
+ * @constructor
+ * @param {string} query the media query string
+ * @param {boolean} [isUnconditional=false] whether the media query should run regardless of whether the conditions are met. Primarily for helping older browsers deal with mobile-first design
+ */
+ function MediaQuery(query, isUnconditional) {
+ this.query = query;
+ this.isUnconditional = isUnconditional;
+ this.handlers = [];
+ this.mql = matchMedia(query);
+
+ var self = this;
+ this.listener = function(mql) {
+ self.mql = mql;
+ self.assess();
+ };
+ this.mql.addListener(this.listener);
+ }
+ MediaQuery.prototype = {
+
+ /**
+ * add a handler for this query, triggering if already active
+ *
+ * @param {object} handler
+ * @param {function} handler.match callback for when query is activated
+ * @param {function} [handler.unmatch] callback for when query is deactivated
+ * @param {function} [handler.setup] callback for immediate execution when a query handler is registered
+ * @param {boolean} [handler.deferSetup=false] should the setup callback be deferred until the first time the handler is matched?
+ */
+ addHandler : function(handler) {
+ var qh = new QueryHandler(handler);
+ this.handlers.push(qh);
+
+ this.matches() && qh.on();
+ },
+
+ /**
+ * removes the given handler from the collection, and calls it's destroy methods
+ *
+ * @param {object || function} handler the handler to remove
+ */
+ removeHandler : function(handler) {
+ var handlers = this.handlers;
+ each(handlers, function(h, i) {
+ if(h.equals(handler)) {
+ h.destroy();
+ return !handlers.splice(i,1); //remove from array and exit each early
+ }
+ });
+ },
+
+ /**
+ * Determine whether the media query should be considered a match
+ *
+ * @return {Boolean} true if media query can be considered a match, false otherwise
+ */
+ matches : function() {
+ return this.mql.matches || this.isUnconditional;
+ },
+
+ /**
+ * Clears all handlers and unbinds events
+ */
+ clear : function() {
+ each(this.handlers, function(handler) {
+ handler.destroy();
+ });
+ this.mql.removeListener(this.listener);
+ this.handlers.length = 0; //clear array
+ },
+
+ /*
+ * Assesses the query, turning on all handlers if it matches, turning them off if it doesn't match
+ */
+ assess : function() {
+ var action = this.matches() ? 'on' : 'off';
+
+ each(this.handlers, function(handler) {
+ handler[action]();
+ });
+ }
+ };
+ /**
+ * Allows for registration of query handlers.
+ * Manages the query handler's state and is responsible for wiring up browser events
+ *
+ * @constructor
+ */
+ function MediaQueryDispatch () {
+ if(!matchMedia) {
+ throw new Error('matchMedia not present, legacy browsers require a polyfill');
+ }
+
+ this.queries = {};
+ this.browserIsIncapable = !matchMedia('only all').matches;
+ }
+
+ MediaQueryDispatch.prototype = {
+
+ /**
+ * Registers a handler for the given media query
+ *
+ * @param {string} q the media query
+ * @param {object || Array || Function} options either a single query handler object, a function, or an array of query handlers
+ * @param {function} options.match fired when query matched
+ * @param {function} [options.unmatch] fired when a query is no longer matched
+ * @param {function} [options.setup] fired when handler first triggered
+ * @param {boolean} [options.deferSetup=false] whether setup should be run immediately or deferred until query is first matched
+ * @param {boolean} [shouldDegrade=false] whether this particular media query should always run on incapable browsers
+ */
+ register : function(q, options, shouldDegrade) {
+ var queries = this.queries,
+ isUnconditional = shouldDegrade && this.browserIsIncapable;
+
+ if(!queries[q]) {
+ queries[q] = new MediaQuery(q, isUnconditional);
+ }
+
+ //normalise to object in an array
+ if(isFunction(options)) {
+ options = { match : options };
+ }
+ if(!isArray(options)) {
+ options = [options];
+ }
+ each(options, function(handler) {
+ queries[q].addHandler(handler);
+ });
+
+ return this;
+ },
+
+ /**
+ * unregisters a query and all it's handlers, or a specific handler for a query
+ *
+ * @param {string} q the media query to target
+ * @param {object || function} [handler] specific handler to unregister
+ */
+ unregister : function(q, handler) {
+ var query = this.queries[q];
+
+ if(query) {
+ if(handler) {
+ query.removeHandler(handler);
+ }
+ else {
+ query.clear();
+ delete this.queries[q];
+ }
+ }
+
+ return this;
+ }
+ };
+
+ return new MediaQueryDispatch();
+
+}));
diff --git a/library/AP/client-vendor/after-body/10-bootstrap/bootstrap-theme.css b/library/AP/client-vendor/after-body/10-bootstrap/bootstrap-theme.css
deleted file mode 100755
index f860bbc..0000000
--- a/library/AP/client-vendor/after-body/10-bootstrap/bootstrap-theme.css
+++ /dev/null
@@ -1,442 +0,0 @@
-/*!
- * Bootstrap v3.2.0 (http://getbootstrap.com)
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-
-.btn-default,
-.btn-primary,
-.btn-success,
-.btn-info,
-.btn-warning,
-.btn-danger {
- text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
-}
-.btn-default:active,
-.btn-primary:active,
-.btn-success:active,
-.btn-info:active,
-.btn-warning:active,
-.btn-danger:active,
-.btn-default.active,
-.btn-primary.active,
-.btn-success.active,
-.btn-info.active,
-.btn-warning.active,
-.btn-danger.active {
- -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
- box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
-}
-.btn:active,
-.btn.active {
- background-image: none;
-}
-.btn-default {
- text-shadow: 0 1px 0 #fff;
- background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);
- background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));
- background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
- background-repeat: repeat-x;
- border-color: #dbdbdb;
- border-color: #ccc;
-}
-.btn-default:hover,
-.btn-default:focus {
- background-color: #e0e0e0;
- background-position: 0 -15px;
-}
-.btn-default:active,
-.btn-default.active {
- background-color: #e0e0e0;
- border-color: #dbdbdb;
-}
-.btn-default:disabled,
-.btn-default[disabled] {
- background-color: #e0e0e0;
- background-image: none;
-}
-.btn-primary {
- background-image: -webkit-linear-gradient(top, #428bca 0%, #2d6ca2 100%);
- background-image: -o-linear-gradient(top, #428bca 0%, #2d6ca2 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#2d6ca2));
- background-image: linear-gradient(to bottom, #428bca 0%, #2d6ca2 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0);
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
- background-repeat: repeat-x;
- border-color: #2b669a;
-}
-.btn-primary:hover,
-.btn-primary:focus {
- background-color: #2d6ca2;
- background-position: 0 -15px;
-}
-.btn-primary:active,
-.btn-primary.active {
- background-color: #2d6ca2;
- border-color: #2b669a;
-}
-.btn-primary:disabled,
-.btn-primary[disabled] {
- background-color: #2d6ca2;
- background-image: none;
-}
-.btn-success {
- background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);
- background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));
- background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
- background-repeat: repeat-x;
- border-color: #3e8f3e;
-}
-.btn-success:hover,
-.btn-success:focus {
- background-color: #419641;
- background-position: 0 -15px;
-}
-.btn-success:active,
-.btn-success.active {
- background-color: #419641;
- border-color: #3e8f3e;
-}
-.btn-success:disabled,
-.btn-success[disabled] {
- background-color: #419641;
- background-image: none;
-}
-.btn-info {
- background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
- background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));
- background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
- background-repeat: repeat-x;
- border-color: #28a4c9;
-}
-.btn-info:hover,
-.btn-info:focus {
- background-color: #2aabd2;
- background-position: 0 -15px;
-}
-.btn-info:active,
-.btn-info.active {
- background-color: #2aabd2;
- border-color: #28a4c9;
-}
-.btn-info:disabled,
-.btn-info[disabled] {
- background-color: #2aabd2;
- background-image: none;
-}
-.btn-warning {
- background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
- background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));
- background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
- background-repeat: repeat-x;
- border-color: #e38d13;
-}
-.btn-warning:hover,
-.btn-warning:focus {
- background-color: #eb9316;
- background-position: 0 -15px;
-}
-.btn-warning:active,
-.btn-warning.active {
- background-color: #eb9316;
- border-color: #e38d13;
-}
-.btn-warning:disabled,
-.btn-warning[disabled] {
- background-color: #eb9316;
- background-image: none;
-}
-.btn-danger {
- background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
- background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));
- background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
- background-repeat: repeat-x;
- border-color: #b92c28;
-}
-.btn-danger:hover,
-.btn-danger:focus {
- background-color: #c12e2a;
- background-position: 0 -15px;
-}
-.btn-danger:active,
-.btn-danger.active {
- background-color: #c12e2a;
- border-color: #b92c28;
-}
-.btn-danger:disabled,
-.btn-danger[disabled] {
- background-color: #c12e2a;
- background-image: none;
-}
-.thumbnail,
-.img-thumbnail {
- -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
- box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
-}
-.dropdown-menu > li > a:hover,
-.dropdown-menu > li > a:focus {
- background-color: #e8e8e8;
- background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
- background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
- background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
- background-repeat: repeat-x;
-}
-.dropdown-menu > .active > a,
-.dropdown-menu > .active > a:hover,
-.dropdown-menu > .active > a:focus {
- background-color: #357ebd;
- background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%);
- background-image: -o-linear-gradient(top, #428bca 0%, #357ebd 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#357ebd));
- background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);
- background-repeat: repeat-x;
-}
-.navbar-default {
- background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);
- background-image: -o-linear-gradient(top, #fff 0%, #f8f8f8 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));
- background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
- background-repeat: repeat-x;
- border-radius: 4px;
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
-}
-.navbar-default .navbar-nav > .active > a {
- background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f3f3f3 100%);
- background-image: -o-linear-gradient(top, #ebebeb 0%, #f3f3f3 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f3f3f3));
- background-image: linear-gradient(to bottom, #ebebeb 0%, #f3f3f3 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0);
- background-repeat: repeat-x;
- -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
- box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
-}
-.navbar-brand,
-.navbar-nav > li > a {
- text-shadow: 0 1px 0 rgba(255, 255, 255, .25);
-}
-.navbar-inverse {
- background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);
- background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));
- background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
- background-repeat: repeat-x;
-}
-.navbar-inverse .navbar-nav > .active > a {
- background-image: -webkit-linear-gradient(top, #222 0%, #282828 100%);
- background-image: -o-linear-gradient(top, #222 0%, #282828 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#222), to(#282828));
- background-image: linear-gradient(to bottom, #222 0%, #282828 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0);
- background-repeat: repeat-x;
- -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
- box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
-}
-.navbar-inverse .navbar-brand,
-.navbar-inverse .navbar-nav > li > a {
- text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);
-}
-.navbar-static-top,
-.navbar-fixed-top,
-.navbar-fixed-bottom {
- border-radius: 0;
-}
-.alert {
- text-shadow: 0 1px 0 rgba(255, 255, 255, .2);
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
-}
-.alert-success {
- background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
- background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));
- background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
- background-repeat: repeat-x;
- border-color: #b2dba1;
-}
-.alert-info {
- background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
- background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));
- background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
- background-repeat: repeat-x;
- border-color: #9acfea;
-}
-.alert-warning {
- background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
- background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));
- background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);
- background-repeat: repeat-x;
- border-color: #f5e79e;
-}
-.alert-danger {
- background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
- background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));
- background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
- background-repeat: repeat-x;
- border-color: #dca7a7;
-}
-.progress {
- background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
- background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));
- background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
- background-repeat: repeat-x;
-}
-.progress-bar {
- background-image: -webkit-linear-gradient(top, #428bca 0%, #3071a9 100%);
- background-image: -o-linear-gradient(top, #428bca 0%, #3071a9 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#3071a9));
- background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0);
- background-repeat: repeat-x;
-}
-.progress-bar-success {
- background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);
- background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));
- background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
- background-repeat: repeat-x;
-}
-.progress-bar-info {
- background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
- background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));
- background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
- background-repeat: repeat-x;
-}
-.progress-bar-warning {
- background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
- background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));
- background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
- background-repeat: repeat-x;
-}
-.progress-bar-danger {
- background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);
- background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));
- background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
- background-repeat: repeat-x;
-}
-.progress-bar-striped {
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
-}
-.list-group {
- border-radius: 4px;
- -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
- box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
-}
-.list-group-item.active,
-.list-group-item.active:hover,
-.list-group-item.active:focus {
- text-shadow: 0 -1px 0 #3071a9;
- background-image: -webkit-linear-gradient(top, #428bca 0%, #3278b3 100%);
- background-image: -o-linear-gradient(top, #428bca 0%, #3278b3 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#3278b3));
- background-image: linear-gradient(to bottom, #428bca 0%, #3278b3 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0);
- background-repeat: repeat-x;
- border-color: #3278b3;
-}
-.panel {
- -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
- box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
-}
-.panel-default > .panel-heading {
- background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
- background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
- background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
- background-repeat: repeat-x;
-}
-.panel-primary > .panel-heading {
- background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%);
- background-image: -o-linear-gradient(top, #428bca 0%, #357ebd 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#357ebd));
- background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);
- background-repeat: repeat-x;
-}
-.panel-success > .panel-heading {
- background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
- background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));
- background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
- background-repeat: repeat-x;
-}
-.panel-info > .panel-heading {
- background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
- background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));
- background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
- background-repeat: repeat-x;
-}
-.panel-warning > .panel-heading {
- background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
- background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));
- background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
- background-repeat: repeat-x;
-}
-.panel-danger > .panel-heading {
- background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
- background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));
- background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
- background-repeat: repeat-x;
-}
-.well {
- background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
- background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));
- background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
- background-repeat: repeat-x;
- border-color: #dcdcdc;
- -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
- box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
-}
-/*# sourceMappingURL=bootstrap-theme.css.map */
diff --git a/library/AP/client-vendor/after-body/10-bootstrap/bootstrap.css b/library/AP/client-vendor/after-body/10-bootstrap/bootstrap.css
deleted file mode 100755
index 037dd05..0000000
--- a/library/AP/client-vendor/after-body/10-bootstrap/bootstrap.css
+++ /dev/null
@@ -1,6203 +0,0 @@
-/*!
- * Bootstrap v3.2.0 (http://getbootstrap.com)
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-
-/*! normalize.css v3.0.1 | MIT License | git.io/normalize */
-html {
- font-family: sans-serif;
- -webkit-text-size-adjust: 100%;
- -ms-text-size-adjust: 100%;
-}
-body {
- margin: 0;
-}
-article,
-aside,
-details,
-figcaption,
-figure,
-footer,
-header,
-hgroup,
-main,
-nav,
-section,
-summary {
- display: block;
-}
-audio,
-canvas,
-progress,
-video {
- display: inline-block;
- vertical-align: baseline;
-}
-audio:not([controls]) {
- display: none;
- height: 0;
-}
-[hidden],
-template {
- display: none;
-}
-a {
- background: transparent;
-}
-a:active,
-a:hover {
- outline: 0;
-}
-abbr[title] {
- border-bottom: 1px dotted;
-}
-b,
-strong {
- font-weight: bold;
-}
-dfn {
- font-style: italic;
-}
-h1 {
- margin: .67em 0;
- font-size: 2em;
-}
-mark {
- color: #000;
- background: #ff0;
-}
-small {
- font-size: 80%;
-}
-sub,
-sup {
- position: relative;
- font-size: 75%;
- line-height: 0;
- vertical-align: baseline;
-}
-sup {
- top: -.5em;
-}
-sub {
- bottom: -.25em;
-}
-img {
- border: 0;
-}
-svg:not(:root) {
- overflow: hidden;
-}
-figure {
- margin: 1em 40px;
-}
-hr {
- height: 0;
- -webkit-box-sizing: content-box;
- -moz-box-sizing: content-box;
- box-sizing: content-box;
-}
-pre {
- overflow: auto;
-}
-code,
-kbd,
-pre,
-samp {
- font-family: monospace, monospace;
- font-size: 1em;
-}
-button,
-input,
-optgroup,
-select,
-textarea {
- margin: 0;
- font: inherit;
- color: inherit;
-}
-button {
- overflow: visible;
-}
-button,
-select {
- text-transform: none;
-}
-button,
-html input[type="button"],
-input[type="reset"],
-input[type="submit"] {
- -webkit-appearance: button;
- cursor: pointer;
-}
-button[disabled],
-html input[disabled] {
- cursor: default;
-}
-button::-moz-focus-inner,
-input::-moz-focus-inner {
- padding: 0;
- border: 0;
-}
-input {
- line-height: normal;
-}
-input[type="checkbox"],
-input[type="radio"] {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- padding: 0;
-}
-input[type="number"]::-webkit-inner-spin-button,
-input[type="number"]::-webkit-outer-spin-button {
- height: auto;
-}
-input[type="search"] {
- -webkit-box-sizing: content-box;
- -moz-box-sizing: content-box;
- box-sizing: content-box;
- -webkit-appearance: textfield;
-}
-input[type="search"]::-webkit-search-cancel-button,
-input[type="search"]::-webkit-search-decoration {
- -webkit-appearance: none;
-}
-fieldset {
- padding: .35em .625em .75em;
- margin: 0 2px;
- border: 1px solid #c0c0c0;
-}
-legend {
- padding: 0;
- border: 0;
-}
-textarea {
- overflow: auto;
-}
-optgroup {
- font-weight: bold;
-}
-table {
- border-spacing: 0;
- border-collapse: collapse;
-}
-td,
-th {
- padding: 0;
-}
-@media print {
- * {
- color: #000 !important;
- text-shadow: none !important;
- background: transparent !important;
- -webkit-box-shadow: none !important;
- box-shadow: none !important;
- }
- a,
- a:visited {
- text-decoration: underline;
- }
- a[href]:after {
- content: " (" attr(href) ")";
- }
- abbr[title]:after {
- content: " (" attr(title) ")";
- }
- a[href^="javascript:"]:after,
- a[href^="#"]:after {
- content: "";
- }
- pre,
- blockquote {
- border: 1px solid #999;
-
- page-break-inside: avoid;
- }
- thead {
- display: table-header-group;
- }
- tr,
- img {
- page-break-inside: avoid;
- }
- img {
- max-width: 100% !important;
- }
- p,
- h2,
- h3 {
- orphans: 3;
- widows: 3;
- }
- h2,
- h3 {
- page-break-after: avoid;
- }
- select {
- background: #fff !important;
- }
- .navbar {
- display: none;
- }
- .table td,
- .table th {
- background-color: #fff !important;
- }
- .btn > .caret,
- .dropup > .btn > .caret {
- border-top-color: #000 !important;
- }
- .label {
- border: 1px solid #000;
- }
- .table {
- border-collapse: collapse !important;
- }
- .table-bordered th,
- .table-bordered td {
- border: 1px solid #ddd !important;
- }
-}
-@font-face {
- font-family: 'Glyphicons Halflings';
-
- src: url('../fonts/glyphicons-halflings-regular.eot');
- src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
-}
-.glyphicon {
- position: relative;
- top: 1px;
- display: inline-block;
- font-family: 'Glyphicons Halflings';
- font-style: normal;
- font-weight: normal;
- line-height: 1;
-
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-}
-.glyphicon-asterisk:before {
- content: "\2a";
-}
-.glyphicon-plus:before {
- content: "\2b";
-}
-.glyphicon-euro:before {
- content: "\20ac";
-}
-.glyphicon-minus:before {
- content: "\2212";
-}
-.glyphicon-cloud:before {
- content: "\2601";
-}
-.glyphicon-envelope:before {
- content: "\2709";
-}
-.glyphicon-pencil:before {
- content: "\270f";
-}
-.glyphicon-glass:before {
- content: "\e001";
-}
-.glyphicon-music:before {
- content: "\e002";
-}
-.glyphicon-search:before {
- content: "\e003";
-}
-.glyphicon-heart:before {
- content: "\e005";
-}
-.glyphicon-star:before {
- content: "\e006";
-}
-.glyphicon-star-empty:before {
- content: "\e007";
-}
-.glyphicon-user:before {
- content: "\e008";
-}
-.glyphicon-film:before {
- content: "\e009";
-}
-.glyphicon-th-large:before {
- content: "\e010";
-}
-.glyphicon-th:before {
- content: "\e011";
-}
-.glyphicon-th-list:before {
- content: "\e012";
-}
-.glyphicon-ok:before {
- content: "\e013";
-}
-.glyphicon-remove:before {
- content: "\e014";
-}
-.glyphicon-zoom-in:before {
- content: "\e015";
-}
-.glyphicon-zoom-out:before {
- content: "\e016";
-}
-.glyphicon-off:before {
- content: "\e017";
-}
-.glyphicon-signal:before {
- content: "\e018";
-}
-.glyphicon-cog:before {
- content: "\e019";
-}
-.glyphicon-trash:before {
- content: "\e020";
-}
-.glyphicon-home:before {
- content: "\e021";
-}
-.glyphicon-file:before {
- content: "\e022";
-}
-.glyphicon-time:before {
- content: "\e023";
-}
-.glyphicon-road:before {
- content: "\e024";
-}
-.glyphicon-download-alt:before {
- content: "\e025";
-}
-.glyphicon-download:before {
- content: "\e026";
-}
-.glyphicon-upload:before {
- content: "\e027";
-}
-.glyphicon-inbox:before {
- content: "\e028";
-}
-.glyphicon-play-circle:before {
- content: "\e029";
-}
-.glyphicon-repeat:before {
- content: "\e030";
-}
-.glyphicon-refresh:before {
- content: "\e031";
-}
-.glyphicon-list-alt:before {
- content: "\e032";
-}
-.glyphicon-lock:before {
- content: "\e033";
-}
-.glyphicon-flag:before {
- content: "\e034";
-}
-.glyphicon-headphones:before {
- content: "\e035";
-}
-.glyphicon-volume-off:before {
- content: "\e036";
-}
-.glyphicon-volume-down:before {
- content: "\e037";
-}
-.glyphicon-volume-up:before {
- content: "\e038";
-}
-.glyphicon-qrcode:before {
- content: "\e039";
-}
-.glyphicon-barcode:before {
- content: "\e040";
-}
-.glyphicon-tag:before {
- content: "\e041";
-}
-.glyphicon-tags:before {
- content: "\e042";
-}
-.glyphicon-book:before {
- content: "\e043";
-}
-.glyphicon-bookmark:before {
- content: "\e044";
-}
-.glyphicon-print:before {
- content: "\e045";
-}
-.glyphicon-camera:before {
- content: "\e046";
-}
-.glyphicon-font:before {
- content: "\e047";
-}
-.glyphicon-bold:before {
- content: "\e048";
-}
-.glyphicon-italic:before {
- content: "\e049";
-}
-.glyphicon-text-height:before {
- content: "\e050";
-}
-.glyphicon-text-width:before {
- content: "\e051";
-}
-.glyphicon-align-left:before {
- content: "\e052";
-}
-.glyphicon-align-center:before {
- content: "\e053";
-}
-.glyphicon-align-right:before {
- content: "\e054";
-}
-.glyphicon-align-justify:before {
- content: "\e055";
-}
-.glyphicon-list:before {
- content: "\e056";
-}
-.glyphicon-indent-left:before {
- content: "\e057";
-}
-.glyphicon-indent-right:before {
- content: "\e058";
-}
-.glyphicon-facetime-video:before {
- content: "\e059";
-}
-.glyphicon-picture:before {
- content: "\e060";
-}
-.glyphicon-map-marker:before {
- content: "\e062";
-}
-.glyphicon-adjust:before {
- content: "\e063";
-}
-.glyphicon-tint:before {
- content: "\e064";
-}
-.glyphicon-edit:before {
- content: "\e065";
-}
-.glyphicon-share:before {
- content: "\e066";
-}
-.glyphicon-check:before {
- content: "\e067";
-}
-.glyphicon-move:before {
- content: "\e068";
-}
-.glyphicon-step-backward:before {
- content: "\e069";
-}
-.glyphicon-fast-backward:before {
- content: "\e070";
-}
-.glyphicon-backward:before {
- content: "\e071";
-}
-.glyphicon-play:before {
- content: "\e072";
-}
-.glyphicon-pause:before {
- content: "\e073";
-}
-.glyphicon-stop:before {
- content: "\e074";
-}
-.glyphicon-forward:before {
- content: "\e075";
-}
-.glyphicon-fast-forward:before {
- content: "\e076";
-}
-.glyphicon-step-forward:before {
- content: "\e077";
-}
-.glyphicon-eject:before {
- content: "\e078";
-}
-.glyphicon-chevron-left:before {
- content: "\e079";
-}
-.glyphicon-chevron-right:before {
- content: "\e080";
-}
-.glyphicon-plus-sign:before {
- content: "\e081";
-}
-.glyphicon-minus-sign:before {
- content: "\e082";
-}
-.glyphicon-remove-sign:before {
- content: "\e083";
-}
-.glyphicon-ok-sign:before {
- content: "\e084";
-}
-.glyphicon-question-sign:before {
- content: "\e085";
-}
-.glyphicon-info-sign:before {
- content: "\e086";
-}
-.glyphicon-screenshot:before {
- content: "\e087";
-}
-.glyphicon-remove-circle:before {
- content: "\e088";
-}
-.glyphicon-ok-circle:before {
- content: "\e089";
-}
-.glyphicon-ban-circle:before {
- content: "\e090";
-}
-.glyphicon-arrow-left:before {
- content: "\e091";
-}
-.glyphicon-arrow-right:before {
- content: "\e092";
-}
-.glyphicon-arrow-up:before {
- content: "\e093";
-}
-.glyphicon-arrow-down:before {
- content: "\e094";
-}
-.glyphicon-share-alt:before {
- content: "\e095";
-}
-.glyphicon-resize-full:before {
- content: "\e096";
-}
-.glyphicon-resize-small:before {
- content: "\e097";
-}
-.glyphicon-exclamation-sign:before {
- content: "\e101";
-}
-.glyphicon-gift:before {
- content: "\e102";
-}
-.glyphicon-leaf:before {
- content: "\e103";
-}
-.glyphicon-fire:before {
- content: "\e104";
-}
-.glyphicon-eye-open:before {
- content: "\e105";
-}
-.glyphicon-eye-close:before {
- content: "\e106";
-}
-.glyphicon-warning-sign:before {
- content: "\e107";
-}
-.glyphicon-plane:before {
- content: "\e108";
-}
-.glyphicon-calendar:before {
- content: "\e109";
-}
-.glyphicon-random:before {
- content: "\e110";
-}
-.glyphicon-comment:before {
- content: "\e111";
-}
-.glyphicon-magnet:before {
- content: "\e112";
-}
-.glyphicon-chevron-up:before {
- content: "\e113";
-}
-.glyphicon-chevron-down:before {
- content: "\e114";
-}
-.glyphicon-retweet:before {
- content: "\e115";
-}
-.glyphicon-shopping-cart:before {
- content: "\e116";
-}
-.glyphicon-folder-close:before {
- content: "\e117";
-}
-.glyphicon-folder-open:before {
- content: "\e118";
-}
-.glyphicon-resize-vertical:before {
- content: "\e119";
-}
-.glyphicon-resize-horizontal:before {
- content: "\e120";
-}
-.glyphicon-hdd:before {
- content: "\e121";
-}
-.glyphicon-bullhorn:before {
- content: "\e122";
-}
-.glyphicon-bell:before {
- content: "\e123";
-}
-.glyphicon-certificate:before {
- content: "\e124";
-}
-.glyphicon-thumbs-up:before {
- content: "\e125";
-}
-.glyphicon-thumbs-down:before {
- content: "\e126";
-}
-.glyphicon-hand-right:before {
- content: "\e127";
-}
-.glyphicon-hand-left:before {
- content: "\e128";
-}
-.glyphicon-hand-up:before {
- content: "\e129";
-}
-.glyphicon-hand-down:before {
- content: "\e130";
-}
-.glyphicon-circle-arrow-right:before {
- content: "\e131";
-}
-.glyphicon-circle-arrow-left:before {
- content: "\e132";
-}
-.glyphicon-circle-arrow-up:before {
- content: "\e133";
-}
-.glyphicon-circle-arrow-down:before {
- content: "\e134";
-}
-.glyphicon-globe:before {
- content: "\e135";
-}
-.glyphicon-wrench:before {
- content: "\e136";
-}
-.glyphicon-tasks:before {
- content: "\e137";
-}
-.glyphicon-filter:before {
- content: "\e138";
-}
-.glyphicon-briefcase:before {
- content: "\e139";
-}
-.glyphicon-fullscreen:before {
- content: "\e140";
-}
-.glyphicon-dashboard:before {
- content: "\e141";
-}
-.glyphicon-paperclip:before {
- content: "\e142";
-}
-.glyphicon-heart-empty:before {
- content: "\e143";
-}
-.glyphicon-link:before {
- content: "\e144";
-}
-.glyphicon-phone:before {
- content: "\e145";
-}
-.glyphicon-pushpin:before {
- content: "\e146";
-}
-.glyphicon-usd:before {
- content: "\e148";
-}
-.glyphicon-gbp:before {
- content: "\e149";
-}
-.glyphicon-sort:before {
- content: "\e150";
-}
-.glyphicon-sort-by-alphabet:before {
- content: "\e151";
-}
-.glyphicon-sort-by-alphabet-alt:before {
- content: "\e152";
-}
-.glyphicon-sort-by-order:before {
- content: "\e153";
-}
-.glyphicon-sort-by-order-alt:before {
- content: "\e154";
-}
-.glyphicon-sort-by-attributes:before {
- content: "\e155";
-}
-.glyphicon-sort-by-attributes-alt:before {
- content: "\e156";
-}
-.glyphicon-unchecked:before {
- content: "\e157";
-}
-.glyphicon-expand:before {
- content: "\e158";
-}
-.glyphicon-collapse-down:before {
- content: "\e159";
-}
-.glyphicon-collapse-up:before {
- content: "\e160";
-}
-.glyphicon-log-in:before {
- content: "\e161";
-}
-.glyphicon-flash:before {
- content: "\e162";
-}
-.glyphicon-log-out:before {
- content: "\e163";
-}
-.glyphicon-new-window:before {
- content: "\e164";
-}
-.glyphicon-record:before {
- content: "\e165";
-}
-.glyphicon-save:before {
- content: "\e166";
-}
-.glyphicon-open:before {
- content: "\e167";
-}
-.glyphicon-saved:before {
- content: "\e168";
-}
-.glyphicon-import:before {
- content: "\e169";
-}
-.glyphicon-export:before {
- content: "\e170";
-}
-.glyphicon-send:before {
- content: "\e171";
-}
-.glyphicon-floppy-disk:before {
- content: "\e172";
-}
-.glyphicon-floppy-saved:before {
- content: "\e173";
-}
-.glyphicon-floppy-remove:before {
- content: "\e174";
-}
-.glyphicon-floppy-save:before {
- content: "\e175";
-}
-.glyphicon-floppy-open:before {
- content: "\e176";
-}
-.glyphicon-credit-card:before {
- content: "\e177";
-}
-.glyphicon-transfer:before {
- content: "\e178";
-}
-.glyphicon-cutlery:before {
- content: "\e179";
-}
-.glyphicon-header:before {
- content: "\e180";
-}
-.glyphicon-compressed:before {
- content: "\e181";
-}
-.glyphicon-earphone:before {
- content: "\e182";
-}
-.glyphicon-phone-alt:before {
- content: "\e183";
-}
-.glyphicon-tower:before {
- content: "\e184";
-}
-.glyphicon-stats:before {
- content: "\e185";
-}
-.glyphicon-sd-video:before {
- content: "\e186";
-}
-.glyphicon-hd-video:before {
- content: "\e187";
-}
-.glyphicon-subtitles:before {
- content: "\e188";
-}
-.glyphicon-sound-stereo:before {
- content: "\e189";
-}
-.glyphicon-sound-dolby:before {
- content: "\e190";
-}
-.glyphicon-sound-5-1:before {
- content: "\e191";
-}
-.glyphicon-sound-6-1:before {
- content: "\e192";
-}
-.glyphicon-sound-7-1:before {
- content: "\e193";
-}
-.glyphicon-copyright-mark:before {
- content: "\e194";
-}
-.glyphicon-registration-mark:before {
- content: "\e195";
-}
-.glyphicon-cloud-download:before {
- content: "\e197";
-}
-.glyphicon-cloud-upload:before {
- content: "\e198";
-}
-.glyphicon-tree-conifer:before {
- content: "\e199";
-}
-.glyphicon-tree-deciduous:before {
- content: "\e200";
-}
-* {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-*:before,
-*:after {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-html {
- font-size: 10px;
-
- -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
-}
-body {
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
- font-size: 14px;
- line-height: 1.42857143;
- color: #333;
- background-color: #fff;
-}
-input,
-button,
-select,
-textarea {
- font-family: inherit;
- font-size: inherit;
- line-height: inherit;
-}
-a {
- color: #428bca;
- text-decoration: none;
-}
-a:hover,
-a:focus {
- color: #2a6496;
- text-decoration: underline;
-}
-a:focus {
- outline: thin dotted;
- outline: 5px auto -webkit-focus-ring-color;
- outline-offset: -2px;
-}
-figure {
- margin: 0;
-}
-img {
- vertical-align: middle;
-}
-.img-responsive,
-.thumbnail > img,
-.thumbnail a > img,
-.carousel-inner > .item > img,
-.carousel-inner > .item > a > img {
- display: block;
- width: 100% \9;
- max-width: 100%;
- height: auto;
-}
-.img-rounded {
- border-radius: 6px;
-}
-.img-thumbnail {
- display: inline-block;
- width: 100% \9;
- max-width: 100%;
- height: auto;
- padding: 4px;
- line-height: 1.42857143;
- background-color: #fff;
- border: 1px solid #ddd;
- border-radius: 4px;
- -webkit-transition: all .2s ease-in-out;
- -o-transition: all .2s ease-in-out;
- transition: all .2s ease-in-out;
-}
-.img-circle {
- border-radius: 50%;
-}
-hr {
- margin-top: 20px;
- margin-bottom: 20px;
- border: 0;
- border-top: 1px solid #eee;
-}
-.sr-only {
- position: absolute;
- width: 1px;
- height: 1px;
- padding: 0;
- margin: -1px;
- overflow: hidden;
- clip: rect(0, 0, 0, 0);
- border: 0;
-}
-.sr-only-focusable:active,
-.sr-only-focusable:focus {
- position: static;
- width: auto;
- height: auto;
- margin: 0;
- overflow: visible;
- clip: auto;
-}
-h1,
-h2,
-h3,
-h4,
-h5,
-h6,
-.h1,
-.h2,
-.h3,
-.h4,
-.h5,
-.h6 {
- font-family: inherit;
- font-weight: 500;
- line-height: 1.1;
- color: inherit;
-}
-h1 small,
-h2 small,
-h3 small,
-h4 small,
-h5 small,
-h6 small,
-.h1 small,
-.h2 small,
-.h3 small,
-.h4 small,
-.h5 small,
-.h6 small,
-h1 .small,
-h2 .small,
-h3 .small,
-h4 .small,
-h5 .small,
-h6 .small,
-.h1 .small,
-.h2 .small,
-.h3 .small,
-.h4 .small,
-.h5 .small,
-.h6 .small {
- font-weight: normal;
- line-height: 1;
- color: #777;
-}
-h1,
-.h1,
-h2,
-.h2,
-h3,
-.h3 {
- margin-top: 20px;
- margin-bottom: 10px;
-}
-h1 small,
-.h1 small,
-h2 small,
-.h2 small,
-h3 small,
-.h3 small,
-h1 .small,
-.h1 .small,
-h2 .small,
-.h2 .small,
-h3 .small,
-.h3 .small {
- font-size: 65%;
-}
-h4,
-.h4,
-h5,
-.h5,
-h6,
-.h6 {
- margin-top: 10px;
- margin-bottom: 10px;
-}
-h4 small,
-.h4 small,
-h5 small,
-.h5 small,
-h6 small,
-.h6 small,
-h4 .small,
-.h4 .small,
-h5 .small,
-.h5 .small,
-h6 .small,
-.h6 .small {
- font-size: 75%;
-}
-h1,
-.h1 {
- font-size: 36px;
-}
-h2,
-.h2 {
- font-size: 30px;
-}
-h3,
-.h3 {
- font-size: 24px;
-}
-h4,
-.h4 {
- font-size: 18px;
-}
-h5,
-.h5 {
- font-size: 14px;
-}
-h6,
-.h6 {
- font-size: 12px;
-}
-p {
- margin: 0 0 10px;
-}
-.lead {
- margin-bottom: 20px;
- font-size: 16px;
- font-weight: 300;
- line-height: 1.4;
-}
-@media (min-width: 768px) {
- .lead {
- font-size: 21px;
- }
-}
-small,
-.small {
- font-size: 85%;
-}
-cite {
- font-style: normal;
-}
-mark,
-.mark {
- padding: .2em;
- background-color: #fcf8e3;
-}
-.text-left {
- text-align: left;
-}
-.text-right {
- text-align: right;
-}
-.text-center {
- text-align: center;
-}
-.text-justify {
- text-align: justify;
-}
-.text-nowrap {
- white-space: nowrap;
-}
-.text-lowercase {
- text-transform: lowercase;
-}
-.text-uppercase {
- text-transform: uppercase;
-}
-.text-capitalize {
- text-transform: capitalize;
-}
-.text-muted {
- color: #777;
-}
-.text-primary {
- color: #428bca;
-}
-a.text-primary:hover {
- color: #3071a9;
-}
-.text-success {
- color: #3c763d;
-}
-a.text-success:hover {
- color: #2b542c;
-}
-.text-info {
- color: #31708f;
-}
-a.text-info:hover {
- color: #245269;
-}
-.text-warning {
- color: #8a6d3b;
-}
-a.text-warning:hover {
- color: #66512c;
-}
-.text-danger {
- color: #a94442;
-}
-a.text-danger:hover {
- color: #843534;
-}
-.bg-primary {
- color: #fff;
- background-color: #428bca;
-}
-a.bg-primary:hover {
- background-color: #3071a9;
-}
-.bg-success {
- background-color: #dff0d8;
-}
-a.bg-success:hover {
- background-color: #c1e2b3;
-}
-.bg-info {
- background-color: #d9edf7;
-}
-a.bg-info:hover {
- background-color: #afd9ee;
-}
-.bg-warning {
- background-color: #fcf8e3;
-}
-a.bg-warning:hover {
- background-color: #f7ecb5;
-}
-.bg-danger {
- background-color: #f2dede;
-}
-a.bg-danger:hover {
- background-color: #e4b9b9;
-}
-.page-header {
- padding-bottom: 9px;
- margin: 40px 0 20px;
- border-bottom: 1px solid #eee;
-}
-ul,
-ol {
- margin-top: 0;
- margin-bottom: 10px;
-}
-ul ul,
-ol ul,
-ul ol,
-ol ol {
- margin-bottom: 0;
-}
-.list-unstyled {
- padding-left: 0;
- list-style: none;
-}
-.list-inline {
- padding-left: 0;
- margin-left: -5px;
- list-style: none;
-}
-.list-inline > li {
- display: inline-block;
- padding-right: 5px;
- padding-left: 5px;
-}
-dl {
- margin-top: 0;
- margin-bottom: 20px;
-}
-dt,
-dd {
- line-height: 1.42857143;
-}
-dt {
- font-weight: bold;
-}
-dd {
- margin-left: 0;
-}
-@media (min-width: 768px) {
- .dl-horizontal dt {
- float: left;
- width: 160px;
- overflow: hidden;
- clear: left;
- text-align: right;
- text-overflow: ellipsis;
- white-space: nowrap;
- }
- .dl-horizontal dd {
- margin-left: 180px;
- }
-}
-abbr[title],
-abbr[data-original-title] {
- cursor: help;
- border-bottom: 1px dotted #777;
-}
-.initialism {
- font-size: 90%;
- text-transform: uppercase;
-}
-blockquote {
- padding: 10px 20px;
- margin: 0 0 20px;
- font-size: 17.5px;
- border-left: 5px solid #eee;
-}
-blockquote p:last-child,
-blockquote ul:last-child,
-blockquote ol:last-child {
- margin-bottom: 0;
-}
-blockquote footer,
-blockquote small,
-blockquote .small {
- display: block;
- font-size: 80%;
- line-height: 1.42857143;
- color: #777;
-}
-blockquote footer:before,
-blockquote small:before,
-blockquote .small:before {
- content: '\2014 \00A0';
-}
-.blockquote-reverse,
-blockquote.pull-right {
- padding-right: 15px;
- padding-left: 0;
- text-align: right;
- border-right: 5px solid #eee;
- border-left: 0;
-}
-.blockquote-reverse footer:before,
-blockquote.pull-right footer:before,
-.blockquote-reverse small:before,
-blockquote.pull-right small:before,
-.blockquote-reverse .small:before,
-blockquote.pull-right .small:before {
- content: '';
-}
-.blockquote-reverse footer:after,
-blockquote.pull-right footer:after,
-.blockquote-reverse small:after,
-blockquote.pull-right small:after,
-.blockquote-reverse .small:after,
-blockquote.pull-right .small:after {
- content: '\00A0 \2014';
-}
-blockquote:before,
-blockquote:after {
- content: "";
-}
-address {
- margin-bottom: 20px;
- font-style: normal;
- line-height: 1.42857143;
-}
-code,
-kbd,
-pre,
-samp {
- font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
-}
-code {
- padding: 2px 4px;
- font-size: 90%;
- color: #c7254e;
- background-color: #f9f2f4;
- border-radius: 4px;
-}
-kbd {
- padding: 2px 4px;
- font-size: 90%;
- color: #fff;
- background-color: #333;
- border-radius: 3px;
- -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
- box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
-}
-kbd kbd {
- padding: 0;
- font-size: 100%;
- -webkit-box-shadow: none;
- box-shadow: none;
-}
-pre {
- display: block;
- padding: 9.5px;
- margin: 0 0 10px;
- font-size: 13px;
- line-height: 1.42857143;
- color: #333;
- word-break: break-all;
- word-wrap: break-word;
- background-color: #f5f5f5;
- border: 1px solid #ccc;
- border-radius: 4px;
-}
-pre code {
- padding: 0;
- font-size: inherit;
- color: inherit;
- white-space: pre-wrap;
- background-color: transparent;
- border-radius: 0;
-}
-.pre-scrollable {
- max-height: 340px;
- overflow-y: scroll;
-}
-.container {
- padding-right: 15px;
- padding-left: 15px;
- margin-right: auto;
- margin-left: auto;
-}
-@media (min-width: 768px) {
- .container {
- width: 750px;
- }
-}
-@media (min-width: 992px) {
- .container {
- width: 970px;
- }
-}
-@media (min-width: 1200px) {
- .container {
- width: 1170px;
- }
-}
-.container-fluid {
- padding-right: 15px;
- padding-left: 15px;
- margin-right: auto;
- margin-left: auto;
-}
-.row {
- margin-right: -15px;
- margin-left: -15px;
-}
-.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
- position: relative;
- min-height: 1px;
- padding-right: 15px;
- padding-left: 15px;
-}
-.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
- float: left;
-}
-.col-xs-12 {
- width: 100%;
-}
-.col-xs-11 {
- width: 91.66666667%;
-}
-.col-xs-10 {
- width: 83.33333333%;
-}
-.col-xs-9 {
- width: 75%;
-}
-.col-xs-8 {
- width: 66.66666667%;
-}
-.col-xs-7 {
- width: 58.33333333%;
-}
-.col-xs-6 {
- width: 50%;
-}
-.col-xs-5 {
- width: 41.66666667%;
-}
-.col-xs-4 {
- width: 33.33333333%;
-}
-.col-xs-3 {
- width: 25%;
-}
-.col-xs-2 {
- width: 16.66666667%;
-}
-.col-xs-1 {
- width: 8.33333333%;
-}
-.col-xs-pull-12 {
- right: 100%;
-}
-.col-xs-pull-11 {
- right: 91.66666667%;
-}
-.col-xs-pull-10 {
- right: 83.33333333%;
-}
-.col-xs-pull-9 {
- right: 75%;
-}
-.col-xs-pull-8 {
- right: 66.66666667%;
-}
-.col-xs-pull-7 {
- right: 58.33333333%;
-}
-.col-xs-pull-6 {
- right: 50%;
-}
-.col-xs-pull-5 {
- right: 41.66666667%;
-}
-.col-xs-pull-4 {
- right: 33.33333333%;
-}
-.col-xs-pull-3 {
- right: 25%;
-}
-.col-xs-pull-2 {
- right: 16.66666667%;
-}
-.col-xs-pull-1 {
- right: 8.33333333%;
-}
-.col-xs-pull-0 {
- right: auto;
-}
-.col-xs-push-12 {
- left: 100%;
-}
-.col-xs-push-11 {
- left: 91.66666667%;
-}
-.col-xs-push-10 {
- left: 83.33333333%;
-}
-.col-xs-push-9 {
- left: 75%;
-}
-.col-xs-push-8 {
- left: 66.66666667%;
-}
-.col-xs-push-7 {
- left: 58.33333333%;
-}
-.col-xs-push-6 {
- left: 50%;
-}
-.col-xs-push-5 {
- left: 41.66666667%;
-}
-.col-xs-push-4 {
- left: 33.33333333%;
-}
-.col-xs-push-3 {
- left: 25%;
-}
-.col-xs-push-2 {
- left: 16.66666667%;
-}
-.col-xs-push-1 {
- left: 8.33333333%;
-}
-.col-xs-push-0 {
- left: auto;
-}
-.col-xs-offset-12 {
- margin-left: 100%;
-}
-.col-xs-offset-11 {
- margin-left: 91.66666667%;
-}
-.col-xs-offset-10 {
- margin-left: 83.33333333%;
-}
-.col-xs-offset-9 {
- margin-left: 75%;
-}
-.col-xs-offset-8 {
- margin-left: 66.66666667%;
-}
-.col-xs-offset-7 {
- margin-left: 58.33333333%;
-}
-.col-xs-offset-6 {
- margin-left: 50%;
-}
-.col-xs-offset-5 {
- margin-left: 41.66666667%;
-}
-.col-xs-offset-4 {
- margin-left: 33.33333333%;
-}
-.col-xs-offset-3 {
- margin-left: 25%;
-}
-.col-xs-offset-2 {
- margin-left: 16.66666667%;
-}
-.col-xs-offset-1 {
- margin-left: 8.33333333%;
-}
-.col-xs-offset-0 {
- margin-left: 0;
-}
-@media (min-width: 768px) {
- .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
- float: left;
- }
- .col-sm-12 {
- width: 100%;
- }
- .col-sm-11 {
- width: 91.66666667%;
- }
- .col-sm-10 {
- width: 83.33333333%;
- }
- .col-sm-9 {
- width: 75%;
- }
- .col-sm-8 {
- width: 66.66666667%;
- }
- .col-sm-7 {
- width: 58.33333333%;
- }
- .col-sm-6 {
- width: 50%;
- }
- .col-sm-5 {
- width: 41.66666667%;
- }
- .col-sm-4 {
- width: 33.33333333%;
- }
- .col-sm-3 {
- width: 25%;
- }
- .col-sm-2 {
- width: 16.66666667%;
- }
- .col-sm-1 {
- width: 8.33333333%;
- }
- .col-sm-pull-12 {
- right: 100%;
- }
- .col-sm-pull-11 {
- right: 91.66666667%;
- }
- .col-sm-pull-10 {
- right: 83.33333333%;
- }
- .col-sm-pull-9 {
- right: 75%;
- }
- .col-sm-pull-8 {
- right: 66.66666667%;
- }
- .col-sm-pull-7 {
- right: 58.33333333%;
- }
- .col-sm-pull-6 {
- right: 50%;
- }
- .col-sm-pull-5 {
- right: 41.66666667%;
- }
- .col-sm-pull-4 {
- right: 33.33333333%;
- }
- .col-sm-pull-3 {
- right: 25%;
- }
- .col-sm-pull-2 {
- right: 16.66666667%;
- }
- .col-sm-pull-1 {
- right: 8.33333333%;
- }
- .col-sm-pull-0 {
- right: auto;
- }
- .col-sm-push-12 {
- left: 100%;
- }
- .col-sm-push-11 {
- left: 91.66666667%;
- }
- .col-sm-push-10 {
- left: 83.33333333%;
- }
- .col-sm-push-9 {
- left: 75%;
- }
- .col-sm-push-8 {
- left: 66.66666667%;
- }
- .col-sm-push-7 {
- left: 58.33333333%;
- }
- .col-sm-push-6 {
- left: 50%;
- }
- .col-sm-push-5 {
- left: 41.66666667%;
- }
- .col-sm-push-4 {
- left: 33.33333333%;
- }
- .col-sm-push-3 {
- left: 25%;
- }
- .col-sm-push-2 {
- left: 16.66666667%;
- }
- .col-sm-push-1 {
- left: 8.33333333%;
- }
- .col-sm-push-0 {
- left: auto;
- }
- .col-sm-offset-12 {
- margin-left: 100%;
- }
- .col-sm-offset-11 {
- margin-left: 91.66666667%;
- }
- .col-sm-offset-10 {
- margin-left: 83.33333333%;
- }
- .col-sm-offset-9 {
- margin-left: 75%;
- }
- .col-sm-offset-8 {
- margin-left: 66.66666667%;
- }
- .col-sm-offset-7 {
- margin-left: 58.33333333%;
- }
- .col-sm-offset-6 {
- margin-left: 50%;
- }
- .col-sm-offset-5 {
- margin-left: 41.66666667%;
- }
- .col-sm-offset-4 {
- margin-left: 33.33333333%;
- }
- .col-sm-offset-3 {
- margin-left: 25%;
- }
- .col-sm-offset-2 {
- margin-left: 16.66666667%;
- }
- .col-sm-offset-1 {
- margin-left: 8.33333333%;
- }
- .col-sm-offset-0 {
- margin-left: 0;
- }
-}
-@media (min-width: 992px) {
- .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
- float: left;
- }
- .col-md-12 {
- width: 100%;
- }
- .col-md-11 {
- width: 91.66666667%;
- }
- .col-md-10 {
- width: 83.33333333%;
- }
- .col-md-9 {
- width: 75%;
- }
- .col-md-8 {
- width: 66.66666667%;
- }
- .col-md-7 {
- width: 58.33333333%;
- }
- .col-md-6 {
- width: 50%;
- }
- .col-md-5 {
- width: 41.66666667%;
- }
- .col-md-4 {
- width: 33.33333333%;
- }
- .col-md-3 {
- width: 25%;
- }
- .col-md-2 {
- width: 16.66666667%;
- }
- .col-md-1 {
- width: 8.33333333%;
- }
- .col-md-pull-12 {
- right: 100%;
- }
- .col-md-pull-11 {
- right: 91.66666667%;
- }
- .col-md-pull-10 {
- right: 83.33333333%;
- }
- .col-md-pull-9 {
- right: 75%;
- }
- .col-md-pull-8 {
- right: 66.66666667%;
- }
- .col-md-pull-7 {
- right: 58.33333333%;
- }
- .col-md-pull-6 {
- right: 50%;
- }
- .col-md-pull-5 {
- right: 41.66666667%;
- }
- .col-md-pull-4 {
- right: 33.33333333%;
- }
- .col-md-pull-3 {
- right: 25%;
- }
- .col-md-pull-2 {
- right: 16.66666667%;
- }
- .col-md-pull-1 {
- right: 8.33333333%;
- }
- .col-md-pull-0 {
- right: auto;
- }
- .col-md-push-12 {
- left: 100%;
- }
- .col-md-push-11 {
- left: 91.66666667%;
- }
- .col-md-push-10 {
- left: 83.33333333%;
- }
- .col-md-push-9 {
- left: 75%;
- }
- .col-md-push-8 {
- left: 66.66666667%;
- }
- .col-md-push-7 {
- left: 58.33333333%;
- }
- .col-md-push-6 {
- left: 50%;
- }
- .col-md-push-5 {
- left: 41.66666667%;
- }
- .col-md-push-4 {
- left: 33.33333333%;
- }
- .col-md-push-3 {
- left: 25%;
- }
- .col-md-push-2 {
- left: 16.66666667%;
- }
- .col-md-push-1 {
- left: 8.33333333%;
- }
- .col-md-push-0 {
- left: auto;
- }
- .col-md-offset-12 {
- margin-left: 100%;
- }
- .col-md-offset-11 {
- margin-left: 91.66666667%;
- }
- .col-md-offset-10 {
- margin-left: 83.33333333%;
- }
- .col-md-offset-9 {
- margin-left: 75%;
- }
- .col-md-offset-8 {
- margin-left: 66.66666667%;
- }
- .col-md-offset-7 {
- margin-left: 58.33333333%;
- }
- .col-md-offset-6 {
- margin-left: 50%;
- }
- .col-md-offset-5 {
- margin-left: 41.66666667%;
- }
- .col-md-offset-4 {
- margin-left: 33.33333333%;
- }
- .col-md-offset-3 {
- margin-left: 25%;
- }
- .col-md-offset-2 {
- margin-left: 16.66666667%;
- }
- .col-md-offset-1 {
- margin-left: 8.33333333%;
- }
- .col-md-offset-0 {
- margin-left: 0;
- }
-}
-@media (min-width: 1200px) {
- .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
- float: left;
- }
- .col-lg-12 {
- width: 100%;
- }
- .col-lg-11 {
- width: 91.66666667%;
- }
- .col-lg-10 {
- width: 83.33333333%;
- }
- .col-lg-9 {
- width: 75%;
- }
- .col-lg-8 {
- width: 66.66666667%;
- }
- .col-lg-7 {
- width: 58.33333333%;
- }
- .col-lg-6 {
- width: 50%;
- }
- .col-lg-5 {
- width: 41.66666667%;
- }
- .col-lg-4 {
- width: 33.33333333%;
- }
- .col-lg-3 {
- width: 25%;
- }
- .col-lg-2 {
- width: 16.66666667%;
- }
- .col-lg-1 {
- width: 8.33333333%;
- }
- .col-lg-pull-12 {
- right: 100%;
- }
- .col-lg-pull-11 {
- right: 91.66666667%;
- }
- .col-lg-pull-10 {
- right: 83.33333333%;
- }
- .col-lg-pull-9 {
- right: 75%;
- }
- .col-lg-pull-8 {
- right: 66.66666667%;
- }
- .col-lg-pull-7 {
- right: 58.33333333%;
- }
- .col-lg-pull-6 {
- right: 50%;
- }
- .col-lg-pull-5 {
- right: 41.66666667%;
- }
- .col-lg-pull-4 {
- right: 33.33333333%;
- }
- .col-lg-pull-3 {
- right: 25%;
- }
- .col-lg-pull-2 {
- right: 16.66666667%;
- }
- .col-lg-pull-1 {
- right: 8.33333333%;
- }
- .col-lg-pull-0 {
- right: auto;
- }
- .col-lg-push-12 {
- left: 100%;
- }
- .col-lg-push-11 {
- left: 91.66666667%;
- }
- .col-lg-push-10 {
- left: 83.33333333%;
- }
- .col-lg-push-9 {
- left: 75%;
- }
- .col-lg-push-8 {
- left: 66.66666667%;
- }
- .col-lg-push-7 {
- left: 58.33333333%;
- }
- .col-lg-push-6 {
- left: 50%;
- }
- .col-lg-push-5 {
- left: 41.66666667%;
- }
- .col-lg-push-4 {
- left: 33.33333333%;
- }
- .col-lg-push-3 {
- left: 25%;
- }
- .col-lg-push-2 {
- left: 16.66666667%;
- }
- .col-lg-push-1 {
- left: 8.33333333%;
- }
- .col-lg-push-0 {
- left: auto;
- }
- .col-lg-offset-12 {
- margin-left: 100%;
- }
- .col-lg-offset-11 {
- margin-left: 91.66666667%;
- }
- .col-lg-offset-10 {
- margin-left: 83.33333333%;
- }
- .col-lg-offset-9 {
- margin-left: 75%;
- }
- .col-lg-offset-8 {
- margin-left: 66.66666667%;
- }
- .col-lg-offset-7 {
- margin-left: 58.33333333%;
- }
- .col-lg-offset-6 {
- margin-left: 50%;
- }
- .col-lg-offset-5 {
- margin-left: 41.66666667%;
- }
- .col-lg-offset-4 {
- margin-left: 33.33333333%;
- }
- .col-lg-offset-3 {
- margin-left: 25%;
- }
- .col-lg-offset-2 {
- margin-left: 16.66666667%;
- }
- .col-lg-offset-1 {
- margin-left: 8.33333333%;
- }
- .col-lg-offset-0 {
- margin-left: 0;
- }
-}
-table {
- background-color: transparent;
-}
-th {
- text-align: left;
-}
-.table {
- width: 100%;
- max-width: 100%;
- margin-bottom: 20px;
-}
-.table > thead > tr > th,
-.table > tbody > tr > th,
-.table > tfoot > tr > th,
-.table > thead > tr > td,
-.table > tbody > tr > td,
-.table > tfoot > tr > td {
- padding: 8px;
- line-height: 1.42857143;
- vertical-align: top;
- border-top: 1px solid #ddd;
-}
-.table > thead > tr > th {
- vertical-align: bottom;
- border-bottom: 2px solid #ddd;
-}
-.table > caption + thead > tr:first-child > th,
-.table > colgroup + thead > tr:first-child > th,
-.table > thead:first-child > tr:first-child > th,
-.table > caption + thead > tr:first-child > td,
-.table > colgroup + thead > tr:first-child > td,
-.table > thead:first-child > tr:first-child > td {
- border-top: 0;
-}
-.table > tbody + tbody {
- border-top: 2px solid #ddd;
-}
-.table .table {
- background-color: #fff;
-}
-.table-condensed > thead > tr > th,
-.table-condensed > tbody > tr > th,
-.table-condensed > tfoot > tr > th,
-.table-condensed > thead > tr > td,
-.table-condensed > tbody > tr > td,
-.table-condensed > tfoot > tr > td {
- padding: 5px;
-}
-.table-bordered {
- border: 1px solid #ddd;
-}
-.table-bordered > thead > tr > th,
-.table-bordered > tbody > tr > th,
-.table-bordered > tfoot > tr > th,
-.table-bordered > thead > tr > td,
-.table-bordered > tbody > tr > td,
-.table-bordered > tfoot > tr > td {
- border: 1px solid #ddd;
-}
-.table-bordered > thead > tr > th,
-.table-bordered > thead > tr > td {
- border-bottom-width: 2px;
-}
-.table-striped > tbody > tr:nth-child(odd) > td,
-.table-striped > tbody > tr:nth-child(odd) > th {
- background-color: #f9f9f9;
-}
-.table-hover > tbody > tr:hover > td,
-.table-hover > tbody > tr:hover > th {
- background-color: #f5f5f5;
-}
-table col[class*="col-"] {
- position: static;
- display: table-column;
- float: none;
-}
-table td[class*="col-"],
-table th[class*="col-"] {
- position: static;
- display: table-cell;
- float: none;
-}
-.table > thead > tr > td.active,
-.table > tbody > tr > td.active,
-.table > tfoot > tr > td.active,
-.table > thead > tr > th.active,
-.table > tbody > tr > th.active,
-.table > tfoot > tr > th.active,
-.table > thead > tr.active > td,
-.table > tbody > tr.active > td,
-.table > tfoot > tr.active > td,
-.table > thead > tr.active > th,
-.table > tbody > tr.active > th,
-.table > tfoot > tr.active > th {
- background-color: #f5f5f5;
-}
-.table-hover > tbody > tr > td.active:hover,
-.table-hover > tbody > tr > th.active:hover,
-.table-hover > tbody > tr.active:hover > td,
-.table-hover > tbody > tr:hover > .active,
-.table-hover > tbody > tr.active:hover > th {
- background-color: #e8e8e8;
-}
-.table > thead > tr > td.success,
-.table > tbody > tr > td.success,
-.table > tfoot > tr > td.success,
-.table > thead > tr > th.success,
-.table > tbody > tr > th.success,
-.table > tfoot > tr > th.success,
-.table > thead > tr.success > td,
-.table > tbody > tr.success > td,
-.table > tfoot > tr.success > td,
-.table > thead > tr.success > th,
-.table > tbody > tr.success > th,
-.table > tfoot > tr.success > th {
- background-color: #dff0d8;
-}
-.table-hover > tbody > tr > td.success:hover,
-.table-hover > tbody > tr > th.success:hover,
-.table-hover > tbody > tr.success:hover > td,
-.table-hover > tbody > tr:hover > .success,
-.table-hover > tbody > tr.success:hover > th {
- background-color: #d0e9c6;
-}
-.table > thead > tr > td.info,
-.table > tbody > tr > td.info,
-.table > tfoot > tr > td.info,
-.table > thead > tr > th.info,
-.table > tbody > tr > th.info,
-.table > tfoot > tr > th.info,
-.table > thead > tr.info > td,
-.table > tbody > tr.info > td,
-.table > tfoot > tr.info > td,
-.table > thead > tr.info > th,
-.table > tbody > tr.info > th,
-.table > tfoot > tr.info > th {
- background-color: #d9edf7;
-}
-.table-hover > tbody > tr > td.info:hover,
-.table-hover > tbody > tr > th.info:hover,
-.table-hover > tbody > tr.info:hover > td,
-.table-hover > tbody > tr:hover > .info,
-.table-hover > tbody > tr.info:hover > th {
- background-color: #c4e3f3;
-}
-.table > thead > tr > td.warning,
-.table > tbody > tr > td.warning,
-.table > tfoot > tr > td.warning,
-.table > thead > tr > th.warning,
-.table > tbody > tr > th.warning,
-.table > tfoot > tr > th.warning,
-.table > thead > tr.warning > td,
-.table > tbody > tr.warning > td,
-.table > tfoot > tr.warning > td,
-.table > thead > tr.warning > th,
-.table > tbody > tr.warning > th,
-.table > tfoot > tr.warning > th {
- background-color: #fcf8e3;
-}
-.table-hover > tbody > tr > td.warning:hover,
-.table-hover > tbody > tr > th.warning:hover,
-.table-hover > tbody > tr.warning:hover > td,
-.table-hover > tbody > tr:hover > .warning,
-.table-hover > tbody > tr.warning:hover > th {
- background-color: #faf2cc;
-}
-.table > thead > tr > td.danger,
-.table > tbody > tr > td.danger,
-.table > tfoot > tr > td.danger,
-.table > thead > tr > th.danger,
-.table > tbody > tr > th.danger,
-.table > tfoot > tr > th.danger,
-.table > thead > tr.danger > td,
-.table > tbody > tr.danger > td,
-.table > tfoot > tr.danger > td,
-.table > thead > tr.danger > th,
-.table > tbody > tr.danger > th,
-.table > tfoot > tr.danger > th {
- background-color: #f2dede;
-}
-.table-hover > tbody > tr > td.danger:hover,
-.table-hover > tbody > tr > th.danger:hover,
-.table-hover > tbody > tr.danger:hover > td,
-.table-hover > tbody > tr:hover > .danger,
-.table-hover > tbody > tr.danger:hover > th {
- background-color: #ebcccc;
-}
-@media screen and (max-width: 767px) {
- .table-responsive {
- width: 100%;
- margin-bottom: 15px;
- overflow-x: auto;
- overflow-y: hidden;
- -webkit-overflow-scrolling: touch;
- -ms-overflow-style: -ms-autohiding-scrollbar;
- border: 1px solid #ddd;
- }
- .table-responsive > .table {
- margin-bottom: 0;
- }
- .table-responsive > .table > thead > tr > th,
- .table-responsive > .table > tbody > tr > th,
- .table-responsive > .table > tfoot > tr > th,
- .table-responsive > .table > thead > tr > td,
- .table-responsive > .table > tbody > tr > td,
- .table-responsive > .table > tfoot > tr > td {
- white-space: nowrap;
- }
- .table-responsive > .table-bordered {
- border: 0;
- }
- .table-responsive > .table-bordered > thead > tr > th:first-child,
- .table-responsive > .table-bordered > tbody > tr > th:first-child,
- .table-responsive > .table-bordered > tfoot > tr > th:first-child,
- .table-responsive > .table-bordered > thead > tr > td:first-child,
- .table-responsive > .table-bordered > tbody > tr > td:first-child,
- .table-responsive > .table-bordered > tfoot > tr > td:first-child {
- border-left: 0;
- }
- .table-responsive > .table-bordered > thead > tr > th:last-child,
- .table-responsive > .table-bordered > tbody > tr > th:last-child,
- .table-responsive > .table-bordered > tfoot > tr > th:last-child,
- .table-responsive > .table-bordered > thead > tr > td:last-child,
- .table-responsive > .table-bordered > tbody > tr > td:last-child,
- .table-responsive > .table-bordered > tfoot > tr > td:last-child {
- border-right: 0;
- }
- .table-responsive > .table-bordered > tbody > tr:last-child > th,
- .table-responsive > .table-bordered > tfoot > tr:last-child > th,
- .table-responsive > .table-bordered > tbody > tr:last-child > td,
- .table-responsive > .table-bordered > tfoot > tr:last-child > td {
- border-bottom: 0;
- }
-}
-fieldset {
- min-width: 0;
- padding: 0;
- margin: 0;
- border: 0;
-}
-legend {
- display: block;
- width: 100%;
- padding: 0;
- margin-bottom: 20px;
- font-size: 21px;
- line-height: inherit;
- color: #333;
- border: 0;
- border-bottom: 1px solid #e5e5e5;
-}
-label {
- display: inline-block;
- max-width: 100%;
- margin-bottom: 5px;
- font-weight: bold;
-}
-input[type="search"] {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-input[type="radio"],
-input[type="checkbox"] {
- margin: 4px 0 0;
- margin-top: 1px \9;
- line-height: normal;
-}
-input[type="file"] {
- display: block;
-}
-input[type="range"] {
- display: block;
- width: 100%;
-}
-select[multiple],
-select[size] {
- height: auto;
-}
-input[type="file"]:focus,
-input[type="radio"]:focus,
-input[type="checkbox"]:focus {
- outline: thin dotted;
- outline: 5px auto -webkit-focus-ring-color;
- outline-offset: -2px;
-}
-output {
- display: block;
- padding-top: 7px;
- font-size: 14px;
- line-height: 1.42857143;
- color: #555;
-}
-.form-control {
- display: block;
- width: 100%;
- height: 34px;
- padding: 6px 12px;
- font-size: 14px;
- line-height: 1.42857143;
- color: #555;
- background-color: #fff;
- background-image: none;
- border: 1px solid #ccc;
- border-radius: 4px;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
- -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;
- -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
- transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
-}
-.form-control:focus {
- border-color: #66afe9;
- outline: 0;
- -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
- box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
-}
-.form-control::-moz-placeholder {
- color: #777;
- opacity: 1;
-}
-.form-control:-ms-input-placeholder {
- color: #777;
-}
-.form-control::-webkit-input-placeholder {
- color: #777;
-}
-.form-control[disabled],
-.form-control[readonly],
-fieldset[disabled] .form-control {
- cursor: not-allowed;
- background-color: #eee;
- opacity: 1;
-}
-textarea.form-control {
- height: auto;
-}
-input[type="search"] {
- -webkit-appearance: none;
-}
-input[type="date"],
-input[type="time"],
-input[type="datetime-local"],
-input[type="month"] {
- line-height: 34px;
- line-height: 1.42857143 \0;
-}
-input[type="date"].input-sm,
-input[type="time"].input-sm,
-input[type="datetime-local"].input-sm,
-input[type="month"].input-sm {
- line-height: 30px;
-}
-input[type="date"].input-lg,
-input[type="time"].input-lg,
-input[type="datetime-local"].input-lg,
-input[type="month"].input-lg {
- line-height: 46px;
-}
-.form-group {
- margin-bottom: 15px;
-}
-.radio,
-.checkbox {
- position: relative;
- display: block;
- min-height: 20px;
- margin-top: 10px;
- margin-bottom: 10px;
-}
-.radio label,
-.checkbox label {
- padding-left: 20px;
- margin-bottom: 0;
- font-weight: normal;
- cursor: pointer;
-}
-.radio input[type="radio"],
-.radio-inline input[type="radio"],
-.checkbox input[type="checkbox"],
-.checkbox-inline input[type="checkbox"] {
- position: absolute;
- margin-top: 4px \9;
- margin-left: -20px;
-}
-.radio + .radio,
-.checkbox + .checkbox {
- margin-top: -5px;
-}
-.radio-inline,
-.checkbox-inline {
- display: inline-block;
- padding-left: 20px;
- margin-bottom: 0;
- font-weight: normal;
- vertical-align: middle;
- cursor: pointer;
-}
-.radio-inline + .radio-inline,
-.checkbox-inline + .checkbox-inline {
- margin-top: 0;
- margin-left: 10px;
-}
-input[type="radio"][disabled],
-input[type="checkbox"][disabled],
-input[type="radio"].disabled,
-input[type="checkbox"].disabled,
-fieldset[disabled] input[type="radio"],
-fieldset[disabled] input[type="checkbox"] {
- cursor: not-allowed;
-}
-.radio-inline.disabled,
-.checkbox-inline.disabled,
-fieldset[disabled] .radio-inline,
-fieldset[disabled] .checkbox-inline {
- cursor: not-allowed;
-}
-.radio.disabled label,
-.checkbox.disabled label,
-fieldset[disabled] .radio label,
-fieldset[disabled] .checkbox label {
- cursor: not-allowed;
-}
-.form-control-static {
- padding-top: 7px;
- padding-bottom: 7px;
- margin-bottom: 0;
-}
-.form-control-static.input-lg,
-.form-control-static.input-sm {
- padding-right: 0;
- padding-left: 0;
-}
-.input-sm,
-.form-horizontal .form-group-sm .form-control {
- height: 30px;
- padding: 5px 10px;
- font-size: 12px;
- line-height: 1.5;
- border-radius: 3px;
-}
-select.input-sm {
- height: 30px;
- line-height: 30px;
-}
-textarea.input-sm,
-select[multiple].input-sm {
- height: auto;
-}
-.input-lg,
-.form-horizontal .form-group-lg .form-control {
- height: 46px;
- padding: 10px 16px;
- font-size: 18px;
- line-height: 1.33;
- border-radius: 6px;
-}
-select.input-lg {
- height: 46px;
- line-height: 46px;
-}
-textarea.input-lg,
-select[multiple].input-lg {
- height: auto;
-}
-.has-feedback {
- position: relative;
-}
-.has-feedback .form-control {
- padding-right: 42.5px;
-}
-.form-control-feedback {
- position: absolute;
- top: 25px;
- right: 0;
- z-index: 2;
- display: block;
- width: 34px;
- height: 34px;
- line-height: 34px;
- text-align: center;
-}
-.input-lg + .form-control-feedback {
- width: 46px;
- height: 46px;
- line-height: 46px;
-}
-.input-sm + .form-control-feedback {
- width: 30px;
- height: 30px;
- line-height: 30px;
-}
-.has-success .help-block,
-.has-success .control-label,
-.has-success .radio,
-.has-success .checkbox,
-.has-success .radio-inline,
-.has-success .checkbox-inline {
- color: #3c763d;
-}
-.has-success .form-control {
- border-color: #3c763d;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
-}
-.has-success .form-control:focus {
- border-color: #2b542c;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
-}
-.has-success .input-group-addon {
- color: #3c763d;
- background-color: #dff0d8;
- border-color: #3c763d;
-}
-.has-success .form-control-feedback {
- color: #3c763d;
-}
-.has-warning .help-block,
-.has-warning .control-label,
-.has-warning .radio,
-.has-warning .checkbox,
-.has-warning .radio-inline,
-.has-warning .checkbox-inline {
- color: #8a6d3b;
-}
-.has-warning .form-control {
- border-color: #8a6d3b;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
-}
-.has-warning .form-control:focus {
- border-color: #66512c;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
-}
-.has-warning .input-group-addon {
- color: #8a6d3b;
- background-color: #fcf8e3;
- border-color: #8a6d3b;
-}
-.has-warning .form-control-feedback {
- color: #8a6d3b;
-}
-.has-error .help-block,
-.has-error .control-label,
-.has-error .radio,
-.has-error .checkbox,
-.has-error .radio-inline,
-.has-error .checkbox-inline {
- color: #a94442;
-}
-.has-error .form-control {
- border-color: #a94442;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
-}
-.has-error .form-control:focus {
- border-color: #843534;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
-}
-.has-error .input-group-addon {
- color: #a94442;
- background-color: #f2dede;
- border-color: #a94442;
-}
-.has-error .form-control-feedback {
- color: #a94442;
-}
-.has-feedback label.sr-only ~ .form-control-feedback {
- top: 0;
-}
-.help-block {
- display: block;
- margin-top: 5px;
- margin-bottom: 10px;
- color: #737373;
-}
-@media (min-width: 768px) {
- .form-inline .form-group {
- display: inline-block;
- margin-bottom: 0;
- vertical-align: middle;
- }
- .form-inline .form-control {
- display: inline-block;
- width: auto;
- vertical-align: middle;
- }
- .form-inline .input-group {
- display: inline-table;
- vertical-align: middle;
- }
- .form-inline .input-group .input-group-addon,
- .form-inline .input-group .input-group-btn,
- .form-inline .input-group .form-control {
- width: auto;
- }
- .form-inline .input-group > .form-control {
- width: 100%;
- }
- .form-inline .control-label {
- margin-bottom: 0;
- vertical-align: middle;
- }
- .form-inline .radio,
- .form-inline .checkbox {
- display: inline-block;
- margin-top: 0;
- margin-bottom: 0;
- vertical-align: middle;
- }
- .form-inline .radio label,
- .form-inline .checkbox label {
- padding-left: 0;
- }
- .form-inline .radio input[type="radio"],
- .form-inline .checkbox input[type="checkbox"] {
- position: relative;
- margin-left: 0;
- }
- .form-inline .has-feedback .form-control-feedback {
- top: 0;
- }
-}
-.form-horizontal .radio,
-.form-horizontal .checkbox,
-.form-horizontal .radio-inline,
-.form-horizontal .checkbox-inline {
- padding-top: 7px;
- margin-top: 0;
- margin-bottom: 0;
-}
-.form-horizontal .radio,
-.form-horizontal .checkbox {
- min-height: 27px;
-}
-.form-horizontal .form-group {
- margin-right: -15px;
- margin-left: -15px;
-}
-@media (min-width: 768px) {
- .form-horizontal .control-label {
- padding-top: 7px;
- margin-bottom: 0;
- text-align: right;
- }
-}
-.form-horizontal .has-feedback .form-control-feedback {
- top: 0;
- right: 15px;
-}
-@media (min-width: 768px) {
- .form-horizontal .form-group-lg .control-label {
- padding-top: 14.3px;
- }
-}
-@media (min-width: 768px) {
- .form-horizontal .form-group-sm .control-label {
- padding-top: 6px;
- }
-}
-.btn {
- display: inline-block;
- padding: 6px 12px;
- margin-bottom: 0;
- font-size: 14px;
- font-weight: normal;
- line-height: 1.42857143;
- text-align: center;
- white-space: nowrap;
- vertical-align: middle;
- cursor: pointer;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- background-image: none;
- border: 1px solid transparent;
- border-radius: 4px;
-}
-.btn:focus,
-.btn:active:focus,
-.btn.active:focus {
- outline: thin dotted;
- outline: 5px auto -webkit-focus-ring-color;
- outline-offset: -2px;
-}
-.btn:hover,
-.btn:focus {
- color: #333;
- text-decoration: none;
-}
-.btn:active,
-.btn.active {
- background-image: none;
- outline: 0;
- -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
- box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
-}
-.btn.disabled,
-.btn[disabled],
-fieldset[disabled] .btn {
- pointer-events: none;
- cursor: not-allowed;
- filter: alpha(opacity=65);
- -webkit-box-shadow: none;
- box-shadow: none;
- opacity: .65;
-}
-.btn-default {
- color: #333;
- background-color: #fff;
- border-color: #ccc;
-}
-.btn-default:hover,
-.btn-default:focus,
-.btn-default:active,
-.btn-default.active,
-.open > .dropdown-toggle.btn-default {
- color: #333;
- background-color: #e6e6e6;
- border-color: #adadad;
-}
-.btn-default:active,
-.btn-default.active,
-.open > .dropdown-toggle.btn-default {
- background-image: none;
-}
-.btn-default.disabled,
-.btn-default[disabled],
-fieldset[disabled] .btn-default,
-.btn-default.disabled:hover,
-.btn-default[disabled]:hover,
-fieldset[disabled] .btn-default:hover,
-.btn-default.disabled:focus,
-.btn-default[disabled]:focus,
-fieldset[disabled] .btn-default:focus,
-.btn-default.disabled:active,
-.btn-default[disabled]:active,
-fieldset[disabled] .btn-default:active,
-.btn-default.disabled.active,
-.btn-default[disabled].active,
-fieldset[disabled] .btn-default.active {
- background-color: #fff;
- border-color: #ccc;
-}
-.btn-default .badge {
- color: #fff;
- background-color: #333;
-}
-.btn-primary {
- color: #fff;
- background-color: #428bca;
- border-color: #357ebd;
-}
-.btn-primary:hover,
-.btn-primary:focus,
-.btn-primary:active,
-.btn-primary.active,
-.open > .dropdown-toggle.btn-primary {
- color: #fff;
- background-color: #3071a9;
- border-color: #285e8e;
-}
-.btn-primary:active,
-.btn-primary.active,
-.open > .dropdown-toggle.btn-primary {
- background-image: none;
-}
-.btn-primary.disabled,
-.btn-primary[disabled],
-fieldset[disabled] .btn-primary,
-.btn-primary.disabled:hover,
-.btn-primary[disabled]:hover,
-fieldset[disabled] .btn-primary:hover,
-.btn-primary.disabled:focus,
-.btn-primary[disabled]:focus,
-fieldset[disabled] .btn-primary:focus,
-.btn-primary.disabled:active,
-.btn-primary[disabled]:active,
-fieldset[disabled] .btn-primary:active,
-.btn-primary.disabled.active,
-.btn-primary[disabled].active,
-fieldset[disabled] .btn-primary.active {
- background-color: #428bca;
- border-color: #357ebd;
-}
-.btn-primary .badge {
- color: #428bca;
- background-color: #fff;
-}
-.btn-success {
- color: #fff;
- background-color: #5cb85c;
- border-color: #4cae4c;
-}
-.btn-success:hover,
-.btn-success:focus,
-.btn-success:active,
-.btn-success.active,
-.open > .dropdown-toggle.btn-success {
- color: #fff;
- background-color: #449d44;
- border-color: #398439;
-}
-.btn-success:active,
-.btn-success.active,
-.open > .dropdown-toggle.btn-success {
- background-image: none;
-}
-.btn-success.disabled,
-.btn-success[disabled],
-fieldset[disabled] .btn-success,
-.btn-success.disabled:hover,
-.btn-success[disabled]:hover,
-fieldset[disabled] .btn-success:hover,
-.btn-success.disabled:focus,
-.btn-success[disabled]:focus,
-fieldset[disabled] .btn-success:focus,
-.btn-success.disabled:active,
-.btn-success[disabled]:active,
-fieldset[disabled] .btn-success:active,
-.btn-success.disabled.active,
-.btn-success[disabled].active,
-fieldset[disabled] .btn-success.active {
- background-color: #5cb85c;
- border-color: #4cae4c;
-}
-.btn-success .badge {
- color: #5cb85c;
- background-color: #fff;
-}
-.btn-info {
- color: #fff;
- background-color: #5bc0de;
- border-color: #46b8da;
-}
-.btn-info:hover,
-.btn-info:focus,
-.btn-info:active,
-.btn-info.active,
-.open > .dropdown-toggle.btn-info {
- color: #fff;
- background-color: #31b0d5;
- border-color: #269abc;
-}
-.btn-info:active,
-.btn-info.active,
-.open > .dropdown-toggle.btn-info {
- background-image: none;
-}
-.btn-info.disabled,
-.btn-info[disabled],
-fieldset[disabled] .btn-info,
-.btn-info.disabled:hover,
-.btn-info[disabled]:hover,
-fieldset[disabled] .btn-info:hover,
-.btn-info.disabled:focus,
-.btn-info[disabled]:focus,
-fieldset[disabled] .btn-info:focus,
-.btn-info.disabled:active,
-.btn-info[disabled]:active,
-fieldset[disabled] .btn-info:active,
-.btn-info.disabled.active,
-.btn-info[disabled].active,
-fieldset[disabled] .btn-info.active {
- background-color: #5bc0de;
- border-color: #46b8da;
-}
-.btn-info .badge {
- color: #5bc0de;
- background-color: #fff;
-}
-.btn-warning {
- color: #fff;
- background-color: #f0ad4e;
- border-color: #eea236;
-}
-.btn-warning:hover,
-.btn-warning:focus,
-.btn-warning:active,
-.btn-warning.active,
-.open > .dropdown-toggle.btn-warning {
- color: #fff;
- background-color: #ec971f;
- border-color: #d58512;
-}
-.btn-warning:active,
-.btn-warning.active,
-.open > .dropdown-toggle.btn-warning {
- background-image: none;
-}
-.btn-warning.disabled,
-.btn-warning[disabled],
-fieldset[disabled] .btn-warning,
-.btn-warning.disabled:hover,
-.btn-warning[disabled]:hover,
-fieldset[disabled] .btn-warning:hover,
-.btn-warning.disabled:focus,
-.btn-warning[disabled]:focus,
-fieldset[disabled] .btn-warning:focus,
-.btn-warning.disabled:active,
-.btn-warning[disabled]:active,
-fieldset[disabled] .btn-warning:active,
-.btn-warning.disabled.active,
-.btn-warning[disabled].active,
-fieldset[disabled] .btn-warning.active {
- background-color: #f0ad4e;
- border-color: #eea236;
-}
-.btn-warning .badge {
- color: #f0ad4e;
- background-color: #fff;
-}
-.btn-danger {
- color: #fff;
- background-color: #d9534f;
- border-color: #d43f3a;
-}
-.btn-danger:hover,
-.btn-danger:focus,
-.btn-danger:active,
-.btn-danger.active,
-.open > .dropdown-toggle.btn-danger {
- color: #fff;
- background-color: #c9302c;
- border-color: #ac2925;
-}
-.btn-danger:active,
-.btn-danger.active,
-.open > .dropdown-toggle.btn-danger {
- background-image: none;
-}
-.btn-danger.disabled,
-.btn-danger[disabled],
-fieldset[disabled] .btn-danger,
-.btn-danger.disabled:hover,
-.btn-danger[disabled]:hover,
-fieldset[disabled] .btn-danger:hover,
-.btn-danger.disabled:focus,
-.btn-danger[disabled]:focus,
-fieldset[disabled] .btn-danger:focus,
-.btn-danger.disabled:active,
-.btn-danger[disabled]:active,
-fieldset[disabled] .btn-danger:active,
-.btn-danger.disabled.active,
-.btn-danger[disabled].active,
-fieldset[disabled] .btn-danger.active {
- background-color: #d9534f;
- border-color: #d43f3a;
-}
-.btn-danger .badge {
- color: #d9534f;
- background-color: #fff;
-}
-.btn-link {
- font-weight: normal;
- color: #428bca;
- cursor: pointer;
- border-radius: 0;
-}
-.btn-link,
-.btn-link:active,
-.btn-link[disabled],
-fieldset[disabled] .btn-link {
- background-color: transparent;
- -webkit-box-shadow: none;
- box-shadow: none;
-}
-.btn-link,
-.btn-link:hover,
-.btn-link:focus,
-.btn-link:active {
- border-color: transparent;
-}
-.btn-link:hover,
-.btn-link:focus {
- color: #2a6496;
- text-decoration: underline;
- background-color: transparent;
-}
-.btn-link[disabled]:hover,
-fieldset[disabled] .btn-link:hover,
-.btn-link[disabled]:focus,
-fieldset[disabled] .btn-link:focus {
- color: #777;
- text-decoration: none;
-}
-.btn-lg,
-.btn-group-lg > .btn {
- padding: 10px 16px;
- font-size: 18px;
- line-height: 1.33;
- border-radius: 6px;
-}
-.btn-sm,
-.btn-group-sm > .btn {
- padding: 5px 10px;
- font-size: 12px;
- line-height: 1.5;
- border-radius: 3px;
-}
-.btn-xs,
-.btn-group-xs > .btn {
- padding: 1px 5px;
- font-size: 12px;
- line-height: 1.5;
- border-radius: 3px;
-}
-.btn-block {
- display: block;
- width: 100%;
-}
-.btn-block + .btn-block {
- margin-top: 5px;
-}
-input[type="submit"].btn-block,
-input[type="reset"].btn-block,
-input[type="button"].btn-block {
- width: 100%;
-}
-.fade {
- opacity: 0;
- -webkit-transition: opacity .15s linear;
- -o-transition: opacity .15s linear;
- transition: opacity .15s linear;
-}
-.fade.in {
- opacity: 1;
-}
-.collapse {
- display: none;
-}
-.collapse.in {
- display: block;
-}
-tr.collapse.in {
- display: table-row;
-}
-tbody.collapse.in {
- display: table-row-group;
-}
-.collapsing {
- position: relative;
- height: 0;
- overflow: hidden;
- -webkit-transition: height .35s ease;
- -o-transition: height .35s ease;
- transition: height .35s ease;
-}
-.caret {
- display: inline-block;
- width: 0;
- height: 0;
- margin-left: 2px;
- vertical-align: middle;
- border-top: 4px solid;
- border-right: 4px solid transparent;
- border-left: 4px solid transparent;
-}
-.dropdown {
- position: relative;
-}
-.dropdown-toggle:focus {
- outline: 0;
-}
-.dropdown-menu {
- position: absolute;
- top: 100%;
- left: 0;
- z-index: 1000;
- display: none;
- float: left;
- min-width: 160px;
- padding: 5px 0;
- margin: 2px 0 0;
- font-size: 14px;
- text-align: left;
- list-style: none;
- background-color: #fff;
- -webkit-background-clip: padding-box;
- background-clip: padding-box;
- border: 1px solid #ccc;
- border: 1px solid rgba(0, 0, 0, .15);
- border-radius: 4px;
- -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
- box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
-}
-.dropdown-menu.pull-right {
- right: 0;
- left: auto;
-}
-.dropdown-menu .divider {
- height: 1px;
- margin: 9px 0;
- overflow: hidden;
- background-color: #e5e5e5;
-}
-.dropdown-menu > li > a {
- display: block;
- padding: 3px 20px;
- clear: both;
- font-weight: normal;
- line-height: 1.42857143;
- color: #333;
- white-space: nowrap;
-}
-.dropdown-menu > li > a:hover,
-.dropdown-menu > li > a:focus {
- color: #262626;
- text-decoration: none;
- background-color: #f5f5f5;
-}
-.dropdown-menu > .active > a,
-.dropdown-menu > .active > a:hover,
-.dropdown-menu > .active > a:focus {
- color: #fff;
- text-decoration: none;
- background-color: #428bca;
- outline: 0;
-}
-.dropdown-menu > .disabled > a,
-.dropdown-menu > .disabled > a:hover,
-.dropdown-menu > .disabled > a:focus {
- color: #777;
-}
-.dropdown-menu > .disabled > a:hover,
-.dropdown-menu > .disabled > a:focus {
- text-decoration: none;
- cursor: not-allowed;
- background-color: transparent;
- background-image: none;
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-}
-.open > .dropdown-menu {
- display: block;
-}
-.open > a {
- outline: 0;
-}
-.dropdown-menu-right {
- right: 0;
- left: auto;
-}
-.dropdown-menu-left {
- right: auto;
- left: 0;
-}
-.dropdown-header {
- display: block;
- padding: 3px 20px;
- font-size: 12px;
- line-height: 1.42857143;
- color: #777;
- white-space: nowrap;
-}
-.dropdown-backdrop {
- position: fixed;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: 990;
-}
-.pull-right > .dropdown-menu {
- right: 0;
- left: auto;
-}
-.dropup .caret,
-.navbar-fixed-bottom .dropdown .caret {
- content: "";
- border-top: 0;
- border-bottom: 4px solid;
-}
-.dropup .dropdown-menu,
-.navbar-fixed-bottom .dropdown .dropdown-menu {
- top: auto;
- bottom: 100%;
- margin-bottom: 1px;
-}
-@media (min-width: 768px) {
- .navbar-right .dropdown-menu {
- right: 0;
- left: auto;
- }
- .navbar-right .dropdown-menu-left {
- right: auto;
- left: 0;
- }
-}
-.btn-group,
-.btn-group-vertical {
- position: relative;
- display: inline-block;
- vertical-align: middle;
-}
-.btn-group > .btn,
-.btn-group-vertical > .btn {
- position: relative;
- float: left;
-}
-.btn-group > .btn:hover,
-.btn-group-vertical > .btn:hover,
-.btn-group > .btn:focus,
-.btn-group-vertical > .btn:focus,
-.btn-group > .btn:active,
-.btn-group-vertical > .btn:active,
-.btn-group > .btn.active,
-.btn-group-vertical > .btn.active {
- z-index: 2;
-}
-.btn-group > .btn:focus,
-.btn-group-vertical > .btn:focus {
- outline: 0;
-}
-.btn-group .btn + .btn,
-.btn-group .btn + .btn-group,
-.btn-group .btn-group + .btn,
-.btn-group .btn-group + .btn-group {
- margin-left: -1px;
-}
-.btn-toolbar {
- margin-left: -5px;
-}
-.btn-toolbar .btn-group,
-.btn-toolbar .input-group {
- float: left;
-}
-.btn-toolbar > .btn,
-.btn-toolbar > .btn-group,
-.btn-toolbar > .input-group {
- margin-left: 5px;
-}
-.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
- border-radius: 0;
-}
-.btn-group > .btn:first-child {
- margin-left: 0;
-}
-.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
- border-top-right-radius: 0;
- border-bottom-right-radius: 0;
-}
-.btn-group > .btn:last-child:not(:first-child),
-.btn-group > .dropdown-toggle:not(:first-child) {
- border-top-left-radius: 0;
- border-bottom-left-radius: 0;
-}
-.btn-group > .btn-group {
- float: left;
-}
-.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
- border-radius: 0;
-}
-.btn-group > .btn-group:first-child > .btn:last-child,
-.btn-group > .btn-group:first-child > .dropdown-toggle {
- border-top-right-radius: 0;
- border-bottom-right-radius: 0;
-}
-.btn-group > .btn-group:last-child > .btn:first-child {
- border-top-left-radius: 0;
- border-bottom-left-radius: 0;
-}
-.btn-group .dropdown-toggle:active,
-.btn-group.open .dropdown-toggle {
- outline: 0;
-}
-.btn-group > .btn + .dropdown-toggle {
- padding-right: 8px;
- padding-left: 8px;
-}
-.btn-group > .btn-lg + .dropdown-toggle {
- padding-right: 12px;
- padding-left: 12px;
-}
-.btn-group.open .dropdown-toggle {
- -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
- box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
-}
-.btn-group.open .dropdown-toggle.btn-link {
- -webkit-box-shadow: none;
- box-shadow: none;
-}
-.btn .caret {
- margin-left: 0;
-}
-.btn-lg .caret {
- border-width: 5px 5px 0;
- border-bottom-width: 0;
-}
-.dropup .btn-lg .caret {
- border-width: 0 5px 5px;
-}
-.btn-group-vertical > .btn,
-.btn-group-vertical > .btn-group,
-.btn-group-vertical > .btn-group > .btn {
- display: block;
- float: none;
- width: 100%;
- max-width: 100%;
-}
-.btn-group-vertical > .btn-group > .btn {
- float: none;
-}
-.btn-group-vertical > .btn + .btn,
-.btn-group-vertical > .btn + .btn-group,
-.btn-group-vertical > .btn-group + .btn,
-.btn-group-vertical > .btn-group + .btn-group {
- margin-top: -1px;
- margin-left: 0;
-}
-.btn-group-vertical > .btn:not(:first-child):not(:last-child) {
- border-radius: 0;
-}
-.btn-group-vertical > .btn:first-child:not(:last-child) {
- border-top-right-radius: 4px;
- border-bottom-right-radius: 0;
- border-bottom-left-radius: 0;
-}
-.btn-group-vertical > .btn:last-child:not(:first-child) {
- border-top-left-radius: 0;
- border-top-right-radius: 0;
- border-bottom-left-radius: 4px;
-}
-.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
- border-radius: 0;
-}
-.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
-.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
- border-bottom-right-radius: 0;
- border-bottom-left-radius: 0;
-}
-.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
- border-top-left-radius: 0;
- border-top-right-radius: 0;
-}
-.btn-group-justified {
- display: table;
- width: 100%;
- table-layout: fixed;
- border-collapse: separate;
-}
-.btn-group-justified > .btn,
-.btn-group-justified > .btn-group {
- display: table-cell;
- float: none;
- width: 1%;
-}
-.btn-group-justified > .btn-group .btn {
- width: 100%;
-}
-.btn-group-justified > .btn-group .dropdown-menu {
- left: auto;
-}
-[data-toggle="buttons"] > .btn > input[type="radio"],
-[data-toggle="buttons"] > .btn > input[type="checkbox"] {
- position: absolute;
- z-index: -1;
- filter: alpha(opacity=0);
- opacity: 0;
-}
-.input-group {
- position: relative;
- display: table;
- border-collapse: separate;
-}
-.input-group[class*="col-"] {
- float: none;
- padding-right: 0;
- padding-left: 0;
-}
-.input-group .form-control {
- position: relative;
- z-index: 2;
- float: left;
- width: 100%;
- margin-bottom: 0;
-}
-.input-group-lg > .form-control,
-.input-group-lg > .input-group-addon,
-.input-group-lg > .input-group-btn > .btn {
- height: 46px;
- padding: 10px 16px;
- font-size: 18px;
- line-height: 1.33;
- border-radius: 6px;
-}
-select.input-group-lg > .form-control,
-select.input-group-lg > .input-group-addon,
-select.input-group-lg > .input-group-btn > .btn {
- height: 46px;
- line-height: 46px;
-}
-textarea.input-group-lg > .form-control,
-textarea.input-group-lg > .input-group-addon,
-textarea.input-group-lg > .input-group-btn > .btn,
-select[multiple].input-group-lg > .form-control,
-select[multiple].input-group-lg > .input-group-addon,
-select[multiple].input-group-lg > .input-group-btn > .btn {
- height: auto;
-}
-.input-group-sm > .form-control,
-.input-group-sm > .input-group-addon,
-.input-group-sm > .input-group-btn > .btn {
- height: 30px;
- padding: 5px 10px;
- font-size: 12px;
- line-height: 1.5;
- border-radius: 3px;
-}
-select.input-group-sm > .form-control,
-select.input-group-sm > .input-group-addon,
-select.input-group-sm > .input-group-btn > .btn {
- height: 30px;
- line-height: 30px;
-}
-textarea.input-group-sm > .form-control,
-textarea.input-group-sm > .input-group-addon,
-textarea.input-group-sm > .input-group-btn > .btn,
-select[multiple].input-group-sm > .form-control,
-select[multiple].input-group-sm > .input-group-addon,
-select[multiple].input-group-sm > .input-group-btn > .btn {
- height: auto;
-}
-.input-group-addon,
-.input-group-btn,
-.input-group .form-control {
- display: table-cell;
-}
-.input-group-addon:not(:first-child):not(:last-child),
-.input-group-btn:not(:first-child):not(:last-child),
-.input-group .form-control:not(:first-child):not(:last-child) {
- border-radius: 0;
-}
-.input-group-addon,
-.input-group-btn {
- width: 1%;
- white-space: nowrap;
- vertical-align: middle;
-}
-.input-group-addon {
- padding: 6px 12px;
- font-size: 14px;
- font-weight: normal;
- line-height: 1;
- color: #555;
- text-align: center;
- background-color: #eee;
- border: 1px solid #ccc;
- border-radius: 4px;
-}
-.input-group-addon.input-sm {
- padding: 5px 10px;
- font-size: 12px;
- border-radius: 3px;
-}
-.input-group-addon.input-lg {
- padding: 10px 16px;
- font-size: 18px;
- border-radius: 6px;
-}
-.input-group-addon input[type="radio"],
-.input-group-addon input[type="checkbox"] {
- margin-top: 0;
-}
-.input-group .form-control:first-child,
-.input-group-addon:first-child,
-.input-group-btn:first-child > .btn,
-.input-group-btn:first-child > .btn-group > .btn,
-.input-group-btn:first-child > .dropdown-toggle,
-.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
-.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
- border-top-right-radius: 0;
- border-bottom-right-radius: 0;
-}
-.input-group-addon:first-child {
- border-right: 0;
-}
-.input-group .form-control:last-child,
-.input-group-addon:last-child,
-.input-group-btn:last-child > .btn,
-.input-group-btn:last-child > .btn-group > .btn,
-.input-group-btn:last-child > .dropdown-toggle,
-.input-group-btn:first-child > .btn:not(:first-child),
-.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
- border-top-left-radius: 0;
- border-bottom-left-radius: 0;
-}
-.input-group-addon:last-child {
- border-left: 0;
-}
-.input-group-btn {
- position: relative;
- font-size: 0;
- white-space: nowrap;
-}
-.input-group-btn > .btn {
- position: relative;
-}
-.input-group-btn > .btn + .btn {
- margin-left: -1px;
-}
-.input-group-btn > .btn:hover,
-.input-group-btn > .btn:focus,
-.input-group-btn > .btn:active {
- z-index: 2;
-}
-.input-group-btn:first-child > .btn,
-.input-group-btn:first-child > .btn-group {
- margin-right: -1px;
-}
-.input-group-btn:last-child > .btn,
-.input-group-btn:last-child > .btn-group {
- margin-left: -1px;
-}
-.nav {
- padding-left: 0;
- margin-bottom: 0;
- list-style: none;
-}
-.nav > li {
- position: relative;
- display: block;
-}
-.nav > li > a {
- position: relative;
- display: block;
- padding: 10px 15px;
-}
-.nav > li > a:hover,
-.nav > li > a:focus {
- text-decoration: none;
- background-color: #eee;
-}
-.nav > li.disabled > a {
- color: #777;
-}
-.nav > li.disabled > a:hover,
-.nav > li.disabled > a:focus {
- color: #777;
- text-decoration: none;
- cursor: not-allowed;
- background-color: transparent;
-}
-.nav .open > a,
-.nav .open > a:hover,
-.nav .open > a:focus {
- background-color: #eee;
- border-color: #428bca;
-}
-.nav .nav-divider {
- height: 1px;
- margin: 9px 0;
- overflow: hidden;
- background-color: #e5e5e5;
-}
-.nav > li > a > img {
- max-width: none;
-}
-.nav-tabs {
- border-bottom: 1px solid #ddd;
-}
-.nav-tabs > li {
- float: left;
- margin-bottom: -1px;
-}
-.nav-tabs > li > a {
- margin-right: 2px;
- line-height: 1.42857143;
- border: 1px solid transparent;
- border-radius: 4px 4px 0 0;
-}
-.nav-tabs > li > a:hover {
- border-color: #eee #eee #ddd;
-}
-.nav-tabs > li.active > a,
-.nav-tabs > li.active > a:hover,
-.nav-tabs > li.active > a:focus {
- color: #555;
- cursor: default;
- background-color: #fff;
- border: 1px solid #ddd;
- border-bottom-color: transparent;
-}
-.nav-tabs.nav-justified {
- width: 100%;
- border-bottom: 0;
-}
-.nav-tabs.nav-justified > li {
- float: none;
-}
-.nav-tabs.nav-justified > li > a {
- margin-bottom: 5px;
- text-align: center;
-}
-.nav-tabs.nav-justified > .dropdown .dropdown-menu {
- top: auto;
- left: auto;
-}
-@media (min-width: 768px) {
- .nav-tabs.nav-justified > li {
- display: table-cell;
- width: 1%;
- }
- .nav-tabs.nav-justified > li > a {
- margin-bottom: 0;
- }
-}
-.nav-tabs.nav-justified > li > a {
- margin-right: 0;
- border-radius: 4px;
-}
-.nav-tabs.nav-justified > .active > a,
-.nav-tabs.nav-justified > .active > a:hover,
-.nav-tabs.nav-justified > .active > a:focus {
- border: 1px solid #ddd;
-}
-@media (min-width: 768px) {
- .nav-tabs.nav-justified > li > a {
- border-bottom: 1px solid #ddd;
- border-radius: 4px 4px 0 0;
- }
- .nav-tabs.nav-justified > .active > a,
- .nav-tabs.nav-justified > .active > a:hover,
- .nav-tabs.nav-justified > .active > a:focus {
- border-bottom-color: #fff;
- }
-}
-.nav-pills > li {
- float: left;
-}
-.nav-pills > li > a {
- border-radius: 4px;
-}
-.nav-pills > li + li {
- margin-left: 2px;
-}
-.nav-pills > li.active > a,
-.nav-pills > li.active > a:hover,
-.nav-pills > li.active > a:focus {
- color: #fff;
- background-color: #428bca;
-}
-.nav-stacked > li {
- float: none;
-}
-.nav-stacked > li + li {
- margin-top: 2px;
- margin-left: 0;
-}
-.nav-justified {
- width: 100%;
-}
-.nav-justified > li {
- float: none;
-}
-.nav-justified > li > a {
- margin-bottom: 5px;
- text-align: center;
-}
-.nav-justified > .dropdown .dropdown-menu {
- top: auto;
- left: auto;
-}
-@media (min-width: 768px) {
- .nav-justified > li {
- display: table-cell;
- width: 1%;
- }
- .nav-justified > li > a {
- margin-bottom: 0;
- }
-}
-.nav-tabs-justified {
- border-bottom: 0;
-}
-.nav-tabs-justified > li > a {
- margin-right: 0;
- border-radius: 4px;
-}
-.nav-tabs-justified > .active > a,
-.nav-tabs-justified > .active > a:hover,
-.nav-tabs-justified > .active > a:focus {
- border: 1px solid #ddd;
-}
-@media (min-width: 768px) {
- .nav-tabs-justified > li > a {
- border-bottom: 1px solid #ddd;
- border-radius: 4px 4px 0 0;
- }
- .nav-tabs-justified > .active > a,
- .nav-tabs-justified > .active > a:hover,
- .nav-tabs-justified > .active > a:focus {
- border-bottom-color: #fff;
- }
-}
-.tab-content > .tab-pane {
- display: none;
-}
-.tab-content > .active {
- display: block;
-}
-.nav-tabs .dropdown-menu {
- margin-top: -1px;
- border-top-left-radius: 0;
- border-top-right-radius: 0;
-}
-.navbar {
- position: relative;
- min-height: 50px;
- margin-bottom: 20px;
- border: 1px solid transparent;
-}
-@media (min-width: 768px) {
- .navbar {
- border-radius: 4px;
- }
-}
-@media (min-width: 768px) {
- .navbar-header {
- float: left;
- }
-}
-.navbar-collapse {
- padding-right: 15px;
- padding-left: 15px;
- overflow-x: visible;
- -webkit-overflow-scrolling: touch;
- border-top: 1px solid transparent;
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
-}
-.navbar-collapse.in {
- overflow-y: auto;
-}
-@media (min-width: 768px) {
- .navbar-collapse {
- width: auto;
- border-top: 0;
- -webkit-box-shadow: none;
- box-shadow: none;
- }
- .navbar-collapse.collapse {
- display: block !important;
- height: auto !important;
- padding-bottom: 0;
- overflow: visible !important;
- }
- .navbar-collapse.in {
- overflow-y: visible;
- }
- .navbar-fixed-top .navbar-collapse,
- .navbar-static-top .navbar-collapse,
- .navbar-fixed-bottom .navbar-collapse {
- padding-right: 0;
- padding-left: 0;
- }
-}
-.navbar-fixed-top .navbar-collapse,
-.navbar-fixed-bottom .navbar-collapse {
- max-height: 340px;
-}
-@media (max-width: 480px) and (orientation: landscape) {
- .navbar-fixed-top .navbar-collapse,
- .navbar-fixed-bottom .navbar-collapse {
- max-height: 200px;
- }
-}
-.container > .navbar-header,
-.container-fluid > .navbar-header,
-.container > .navbar-collapse,
-.container-fluid > .navbar-collapse {
- margin-right: -15px;
- margin-left: -15px;
-}
-@media (min-width: 768px) {
- .container > .navbar-header,
- .container-fluid > .navbar-header,
- .container > .navbar-collapse,
- .container-fluid > .navbar-collapse {
- margin-right: 0;
- margin-left: 0;
- }
-}
-.navbar-static-top {
- z-index: 1000;
- border-width: 0 0 1px;
-}
-@media (min-width: 768px) {
- .navbar-static-top {
- border-radius: 0;
- }
-}
-.navbar-fixed-top,
-.navbar-fixed-bottom {
- position: fixed;
- right: 0;
- left: 0;
- z-index: 1030;
- -webkit-transform: translate3d(0, 0, 0);
- -o-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0);
-}
-@media (min-width: 768px) {
- .navbar-fixed-top,
- .navbar-fixed-bottom {
- border-radius: 0;
- }
-}
-.navbar-fixed-top {
- top: 0;
- border-width: 0 0 1px;
-}
-.navbar-fixed-bottom {
- bottom: 0;
- margin-bottom: 0;
- border-width: 1px 0 0;
-}
-.navbar-brand {
- float: left;
- height: 50px;
- padding: 15px 15px;
- font-size: 18px;
- line-height: 20px;
-}
-.navbar-brand:hover,
-.navbar-brand:focus {
- text-decoration: none;
-}
-@media (min-width: 768px) {
- .navbar > .container .navbar-brand,
- .navbar > .container-fluid .navbar-brand {
- margin-left: -15px;
- }
-}
-.navbar-toggle {
- position: relative;
- float: right;
- padding: 9px 10px;
- margin-top: 8px;
- margin-right: 15px;
- margin-bottom: 8px;
- background-color: transparent;
- background-image: none;
- border: 1px solid transparent;
- border-radius: 4px;
-}
-.navbar-toggle:focus {
- outline: 0;
-}
-.navbar-toggle .icon-bar {
- display: block;
- width: 22px;
- height: 2px;
- border-radius: 1px;
-}
-.navbar-toggle .icon-bar + .icon-bar {
- margin-top: 4px;
-}
-@media (min-width: 768px) {
- .navbar-toggle {
- display: none;
- }
-}
-.navbar-nav {
- margin: 7.5px -15px;
-}
-.navbar-nav > li > a {
- padding-top: 10px;
- padding-bottom: 10px;
- line-height: 20px;
-}
-@media (max-width: 767px) {
- .navbar-nav .open .dropdown-menu {
- position: static;
- float: none;
- width: auto;
- margin-top: 0;
- background-color: transparent;
- border: 0;
- -webkit-box-shadow: none;
- box-shadow: none;
- }
- .navbar-nav .open .dropdown-menu > li > a,
- .navbar-nav .open .dropdown-menu .dropdown-header {
- padding: 5px 15px 5px 25px;
- }
- .navbar-nav .open .dropdown-menu > li > a {
- line-height: 20px;
- }
- .navbar-nav .open .dropdown-menu > li > a:hover,
- .navbar-nav .open .dropdown-menu > li > a:focus {
- background-image: none;
- }
-}
-@media (min-width: 768px) {
- .navbar-nav {
- float: left;
- margin: 0;
- }
- .navbar-nav > li {
- float: left;
- }
- .navbar-nav > li > a {
- padding-top: 15px;
- padding-bottom: 15px;
- }
- .navbar-nav.navbar-right:last-child {
- margin-right: -15px;
- }
-}
-@media (min-width: 768px) {
- .navbar-left {
- float: left !important;
- }
- .navbar-right {
- float: right !important;
- }
-}
-.navbar-form {
- padding: 10px 15px;
- margin-top: 8px;
- margin-right: -15px;
- margin-bottom: 8px;
- margin-left: -15px;
- border-top: 1px solid transparent;
- border-bottom: 1px solid transparent;
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
-}
-@media (min-width: 768px) {
- .navbar-form .form-group {
- display: inline-block;
- margin-bottom: 0;
- vertical-align: middle;
- }
- .navbar-form .form-control {
- display: inline-block;
- width: auto;
- vertical-align: middle;
- }
- .navbar-form .input-group {
- display: inline-table;
- vertical-align: middle;
- }
- .navbar-form .input-group .input-group-addon,
- .navbar-form .input-group .input-group-btn,
- .navbar-form .input-group .form-control {
- width: auto;
- }
- .navbar-form .input-group > .form-control {
- width: 100%;
- }
- .navbar-form .control-label {
- margin-bottom: 0;
- vertical-align: middle;
- }
- .navbar-form .radio,
- .navbar-form .checkbox {
- display: inline-block;
- margin-top: 0;
- margin-bottom: 0;
- vertical-align: middle;
- }
- .navbar-form .radio label,
- .navbar-form .checkbox label {
- padding-left: 0;
- }
- .navbar-form .radio input[type="radio"],
- .navbar-form .checkbox input[type="checkbox"] {
- position: relative;
- margin-left: 0;
- }
- .navbar-form .has-feedback .form-control-feedback {
- top: 0;
- }
-}
-@media (max-width: 767px) {
- .navbar-form .form-group {
- margin-bottom: 5px;
- }
-}
-@media (min-width: 768px) {
- .navbar-form {
- width: auto;
- padding-top: 0;
- padding-bottom: 0;
- margin-right: 0;
- margin-left: 0;
- border: 0;
- -webkit-box-shadow: none;
- box-shadow: none;
- }
- .navbar-form.navbar-right:last-child {
- margin-right: -15px;
- }
-}
-.navbar-nav > li > .dropdown-menu {
- margin-top: 0;
- border-top-left-radius: 0;
- border-top-right-radius: 0;
-}
-.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
- border-bottom-right-radius: 0;
- border-bottom-left-radius: 0;
-}
-.navbar-btn {
- margin-top: 8px;
- margin-bottom: 8px;
-}
-.navbar-btn.btn-sm {
- margin-top: 10px;
- margin-bottom: 10px;
-}
-.navbar-btn.btn-xs {
- margin-top: 14px;
- margin-bottom: 14px;
-}
-.navbar-text {
- margin-top: 15px;
- margin-bottom: 15px;
-}
-@media (min-width: 768px) {
- .navbar-text {
- float: left;
- margin-right: 15px;
- margin-left: 15px;
- }
- .navbar-text.navbar-right:last-child {
- margin-right: 0;
- }
-}
-.navbar-default {
- background-color: #f8f8f8;
- border-color: #e7e7e7;
-}
-.navbar-default .navbar-brand {
- color: #777;
-}
-.navbar-default .navbar-brand:hover,
-.navbar-default .navbar-brand:focus {
- color: #5e5e5e;
- background-color: transparent;
-}
-.navbar-default .navbar-text {
- color: #777;
-}
-.navbar-default .navbar-nav > li > a {
- color: #777;
-}
-.navbar-default .navbar-nav > li > a:hover,
-.navbar-default .navbar-nav > li > a:focus {
- color: #333;
- background-color: transparent;
-}
-.navbar-default .navbar-nav > .active > a,
-.navbar-default .navbar-nav > .active > a:hover,
-.navbar-default .navbar-nav > .active > a:focus {
- color: #555;
- background-color: #e7e7e7;
-}
-.navbar-default .navbar-nav > .disabled > a,
-.navbar-default .navbar-nav > .disabled > a:hover,
-.navbar-default .navbar-nav > .disabled > a:focus {
- color: #ccc;
- background-color: transparent;
-}
-.navbar-default .navbar-toggle {
- border-color: #ddd;
-}
-.navbar-default .navbar-toggle:hover,
-.navbar-default .navbar-toggle:focus {
- background-color: #ddd;
-}
-.navbar-default .navbar-toggle .icon-bar {
- background-color: #888;
-}
-.navbar-default .navbar-collapse,
-.navbar-default .navbar-form {
- border-color: #e7e7e7;
-}
-.navbar-default .navbar-nav > .open > a,
-.navbar-default .navbar-nav > .open > a:hover,
-.navbar-default .navbar-nav > .open > a:focus {
- color: #555;
- background-color: #e7e7e7;
-}
-@media (max-width: 767px) {
- .navbar-default .navbar-nav .open .dropdown-menu > li > a {
- color: #777;
- }
- .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
- .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
- color: #333;
- background-color: transparent;
- }
- .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
- .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
- .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
- color: #555;
- background-color: #e7e7e7;
- }
- .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
- .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
- .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
- color: #ccc;
- background-color: transparent;
- }
-}
-.navbar-default .navbar-link {
- color: #777;
-}
-.navbar-default .navbar-link:hover {
- color: #333;
-}
-.navbar-default .btn-link {
- color: #777;
-}
-.navbar-default .btn-link:hover,
-.navbar-default .btn-link:focus {
- color: #333;
-}
-.navbar-default .btn-link[disabled]:hover,
-fieldset[disabled] .navbar-default .btn-link:hover,
-.navbar-default .btn-link[disabled]:focus,
-fieldset[disabled] .navbar-default .btn-link:focus {
- color: #ccc;
-}
-.navbar-inverse {
- background-color: #222;
- border-color: #080808;
-}
-.navbar-inverse .navbar-brand {
- color: #777;
-}
-.navbar-inverse .navbar-brand:hover,
-.navbar-inverse .navbar-brand:focus {
- color: #fff;
- background-color: transparent;
-}
-.navbar-inverse .navbar-text {
- color: #777;
-}
-.navbar-inverse .navbar-nav > li > a {
- color: #777;
-}
-.navbar-inverse .navbar-nav > li > a:hover,
-.navbar-inverse .navbar-nav > li > a:focus {
- color: #fff;
- background-color: transparent;
-}
-.navbar-inverse .navbar-nav > .active > a,
-.navbar-inverse .navbar-nav > .active > a:hover,
-.navbar-inverse .navbar-nav > .active > a:focus {
- color: #fff;
- background-color: #080808;
-}
-.navbar-inverse .navbar-nav > .disabled > a,
-.navbar-inverse .navbar-nav > .disabled > a:hover,
-.navbar-inverse .navbar-nav > .disabled > a:focus {
- color: #444;
- background-color: transparent;
-}
-.navbar-inverse .navbar-toggle {
- border-color: #333;
-}
-.navbar-inverse .navbar-toggle:hover,
-.navbar-inverse .navbar-toggle:focus {
- background-color: #333;
-}
-.navbar-inverse .navbar-toggle .icon-bar {
- background-color: #fff;
-}
-.navbar-inverse .navbar-collapse,
-.navbar-inverse .navbar-form {
- border-color: #101010;
-}
-.navbar-inverse .navbar-nav > .open > a,
-.navbar-inverse .navbar-nav > .open > a:hover,
-.navbar-inverse .navbar-nav > .open > a:focus {
- color: #fff;
- background-color: #080808;
-}
-@media (max-width: 767px) {
- .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
- border-color: #080808;
- }
- .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
- background-color: #080808;
- }
- .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
- color: #777;
- }
- .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
- .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
- color: #fff;
- background-color: transparent;
- }
- .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
- .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
- .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
- color: #fff;
- background-color: #080808;
- }
- .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
- .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
- .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
- color: #444;
- background-color: transparent;
- }
-}
-.navbar-inverse .navbar-link {
- color: #777;
-}
-.navbar-inverse .navbar-link:hover {
- color: #fff;
-}
-.navbar-inverse .btn-link {
- color: #777;
-}
-.navbar-inverse .btn-link:hover,
-.navbar-inverse .btn-link:focus {
- color: #fff;
-}
-.navbar-inverse .btn-link[disabled]:hover,
-fieldset[disabled] .navbar-inverse .btn-link:hover,
-.navbar-inverse .btn-link[disabled]:focus,
-fieldset[disabled] .navbar-inverse .btn-link:focus {
- color: #444;
-}
-.breadcrumb {
- padding: 8px 15px;
- margin-bottom: 20px;
- list-style: none;
- background-color: #f5f5f5;
- border-radius: 4px;
-}
-.breadcrumb > li {
- display: inline-block;
-}
-.breadcrumb > li + li:before {
- padding: 0 5px;
- color: #ccc;
- content: "/\00a0";
-}
-.breadcrumb > .active {
- color: #777;
-}
-.pagination {
- display: inline-block;
- padding-left: 0;
- margin: 20px 0;
- border-radius: 4px;
-}
-.pagination > li {
- display: inline;
-}
-.pagination > li > a,
-.pagination > li > span {
- position: relative;
- float: left;
- padding: 6px 12px;
- margin-left: -1px;
- line-height: 1.42857143;
- color: #428bca;
- text-decoration: none;
- background-color: #fff;
- border: 1px solid #ddd;
-}
-.pagination > li:first-child > a,
-.pagination > li:first-child > span {
- margin-left: 0;
- border-top-left-radius: 4px;
- border-bottom-left-radius: 4px;
-}
-.pagination > li:last-child > a,
-.pagination > li:last-child > span {
- border-top-right-radius: 4px;
- border-bottom-right-radius: 4px;
-}
-.pagination > li > a:hover,
-.pagination > li > span:hover,
-.pagination > li > a:focus,
-.pagination > li > span:focus {
- color: #2a6496;
- background-color: #eee;
- border-color: #ddd;
-}
-.pagination > .active > a,
-.pagination > .active > span,
-.pagination > .active > a:hover,
-.pagination > .active > span:hover,
-.pagination > .active > a:focus,
-.pagination > .active > span:focus {
- z-index: 2;
- color: #fff;
- cursor: default;
- background-color: #428bca;
- border-color: #428bca;
-}
-.pagination > .disabled > span,
-.pagination > .disabled > span:hover,
-.pagination > .disabled > span:focus,
-.pagination > .disabled > a,
-.pagination > .disabled > a:hover,
-.pagination > .disabled > a:focus {
- color: #777;
- cursor: not-allowed;
- background-color: #fff;
- border-color: #ddd;
-}
-.pagination-lg > li > a,
-.pagination-lg > li > span {
- padding: 10px 16px;
- font-size: 18px;
-}
-.pagination-lg > li:first-child > a,
-.pagination-lg > li:first-child > span {
- border-top-left-radius: 6px;
- border-bottom-left-radius: 6px;
-}
-.pagination-lg > li:last-child > a,
-.pagination-lg > li:last-child > span {
- border-top-right-radius: 6px;
- border-bottom-right-radius: 6px;
-}
-.pagination-sm > li > a,
-.pagination-sm > li > span {
- padding: 5px 10px;
- font-size: 12px;
-}
-.pagination-sm > li:first-child > a,
-.pagination-sm > li:first-child > span {
- border-top-left-radius: 3px;
- border-bottom-left-radius: 3px;
-}
-.pagination-sm > li:last-child > a,
-.pagination-sm > li:last-child > span {
- border-top-right-radius: 3px;
- border-bottom-right-radius: 3px;
-}
-.pager {
- padding-left: 0;
- margin: 20px 0;
- text-align: center;
- list-style: none;
-}
-.pager li {
- display: inline;
-}
-.pager li > a,
-.pager li > span {
- display: inline-block;
- padding: 5px 14px;
- background-color: #fff;
- border: 1px solid #ddd;
- border-radius: 15px;
-}
-.pager li > a:hover,
-.pager li > a:focus {
- text-decoration: none;
- background-color: #eee;
-}
-.pager .next > a,
-.pager .next > span {
- float: right;
-}
-.pager .previous > a,
-.pager .previous > span {
- float: left;
-}
-.pager .disabled > a,
-.pager .disabled > a:hover,
-.pager .disabled > a:focus,
-.pager .disabled > span {
- color: #777;
- cursor: not-allowed;
- background-color: #fff;
-}
-.label {
- display: inline;
- padding: .2em .6em .3em;
- font-size: 75%;
- font-weight: bold;
- line-height: 1;
- color: #fff;
- text-align: center;
- white-space: nowrap;
- vertical-align: baseline;
- border-radius: .25em;
-}
-a.label:hover,
-a.label:focus {
- color: #fff;
- text-decoration: none;
- cursor: pointer;
-}
-.label:empty {
- display: none;
-}
-.btn .label {
- position: relative;
- top: -1px;
-}
-.label-default {
- background-color: #777;
-}
-.label-default[href]:hover,
-.label-default[href]:focus {
- background-color: #5e5e5e;
-}
-.label-primary {
- background-color: #428bca;
-}
-.label-primary[href]:hover,
-.label-primary[href]:focus {
- background-color: #3071a9;
-}
-.label-success {
- background-color: #5cb85c;
-}
-.label-success[href]:hover,
-.label-success[href]:focus {
- background-color: #449d44;
-}
-.label-info {
- background-color: #5bc0de;
-}
-.label-info[href]:hover,
-.label-info[href]:focus {
- background-color: #31b0d5;
-}
-.label-warning {
- background-color: #f0ad4e;
-}
-.label-warning[href]:hover,
-.label-warning[href]:focus {
- background-color: #ec971f;
-}
-.label-danger {
- background-color: #d9534f;
-}
-.label-danger[href]:hover,
-.label-danger[href]:focus {
- background-color: #c9302c;
-}
-.badge {
- display: inline-block;
- min-width: 10px;
- padding: 3px 7px;
- font-size: 12px;
- font-weight: bold;
- line-height: 1;
- color: #fff;
- text-align: center;
- white-space: nowrap;
- vertical-align: baseline;
- background-color: #777;
- border-radius: 10px;
-}
-.badge:empty {
- display: none;
-}
-.btn .badge {
- position: relative;
- top: -1px;
-}
-.btn-xs .badge {
- top: 0;
- padding: 1px 5px;
-}
-a.badge:hover,
-a.badge:focus {
- color: #fff;
- text-decoration: none;
- cursor: pointer;
-}
-a.list-group-item.active > .badge,
-.nav-pills > .active > a > .badge {
- color: #428bca;
- background-color: #fff;
-}
-.nav-pills > li > a > .badge {
- margin-left: 3px;
-}
-.jumbotron {
- padding: 30px;
- margin-bottom: 30px;
- color: inherit;
- background-color: #eee;
-}
-.jumbotron h1,
-.jumbotron .h1 {
- color: inherit;
-}
-.jumbotron p {
- margin-bottom: 15px;
- font-size: 21px;
- font-weight: 200;
-}
-.jumbotron > hr {
- border-top-color: #d5d5d5;
-}
-.container .jumbotron {
- border-radius: 6px;
-}
-.jumbotron .container {
- max-width: 100%;
-}
-@media screen and (min-width: 768px) {
- .jumbotron {
- padding-top: 48px;
- padding-bottom: 48px;
- }
- .container .jumbotron {
- padding-right: 60px;
- padding-left: 60px;
- }
- .jumbotron h1,
- .jumbotron .h1 {
- font-size: 63px;
- }
-}
-.thumbnail {
- display: block;
- padding: 4px;
- margin-bottom: 20px;
- line-height: 1.42857143;
- background-color: #fff;
- border: 1px solid #ddd;
- border-radius: 4px;
- -webkit-transition: all .2s ease-in-out;
- -o-transition: all .2s ease-in-out;
- transition: all .2s ease-in-out;
-}
-.thumbnail > img,
-.thumbnail a > img {
- margin-right: auto;
- margin-left: auto;
-}
-a.thumbnail:hover,
-a.thumbnail:focus,
-a.thumbnail.active {
- border-color: #428bca;
-}
-.thumbnail .caption {
- padding: 9px;
- color: #333;
-}
-.alert {
- padding: 15px;
- margin-bottom: 20px;
- border: 1px solid transparent;
- border-radius: 4px;
-}
-.alert h4 {
- margin-top: 0;
- color: inherit;
-}
-.alert .alert-link {
- font-weight: bold;
-}
-.alert > p,
-.alert > ul {
- margin-bottom: 0;
-}
-.alert > p + p {
- margin-top: 5px;
-}
-.alert-dismissable,
-.alert-dismissible {
- padding-right: 35px;
-}
-.alert-dismissable .close,
-.alert-dismissible .close {
- position: relative;
- top: -2px;
- right: -21px;
- color: inherit;
-}
-.alert-success {
- color: #3c763d;
- background-color: #dff0d8;
- border-color: #d6e9c6;
-}
-.alert-success hr {
- border-top-color: #c9e2b3;
-}
-.alert-success .alert-link {
- color: #2b542c;
-}
-.alert-info {
- color: #31708f;
- background-color: #d9edf7;
- border-color: #bce8f1;
-}
-.alert-info hr {
- border-top-color: #a6e1ec;
-}
-.alert-info .alert-link {
- color: #245269;
-}
-.alert-warning {
- color: #8a6d3b;
- background-color: #fcf8e3;
- border-color: #faebcc;
-}
-.alert-warning hr {
- border-top-color: #f7e1b5;
-}
-.alert-warning .alert-link {
- color: #66512c;
-}
-.alert-danger {
- color: #a94442;
- background-color: #f2dede;
- border-color: #ebccd1;
-}
-.alert-danger hr {
- border-top-color: #e4b9c0;
-}
-.alert-danger .alert-link {
- color: #843534;
-}
-@-webkit-keyframes progress-bar-stripes {
- from {
- background-position: 40px 0;
- }
- to {
- background-position: 0 0;
- }
-}
-@-o-keyframes progress-bar-stripes {
- from {
- background-position: 40px 0;
- }
- to {
- background-position: 0 0;
- }
-}
-@keyframes progress-bar-stripes {
- from {
- background-position: 40px 0;
- }
- to {
- background-position: 0 0;
- }
-}
-.progress {
- height: 20px;
- margin-bottom: 20px;
- overflow: hidden;
- background-color: #f5f5f5;
- border-radius: 4px;
- -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
- box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
-}
-.progress-bar {
- float: left;
- width: 0;
- height: 100%;
- font-size: 12px;
- line-height: 20px;
- color: #fff;
- text-align: center;
- background-color: #428bca;
- -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
- box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
- -webkit-transition: width .6s ease;
- -o-transition: width .6s ease;
- transition: width .6s ease;
-}
-.progress-striped .progress-bar,
-.progress-bar-striped {
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- -webkit-background-size: 40px 40px;
- background-size: 40px 40px;
-}
-.progress.active .progress-bar,
-.progress-bar.active {
- -webkit-animation: progress-bar-stripes 2s linear infinite;
- -o-animation: progress-bar-stripes 2s linear infinite;
- animation: progress-bar-stripes 2s linear infinite;
-}
-.progress-bar[aria-valuenow="1"],
-.progress-bar[aria-valuenow="2"] {
- min-width: 30px;
-}
-.progress-bar[aria-valuenow="0"] {
- min-width: 30px;
- color: #777;
- background-color: transparent;
- background-image: none;
- -webkit-box-shadow: none;
- box-shadow: none;
-}
-.progress-bar-success {
- background-color: #5cb85c;
-}
-.progress-striped .progress-bar-success {
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
-}
-.progress-bar-info {
- background-color: #5bc0de;
-}
-.progress-striped .progress-bar-info {
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
-}
-.progress-bar-warning {
- background-color: #f0ad4e;
-}
-.progress-striped .progress-bar-warning {
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
-}
-.progress-bar-danger {
- background-color: #d9534f;
-}
-.progress-striped .progress-bar-danger {
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
-}
-.media,
-.media-body {
- overflow: hidden;
- zoom: 1;
-}
-.media,
-.media .media {
- margin-top: 15px;
-}
-.media:first-child {
- margin-top: 0;
-}
-.media-object {
- display: block;
-}
-.media-heading {
- margin: 0 0 5px;
-}
-.media > .pull-left {
- margin-right: 10px;
-}
-.media > .pull-right {
- margin-left: 10px;
-}
-.media-list {
- padding-left: 0;
- list-style: none;
-}
-.list-group {
- padding-left: 0;
- margin-bottom: 20px;
-}
-.list-group-item {
- position: relative;
- display: block;
- padding: 10px 15px;
- margin-bottom: -1px;
- background-color: #fff;
- border: 1px solid #ddd;
-}
-.list-group-item:first-child {
- border-top-left-radius: 4px;
- border-top-right-radius: 4px;
-}
-.list-group-item:last-child {
- margin-bottom: 0;
- border-bottom-right-radius: 4px;
- border-bottom-left-radius: 4px;
-}
-.list-group-item > .badge {
- float: right;
-}
-.list-group-item > .badge + .badge {
- margin-right: 5px;
-}
-a.list-group-item {
- color: #555;
-}
-a.list-group-item .list-group-item-heading {
- color: #333;
-}
-a.list-group-item:hover,
-a.list-group-item:focus {
- color: #555;
- text-decoration: none;
- background-color: #f5f5f5;
-}
-.list-group-item.disabled,
-.list-group-item.disabled:hover,
-.list-group-item.disabled:focus {
- color: #777;
- background-color: #eee;
-}
-.list-group-item.disabled .list-group-item-heading,
-.list-group-item.disabled:hover .list-group-item-heading,
-.list-group-item.disabled:focus .list-group-item-heading {
- color: inherit;
-}
-.list-group-item.disabled .list-group-item-text,
-.list-group-item.disabled:hover .list-group-item-text,
-.list-group-item.disabled:focus .list-group-item-text {
- color: #777;
-}
-.list-group-item.active,
-.list-group-item.active:hover,
-.list-group-item.active:focus {
- z-index: 2;
- color: #fff;
- background-color: #428bca;
- border-color: #428bca;
-}
-.list-group-item.active .list-group-item-heading,
-.list-group-item.active:hover .list-group-item-heading,
-.list-group-item.active:focus .list-group-item-heading,
-.list-group-item.active .list-group-item-heading > small,
-.list-group-item.active:hover .list-group-item-heading > small,
-.list-group-item.active:focus .list-group-item-heading > small,
-.list-group-item.active .list-group-item-heading > .small,
-.list-group-item.active:hover .list-group-item-heading > .small,
-.list-group-item.active:focus .list-group-item-heading > .small {
- color: inherit;
-}
-.list-group-item.active .list-group-item-text,
-.list-group-item.active:hover .list-group-item-text,
-.list-group-item.active:focus .list-group-item-text {
- color: #e1edf7;
-}
-.list-group-item-success {
- color: #3c763d;
- background-color: #dff0d8;
-}
-a.list-group-item-success {
- color: #3c763d;
-}
-a.list-group-item-success .list-group-item-heading {
- color: inherit;
-}
-a.list-group-item-success:hover,
-a.list-group-item-success:focus {
- color: #3c763d;
- background-color: #d0e9c6;
-}
-a.list-group-item-success.active,
-a.list-group-item-success.active:hover,
-a.list-group-item-success.active:focus {
- color: #fff;
- background-color: #3c763d;
- border-color: #3c763d;
-}
-.list-group-item-info {
- color: #31708f;
- background-color: #d9edf7;
-}
-a.list-group-item-info {
- color: #31708f;
-}
-a.list-group-item-info .list-group-item-heading {
- color: inherit;
-}
-a.list-group-item-info:hover,
-a.list-group-item-info:focus {
- color: #31708f;
- background-color: #c4e3f3;
-}
-a.list-group-item-info.active,
-a.list-group-item-info.active:hover,
-a.list-group-item-info.active:focus {
- color: #fff;
- background-color: #31708f;
- border-color: #31708f;
-}
-.list-group-item-warning {
- color: #8a6d3b;
- background-color: #fcf8e3;
-}
-a.list-group-item-warning {
- color: #8a6d3b;
-}
-a.list-group-item-warning .list-group-item-heading {
- color: inherit;
-}
-a.list-group-item-warning:hover,
-a.list-group-item-warning:focus {
- color: #8a6d3b;
- background-color: #faf2cc;
-}
-a.list-group-item-warning.active,
-a.list-group-item-warning.active:hover,
-a.list-group-item-warning.active:focus {
- color: #fff;
- background-color: #8a6d3b;
- border-color: #8a6d3b;
-}
-.list-group-item-danger {
- color: #a94442;
- background-color: #f2dede;
-}
-a.list-group-item-danger {
- color: #a94442;
-}
-a.list-group-item-danger .list-group-item-heading {
- color: inherit;
-}
-a.list-group-item-danger:hover,
-a.list-group-item-danger:focus {
- color: #a94442;
- background-color: #ebcccc;
-}
-a.list-group-item-danger.active,
-a.list-group-item-danger.active:hover,
-a.list-group-item-danger.active:focus {
- color: #fff;
- background-color: #a94442;
- border-color: #a94442;
-}
-.list-group-item-heading {
- margin-top: 0;
- margin-bottom: 5px;
-}
-.list-group-item-text {
- margin-bottom: 0;
- line-height: 1.3;
-}
-.panel {
- margin-bottom: 20px;
- background-color: #fff;
- border: 1px solid transparent;
- border-radius: 4px;
- -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
- box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
-}
-.panel-body {
- padding: 15px;
-}
-.panel-heading {
- padding: 10px 15px;
- border-bottom: 1px solid transparent;
- border-top-left-radius: 3px;
- border-top-right-radius: 3px;
-}
-.panel-heading > .dropdown .dropdown-toggle {
- color: inherit;
-}
-.panel-title {
- margin-top: 0;
- margin-bottom: 0;
- font-size: 16px;
- color: inherit;
-}
-.panel-title > a {
- color: inherit;
-}
-.panel-footer {
- padding: 10px 15px;
- background-color: #f5f5f5;
- border-top: 1px solid #ddd;
- border-bottom-right-radius: 3px;
- border-bottom-left-radius: 3px;
-}
-.panel > .list-group {
- margin-bottom: 0;
-}
-.panel > .list-group .list-group-item {
- border-width: 1px 0;
- border-radius: 0;
-}
-.panel > .list-group:first-child .list-group-item:first-child {
- border-top: 0;
- border-top-left-radius: 3px;
- border-top-right-radius: 3px;
-}
-.panel > .list-group:last-child .list-group-item:last-child {
- border-bottom: 0;
- border-bottom-right-radius: 3px;
- border-bottom-left-radius: 3px;
-}
-.panel-heading + .list-group .list-group-item:first-child {
- border-top-width: 0;
-}
-.list-group + .panel-footer {
- border-top-width: 0;
-}
-.panel > .table,
-.panel > .table-responsive > .table,
-.panel > .panel-collapse > .table {
- margin-bottom: 0;
-}
-.panel > .table:first-child,
-.panel > .table-responsive:first-child > .table:first-child {
- border-top-left-radius: 3px;
- border-top-right-radius: 3px;
-}
-.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
-.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
-.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,
-.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,
-.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,
-.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,
-.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,
-.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {
- border-top-left-radius: 3px;
-}
-.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,
-.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,
-.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,
-.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,
-.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,
-.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,
-.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,
-.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
- border-top-right-radius: 3px;
-}
-.panel > .table:last-child,
-.panel > .table-responsive:last-child > .table:last-child {
- border-bottom-right-radius: 3px;
- border-bottom-left-radius: 3px;
-}
-.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
-.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
-.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
-.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
-.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,
-.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,
-.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,
-.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {
- border-bottom-left-radius: 3px;
-}
-.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,
-.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,
-.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
-.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
-.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,
-.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,
-.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,
-.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {
- border-bottom-right-radius: 3px;
-}
-.panel > .panel-body + .table,
-.panel > .panel-body + .table-responsive {
- border-top: 1px solid #ddd;
-}
-.panel > .table > tbody:first-child > tr:first-child th,
-.panel > .table > tbody:first-child > tr:first-child td {
- border-top: 0;
-}
-.panel > .table-bordered,
-.panel > .table-responsive > .table-bordered {
- border: 0;
-}
-.panel > .table-bordered > thead > tr > th:first-child,
-.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,
-.panel > .table-bordered > tbody > tr > th:first-child,
-.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,
-.panel > .table-bordered > tfoot > tr > th:first-child,
-.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,
-.panel > .table-bordered > thead > tr > td:first-child,
-.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,
-.panel > .table-bordered > tbody > tr > td:first-child,
-.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,
-.panel > .table-bordered > tfoot > tr > td:first-child,
-.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
- border-left: 0;
-}
-.panel > .table-bordered > thead > tr > th:last-child,
-.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,
-.panel > .table-bordered > tbody > tr > th:last-child,
-.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,
-.panel > .table-bordered > tfoot > tr > th:last-child,
-.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,
-.panel > .table-bordered > thead > tr > td:last-child,
-.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,
-.panel > .table-bordered > tbody > tr > td:last-child,
-.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,
-.panel > .table-bordered > tfoot > tr > td:last-child,
-.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
- border-right: 0;
-}
-.panel > .table-bordered > thead > tr:first-child > td,
-.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
-.panel > .table-bordered > tbody > tr:first-child > td,
-.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
-.panel > .table-bordered > thead > tr:first-child > th,
-.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
-.panel > .table-bordered > tbody > tr:first-child > th,
-.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
- border-bottom: 0;
-}
-.panel > .table-bordered > tbody > tr:last-child > td,
-.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
-.panel > .table-bordered > tfoot > tr:last-child > td,
-.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,
-.panel > .table-bordered > tbody > tr:last-child > th,
-.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
-.panel > .table-bordered > tfoot > tr:last-child > th,
-.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
- border-bottom: 0;
-}
-.panel > .table-responsive {
- margin-bottom: 0;
- border: 0;
-}
-.panel-group {
- margin-bottom: 20px;
-}
-.panel-group .panel {
- margin-bottom: 0;
- border-radius: 4px;
-}
-.panel-group .panel + .panel {
- margin-top: 5px;
-}
-.panel-group .panel-heading {
- border-bottom: 0;
-}
-.panel-group .panel-heading + .panel-collapse > .panel-body {
- border-top: 1px solid #ddd;
-}
-.panel-group .panel-footer {
- border-top: 0;
-}
-.panel-group .panel-footer + .panel-collapse .panel-body {
- border-bottom: 1px solid #ddd;
-}
-.panel-default {
- border-color: #ddd;
-}
-.panel-default > .panel-heading {
- color: #333;
- background-color: #f5f5f5;
- border-color: #ddd;
-}
-.panel-default > .panel-heading + .panel-collapse > .panel-body {
- border-top-color: #ddd;
-}
-.panel-default > .panel-heading .badge {
- color: #f5f5f5;
- background-color: #333;
-}
-.panel-default > .panel-footer + .panel-collapse > .panel-body {
- border-bottom-color: #ddd;
-}
-.panel-primary {
- border-color: #428bca;
-}
-.panel-primary > .panel-heading {
- color: #fff;
- background-color: #428bca;
- border-color: #428bca;
-}
-.panel-primary > .panel-heading + .panel-collapse > .panel-body {
- border-top-color: #428bca;
-}
-.panel-primary > .panel-heading .badge {
- color: #428bca;
- background-color: #fff;
-}
-.panel-primary > .panel-footer + .panel-collapse > .panel-body {
- border-bottom-color: #428bca;
-}
-.panel-success {
- border-color: #d6e9c6;
-}
-.panel-success > .panel-heading {
- color: #3c763d;
- background-color: #dff0d8;
- border-color: #d6e9c6;
-}
-.panel-success > .panel-heading + .panel-collapse > .panel-body {
- border-top-color: #d6e9c6;
-}
-.panel-success > .panel-heading .badge {
- color: #dff0d8;
- background-color: #3c763d;
-}
-.panel-success > .panel-footer + .panel-collapse > .panel-body {
- border-bottom-color: #d6e9c6;
-}
-.panel-info {
- border-color: #bce8f1;
-}
-.panel-info > .panel-heading {
- color: #31708f;
- background-color: #d9edf7;
- border-color: #bce8f1;
-}
-.panel-info > .panel-heading + .panel-collapse > .panel-body {
- border-top-color: #bce8f1;
-}
-.panel-info > .panel-heading .badge {
- color: #d9edf7;
- background-color: #31708f;
-}
-.panel-info > .panel-footer + .panel-collapse > .panel-body {
- border-bottom-color: #bce8f1;
-}
-.panel-warning {
- border-color: #faebcc;
-}
-.panel-warning > .panel-heading {
- color: #8a6d3b;
- background-color: #fcf8e3;
- border-color: #faebcc;
-}
-.panel-warning > .panel-heading + .panel-collapse > .panel-body {
- border-top-color: #faebcc;
-}
-.panel-warning > .panel-heading .badge {
- color: #fcf8e3;
- background-color: #8a6d3b;
-}
-.panel-warning > .panel-footer + .panel-collapse > .panel-body {
- border-bottom-color: #faebcc;
-}
-.panel-danger {
- border-color: #ebccd1;
-}
-.panel-danger > .panel-heading {
- color: #a94442;
- background-color: #f2dede;
- border-color: #ebccd1;
-}
-.panel-danger > .panel-heading + .panel-collapse > .panel-body {
- border-top-color: #ebccd1;
-}
-.panel-danger > .panel-heading .badge {
- color: #f2dede;
- background-color: #a94442;
-}
-.panel-danger > .panel-footer + .panel-collapse > .panel-body {
- border-bottom-color: #ebccd1;
-}
-.embed-responsive {
- position: relative;
- display: block;
- height: 0;
- padding: 0;
- overflow: hidden;
-}
-.embed-responsive .embed-responsive-item,
-.embed-responsive iframe,
-.embed-responsive embed,
-.embed-responsive object {
- position: absolute;
- top: 0;
- bottom: 0;
- left: 0;
- width: 100%;
- height: 100%;
- border: 0;
-}
-.embed-responsive.embed-responsive-16by9 {
- padding-bottom: 56.25%;
-}
-.embed-responsive.embed-responsive-4by3 {
- padding-bottom: 75%;
-}
-.well {
- min-height: 20px;
- padding: 19px;
- margin-bottom: 20px;
- background-color: #f5f5f5;
- border: 1px solid #e3e3e3;
- border-radius: 4px;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
-}
-.well blockquote {
- border-color: #ddd;
- border-color: rgba(0, 0, 0, .15);
-}
-.well-lg {
- padding: 24px;
- border-radius: 6px;
-}
-.well-sm {
- padding: 9px;
- border-radius: 3px;
-}
-.close {
- float: right;
- font-size: 21px;
- font-weight: bold;
- line-height: 1;
- color: #000;
- text-shadow: 0 1px 0 #fff;
- filter: alpha(opacity=20);
- opacity: .2;
-}
-.close:hover,
-.close:focus {
- color: #000;
- text-decoration: none;
- cursor: pointer;
- filter: alpha(opacity=50);
- opacity: .5;
-}
-button.close {
- -webkit-appearance: none;
- padding: 0;
- cursor: pointer;
- background: transparent;
- border: 0;
-}
-.modal-open {
- overflow: hidden;
-}
-.modal {
- position: fixed;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: 1050;
- display: none;
- overflow: hidden;
- -webkit-overflow-scrolling: touch;
- outline: 0;
-}
-.modal.fade .modal-dialog {
- -webkit-transition: -webkit-transform .3s ease-out;
- -o-transition: -o-transform .3s ease-out;
- transition: transform .3s ease-out;
- -webkit-transform: translate3d(0, -25%, 0);
- -o-transform: translate3d(0, -25%, 0);
- transform: translate3d(0, -25%, 0);
-}
-.modal.in .modal-dialog {
- -webkit-transform: translate3d(0, 0, 0);
- -o-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0);
-}
-.modal-open .modal {
- overflow-x: hidden;
- overflow-y: auto;
-}
-.modal-dialog {
- position: relative;
- width: auto;
- margin: 10px;
-}
-.modal-content {
- position: relative;
- background-color: #fff;
- -webkit-background-clip: padding-box;
- background-clip: padding-box;
- border: 1px solid #999;
- border: 1px solid rgba(0, 0, 0, .2);
- border-radius: 6px;
- outline: 0;
- -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
- box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
-}
-.modal-backdrop {
- position: fixed;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: 1040;
- background-color: #000;
-}
-.modal-backdrop.fade {
- filter: alpha(opacity=0);
- opacity: 0;
-}
-.modal-backdrop.in {
- filter: alpha(opacity=50);
- opacity: .5;
-}
-.modal-header {
- min-height: 16.42857143px;
- padding: 15px;
- border-bottom: 1px solid #e5e5e5;
-}
-.modal-header .close {
- margin-top: -2px;
-}
-.modal-title {
- margin: 0;
- line-height: 1.42857143;
-}
-.modal-body {
- position: relative;
- padding: 15px;
-}
-.modal-footer {
- padding: 15px;
- text-align: right;
- border-top: 1px solid #e5e5e5;
-}
-.modal-footer .btn + .btn {
- margin-bottom: 0;
- margin-left: 5px;
-}
-.modal-footer .btn-group .btn + .btn {
- margin-left: -1px;
-}
-.modal-footer .btn-block + .btn-block {
- margin-left: 0;
-}
-.modal-scrollbar-measure {
- position: absolute;
- top: -9999px;
- width: 50px;
- height: 50px;
- overflow: scroll;
-}
-@media (min-width: 768px) {
- .modal-dialog {
- width: 600px;
- margin: 30px auto;
- }
- .modal-content {
- -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
- box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
- }
- .modal-sm {
- width: 300px;
- }
-}
-@media (min-width: 992px) {
- .modal-lg {
- width: 900px;
- }
-}
-.tooltip {
- position: absolute;
- z-index: 1070;
- display: block;
- font-size: 12px;
- line-height: 1.4;
- visibility: visible;
- filter: alpha(opacity=0);
- opacity: 0;
-}
-.tooltip.in {
- filter: alpha(opacity=90);
- opacity: .9;
-}
-.tooltip.top {
- padding: 5px 0;
- margin-top: -3px;
-}
-.tooltip.right {
- padding: 0 5px;
- margin-left: 3px;
-}
-.tooltip.bottom {
- padding: 5px 0;
- margin-top: 3px;
-}
-.tooltip.left {
- padding: 0 5px;
- margin-left: -3px;
-}
-.tooltip-inner {
- max-width: 200px;
- padding: 3px 8px;
- color: #fff;
- text-align: center;
- text-decoration: none;
- background-color: #000;
- border-radius: 4px;
-}
-.tooltip-arrow {
- position: absolute;
- width: 0;
- height: 0;
- border-color: transparent;
- border-style: solid;
-}
-.tooltip.top .tooltip-arrow {
- bottom: 0;
- left: 50%;
- margin-left: -5px;
- border-width: 5px 5px 0;
- border-top-color: #000;
-}
-.tooltip.top-left .tooltip-arrow {
- bottom: 0;
- left: 5px;
- border-width: 5px 5px 0;
- border-top-color: #000;
-}
-.tooltip.top-right .tooltip-arrow {
- right: 5px;
- bottom: 0;
- border-width: 5px 5px 0;
- border-top-color: #000;
-}
-.tooltip.right .tooltip-arrow {
- top: 50%;
- left: 0;
- margin-top: -5px;
- border-width: 5px 5px 5px 0;
- border-right-color: #000;
-}
-.tooltip.left .tooltip-arrow {
- top: 50%;
- right: 0;
- margin-top: -5px;
- border-width: 5px 0 5px 5px;
- border-left-color: #000;
-}
-.tooltip.bottom .tooltip-arrow {
- top: 0;
- left: 50%;
- margin-left: -5px;
- border-width: 0 5px 5px;
- border-bottom-color: #000;
-}
-.tooltip.bottom-left .tooltip-arrow {
- top: 0;
- left: 5px;
- border-width: 0 5px 5px;
- border-bottom-color: #000;
-}
-.tooltip.bottom-right .tooltip-arrow {
- top: 0;
- right: 5px;
- border-width: 0 5px 5px;
- border-bottom-color: #000;
-}
-.popover {
- position: absolute;
- top: 0;
- left: 0;
- z-index: 1060;
- display: none;
- max-width: 276px;
- padding: 1px;
- text-align: left;
- white-space: normal;
- background-color: #fff;
- -webkit-background-clip: padding-box;
- background-clip: padding-box;
- border: 1px solid #ccc;
- border: 1px solid rgba(0, 0, 0, .2);
- border-radius: 6px;
- -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
- box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
-}
-.popover.top {
- margin-top: -10px;
-}
-.popover.right {
- margin-left: 10px;
-}
-.popover.bottom {
- margin-top: 10px;
-}
-.popover.left {
- margin-left: -10px;
-}
-.popover-title {
- padding: 8px 14px;
- margin: 0;
- font-size: 14px;
- font-weight: normal;
- line-height: 18px;
- background-color: #f7f7f7;
- border-bottom: 1px solid #ebebeb;
- border-radius: 5px 5px 0 0;
-}
-.popover-content {
- padding: 9px 14px;
-}
-.popover > .arrow,
-.popover > .arrow:after {
- position: absolute;
- display: block;
- width: 0;
- height: 0;
- border-color: transparent;
- border-style: solid;
-}
-.popover > .arrow {
- border-width: 11px;
-}
-.popover > .arrow:after {
- content: "";
- border-width: 10px;
-}
-.popover.top > .arrow {
- bottom: -11px;
- left: 50%;
- margin-left: -11px;
- border-top-color: #999;
- border-top-color: rgba(0, 0, 0, .25);
- border-bottom-width: 0;
-}
-.popover.top > .arrow:after {
- bottom: 1px;
- margin-left: -10px;
- content: " ";
- border-top-color: #fff;
- border-bottom-width: 0;
-}
-.popover.right > .arrow {
- top: 50%;
- left: -11px;
- margin-top: -11px;
- border-right-color: #999;
- border-right-color: rgba(0, 0, 0, .25);
- border-left-width: 0;
-}
-.popover.right > .arrow:after {
- bottom: -10px;
- left: 1px;
- content: " ";
- border-right-color: #fff;
- border-left-width: 0;
-}
-.popover.bottom > .arrow {
- top: -11px;
- left: 50%;
- margin-left: -11px;
- border-top-width: 0;
- border-bottom-color: #999;
- border-bottom-color: rgba(0, 0, 0, .25);
-}
-.popover.bottom > .arrow:after {
- top: 1px;
- margin-left: -10px;
- content: " ";
- border-top-width: 0;
- border-bottom-color: #fff;
-}
-.popover.left > .arrow {
- top: 50%;
- right: -11px;
- margin-top: -11px;
- border-right-width: 0;
- border-left-color: #999;
- border-left-color: rgba(0, 0, 0, .25);
-}
-.popover.left > .arrow:after {
- right: 1px;
- bottom: -10px;
- content: " ";
- border-right-width: 0;
- border-left-color: #fff;
-}
-.carousel {
- position: relative;
-}
-.carousel-inner {
- position: relative;
- width: 100%;
- overflow: hidden;
-}
-.carousel-inner > .item {
- position: relative;
- display: none;
- -webkit-transition: .6s ease-in-out left;
- -o-transition: .6s ease-in-out left;
- transition: .6s ease-in-out left;
-}
-.carousel-inner > .item > img,
-.carousel-inner > .item > a > img {
- line-height: 1;
-}
-.carousel-inner > .active,
-.carousel-inner > .next,
-.carousel-inner > .prev {
- display: block;
-}
-.carousel-inner > .active {
- left: 0;
-}
-.carousel-inner > .next,
-.carousel-inner > .prev {
- position: absolute;
- top: 0;
- width: 100%;
-}
-.carousel-inner > .next {
- left: 100%;
-}
-.carousel-inner > .prev {
- left: -100%;
-}
-.carousel-inner > .next.left,
-.carousel-inner > .prev.right {
- left: 0;
-}
-.carousel-inner > .active.left {
- left: -100%;
-}
-.carousel-inner > .active.right {
- left: 100%;
-}
-.carousel-control {
- position: absolute;
- top: 0;
- bottom: 0;
- left: 0;
- width: 15%;
- font-size: 20px;
- color: #fff;
- text-align: center;
- text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
- filter: alpha(opacity=50);
- opacity: .5;
-}
-.carousel-control.left {
- background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
- background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
- background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001)));
- background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);
- background-repeat: repeat-x;
-}
-.carousel-control.right {
- right: 0;
- left: auto;
- background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
- background-image: -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
- background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5)));
- background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);
- background-repeat: repeat-x;
-}
-.carousel-control:hover,
-.carousel-control:focus {
- color: #fff;
- text-decoration: none;
- filter: alpha(opacity=90);
- outline: 0;
- opacity: .9;
-}
-.carousel-control .icon-prev,
-.carousel-control .icon-next,
-.carousel-control .glyphicon-chevron-left,
-.carousel-control .glyphicon-chevron-right {
- position: absolute;
- top: 50%;
- z-index: 5;
- display: inline-block;
-}
-.carousel-control .icon-prev,
-.carousel-control .glyphicon-chevron-left {
- left: 50%;
- margin-left: -10px;
-}
-.carousel-control .icon-next,
-.carousel-control .glyphicon-chevron-right {
- right: 50%;
- margin-right: -10px;
-}
-.carousel-control .icon-prev,
-.carousel-control .icon-next {
- width: 20px;
- height: 20px;
- margin-top: -10px;
- font-family: serif;
-}
-.carousel-control .icon-prev:before {
- content: '\2039';
-}
-.carousel-control .icon-next:before {
- content: '\203a';
-}
-.carousel-indicators {
- position: absolute;
- bottom: 10px;
- left: 50%;
- z-index: 15;
- width: 60%;
- padding-left: 0;
- margin-left: -30%;
- text-align: center;
- list-style: none;
-}
-.carousel-indicators li {
- display: inline-block;
- width: 10px;
- height: 10px;
- margin: 1px;
- text-indent: -999px;
- cursor: pointer;
- background-color: #000 \9;
- background-color: rgba(0, 0, 0, 0);
- border: 1px solid #fff;
- border-radius: 10px;
-}
-.carousel-indicators .active {
- width: 12px;
- height: 12px;
- margin: 0;
- background-color: #fff;
-}
-.carousel-caption {
- position: absolute;
- right: 15%;
- bottom: 20px;
- left: 15%;
- z-index: 10;
- padding-top: 20px;
- padding-bottom: 20px;
- color: #fff;
- text-align: center;
- text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
-}
-.carousel-caption .btn {
- text-shadow: none;
-}
-@media screen and (min-width: 768px) {
- .carousel-control .glyphicon-chevron-left,
- .carousel-control .glyphicon-chevron-right,
- .carousel-control .icon-prev,
- .carousel-control .icon-next {
- width: 30px;
- height: 30px;
- margin-top: -15px;
- font-size: 30px;
- }
- .carousel-control .glyphicon-chevron-left,
- .carousel-control .icon-prev {
- margin-left: -15px;
- }
- .carousel-control .glyphicon-chevron-right,
- .carousel-control .icon-next {
- margin-right: -15px;
- }
- .carousel-caption {
- right: 20%;
- left: 20%;
- padding-bottom: 30px;
- }
- .carousel-indicators {
- bottom: 20px;
- }
-}
-.clearfix:before,
-.clearfix:after,
-.dl-horizontal dd:before,
-.dl-horizontal dd:after,
-.container:before,
-.container:after,
-.container-fluid:before,
-.container-fluid:after,
-.row:before,
-.row:after,
-.form-horizontal .form-group:before,
-.form-horizontal .form-group:after,
-.btn-toolbar:before,
-.btn-toolbar:after,
-.btn-group-vertical > .btn-group:before,
-.btn-group-vertical > .btn-group:after,
-.nav:before,
-.nav:after,
-.navbar:before,
-.navbar:after,
-.navbar-header:before,
-.navbar-header:after,
-.navbar-collapse:before,
-.navbar-collapse:after,
-.pager:before,
-.pager:after,
-.panel-body:before,
-.panel-body:after,
-.modal-footer:before,
-.modal-footer:after {
- display: table;
- content: " ";
-}
-.clearfix:after,
-.dl-horizontal dd:after,
-.container:after,
-.container-fluid:after,
-.row:after,
-.form-horizontal .form-group:after,
-.btn-toolbar:after,
-.btn-group-vertical > .btn-group:after,
-.nav:after,
-.navbar:after,
-.navbar-header:after,
-.navbar-collapse:after,
-.pager:after,
-.panel-body:after,
-.modal-footer:after {
- clear: both;
-}
-.center-block {
- display: block;
- margin-right: auto;
- margin-left: auto;
-}
-.pull-right {
- float: right !important;
-}
-.pull-left {
- float: left !important;
-}
-.hide {
- display: none !important;
-}
-.show {
- display: block !important;
-}
-.invisible {
- visibility: hidden;
-}
-.text-hide {
- font: 0/0 a;
- color: transparent;
- text-shadow: none;
- background-color: transparent;
- border: 0;
-}
-.hidden {
- display: none !important;
- visibility: hidden !important;
-}
-.affix {
- position: fixed;
- -webkit-transform: translate3d(0, 0, 0);
- -o-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0);
-}
-@-ms-viewport {
- width: device-width;
-}
-.visible-xs,
-.visible-sm,
-.visible-md,
-.visible-lg {
- display: none !important;
-}
-.visible-xs-block,
-.visible-xs-inline,
-.visible-xs-inline-block,
-.visible-sm-block,
-.visible-sm-inline,
-.visible-sm-inline-block,
-.visible-md-block,
-.visible-md-inline,
-.visible-md-inline-block,
-.visible-lg-block,
-.visible-lg-inline,
-.visible-lg-inline-block {
- display: none !important;
-}
-@media (max-width: 767px) {
- .visible-xs {
- display: block !important;
- }
- table.visible-xs {
- display: table;
- }
- tr.visible-xs {
- display: table-row !important;
- }
- th.visible-xs,
- td.visible-xs {
- display: table-cell !important;
- }
-}
-@media (max-width: 767px) {
- .visible-xs-block {
- display: block !important;
- }
-}
-@media (max-width: 767px) {
- .visible-xs-inline {
- display: inline !important;
- }
-}
-@media (max-width: 767px) {
- .visible-xs-inline-block {
- display: inline-block !important;
- }
-}
-@media (min-width: 768px) and (max-width: 991px) {
- .visible-sm {
- display: block !important;
- }
- table.visible-sm {
- display: table;
- }
- tr.visible-sm {
- display: table-row !important;
- }
- th.visible-sm,
- td.visible-sm {
- display: table-cell !important;
- }
-}
-@media (min-width: 768px) and (max-width: 991px) {
- .visible-sm-block {
- display: block !important;
- }
-}
-@media (min-width: 768px) and (max-width: 991px) {
- .visible-sm-inline {
- display: inline !important;
- }
-}
-@media (min-width: 768px) and (max-width: 991px) {
- .visible-sm-inline-block {
- display: inline-block !important;
- }
-}
-@media (min-width: 992px) and (max-width: 1199px) {
- .visible-md {
- display: block !important;
- }
- table.visible-md {
- display: table;
- }
- tr.visible-md {
- display: table-row !important;
- }
- th.visible-md,
- td.visible-md {
- display: table-cell !important;
- }
-}
-@media (min-width: 992px) and (max-width: 1199px) {
- .visible-md-block {
- display: block !important;
- }
-}
-@media (min-width: 992px) and (max-width: 1199px) {
- .visible-md-inline {
- display: inline !important;
- }
-}
-@media (min-width: 992px) and (max-width: 1199px) {
- .visible-md-inline-block {
- display: inline-block !important;
- }
-}
-@media (min-width: 1200px) {
- .visible-lg {
- display: block !important;
- }
- table.visible-lg {
- display: table;
- }
- tr.visible-lg {
- display: table-row !important;
- }
- th.visible-lg,
- td.visible-lg {
- display: table-cell !important;
- }
-}
-@media (min-width: 1200px) {
- .visible-lg-block {
- display: block !important;
- }
-}
-@media (min-width: 1200px) {
- .visible-lg-inline {
- display: inline !important;
- }
-}
-@media (min-width: 1200px) {
- .visible-lg-inline-block {
- display: inline-block !important;
- }
-}
-@media (max-width: 767px) {
- .hidden-xs {
- display: none !important;
- }
-}
-@media (min-width: 768px) and (max-width: 991px) {
- .hidden-sm {
- display: none !important;
- }
-}
-@media (min-width: 992px) and (max-width: 1199px) {
- .hidden-md {
- display: none !important;
- }
-}
-@media (min-width: 1200px) {
- .hidden-lg {
- display: none !important;
- }
-}
-.visible-print {
- display: none !important;
-}
-@media print {
- .visible-print {
- display: block !important;
- }
- table.visible-print {
- display: table;
- }
- tr.visible-print {
- display: table-row !important;
- }
- th.visible-print,
- td.visible-print {
- display: table-cell !important;
- }
-}
-.visible-print-block {
- display: none !important;
-}
-@media print {
- .visible-print-block {
- display: block !important;
- }
-}
-.visible-print-inline {
- display: none !important;
-}
-@media print {
- .visible-print-inline {
- display: inline !important;
- }
-}
-.visible-print-inline-block {
- display: none !important;
-}
-@media print {
- .visible-print-inline-block {
- display: inline-block !important;
- }
-}
-@media print {
- .hidden-print {
- display: none !important;
- }
-}
-/*# sourceMappingURL=bootstrap.css.map */
diff --git a/library/AP/client-vendor/after-body/10-bootstrap/bootstrap.js b/library/AP/client-vendor/after-body/10-bootstrap/bootstrap.js
deleted file mode 100755
index 53da1c7..0000000
--- a/library/AP/client-vendor/after-body/10-bootstrap/bootstrap.js
+++ /dev/null
@@ -1,2114 +0,0 @@
-/*!
- * Bootstrap v3.2.0 (http://getbootstrap.com)
- * Copyright 2011-2014 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') }
-
-/* ========================================================================
- * Bootstrap: transition.js v3.2.0
- * http://getbootstrap.com/javascript/#transitions
- * ========================================================================
- * Copyright 2011-2014 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.2.0
- * http://getbootstrap.com/javascript/#alerts
- * ========================================================================
- * Copyright 2011-2014 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.2.0'
-
- 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.hasClass('alert') ? $this : $this.parent()
- }
-
- $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(150) :
- 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.2.0
- * http://getbootstrap.com/javascript/#buttons
- * ========================================================================
- * Copyright 2011-2014 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.2.0'
-
- 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]())
-
- $el[val](data[state] == null ? this.options[state] : data[state])
-
- // push to event loop to allow forms to submit
- setTimeout($.proxy(function () {
- 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')
- }
-
- 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()
- })
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: carousel.js v3.2.0
- * http://getbootstrap.com/javascript/#carousel
- * ========================================================================
- * Copyright 2011-2014 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).on('keydown.bs.carousel', $.proxy(this.keydown, this))
- this.$indicators = this.$element.find('.carousel-indicators')
- this.options = options
- this.paused =
- this.sliding =
- this.interval =
- this.$active =
- this.$items = null
-
- this.options.pause == 'hover' && this.$element
- .on('mouseenter.bs.carousel', $.proxy(this.pause, this))
- .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
- }
-
- Carousel.VERSION = '3.2.0'
-
- Carousel.DEFAULTS = {
- interval: 5000,
- pause: 'hover',
- wrap: true
- }
-
- Carousel.prototype.keydown = function (e) {
- 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.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[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 || $active[type]()
- var isCycling = this.interval
- var direction = type == 'next' ? 'left' : 'right'
- var fallback = type == 'next' ? 'first' : 'last'
- var that = this
-
- if (!$next.length) {
- if (!this.options.wrap) return
- $next = this.$element.find('.item')[fallback]()
- }
-
- 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($active.css('transition-duration').slice(0, -1) * 1000)
- } 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
- // =================
-
- $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', 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()
- })
-
- $(window).on('load', function () {
- $('[data-ride="carousel"]').each(function () {
- var $carousel = $(this)
- Plugin.call($carousel, $carousel.data())
- })
- })
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: collapse.js v3.2.0
- * http://getbootstrap.com/javascript/#collapse
- * ========================================================================
- * Copyright 2011-2014 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.transitioning = null
-
- if (this.options.parent) this.$parent = $(this.options.parent)
- if (this.options.toggle) this.toggle()
- }
-
- Collapse.VERSION = '3.2.0'
-
- 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 startEvent = $.Event('show.bs.collapse')
- this.$element.trigger(startEvent)
- if (startEvent.isDefaultPrevented()) return
-
- var actives = this.$parent && this.$parent.find('> .panel > .in')
-
- if (actives && actives.length) {
- var hasData = actives.data('bs.collapse')
- if (hasData && hasData.transitioning) return
- Plugin.call(actives, 'hide')
- hasData || actives.data('bs.collapse', null)
- }
-
- var dimension = this.dimension()
-
- this.$element
- .removeClass('collapse')
- .addClass('collapsing')[dimension](0)
-
- 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(350)[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')
- .removeClass('in')
-
- this.transitioning = 1
-
- var complete = function () {
- this.transitioning = 0
- this.$element
- .trigger('hidden.bs.collapse')
- .removeClass('collapsing')
- .addClass('collapse')
- }
-
- if (!$.support.transition) return complete.call(this)
-
- this.$element
- [dimension](0)
- .one('bsTransitionEnd', $.proxy(complete, this))
- .emulateTransitionEnd(350)
- }
-
- Collapse.prototype.toggle = function () {
- this[this.$element.hasClass('in') ? 'hide' : 'show']()
- }
-
-
- // 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 && option == 'show') option = !option
- 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 href
- var $this = $(this)
- var target = $this.attr('data-target')
- || e.preventDefault()
- || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
- var $target = $(target)
- var data = $target.data('bs.collapse')
- var option = data ? 'toggle' : $this.data()
- var parent = $this.attr('data-parent')
- var $parent = parent && $(parent)
-
- if (!data || !data.transitioning) {
- if ($parent) $parent.find('[data-toggle="collapse"][data-parent="' + parent + '"]').not($this).addClass('collapsed')
- $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed')
- }
-
- Plugin.call($target, option)
- })
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: dropdown.js v3.2.0
- * http://getbootstrap.com/javascript/#dropdowns
- * ========================================================================
- * Copyright 2011-2014 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.2.0'
-
- 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
- $('
').insertAfter($(this)).on('click', clearMenus)
- }
-
- var relatedTarget = { relatedTarget: this }
- $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))
-
- if (e.isDefaultPrevented()) return
-
- $this.trigger('focus')
-
- $parent
- .toggleClass('open')
- .trigger('shown.bs.dropdown', relatedTarget)
- }
-
- return false
- }
-
- Dropdown.prototype.keydown = function (e) {
- if (!/(38|40|27)/.test(e.keyCode)) 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 || (isActive && e.keyCode == 27)) {
- if (e.which == 27) $parent.find(toggle).trigger('focus')
- return $this.trigger('click')
- }
-
- var desc = ' li:not(.divider):visible a'
- var $items = $parent.find('[role="menu"]' + desc + ', [role="listbox"]' + desc)
-
- if (!$items.length) return
-
- var index = $items.index($items.filter(':focus'))
-
- if (e.keyCode == 38 && index > 0) index-- // up
- if (e.keyCode == 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 $parent = getParent($(this))
- var relatedTarget = { relatedTarget: this }
- if (!$parent.hasClass('open')) return
- $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
- if (e.isDefaultPrevented()) return
- $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 + ', [role="menu"], [role="listbox"]', Dropdown.prototype.keydown)
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: modal.js v3.2.0
- * http://getbootstrap.com/javascript/#modals
- * ========================================================================
- * Copyright 2011-2014 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.$backdrop =
- this.isShown = null
- this.scrollbarWidth = 0
-
- 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.2.0'
-
- 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.$body.addClass('modal-open')
-
- this.setScrollbar()
- this.escape()
-
- this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
-
- 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)
-
- 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.$element.find('.modal-dialog') // wait for modal to slide in
- .one('bsTransitionEnd', function () {
- that.$element.trigger('focus').trigger(e)
- })
- .emulateTransitionEnd(300) :
- 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.$body.removeClass('modal-open')
-
- this.resetScrollbar()
- this.escape()
-
- $(document).off('focusin.bs.modal')
-
- this.$element
- .removeClass('in')
- .attr('aria-hidden', true)
- .off('click.dismiss.bs.modal')
-
- $.support.transition && this.$element.hasClass('fade') ?
- this.$element
- .one('bsTransitionEnd', $.proxy(this.hideModal, this))
- .emulateTransitionEnd(300) :
- 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('keyup.dismiss.bs.modal', $.proxy(function (e) {
- e.which == 27 && this.hide()
- }, this))
- } else if (!this.isShown) {
- this.$element.off('keyup.dismiss.bs.modal')
- }
- }
-
- Modal.prototype.hideModal = function () {
- var that = this
- this.$element.hide()
- this.backdrop(function () {
- 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 = $('')
- .appendTo(this.$body)
-
- this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
- if (e.target !== e.currentTarget) return
- this.options.backdrop == 'static'
- ? this.$element[0].focus.call(this.$element[0])
- : this.hide.call(this)
- }, this))
-
- if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
-
- this.$backdrop.addClass('in')
-
- if (!callback) return
-
- doAnimate ?
- this.$backdrop
- .one('bsTransitionEnd', callback)
- .emulateTransitionEnd(150) :
- 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(150) :
- callbackRemove()
-
- } else if (callback) {
- callback()
- }
- }
-
- Modal.prototype.checkScrollbar = function () {
- if (document.body.clientWidth >= window.innerWidth) return
- this.scrollbarWidth = this.scrollbarWidth || this.measureScrollbar()
- }
-
- Modal.prototype.setScrollbar = function () {
- var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
- if (this.scrollbarWidth) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
- }
-
- Modal.prototype.resetScrollbar = function () {
- this.$body.css('padding-right', '')
- }
-
- 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.2.0
- * http://getbootstrap.com/javascript/#tooltip
- * Inspired by the original jQuery.tipsy by Jason Frame
- * ========================================================================
- * Copyright 2011-2014 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 =
- this.options =
- this.enabled =
- this.timeout =
- this.hoverState =
- this.$element = null
-
- this.init('tooltip', element, options)
- }
-
- Tooltip.VERSION = '3.2.0'
-
- Tooltip.DEFAULTS = {
- animation: true,
- placement: 'top',
- selector: false,
- template: '',
- 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)
-
- 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 = 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(document.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 $parent = this.$element.parent()
- var parentDim = this.getPosition($parent)
-
- placement = placement == 'bottom' && pos.top + pos.height + actualHeight - parentDim.scroll > parentDim.height ? 'top' :
- placement == 'top' && pos.top - parentDim.scroll - actualHeight < 0 ? 'bottom' :
- placement == 'right' && pos.right + actualWidth > parentDim.width ? 'left' :
- placement == 'left' && pos.left - actualWidth < parentDim.left ? 'right' :
- placement
-
- $tip
- .removeClass(orgPlacement)
- .addClass(placement)
- }
-
- var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
-
- this.applyPlacement(calculatedOffset, placement)
-
- var complete = function () {
- that.$element.trigger('shown.bs.' + that.type)
- that.hoverState = null
- }
-
- $.support.transition && this.$tip.hasClass('fade') ?
- $tip
- .one('bsTransitionEnd', complete)
- .emulateTransitionEnd(150) :
- 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 arrowDelta = delta.left ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight
- var arrowPosition = delta.left ? 'left' : 'top'
- var arrowOffsetPosition = delta.left ? 'offsetWidth' : 'offsetHeight'
-
- $tip.offset(offset)
- this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], arrowPosition)
- }
-
- Tooltip.prototype.replaceArrow = function (delta, dimension, position) {
- this.arrow().css(position, delta ? (50 * (1 - delta / dimension) + '%') : '')
- }
-
- 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 () {
- var that = this
- var $tip = this.tip()
- var e = $.Event('hide.bs.' + this.type)
-
- this.$element.removeAttr('aria-describedby')
-
- function complete() {
- if (that.hoverState != 'in') $tip.detach()
- that.$element.trigger('hidden.bs.' + that.type)
- }
-
- this.$element.trigger(e)
-
- if (e.isDefaultPrevented()) return
-
- $tip.removeClass('in')
-
- $.support.transition && this.$tip.hasClass('fade') ?
- $tip
- .one('bsTransitionEnd', complete)
- .emulateTransitionEnd(150) :
- 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'
- return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : null, {
- scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop(),
- width: isBody ? $(window).width() : $element.outerWidth(),
- height: isBody ? $(window).height() : $element.outerHeight()
- }, isBody ? { top: 0, left: 0 } : $element.offset())
- }
-
- 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.validate = function () {
- if (!this.$element[0].parentNode) {
- this.hide()
- this.$element = null
- this.options = null
- }
- }
-
- 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 () {
- clearTimeout(this.timeout)
- this.hide().$element.off('.' + this.type).removeData('bs.' + this.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 && option == 'destroy') 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.2.0
- * http://getbootstrap.com/javascript/#popovers
- * ========================================================================
- * Copyright 2011-2014 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.2.0'
-
- Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
- placement: 'right',
- trigger: 'click',
- content: '',
- template: ''
- })
-
-
- // 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').empty()[ // 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.prototype.tip = function () {
- if (!this.$tip) this.$tip = $(this.options.template)
- return this.$tip
- }
-
-
- // 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 && option == 'destroy') 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.2.0
- * http://getbootstrap.com/javascript/#scrollspy
- * ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
- 'use strict';
-
- // SCROLLSPY CLASS DEFINITION
- // ==========================
-
- function ScrollSpy(element, options) {
- var process = $.proxy(this.process, this)
-
- this.$body = $('body')
- this.$scrollElement = $(element).is('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', process)
- this.refresh()
- this.process()
- }
-
- ScrollSpy.VERSION = '3.2.0'
-
- 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 offsetMethod = 'offset'
- var offsetBase = 0
-
- if (!$.isWindow(this.$scrollElement[0])) {
- offsetMethod = 'position'
- offsetBase = this.$scrollElement.scrollTop()
- }
-
- this.offsets = []
- this.targets = []
- this.scrollHeight = this.getScrollHeight()
-
- var self = this
-
- 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 () {
- self.offsets.push(this[0])
- self.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]) {
- return activeTarget != (i = targets[0]) && this.activate(i)
- }
-
- for (i = offsets.length; i--;) {
- activeTarget != targets[i]
- && scrollTop >= offsets[i]
- && (!offsets[i + 1] || scrollTop <= offsets[i + 1])
- && this.activate(targets[i])
- }
- }
-
- ScrollSpy.prototype.activate = function (target) {
- this.activeTarget = target
-
- $(this.selector)
- .parentsUntil(this.options.target, '.active')
- .removeClass('active')
-
- 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 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.2.0
- * http://getbootstrap.com/javascript/#tabs
- * ========================================================================
- * Copyright 2011-2014 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.2.0'
-
- 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')[0]
- var e = $.Event('show.bs.tab', {
- relatedTarget: previous
- })
-
- $this.trigger(e)
-
- if (e.isDefaultPrevented()) return
-
- var $target = $(selector)
-
- this.activate($this.closest('li'), $ul)
- this.activate($target, $target.parent(), function () {
- $this.trigger({
- type: 'shown.bs.tab',
- relatedTarget: previous
- })
- })
- }
-
- Tab.prototype.activate = function (element, container, callback) {
- var $active = container.find('> .active')
- var transition = callback
- && $.support.transition
- && $active.hasClass('fade')
-
- function next() {
- $active
- .removeClass('active')
- .find('> .dropdown-menu > .active')
- .removeClass('active')
-
- element.addClass('active')
-
- if (transition) {
- element[0].offsetWidth // reflow for transition
- element.addClass('in')
- } else {
- element.removeClass('fade')
- }
-
- if (element.parent('.dropdown-menu')) {
- element.closest('li.dropdown').addClass('active')
- }
-
- callback && callback()
- }
-
- transition ?
- $active
- .one('bsTransitionEnd', next)
- .emulateTransitionEnd(150) :
- 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
- // ============
-
- $(document).on('click.bs.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
- e.preventDefault()
- Plugin.call($(this), 'show')
- })
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: affix.js v3.2.0
- * http://getbootstrap.com/javascript/#affix
- * ========================================================================
- * Copyright 2011-2014 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 =
- this.unpin =
- this.pinnedOffset = null
-
- this.checkPosition()
- }
-
- Affix.VERSION = '3.2.0'
-
- Affix.RESET = 'affix affix-top affix-bottom'
-
- Affix.DEFAULTS = {
- offset: 0,
- target: window
- }
-
- 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 scrollHeight = $(document).height()
- var scrollTop = this.$target.scrollTop()
- var position = this.$element.offset()
- var offset = this.options.offset
- var offsetTop = offset.top
- var offsetBottom = offset.bottom
-
- 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.unpin != null && (scrollTop + this.unpin <= position.top) ? false :
- offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ? 'bottom' :
- offsetTop != null && (scrollTop <= offsetTop) ? 'top' : false
-
- if (this.affixed === affix) return
- 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($.Event(affixType.replace('affix', 'affixed')))
-
- if (affix == 'bottom') {
- this.$element.offset({
- top: scrollHeight - this.$element.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) data.offset.bottom = data.offsetBottom
- if (data.offsetTop) data.offset.top = data.offsetTop
-
- Plugin.call($spy, data)
- })
- })
-
-}(jQuery);
diff --git a/library/AP/client-vendor/after-body/10-bootstrap/docs.min.js b/library/AP/client-vendor/after-body/10-bootstrap/docs.min.js
deleted file mode 100755
index 1f42c91..0000000
--- a/library/AP/client-vendor/after-body/10-bootstrap/docs.min.js
+++ /dev/null
@@ -1,24 +0,0 @@
-/*!
-
-Holder - 2.3.2 - client side image placeholders
-(c) 2012-2014 Ivan Malopinsky / http://imsky.co
-
-Provided under the MIT License.
-Commercial use requires attribution.
-
-*/
-var Holder=Holder||{};!function(a,b){function c(a,b,c){b=parseInt(b,10),a=parseInt(a,10);var d=Math.max(b,a),e=Math.min(b,a),f=1/12,g=Math.min(.75*e,.75*d*f);return{height:Math.round(Math.max(c.size,g))}}function d(a){var b=[];for(p in a)a.hasOwnProperty(p)&&b.push(p+":"+a[p]);return b.join(";")}function e(a){var b=a.ctx,d=a.dimensions,e=a.template,f=a.ratio,g=a.holder,h="literal"==g.textmode,i="exact"==g.textmode,j=c(d.width,d.height,e),k=j.height,l=d.width*f,m=d.height*f,n=e.font?e.font:"Arial,Helvetica,sans-serif";canvas.width=l,canvas.height=m,b.textAlign="center",b.textBaseline="middle",b.fillStyle=e.background,b.fillRect(0,0,l,m),b.fillStyle=e.foreground,b.font="bold "+k+"px "+n;var o=e.text?e.text:Math.floor(d.width)+"x"+Math.floor(d.height);if(h){var d=g.dimensions;o=d.width+"x"+d.height}else if(i&&g.exact_dimensions){var d=g.exact_dimensions;o=Math.floor(d.width)+"x"+Math.floor(d.height)}var p=b.measureText(o).width;return p/l>=.75&&(k=Math.floor(.75*k*(l/p))),b.font="bold "+k*f+"px "+n,b.fillText(o,l/2,m/2,l),canvas.toDataURL("image/png")}function f(a){var b=a.dimensions,d=a.template,e=a.holder,f="literal"==e.textmode,g="exact"==e.textmode,h=c(b.width,b.height,d),i=h.height,j=b.width,k=b.height,l=d.font?d.font:"Arial,Helvetica,sans-serif",m=d.text?d.text:Math.floor(b.width)+"x"+Math.floor(b.height);if(f){var b=e.dimensions;m=b.width+"x"+b.height}else if(g&&e.exact_dimensions){var b=e.exact_dimensions;m=Math.floor(b.width)+"x"+Math.floor(b.height)}var n=z({text:m,width:j,height:k,text_height:i,font:l,template:d});return"data:image/svg+xml;base64,"+btoa(unescape(encodeURIComponent(n)))}function g(a){return r.use_canvas&&!r.use_svg?e(a):f(a)}function h(a,b,c,d){var e=c.dimensions,f=c.theme,h=c.text?decodeURIComponent(c.text):c.text,i=e.width+"x"+e.height;f=h?o(f,{text:h}):f,f=c.font?o(f,{font:c.font}):f,b.setAttribute("data-src",d),c.theme=f,b.holder_data=c,"image"==a?(b.setAttribute("alt",h?h:f.text?f.text+" ["+i+"]":i),(r.use_fallback||!c.auto)&&(b.style.width=e.width+"px",b.style.height=e.height+"px"),r.use_fallback?b.style.backgroundColor=f.background:(b.setAttribute("src",g({ctx:w,dimensions:e,template:f,ratio:x,holder:c})),c.textmode&&"exact"==c.textmode&&(v.push(b),k(b)))):"background"==a?r.use_fallback||(b.style.backgroundImage="url("+g({ctx:w,dimensions:e,template:f,ratio:x,holder:c})+")",b.style.backgroundSize=e.width+"px "+e.height+"px"):"fluid"==a&&(b.setAttribute("alt",h?h:f.text?f.text+" ["+i+"]":i),"%"==e.height.slice(-1)?b.style.height=e.height:null!=c.auto&&c.auto||(b.style.height=e.height+"px"),"%"==e.width.slice(-1)?b.style.width=e.width:null!=c.auto&&c.auto||(b.style.width=e.width+"px"),("inline"==b.style.display||""===b.style.display||"none"==b.style.display)&&(b.style.display="block"),j(b),r.use_fallback?b.style.backgroundColor=f.background:(v.push(b),k(b)))}function i(a,b){var c={height:a.clientHeight,width:a.clientWidth};return c.height||c.width?(a.removeAttribute("data-holder-invisible"),c):(a.setAttribute("data-holder-invisible",!0),void b.call(this,a))}function j(b){if(b.holder_data){var c=i(b,a.invisible_error_fn(j));if(c){var d=b.holder_data;d.initial_dimensions=c,d.fluid_data={fluid_height:"%"==d.dimensions.height.slice(-1),fluid_width:"%"==d.dimensions.width.slice(-1),mode:null},d.fluid_data.fluid_width&&!d.fluid_data.fluid_height?(d.fluid_data.mode="width",d.fluid_data.ratio=d.initial_dimensions.width/parseFloat(d.dimensions.height)):!d.fluid_data.fluid_width&&d.fluid_data.fluid_height&&(d.fluid_data.mode="height",d.fluid_data.ratio=parseFloat(d.dimensions.width)/d.initial_dimensions.height)}}}function k(b){var c;c=null==b.nodeType?v:[b];for(var d in c)if(c.hasOwnProperty(d)){var e=c[d];if(e.holder_data){var f=e.holder_data,h=i(e,a.invisible_error_fn(k));if(h){if(f.fluid){if(f.auto)switch(f.fluid_data.mode){case"width":h.height=h.width/f.fluid_data.ratio;break;case"height":h.width=h.height*f.fluid_data.ratio}e.setAttribute("src",g({ctx:w,dimensions:h,template:f.theme,ratio:x,holder:f}))}f.textmode&&"exact"==f.textmode&&(f.exact_dimensions=h,e.setAttribute("src",g({ctx:w,dimensions:f.dimensions,template:f.theme,ratio:x,holder:f})))}}}}function l(b,c){for(var d={theme:o(y.themes.gray,{})},e=!1,f=b.length,g=0;f>g;g++){var h=b[g];a.flags.dimensions.match(h)?(e=!0,d.dimensions=a.flags.dimensions.output(h)):a.flags.fluid.match(h)?(e=!0,d.dimensions=a.flags.fluid.output(h),d.fluid=!0):a.flags.textmode.match(h)?d.textmode=a.flags.textmode.output(h):a.flags.colors.match(h)?d.theme=a.flags.colors.output(h):c.themes[h]?c.themes.hasOwnProperty(h)&&(d.theme=o(c.themes[h],{})):a.flags.font.match(h)?d.font=a.flags.font.output(h):a.flags.auto.match(h)?d.auto=!0:a.flags.text.match(h)&&(d.text=a.flags.text.output(h))}return e?d:!1}function m(a,b){var c="complete",d="readystatechange",e=!1,f=e,g=!0,h=a.document,i=h.documentElement,j=h.addEventListener?"addEventListener":"attachEvent",k=h.addEventListener?"removeEventListener":"detachEvent",l=h.addEventListener?"":"on",m=function(g){(g.type!=d||h.readyState==c)&&(("load"==g.type?a:h)[k](l+g.type,m,e),!f&&(f=!0)&&b.call(a,null))},n=function(){try{i.doScroll("left")}catch(a){return void setTimeout(n,50)}m("poll")};if(h.readyState==c)b.call(a,"lazy");else{if(h.createEventObject&&i.doScroll){try{g=!a.frameElement}catch(o){}g&&n()}h[j](l+"DOMContentLoaded",m,e),h[j](l+d,m,e),a[j](l+"load",m,e)}}function n(a,b){var a=a.match(/^(\W)?(.*)/),b=b||document,c=b["getElement"+(a[1]?"#"==a[1]?"ById":"sByClassName":"sByTagName")],d=c.call(b,a[2]),e=[];return null!==d&&(e=d.length||0===d.length?d:[d]),e}function o(a,b){var c={};for(var d in a)a.hasOwnProperty(d)&&(c[d]=a[d]);for(var d in b)b.hasOwnProperty(d)&&(c[d]=b[d]);return c}var q={use_svg:!1,use_canvas:!1,use_fallback:!1},r={},s=!1;canvas=document.createElement("canvas");var t=1,u=1,v=[];if(canvas.getContext)if(canvas.toDataURL("image/png").indexOf("data:image/png")<0)q.use_fallback=!0;else var w=canvas.getContext("2d");else q.use_fallback=!0;document.createElementNS&&document.createElementNS("http://www.w3.org/2000/svg","svg").createSVGRect&&(q.use_svg=!0,q.use_canvas=!1),q.use_fallback||(t=window.devicePixelRatio||1,u=w.webkitBackingStorePixelRatio||w.mozBackingStorePixelRatio||w.msBackingStorePixelRatio||w.oBackingStorePixelRatio||w.backingStorePixelRatio||1);var x=t/u,y={domain:"holder.js",images:"img",bgnodes:".holderjs",themes:{gray:{background:"#eee",foreground:"#aaa",size:12},social:{background:"#3a5a97",foreground:"#fff",size:12},industrial:{background:"#434A52",foreground:"#C2F200",size:12},sky:{background:"#0D8FDB",foreground:"#fff",size:12},vine:{background:"#39DBAC",foreground:"#1E292C",size:12},lava:{background:"#F8591A",foreground:"#1C2846",size:12}},stylesheet:""};a.flags={dimensions:{regex:/^(\d+)x(\d+)$/,output:function(a){var b=this.regex.exec(a);return{width:+b[1],height:+b[2]}}},fluid:{regex:/^([0-9%]+)x([0-9%]+)$/,output:function(a){var b=this.regex.exec(a);return{width:b[1],height:b[2]}}},colors:{regex:/#([0-9a-f]{3,})\:#([0-9a-f]{3,})/i,output:function(a){var b=this.regex.exec(a);return{size:y.themes.gray.size,foreground:"#"+b[2],background:"#"+b[1]}}},text:{regex:/text\:(.*)/,output:function(a){return this.regex.exec(a)[1]}},font:{regex:/font\:(.*)/,output:function(a){return this.regex.exec(a)[1]}},auto:{regex:/^auto$/},textmode:{regex:/textmode\:(.*)/,output:function(a){return this.regex.exec(a)[1]}}};var z=function(){if(window.XMLSerializer){var a=new XMLSerializer,b="http://www.w3.org/2000/svg",c=document.createElementNS(b,"svg");c.webkitMatchesSelector&&c.setAttribute("xmlns","http://www.w3.org/2000/svg");var e=document.createElementNS(b,"rect"),f=document.createElementNS(b,"text"),g=document.createTextNode(null);return f.setAttribute("text-anchor","middle"),f.appendChild(g),c.appendChild(e),c.appendChild(f),function(b){return c.setAttribute("width",b.width),c.setAttribute("height",b.height),e.setAttribute("width",b.width),e.setAttribute("height",b.height),e.setAttribute("fill",b.template.background),f.setAttribute("x",b.width/2),f.setAttribute("y",b.height/2),g.nodeValue=b.text,f.setAttribute("style",d({fill:b.template.foreground,"font-weight":"bold","font-size":b.text_height+"px","font-family":b.font,"dominant-baseline":"central"})),a.serializeToString(c)}}}();for(var A in a.flags)a.flags.hasOwnProperty(A)&&(a.flags[A].match=function(a){return a.match(this.regex)});a.invisible_error_fn=function(){return function(a){if(a.hasAttribute("data-holder-invisible"))throw new Error("Holder: invisible placeholder")}},a.add_theme=function(b,c){return null!=b&&null!=c&&(y.themes[b]=c),a},a.add_image=function(b,c){var d=n(c);if(d.length)for(var e=0,f=d.length;f>e;e++){var g=document.createElement("img");g.setAttribute("data-src",b),d[e].appendChild(g)}return a},a.run=function(b){r=o({},q),s=!0;var c=o(y,b),d=[],e=[],f=[];for(null!=c.use_canvas&&c.use_canvas&&(r.use_canvas=!0,r.use_svg=!1),"string"==typeof c.images?e=n(c.images):window.NodeList&&c.images instanceof window.NodeList?e=c.images:window.Node&&c.images instanceof window.Node?e=[c.images]:window.HTMLCollection&&c.images instanceof window.HTMLCollection&&(e=c.images),"string"==typeof c.bgnodes?f=n(c.bgnodes):window.NodeList&&c.elements instanceof window.NodeList?f=c.bgnodes:window.Node&&c.bgnodes instanceof window.Node&&(f=[c.bgnodes]),k=0,j=e.length;j>k;k++)d.push(e[k]);var g=document.getElementById("holderjs-style");g||(g=document.createElement("style"),g.setAttribute("id","holderjs-style"),g.type="text/css",document.getElementsByTagName("head")[0].appendChild(g)),c.nocss||(g.styleSheet?g.styleSheet.cssText+=c.stylesheet:c.stylesheet.length&&g.appendChild(document.createTextNode(c.stylesheet)));for(var i=new RegExp(c.domain+'/(.*?)"?\\)'),j=f.length,k=0;j>k;k++){var m=window.getComputedStyle(f[k],null).getPropertyValue("background-image"),p=m.match(i),t=f[k].getAttribute("data-background-src");if(p){var u=l(p[1].split("/"),c);u&&h("background",f[k],u,m)}else if(null!=t){var u=l(t.substr(t.lastIndexOf(c.domain)+c.domain.length+1).split("/"),c);u&&h("background",f[k],u,m)}}for(j=d.length,k=0;j>k;k++){var v,w;w=v=m=null;try{w=d[k].getAttribute("src"),attr_datasrc=d[k].getAttribute("data-src")}catch(x){}if(null==attr_datasrc&&w&&w.indexOf(c.domain)>=0?m=w:attr_datasrc&&attr_datasrc.indexOf(c.domain)>=0&&(m=attr_datasrc),m){var u=l(m.substr(m.lastIndexOf(c.domain)+c.domain.length+1).split("/"),c);u&&(u.fluid?h("fluid",d[k],u,m):h("image",d[k],u,m))}}return a},m(b,function(){window.addEventListener?(window.addEventListener("resize",k,!1),window.addEventListener("orientationchange",k,!1)):window.attachEvent("onresize",k),s||a.run({}),"object"==typeof window.Turbolinks&&document.addEventListener("page:change",function(){a.run({})})}),"function"==typeof define&&define.amd&&define([],function(){return a}),function(){function a(a){this.message=a}var b="undefined"!=typeof exports?exports:this,c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";a.prototype=Error(),a.prototype.name="InvalidCharacterError",b.btoa||(b.btoa=function(b){for(var d,e,f=0,g=c,h="";b.charAt(0|f)||(g="=",f%1);h+=g.charAt(63&d>>8-8*(f%1))){if(e=b.charCodeAt(f+=.75),e>255)throw new a("'btoa' failed");d=d<<8|e}return h}),b.atob||(b.atob=function(b){if(b=b.replace(/=+$/,""),1==b.length%4)throw new a("'atob' failed");for(var d,e,f=0,g=0,h="";e=b.charAt(g++);~e&&(d=f%4?64*d+e:e,f++%4)?h+=String.fromCharCode(255&d>>(6&-2*f)):0)e=c.indexOf(e);return h})}(),document.getElementsByClassName||(document.getElementsByClassName=function(a){var b,c,d,e=document,f=[];if(e.querySelectorAll)return e.querySelectorAll("."+a);if(e.evaluate)for(c=".//*[contains(concat(' ', @class, ' '), ' "+a+" ')]",b=e.evaluate(c,e,null,0,null);d=b.iterateNext();)f.push(d);else for(b=e.getElementsByTagName("*"),c=new RegExp("(^|\\s)"+a+"(\\s|$)"),d=0;d=10}var d,e={bridge:null,version:"0.0.0",disabled:null,outdated:null,ready:null},f={},g=0,h={},i=0,j={},k=null,l=null,m=function(){var a,b,c,d,e="ZeroClipboard.swf";if(document.currentScript&&(d=document.currentScript.src));else{var f=document.getElementsByTagName("script");if("readyState"in f[0])for(a=f.length;a--&&("interactive"!==f[a].readyState||!(d=f[a].src)););else if("loading"===document.readyState)d=f[f.length-1].src;else{for(a=f.length;a--;){if(c=f[a].src,!c){b=null;break}if(c=c.split("#")[0].split("?")[0],c=c.slice(0,c.lastIndexOf("/")+1),null==b)b=c;else if(b!==c){b=null;break}}null!==b&&(d=b)}}return d&&(d=d.split("#")[0].split("?")[0],e=d.slice(0,d.lastIndexOf("/")+1)+e),e}(),n=function(){var a=/\-([a-z])/g,b=function(a,b){return b.toUpperCase()};return function(c){return c.replace(a,b)}}(),o=function(b,c){var d,e,f;return a.getComputedStyle?d=a.getComputedStyle(b,null).getPropertyValue(c):(e=n(c),d=b.currentStyle?b.currentStyle[e]:b.style[e]),"cursor"!==c||d&&"auto"!==d||(f=b.tagName.toLowerCase(),"a"!==f)?d:"pointer"},p=function(b){b||(b=a.event);var c;this!==a?c=this:b.target?c=b.target:b.srcElement&&(c=b.srcElement),K.activate(c)},q=function(a,b,c){a&&1===a.nodeType&&(a.addEventListener?a.addEventListener(b,c,!1):a.attachEvent&&a.attachEvent("on"+b,c))},r=function(a,b,c){a&&1===a.nodeType&&(a.removeEventListener?a.removeEventListener(b,c,!1):a.detachEvent&&a.detachEvent("on"+b,c))},s=function(a,b){if(!a||1!==a.nodeType)return a;if(a.classList)return a.classList.contains(b)||a.classList.add(b),a;if(b&&"string"==typeof b){var c=(b||"").split(/\s+/);if(1===a.nodeType)if(a.className){for(var d=" "+a.className+" ",e=a.className,f=0,g=c.length;g>f;f++)d.indexOf(" "+c[f]+" ")<0&&(e+=" "+c[f]);a.className=e.replace(/^\s+|\s+$/g,"")}else a.className=b}return a},t=function(a,b){if(!a||1!==a.nodeType)return a;if(a.classList)return a.classList.contains(b)&&a.classList.remove(b),a;if(b&&"string"==typeof b||void 0===b){var c=(b||"").split(/\s+/);if(1===a.nodeType&&a.className)if(b){for(var d=(" "+a.className+" ").replace(/[\n\t]/g," "),e=0,f=c.length;f>e;e++)d=d.replace(" "+c[e]+" "," ");a.className=d.replace(/^\s+|\s+$/g,"")}else a.className=""}return a},u=function(){var a,b,c,d=1;return"function"==typeof document.body.getBoundingClientRect&&(a=document.body.getBoundingClientRect(),b=a.right-a.left,c=document.body.offsetWidth,d=Math.round(b/c*100)/100),d},v=function(b,c){var d={left:0,top:0,width:0,height:0,zIndex:B(c)-1};if(b.getBoundingClientRect){var e,f,g,h=b.getBoundingClientRect();"pageXOffset"in a&&"pageYOffset"in a?(e=a.pageXOffset,f=a.pageYOffset):(g=u(),e=Math.round(document.documentElement.scrollLeft/g),f=Math.round(document.documentElement.scrollTop/g));var i=document.documentElement.clientLeft||0,j=document.documentElement.clientTop||0;d.left=h.left+e-i,d.top=h.top+f-j,d.width="width"in h?h.width:h.right-h.left,d.height="height"in h?h.height:h.bottom-h.top}return d},w=function(a,b){var c=null==b||b&&b.cacheBust===!0&&b.useNoCache===!0;return c?(-1===a.indexOf("?")?"?":"&")+"noCache="+(new Date).getTime():""},x=function(b){var c,d,e,f=[],g=[],h=[];if(b.trustedOrigins&&("string"==typeof b.trustedOrigins?g.push(b.trustedOrigins):"object"==typeof b.trustedOrigins&&"length"in b.trustedOrigins&&(g=g.concat(b.trustedOrigins))),b.trustedDomains&&("string"==typeof b.trustedDomains?g.push(b.trustedDomains):"object"==typeof b.trustedDomains&&"length"in b.trustedDomains&&(g=g.concat(b.trustedDomains))),g.length)for(c=0,d=g.length;d>c;c++)if(g.hasOwnProperty(c)&&g[c]&&"string"==typeof g[c]){if(e=E(g[c]),!e)continue;if("*"===e){h=[e];break}h.push.apply(h,[e,"//"+e,a.location.protocol+"//"+e])}return h.length&&f.push("trustedOrigins="+encodeURIComponent(h.join(","))),"string"==typeof b.jsModuleId&&b.jsModuleId&&f.push("jsModuleId="+encodeURIComponent(b.jsModuleId)),f.join("&")},y=function(a,b,c){if("function"==typeof b.indexOf)return b.indexOf(a,c);var d,e=b.length;for("undefined"==typeof c?c=0:0>c&&(c=e+c),d=c;e>d;d++)if(b.hasOwnProperty(d)&&b[d]===a)return d;return-1},z=function(a){if("string"==typeof a)throw new TypeError("ZeroClipboard doesn't accept query strings.");return a.length?a:[a]},A=function(b,c,d,e){e?a.setTimeout(function(){b.apply(c,d)},0):b.apply(c,d)},B=function(a){var b,c;return a&&("number"==typeof a&&a>0?b=a:"string"==typeof a&&(c=parseInt(a,10))&&!isNaN(c)&&c>0&&(b=c)),b||("number"==typeof N.zIndex&&N.zIndex>0?b=N.zIndex:"string"==typeof N.zIndex&&(c=parseInt(N.zIndex,10))&&!isNaN(c)&&c>0&&(b=c)),b||0},C=function(a,b){if(a&&b!==!1&&"undefined"!=typeof console&&console&&(console.warn||console.log)){var c="`"+a+"` is deprecated. See docs for more info:\n https://github.com/zeroclipboard/zeroclipboard/blob/master/docs/instructions.md#deprecations";console.warn?console.warn(c):console.log(c)}},D=function(){var a,b,c,d,e,f,g=arguments[0]||{};for(a=1,b=arguments.length;b>a;a++)if(null!=(c=arguments[a]))for(d in c)if(c.hasOwnProperty(d)){if(e=g[d],f=c[d],g===f)continue;void 0!==f&&(g[d]=f)}return g},E=function(a){if(null==a||""===a)return null;if(a=a.replace(/^\s+|\s+$/g,""),""===a)return null;var b=a.indexOf("//");a=-1===b?a:a.slice(b+2);var c=a.indexOf("/");return a=-1===c?a:-1===b||0===c?null:a.slice(0,c),a&&".swf"===a.slice(-4).toLowerCase()?null:a||null},F=function(){var a=function(a,b){var c,d,e;if(null!=a&&"*"!==b[0]&&("string"==typeof a&&(a=[a]),"object"==typeof a&&"length"in a))for(c=0,d=a.length;d>c;c++)if(a.hasOwnProperty(c)&&(e=E(a[c]))){if("*"===e){b.length=0,b.push("*");break}-1===y(e,b)&&b.push(e)}},b={always:"always",samedomain:"sameDomain",never:"never"};return function(c,d){var e,f=d.allowScriptAccess;if("string"==typeof f&&(e=f.toLowerCase())&&/^always|samedomain|never$/.test(e))return b[e];var g=E(d.moviePath);null===g&&(g=c);var h=[];a(d.trustedOrigins,h),a(d.trustedDomains,h);var i=h.length;if(i>0){if(1===i&&"*"===h[0])return"always";if(-1!==y(c,h))return 1===i&&c===g?"sameDomain":"always"}return"never"}}(),G=function(a){if(null==a)return[];if(Object.keys)return Object.keys(a);var b=[];for(var c in a)a.hasOwnProperty(c)&&b.push(c);return b},H=function(a){if(a)for(var b in a)a.hasOwnProperty(b)&&delete a[b];return a},I=function(){try{return document.activeElement}catch(a){}return null},J=function(){var a=!1;if("boolean"==typeof e.disabled)a=e.disabled===!1;else{if("function"==typeof ActiveXObject)try{new ActiveXObject("ShockwaveFlash.ShockwaveFlash")&&(a=!0)}catch(b){}!a&&navigator.mimeTypes["application/x-shockwave-flash"]&&(a=!0)}return a},K=function(a,b){return this instanceof K?(this.id=""+g++,h[this.id]={instance:this,elements:[],handlers:{}},a&&this.clip(a),"undefined"!=typeof b&&(C("new ZeroClipboard(elements, options)",N.debug),K.config(b)),this.options=K.config(),"boolean"!=typeof e.disabled&&(e.disabled=!J()),void(e.disabled===!1&&e.outdated!==!0&&null===e.bridge&&(e.outdated=!1,e.ready=!1,O()))):new K(a,b)};K.prototype.setText=function(a){return a&&""!==a&&(f["text/plain"]=a,e.ready===!0&&e.bridge&&"function"==typeof e.bridge.setText?e.bridge.setText(a):e.ready=!1),this},K.prototype.setSize=function(a,b){return e.ready===!0&&e.bridge&&"function"==typeof e.bridge.setSize?e.bridge.setSize(a,b):e.ready=!1,this};var L=function(a){e.ready===!0&&e.bridge&&"function"==typeof e.bridge.setHandCursor?e.bridge.setHandCursor(a):e.ready=!1};K.prototype.destroy=function(){this.unclip(),this.off(),delete h[this.id]};var M=function(){var a,b,c,d=[],e=G(h);for(a=0,b=e.length;b>a;a++)c=h[e[a]].instance,c&&c instanceof K&&d.push(c);return d};K.version="1.3.5";var N={swfPath:m,trustedDomains:a.location.host?[a.location.host]:[],cacheBust:!0,forceHandCursor:!1,zIndex:999999999,debug:!0,title:null,autoActivate:!0};K.config=function(a){if("object"==typeof a&&null!==a&&D(N,a),"string"!=typeof a||!a){var b={};for(var c in N)N.hasOwnProperty(c)&&(b[c]="object"==typeof N[c]&&null!==N[c]?"length"in N[c]?N[c].slice(0):D({},N[c]):N[c]);return b}return N.hasOwnProperty(a)?N[a]:void 0},K.destroy=function(){K.deactivate();for(var a in h)if(h.hasOwnProperty(a)&&h[a]){var b=h[a].instance;b&&"function"==typeof b.destroy&&b.destroy()}var c=P(e.bridge);c&&c.parentNode&&(c.parentNode.removeChild(c),e.ready=null,e.bridge=null)},K.activate=function(a){d&&(t(d,N.hoverClass),t(d,N.activeClass)),d=a,s(a,N.hoverClass),Q();var b=N.title||a.getAttribute("title");if(b){var c=P(e.bridge);c&&c.setAttribute("title",b)}var f=N.forceHandCursor===!0||"pointer"===o(a,"cursor");L(f)},K.deactivate=function(){var a=P(e.bridge);a&&(a.style.left="0px",a.style.top="-9999px",a.removeAttribute("title")),d&&(t(d,N.hoverClass),t(d,N.activeClass),d=null)};var O=function(){var b,c,d=document.getElementById("global-zeroclipboard-html-bridge");if(!d){var f=K.config();f.jsModuleId="string"==typeof k&&k||"string"==typeof l&&l||null;var g=F(a.location.host,N),h=x(f),i=N.moviePath+w(N.moviePath,N),j=' ';d=document.createElement("div"),d.id="global-zeroclipboard-html-bridge",d.setAttribute("class","global-zeroclipboard-container"),d.style.position="absolute",d.style.left="0px",d.style.top="-9999px",d.style.width="15px",d.style.height="15px",d.style.zIndex=""+B(N.zIndex),document.body.appendChild(d),d.innerHTML=j}b=document["global-zeroclipboard-flash-bridge"],b&&(c=b.length)&&(b=b[c-1]),e.bridge=b||d.children[0].lastElementChild},P=function(a){for(var b=/^OBJECT|EMBED$/,c=a&&a.parentNode;c&&b.test(c.nodeName)&&c.parentNode;)c=c.parentNode;return c||null},Q=function(){if(d){var a=v(d,N.zIndex),b=P(e.bridge);b&&(b.style.top=a.top+"px",b.style.left=a.left+"px",b.style.width=a.width+"px",b.style.height=a.height+"px",b.style.zIndex=a.zIndex+1),e.ready===!0&&e.bridge&&"function"==typeof e.bridge.setSize?e.bridge.setSize(a.width,a.height):e.ready=!1}return this};K.prototype.on=function(a,b){var c,d,f,g={},i=h[this.id]&&h[this.id].handlers;if("string"==typeof a&&a)f=a.toLowerCase().split(/\s+/);else if("object"==typeof a&&a&&"undefined"==typeof b)for(c in a)a.hasOwnProperty(c)&&"string"==typeof c&&c&&"function"==typeof a[c]&&this.on(c,a[c]);if(f&&f.length){for(c=0,d=f.length;d>c;c++)a=f[c].replace(/^on/,""),g[a]=!0,i[a]||(i[a]=[]),i[a].push(b);g.noflash&&e.disabled&&T.call(this,"noflash",{}),g.wrongflash&&e.outdated&&T.call(this,"wrongflash",{flashVersion:e.version}),g.load&&e.ready&&T.call(this,"load",{flashVersion:e.version})}return this},K.prototype.off=function(a,b){var c,d,e,f,g,i=h[this.id]&&h[this.id].handlers;if(0===arguments.length)f=G(i);else if("string"==typeof a&&a)f=a.split(/\s+/);else if("object"==typeof a&&a&&"undefined"==typeof b)for(c in a)a.hasOwnProperty(c)&&"string"==typeof c&&c&&"function"==typeof a[c]&&this.off(c,a[c]);if(f&&f.length)for(c=0,d=f.length;d>c;c++)if(a=f[c].toLowerCase().replace(/^on/,""),g=i[a],g&&g.length)if(b)for(e=y(b,g);-1!==e;)g.splice(e,1),e=y(b,g,e);else i[a].length=0;return this},K.prototype.handlers=function(a){var b,c=null,d=h[this.id]&&h[this.id].handlers;if(d){if("string"==typeof a&&a)return d[a]?d[a].slice(0):null;c={};for(b in d)d.hasOwnProperty(b)&&d[b]&&(c[b]=d[b].slice(0))}return c};var R=function(b,c,d,e){var f=h[this.id]&&h[this.id].handlers[b];if(f&&f.length){var g,i,j,k=c||this;for(g=0,i=f.length;i>g;g++)j=f[g],c=k,"string"==typeof j&&"function"==typeof a[j]&&(j=a[j]),"object"==typeof j&&j&&"function"==typeof j.handleEvent&&(c=j,j=j.handleEvent),"function"==typeof j&&A(j,c,d,e)}return this};K.prototype.clip=function(a){a=z(a);for(var b=0;bd;d++)f=h[c[d]].instance,f&&f instanceof K&&g.push(f);return g};N.hoverClass="zeroclipboard-is-hover",N.activeClass="zeroclipboard-is-active",N.trustedOrigins=null,N.allowScriptAccess=null,N.useNoCache=!0,N.moviePath="ZeroClipboard.swf",K.detectFlashSupport=function(){return C("ZeroClipboard.detectFlashSupport",N.debug),J()},K.dispatch=function(a,b){if("string"==typeof a&&a){var c=a.toLowerCase().replace(/^on/,"");if(c)for(var e=d&&N.autoActivate===!0?S(d):M(),f=0,g=e.length;g>f;f++)T.call(e[f],c,b)}},K.prototype.setHandCursor=function(a){return C("ZeroClipboard.prototype.setHandCursor",N.debug),a="boolean"==typeof a?a:!!a,L(a),N.forceHandCursor=a,this},K.prototype.reposition=function(){return C("ZeroClipboard.prototype.reposition",N.debug),Q()},K.prototype.receiveEvent=function(a,b){if(C("ZeroClipboard.prototype.receiveEvent",N.debug),"string"==typeof a&&a){var c=a.toLowerCase().replace(/^on/,"");c&&T.call(this,c,b)}},K.prototype.setCurrent=function(a){return C("ZeroClipboard.prototype.setCurrent",N.debug),K.activate(a),this},K.prototype.resetBridge=function(){return C("ZeroClipboard.prototype.resetBridge",N.debug),K.deactivate(),this},K.prototype.setTitle=function(a){if(C("ZeroClipboard.prototype.setTitle",N.debug),a=a||N.title||d&&d.getAttribute("title")){var b=P(e.bridge);b&&b.setAttribute("title",a)}return this},K.setDefaults=function(a){C("ZeroClipboard.setDefaults",N.debug),K.config(a)},K.prototype.addEventListener=function(a,b){return C("ZeroClipboard.prototype.addEventListener",N.debug),this.on(a,b)},K.prototype.removeEventListener=function(a,b){return C("ZeroClipboard.prototype.removeEventListener",N.debug),this.off(a,b)},K.prototype.ready=function(){return C("ZeroClipboard.prototype.ready",N.debug),e.ready===!0};var T=function(a,g){a=a.toLowerCase().replace(/^on/,"");var h=g&&g.flashVersion&&b(g.flashVersion)||null,i=d,j=!0;switch(a){case"load":if(h){if(!c(h))return void T.call(this,"onWrongFlash",{flashVersion:h});e.outdated=!1,e.ready=!0,e.version=h}break;case"wrongflash":h&&!c(h)&&(e.outdated=!0,e.ready=!1,e.version=h);break;case"mouseover":s(i,N.hoverClass);break;case"mouseout":N.autoActivate===!0&&K.deactivate();break;case"mousedown":s(i,N.activeClass);break;case"mouseup":t(i,N.activeClass);break;case"datarequested":if(i){var k=i.getAttribute("data-clipboard-target"),l=k?document.getElementById(k):null;if(l){var m=l.value||l.textContent||l.innerText;m&&this.setText(m)}else{var n=i.getAttribute("data-clipboard-text");n&&this.setText(n)}}j=!1;break;case"complete":H(f),i&&i!==I()&&i.focus&&i.focus()}var o=i,p=[this,g];return R.call(this,a,o,p,j)};"function"==typeof define&&define.amd?define(["require","exports","module"],function(a,b,c){return k=c&&c.id||null,K}):"object"==typeof module&&module&&"object"==typeof module.exports&&module.exports&&"function"==typeof a.require?(l=module.id||null,module.exports=K):a.ZeroClipboard=K}(function(){return this}()),/*!
- * JavaScript for Bootstrap's docs (http://getbootstrap.com)
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under the Creative Commons Attribution 3.0 Unported License. For
- * details, see http://creativecommons.org/licenses/by/3.0/.
- */
-!function(a){"use strict";a(function(){var b=a(window),c=a(document.body);c.scrollspy({target:".bs-docs-sidebar"}),b.on("load",function(){c.scrollspy("refresh")}),a(".bs-docs-container [href=#]").click(function(a){a.preventDefault()}),setTimeout(function(){var b=a(".bs-docs-sidebar");b.affix({offset:{top:function(){var c=b.offset().top,d=parseInt(b.children(0).css("margin-top"),10),e=a(".bs-docs-nav").height();return this.top=c-e-d},bottom:function(){return this.bottom=a(".bs-docs-footer").outerHeight(!0)}}})},100),setTimeout(function(){a(".bs-top").affix()},100),function(){var b=a("#bs-theme-stylesheet"),c=a(".bs-docs-theme-toggle");c.click(function(){var a=b.attr("href");a&&0!==a.indexOf("data")?(b.attr("href",""),c.text("Preview theme")):(b.attr("href",b.attr("data-href")),c.text("Disable theme preview"))})}(),a(".tooltip-demo").tooltip({selector:'[data-toggle="tooltip"]',container:"body"}),a(".tooltip-test").tooltip(),a(".popover-test").popover(),a(".bs-docs-navbar").tooltip({selector:'a[data-toggle="tooltip"]',container:".bs-docs-navbar .nav"}),a(".bs-docs-popover").popover(),a("#loading-example-btn").click(function(){var b=a(this);b.button("loading"),setTimeout(function(){b.button("reset")},3e3)}),ZeroClipboard.config({moviePath:"/assets/flash/ZeroClipboard.swf",hoverClass:"btn-clipboard-hover"}),a(".highlight").each(function(){var b=a(this),c=b.prev(),d='Copy
';c.hasClass("bs-example")?c.before(d.replace(/btn-clipboard/,"btn-clipboard with-example")):b.before(d)});var d=new ZeroClipboard(a(".btn-clipboard")),e=a("#global-zeroclipboard-html-bridge");d.on("load",function(){e.data("placement","top").attr("title","Copy to clipboard").tooltip()}),d.on("dataRequested",function(b){var c=a(this).parent().nextAll(".highlight").first();b.setText(c.text())}),d.on("complete",function(){e.attr("title","Copied!").tooltip("fixTitle").tooltip("show").attr("title","Copy to clipboard").tooltip("fixTitle")}),d.on("noflash wrongflash",function(){e.attr("title","Flash required").tooltip("fixTitle").tooltip("show")})})}(jQuery);
\ No newline at end of file
diff --git a/library/AP/client-vendor/after-body/20-bootstarp-addOns/ie10-viewport-bug-workaround.js b/library/AP/client-vendor/after-body/20-bootstarp-addOns/ie10-viewport-bug-workaround.js
deleted file mode 100755
index 7f53b61..0000000
--- a/library/AP/client-vendor/after-body/20-bootstarp-addOns/ie10-viewport-bug-workaround.js
+++ /dev/null
@@ -1,22 +0,0 @@
-/*!
- * IE10 viewport hack for Surface/desktop Windows 8 bug
- * Copyright 2014 Twitter, Inc.
- * Licensed under the Creative Commons Attribution 3.0 Unported License. For
- * details, see http://creativecommons.org/licenses/by/3.0/.
- */
-
-// See the Getting Started docs for more information:
-// http://getbootstrap.com/getting-started/#support-ie10-width
-
-(function () {
- 'use strict';
- if (navigator.userAgent.match(/IEMobile\/10\.0/)) {
- var msViewportStyle = document.createElement('style')
- msViewportStyle.appendChild(
- document.createTextNode(
- '@-ms-viewport{width:auto!important}'
- )
- )
- document.querySelector('head').appendChild(msViewportStyle)
- }
-})();
diff --git a/library/AP/client-vendor/after-body/jquery.highlight/jquery.highlight.js b/library/AP/client-vendor/after-body/jquery.highlight/jquery.highlight.js
new file mode 100755
index 0000000..4d339ee
--- /dev/null
+++ b/library/AP/client-vendor/after-body/jquery.highlight/jquery.highlight.js
@@ -0,0 +1,53 @@
+/*
+
+highlight v3
+
+Highlights arbitrary terms.
+
+
+
+MIT license.
+
+Johann Burkard
+
+
+
+*/
+
+jQuery.fn.highlight = function(pat) {
+ function innerHighlight(node, pat) {
+ var skip = 0;
+ if (node.nodeType == 3) {
+ var pos = node.data.toUpperCase().indexOf(pat);
+ if (pos >= 0) {
+ var spannode = document.createElement('span');
+ spannode.className = 'highlight';
+ var middlebit = node.splitText(pos);
+ var endbit = middlebit.splitText(pat.length);
+ var middleclone = middlebit.cloneNode(true);
+ spannode.appendChild(middleclone);
+ middlebit.parentNode.replaceChild(spannode, middlebit);
+ skip = 1;
+ }
+ }
+ else if (node.nodeType == 1 && node.childNodes && !/(script|style)/i.test(node.tagName)) {
+ for (var i = 0; i < node.childNodes.length; ++i) {
+ i += innerHighlight(node.childNodes[i], pat);
+ }
+ }
+ return skip;
+ }
+ return this.each(function() {
+ innerHighlight(this, pat.toUpperCase());
+ });
+};
+
+jQuery.fn.removeHighlight = function() {
+ return this.find("span.highlight").each(function() {
+ this.parentNode.firstChild.nodeName;
+ with (this.parentNode) {
+ replaceChild(this.firstChild, this);
+ normalize();
+ }
+ }).end();
+};
diff --git a/library/AP/client-vendor/after-body/jquery.iosKeyboardActive/jquery.iosKeyboardActive.js b/library/AP/client-vendor/after-body/jquery.iosKeyboardActive/jquery.iosKeyboardActive.js
new file mode 100755
index 0000000..dfab377
--- /dev/null
+++ b/library/AP/client-vendor/after-body/jquery.iosKeyboardActive/jquery.iosKeyboardActive.js
@@ -0,0 +1,23 @@
+/*
+ * Author: CM
+ *
+ * Workaround for http://stackoverflow.com/questions/7970389/ios-5-fixed-positioning-and-virtual-keyboard
+ */
+(function($) {
+
+ if (navigator.userAgent.match(/(iPad|iPhone|iPod)/i)) {
+ var inputTypeListWithoutKeyboard = [
+ 'button', 'reset', 'submit', 'checkbox', 'file', 'image', 'radio'
+ ];
+ $(document).on('focus', 'textarea, select, input', function(event) {
+ var triggersKeyboard = (-1 === inputTypeListWithoutKeyboard.indexOf(this.type));
+ if (triggersKeyboard) {
+ $('html').addClass('iosKeyboardActive');
+ }
+ });
+ $(document).on('blur', 'textarea, select, input', function(event) {
+ $('html').removeClass('iosKeyboardActive');
+ });
+ }
+
+})(jQuery);
diff --git a/library/AP/client-vendor/after-body/jquery.offCanvas/jquery.offCanvas.css b/library/AP/client-vendor/after-body/jquery.offCanvas/jquery.offCanvas.css
new file mode 100755
index 0000000..ee28195
--- /dev/null
+++ b/library/AP/client-vendor/after-body/jquery.offCanvas/jquery.offCanvas.css
@@ -0,0 +1,40 @@
+.offCanvas-wrap {
+ position: relative;
+ width: 100%;
+}
+
+.offCanvas-wrap > .offCanvas-mask {
+ display: none;
+ position: absolute;
+ top: 0;
+ width: 100%;
+ height: 100%;
+ z-index: 70;
+ background-color: rgba(0, 0, 0, .5);
+ opacity: 0;
+}
+
+.offCanvas {
+ position: relative;
+ width: 100%;
+ z-index: 81;
+ display: none;
+}
+
+.offCanvas.offCanvas-active {
+ display: block;
+}
+
+html.offCanvas-active, html.offCanvas-active body {
+ height: 100%;
+}
+
+html.offCanvas-active .offCanvas-wrap {
+ overflow: hidden;
+ height: 100%;
+}
+
+html.offCanvas-active .offCanvas {
+ height: 100%;
+ min-height: 100%;
+}
diff --git a/library/AP/client-vendor/after-body/jquery.offCanvas/jquery.offCanvas.js b/library/AP/client-vendor/after-body/jquery.offCanvas/jquery.offCanvas.js
new file mode 100755
index 0000000..b4b8f9b
--- /dev/null
+++ b/library/AP/client-vendor/after-body/jquery.offCanvas/jquery.offCanvas.js
@@ -0,0 +1,165 @@
+/*
+ * Author: CM
+ *
+ * Dependencies: jquery.transit.js
+ */
+(function($) {
+ var defaults = {
+ transitionType: 'transition',
+ delay: 500,
+ easing: 'snap',
+ wrap: '#offCanvas-wrap',
+ onopen: null,
+ onclose: null
+ };
+
+ if (navigator.userAgent.match(/IEMobile\/10\.0/i)) {
+ defaults.transitionType = 'animate';
+ defaults.easing = 'linear';
+ }
+
+ /**
+ * @param {jQuery} $element
+ * @param {Object} options
+ * @constructor
+ */
+ var OffCanvas = function($element, options) {
+ var self = this;
+ this.setOptions(options);
+ this.active = false;
+ this.$element = $element;
+ this.disabled = options.disabled;
+ if (!this.disabled) {
+ this.$element.addClass('offCanvas');
+ }
+ this.$wrap = $(this.options.wrap).addClass('offCanvas-wrap');
+ if (!this.$wrap.length) {
+ throw 'Cannot find wrap element with selector `' + this.options.wrap + '`.';
+ }
+ this.$mask = this.$wrap.find('.offCanvas-mask');
+ if (!this.$mask.length) {
+ this.$mask = $('').prependTo(this.$wrap);
+ }
+ this.$mask.on('click', function() {
+ self.close();
+ });
+ $(document).on('keydown.offCanvas', function(e) {
+ if (e.which == 27) {
+ self.close();
+ }
+ });
+ };
+
+ OffCanvas.prototype = {
+ options: null,
+ active: null,
+ disabled: null,
+ $element: null,
+ $wrap: null,
+ $mask: null,
+ setOptions: function(options) {
+ this.options = $.extend({}, defaults, options || {});
+ },
+ toggle: function(distance, height) {
+ if (this.active) {
+ this.close();
+ } else {
+ this.open(distance, height);
+ }
+ },
+ open: function(distance, height) {
+ if (this.active) {
+ return;
+ }
+ if (this.disabled) {
+ return;
+ }
+ var self = this;
+ this.active = true;
+ $(document).scrollTop(0);
+ $('html').addClass('offCanvas-active');
+ this.$element.addClass('offCanvas-active');
+ this.$wrap.css({'min-height': height});
+ this.$element.stop()[this.options.transitionType]({x: distance}, this.options.delay, this.options.easing);
+ this.$mask.show().stop()[this.options.transitionType]({opacity: 1}, this.options.delay, this.options.easing);
+ if (this.options.onopen) {
+ this.options.onopen.call(this);
+ }
+ },
+ /**
+ * @param {Boolean} [skipAnimation]
+ */
+ close: function(skipAnimation) {
+ if (!this.active) {
+ return;
+ }
+ if (this.disabled) {
+ return;
+ }
+ var self = this;
+ this.active = false;
+ var delay = this.options.delay;
+ if (skipAnimation) {
+ delay = 0;
+ }
+ this.$element.stop()[this.options.transitionType]({x: 0}, delay, this.options.easing, function() {
+ if (!self.active) {
+ $('html').removeClass('offCanvas-active');
+ self.$element.removeClass('offCanvas-active');
+ self.$wrap.css({'min-height': ''});
+ }
+ });
+ this.$mask.stop()[this.options.transitionType]({opacity: 0}, delay, this.options.easing, function() {
+ if (!self.active) {
+ self.$mask.hide();
+ }
+ });
+ if (this.options.onclose) {
+ this.options.onclose.call(this);
+ }
+ },
+ disable: function() {
+ this.close(true);
+ this.$element.removeClass('offCanvas');
+ this.$element.css('transform', 'none');
+ this.disabled = true;
+ },
+ enable: function() {
+ this.disabled = false;
+ this.$element.addClass('offCanvas');
+ },
+ isOpen: function() {
+ return this.active;
+ }
+ };
+
+ /**
+ * @param {String|Object} action
+ * @param {Object} [options]
+ * @return {jQuery}
+ */
+ $.fn.offCanvas = function(action, options) {
+ return this.each(function() {
+ var $self = $(this);
+ var offCanvas = $self.data('offCanvas');
+ if (!offCanvas) {
+ offCanvas = new OffCanvas($self, action);
+ $self.data('offCanvas', offCanvas);
+ }
+
+ switch (action) {
+ case 'toggle':
+ offCanvas.toggle(options.distance, options.height);
+ break;
+ case 'open':
+ offCanvas.open(options.distance, options.height);
+ break;
+ case 'close':
+ offCanvas.close();
+ break;
+ default:
+ break;
+ }
+ });
+ };
+})(jQuery);
diff --git a/library/AP/client-vendor/after-body/jquery.selection/jquery.selection.js b/library/AP/client-vendor/after-body/jquery.selection/jquery.selection.js
new file mode 100755
index 0000000..16ebd44
--- /dev/null
+++ b/library/AP/client-vendor/after-body/jquery.selection/jquery.selection.js
@@ -0,0 +1,35 @@
+jQuery.fn.selection = function(replace, move_to){
+ var element = this.get(0);
+ replace = replace || false;
+ move_to = move_to || false;
+ // Need to focus the given element to extract the selection
+ element.focus();
+
+ if (element.setSelectionRange) {
+ var s = element.selectionStart;
+ var e = element.selectionEnd;
+ if (replace) {
+ element.value = element.value.substr(0, s) + replace + element.value.substr(e, element.value.length);
+ if (move_to > 0) { element.setSelectionRange(s+move_to, s+move_to); }
+ return this;
+ } else {
+ return element.value.substr(s, (e - s));
+ }
+ } else {
+ // IE 7+8
+ var s = document.selection.createRange();
+ if (replace) {
+ s.text = replace;
+ if (move_to > 0) {
+ var m = document.selection.createRange();
+ m.moveToBookmark(s.getBookmark());
+ m.collapse(true);
+ m.move('character', move_to);
+ m.select();
+ }
+ return this;
+ } else {
+ return s.text;
+ }
+ }
+};
diff --git a/library/AP/client-vendor/after-body/jquery.sortable/jquery.sortable.css b/library/AP/client-vendor/after-body/jquery.sortable/jquery.sortable.css
new file mode 100755
index 0000000..ac866ad
--- /dev/null
+++ b/library/AP/client-vendor/after-body/jquery.sortable/jquery.sortable.css
@@ -0,0 +1,9 @@
+.sortable > * {
+ min-height: 25px;
+}
+.sortable .handle:hover {
+ cursor: move;
+}
+.sortable .sortable-placeholder {
+ border: 1px dashed #CCC;
+}
diff --git a/library/AP/client-vendor/after-body/jquery.sortable/jquery.sortable.js b/library/AP/client-vendor/after-body/jquery.sortable/jquery.sortable.js
new file mode 100755
index 0000000..5ac3161
--- /dev/null
+++ b/library/AP/client-vendor/after-body/jquery.sortable/jquery.sortable.js
@@ -0,0 +1,81 @@
+/*
+ * HTML5 Sortable jQuery Plugin
+ * http://farhadi.ir/projects/html5sortable
+ *
+ * Copyright 2012, Ali Farhadi
+ * Released under the MIT license.
+ */
+(function($) {
+var dragging, placeholders = $();
+$.fn.sortable = function(options) {
+ var method = String(options);
+ options = $.extend({
+ connectWith: false
+ }, options);
+ return this.each(function() {
+ if (/^enable|disable|destroy$/.test(method)) {
+ var items = $(this).children($(this).data('items')).attr('draggable', method == 'enable');
+ if (method == 'destroy') {
+ items.add(this).removeData('connectWith items')
+ .off('dragstart.h5s dragend.h5s selectstart.h5s dragover.h5s dragenter.h5s drop.h5s');
+ }
+ return;
+ }
+ var isHandle, index, items = $(this).children(options.items);
+ var placeholder = $('<' + (/^ul|ol$/i.test(this.tagName) ? 'li' : 'div') + ' class="sortable-placeholder">');
+ items.find(options.handle).mousedown(function() {
+ isHandle = true;
+ }).mouseup(function() {
+ isHandle = false;
+ });
+ $(this).data('items', options.items)
+ placeholders = placeholders.add(placeholder);
+ if (options.connectWith) {
+ $(options.connectWith).add(this).data('connectWith', options.connectWith);
+ }
+ items.attr('draggable', 'true').on('dragstart.h5s', function(e) {
+ if (options.handle && !isHandle) {
+ return false;
+ }
+ isHandle = false;
+ var dt = e.originalEvent.dataTransfer;
+ dt.effectAllowed = 'move';
+ dt.setData('Text', 'dummy');
+ index = (dragging = $(this)).addClass('sortable-dragging').index();
+ }).on('dragend.h5s', function() {
+ dragging.removeClass('sortable-dragging').show();
+ placeholders.detach();
+ if (index != dragging.index()) {
+ items.parent().trigger('sortupdate', {item: dragging});
+ }
+ dragging = null;
+ }).not('a[href], img').on('selectstart.h5s', function() {
+ this.dragDrop && this.dragDrop();
+ return false;
+ }).end().add([this, placeholder]).on('dragover.h5s dragenter.h5s drop.h5s', function(e) {
+ if (!items.is(dragging) && options.connectWith !== $(dragging).parent().data('connectWith')) {
+ return true;
+ }
+ if (e.type == 'drop') {
+ e.stopPropagation();
+ placeholders.filter(':visible').after(dragging);
+ return false;
+ }
+ e.preventDefault();
+ e.originalEvent.dataTransfer.dropEffect = 'move';
+ if (items.is(this)) {
+ if (options.forcePlaceholderSize) {
+ placeholder.height(dragging.outerHeight());
+ }
+ dragging.hide();
+ $(this)[placeholder.index() < $(this).index() ? 'after' : 'before'](placeholder);
+ placeholders.not(placeholder).detach();
+ } else if (!placeholders.is(this) && !$(this).children(options.items).length) {
+ placeholders.detach();
+ $(this).append(placeholder);
+ }
+ return false;
+ });
+ });
+};
+})(jQuery);
diff --git a/library/AP/client-vendor/after-body/packery/packery.pkgd.js b/library/AP/client-vendor/after-body/packery/packery.pkgd.js
new file mode 100755
index 0000000..f26c99f
--- /dev/null
+++ b/library/AP/client-vendor/after-body/packery/packery.pkgd.js
@@ -0,0 +1,3558 @@
+/*!
+ * Packery PACKAGED v1.1.1
+ * bin-packing layout library
+ * http://packery.metafizzy.co
+ *
+ * Commercial use requires one-time purchase of a commercial license
+ * http://packery.metafizzy.co/license.html
+ *
+ * Non-commercial use is licensed under the GPL v3 License
+ *
+ * Copyright 2013 Metafizzy
+ */
+
+/*!
+ * classie - class helper functions
+ * from bonzo https://github.com/ded/bonzo
+ *
+ * classie.has( elem, 'my-class' ) -> true/false
+ * classie.add( elem, 'my-new-class' )
+ * classie.remove( elem, 'my-unwanted-class' )
+ * classie.toggle( elem, 'my-class' )
+ */
+
+/*jshint browser: true, strict: true, undef: true */
+/*global define: false */
+
+( function( window ) {
+
+'use strict';
+
+// class helper functions from bonzo https://github.com/ded/bonzo
+
+function classReg( className ) {
+ return new RegExp("(^|\\s+)" + className + "(\\s+|$)");
+}
+
+// classList support for class management
+// altho to be fair, the api sucks because it won't accept multiple classes at once
+var hasClass, addClass, removeClass;
+
+if ( 'classList' in document.documentElement ) {
+ hasClass = function( elem, c ) {
+ return elem.classList.contains( c );
+ };
+ addClass = function( elem, c ) {
+ elem.classList.add( c );
+ };
+ removeClass = function( elem, c ) {
+ elem.classList.remove( c );
+ };
+}
+else {
+ hasClass = function( elem, c ) {
+ return classReg( c ).test( elem.className );
+ };
+ addClass = function( elem, c ) {
+ if ( !hasClass( elem, c ) ) {
+ elem.className = elem.className + ' ' + c;
+ }
+ };
+ removeClass = function( elem, c ) {
+ elem.className = elem.className.replace( classReg( c ), ' ' );
+ };
+}
+
+function toggleClass( elem, c ) {
+ var fn = hasClass( elem, c ) ? removeClass : addClass;
+ fn( elem, c );
+}
+
+var classie = {
+ // full names
+ hasClass: hasClass,
+ addClass: addClass,
+ removeClass: removeClass,
+ toggleClass: toggleClass,
+ // short names
+ has: hasClass,
+ add: addClass,
+ remove: removeClass,
+ toggle: toggleClass
+};
+
+// transport
+if ( typeof define === 'function' && define.amd ) {
+ // AMD
+ define( classie );
+} else {
+ // browser global
+ window.classie = classie;
+}
+
+})( window );
+
+/*!
+ * getStyleProperty by kangax
+ * http://perfectionkills.com/feature-testing-css-properties/
+ */
+
+/*jshint browser: true, strict: true, undef: true */
+/*globals define: false */
+
+( function( window ) {
+
+'use strict';
+
+var prefixes = 'Webkit Moz ms Ms O'.split(' ');
+var docElemStyle = document.documentElement.style;
+
+function getStyleProperty( propName ) {
+ if ( !propName ) {
+ return;
+ }
+
+ // test standard property first
+ if ( typeof docElemStyle[ propName ] === 'string' ) {
+ return propName;
+ }
+
+ // capitalize
+ propName = propName.charAt(0).toUpperCase() + propName.slice(1);
+
+ // test vendor specific properties
+ var prefixed;
+ for ( var i=0, len = prefixes.length; i < len; i++ ) {
+ prefixed = prefixes[i] + propName;
+ if ( typeof docElemStyle[ prefixed ] === 'string' ) {
+ return prefixed;
+ }
+ }
+}
+
+// transport
+if ( typeof define === 'function' && define.amd ) {
+ // AMD
+ define( function() {
+ return getStyleProperty;
+ });
+} else {
+ // browser global
+ window.getStyleProperty = getStyleProperty;
+}
+
+})( window );
+
+/**
+ * getSize v1.1.4
+ * measure size of elements
+ */
+
+/*jshint browser: true, strict: true, undef: true, unused: true */
+/*global define: false */
+
+( function( window, undefined ) {
+
+'use strict';
+
+// -------------------------- helpers -------------------------- //
+
+var defView = document.defaultView;
+
+var getStyle = defView && defView.getComputedStyle ?
+ function( elem ) {
+ return defView.getComputedStyle( elem, null );
+ } :
+ function( elem ) {
+ return elem.currentStyle;
+ };
+
+// get a number from a string, not a percentage
+function getStyleSize( value ) {
+ var num = parseFloat( value );
+ // not a percent like '100%', and a number
+ var isValid = value.indexOf('%') === -1 && !isNaN( num );
+ return isValid && num;
+}
+
+// -------------------------- measurements -------------------------- //
+
+var measurements = [
+ 'paddingLeft',
+ 'paddingRight',
+ 'paddingTop',
+ 'paddingBottom',
+ 'marginLeft',
+ 'marginRight',
+ 'marginTop',
+ 'marginBottom',
+ 'borderLeftWidth',
+ 'borderRightWidth',
+ 'borderTopWidth',
+ 'borderBottomWidth'
+];
+
+function getZeroSize() {
+ var size = {
+ width: 0,
+ height: 0,
+ innerWidth: 0,
+ innerHeight: 0,
+ outerWidth: 0,
+ outerHeight: 0
+ };
+ for ( var i=0, len = measurements.length; i < len; i++ ) {
+ var measurement = measurements[i];
+ size[ measurement ] = 0;
+ }
+ return size;
+}
+
+
+
+function defineGetSize( getStyleProperty ) {
+
+// -------------------------- box sizing -------------------------- //
+
+var boxSizingProp = getStyleProperty('boxSizing');
+var isBoxSizeOuter;
+
+/**
+ * WebKit measures the outer-width on style.width on border-box elems
+ * IE & Firefox measures the inner-width
+ */
+( function() {
+ if ( !boxSizingProp ) {
+ return;
+ }
+
+ var div = document.createElement('div');
+ div.style.width = '200px';
+ div.style.padding = '1px 2px 3px 4px';
+ div.style.borderStyle = 'solid';
+ div.style.borderWidth = '1px 2px 3px 4px';
+ div.style[ boxSizingProp ] = 'border-box';
+
+ var body = document.body || document.documentElement;
+ body.appendChild( div );
+ var style = getStyle( div );
+
+ isBoxSizeOuter = getStyleSize( style.width ) === 200;
+ body.removeChild( div );
+})();
+
+
+// -------------------------- getSize -------------------------- //
+
+function getSize( elem ) {
+ // use querySeletor if elem is string
+ if ( typeof elem === 'string' ) {
+ elem = document.querySelector( elem );
+ }
+
+ // do not proceed on non-objects
+ if ( !elem || typeof elem !== 'object' || !elem.nodeType ) {
+ return;
+ }
+
+ var style = getStyle( elem );
+
+ // if hidden, everything is 0
+ if ( style.display === 'none' ) {
+ return getZeroSize();
+ }
+
+ var size = {};
+ size.width = elem.offsetWidth;
+ size.height = elem.offsetHeight;
+
+ var isBorderBox = size.isBorderBox = !!( boxSizingProp &&
+ style[ boxSizingProp ] && style[ boxSizingProp ] === 'border-box' );
+
+ // get all measurements
+ for ( var i=0, len = measurements.length; i < len; i++ ) {
+ var measurement = measurements[i];
+ var value = style[ measurement ];
+ var num = parseFloat( value );
+ // any 'auto', 'medium' value will be 0
+ size[ measurement ] = !isNaN( num ) ? num : 0;
+ }
+
+ var paddingWidth = size.paddingLeft + size.paddingRight;
+ var paddingHeight = size.paddingTop + size.paddingBottom;
+ var marginWidth = size.marginLeft + size.marginRight;
+ var marginHeight = size.marginTop + size.marginBottom;
+ var borderWidth = size.borderLeftWidth + size.borderRightWidth;
+ var borderHeight = size.borderTopWidth + size.borderBottomWidth;
+
+ var isBorderBoxSizeOuter = isBorderBox && isBoxSizeOuter;
+
+ // overwrite width and height if we can get it from style
+ var styleWidth = getStyleSize( style.width );
+ if ( styleWidth !== false ) {
+ size.width = styleWidth +
+ // add padding and border unless it's already including it
+ ( isBorderBoxSizeOuter ? 0 : paddingWidth + borderWidth );
+ }
+
+ var styleHeight = getStyleSize( style.height );
+ if ( styleHeight !== false ) {
+ size.height = styleHeight +
+ // add padding and border unless it's already including it
+ ( isBorderBoxSizeOuter ? 0 : paddingHeight + borderHeight );
+ }
+
+ size.innerWidth = size.width - ( paddingWidth + borderWidth );
+ size.innerHeight = size.height - ( paddingHeight + borderHeight );
+
+ size.outerWidth = size.width + marginWidth;
+ size.outerHeight = size.height + marginHeight;
+
+ return size;
+}
+
+return getSize;
+
+}
+
+// transport
+if ( typeof define === 'function' && define.amd ) {
+ // AMD
+ define( [ 'get-style-property/get-style-property' ], defineGetSize );
+} else {
+ // browser global
+ window.getSize = defineGetSize( window.getStyleProperty );
+}
+
+})( window );
+
+/*!
+ * eventie v1.0.3
+ * event binding helper
+ * eventie.bind( elem, 'click', myFn )
+ * eventie.unbind( elem, 'click', myFn )
+ */
+
+/*jshint browser: true, undef: true, unused: true */
+/*global define: false */
+
+( function( window ) {
+
+'use strict';
+
+var docElem = document.documentElement;
+
+var bind = function() {};
+
+if ( docElem.addEventListener ) {
+ bind = function( obj, type, fn ) {
+ obj.addEventListener( type, fn, false );
+ };
+} else if ( docElem.attachEvent ) {
+ bind = function( obj, type, fn ) {
+ obj[ type + fn ] = fn.handleEvent ?
+ function() {
+ var event = window.event;
+ // add event.target
+ event.target = event.target || event.srcElement;
+ fn.handleEvent.call( fn, event );
+ } :
+ function() {
+ var event = window.event;
+ // add event.target
+ event.target = event.target || event.srcElement;
+ fn.call( obj, event );
+ };
+ obj.attachEvent( "on" + type, obj[ type + fn ] );
+ };
+}
+
+var unbind = function() {};
+
+if ( docElem.removeEventListener ) {
+ unbind = function( obj, type, fn ) {
+ obj.removeEventListener( type, fn, false );
+ };
+} else if ( docElem.detachEvent ) {
+ unbind = function( obj, type, fn ) {
+ obj.detachEvent( "on" + type, obj[ type + fn ] );
+ try {
+ delete obj[ type + fn ];
+ } catch ( err ) {
+ // can't delete window object properties
+ obj[ type + fn ] = undefined;
+ }
+ };
+}
+
+var eventie = {
+ bind: bind,
+ unbind: unbind
+};
+
+// transport
+if ( typeof define === 'function' && define.amd ) {
+ // AMD
+ define( eventie );
+} else {
+ // browser global
+ window.eventie = eventie;
+}
+
+})( this );
+
+/*!
+ * docReady
+ * Cross browser DOMContentLoaded event emitter
+ */
+
+/*jshint browser: true, strict: true, undef: true, unused: true*/
+/*global define: false */
+
+( function( window ) {
+
+'use strict';
+
+var document = window.document;
+// collection of functions to be triggered on ready
+var queue = [];
+
+function docReady( fn ) {
+ // throw out non-functions
+ if ( typeof fn !== 'function' ) {
+ return;
+ }
+
+ if ( docReady.isReady ) {
+ // ready now, hit it
+ fn();
+ } else {
+ // queue function when ready
+ queue.push( fn );
+ }
+}
+
+docReady.isReady = false;
+
+// triggered on various doc ready events
+function init( event ) {
+ // bail if IE8 document is not ready just yet
+ var isIE8NotReady = event.type === 'readystatechange' && document.readyState !== 'complete';
+ if ( docReady.isReady || isIE8NotReady ) {
+ return;
+ }
+ docReady.isReady = true;
+
+ // process queue
+ for ( var i=0, len = queue.length; i < len; i++ ) {
+ var fn = queue[i];
+ fn();
+ }
+}
+
+function defineDocReady( eventie ) {
+ eventie.bind( document, 'DOMContentLoaded', init );
+ eventie.bind( document, 'readystatechange', init );
+ eventie.bind( window, 'load', init );
+
+ return docReady;
+}
+
+// transport
+if ( typeof define === 'function' && define.amd ) {
+ // AMD
+ // if RequireJS, then doc is already ready
+ docReady.isReady = typeof requirejs === 'function';
+ define( [ 'eventie/eventie' ], defineDocReady );
+} else {
+ // browser global
+ window.docReady = defineDocReady( window.eventie );
+}
+
+})( this );
+
+/*!
+ * EventEmitter v4.2.3 - git.io/ee
+ * Oliver Caldwell
+ * MIT license
+ * @preserve
+ */
+
+(function () {
+ 'use strict';
+
+ /**
+ * Class for managing events.
+ * Can be extended to provide event functionality in other classes.
+ *
+ * @class EventEmitter Manages event registering and emitting.
+ */
+ function EventEmitter() {}
+
+ // Shortcuts to improve speed and size
+
+ // Easy access to the prototype
+ var proto = EventEmitter.prototype;
+
+ /**
+ * Finds the index of the listener for the event in it's storage array.
+ *
+ * @param {Function[]} listeners Array of listeners to search through.
+ * @param {Function} listener Method to look for.
+ * @return {Number} Index of the specified listener, -1 if not found
+ * @api private
+ */
+ function indexOfListener(listeners, listener) {
+ var i = listeners.length;
+ while (i--) {
+ if (listeners[i].listener === listener) {
+ return i;
+ }
+ }
+
+ return -1;
+ }
+
+ /**
+ * Alias a method while keeping the context correct, to allow for overwriting of target method.
+ *
+ * @param {String} name The name of the target method.
+ * @return {Function} The aliased method
+ * @api private
+ */
+ function alias(name) {
+ return function aliasClosure() {
+ return this[name].apply(this, arguments);
+ };
+ }
+
+ /**
+ * Returns the listener array for the specified event.
+ * Will initialise the event object and listener arrays if required.
+ * Will return an object if you use a regex search. The object contains keys for each matched event. So /ba[rz]/ might return an object containing bar and baz. But only if you have either defined them with defineEvent or added some listeners to them.
+ * Each property in the object response is an array of listener functions.
+ *
+ * @param {String|RegExp} evt Name of the event to return the listeners from.
+ * @return {Function[]|Object} All listener functions for the event.
+ */
+ proto.getListeners = function getListeners(evt) {
+ var events = this._getEvents();
+ var response;
+ var key;
+
+ // Return a concatenated array of all matching events if
+ // the selector is a regular expression.
+ if (typeof evt === 'object') {
+ response = {};
+ for (key in events) {
+ if (events.hasOwnProperty(key) && evt.test(key)) {
+ response[key] = events[key];
+ }
+ }
+ }
+ else {
+ response = events[evt] || (events[evt] = []);
+ }
+
+ return response;
+ };
+
+ /**
+ * Takes a list of listener objects and flattens it into a list of listener functions.
+ *
+ * @param {Object[]} listeners Raw listener objects.
+ * @return {Function[]} Just the listener functions.
+ */
+ proto.flattenListeners = function flattenListeners(listeners) {
+ var flatListeners = [];
+ var i;
+
+ for (i = 0; i < listeners.length; i += 1) {
+ flatListeners.push(listeners[i].listener);
+ }
+
+ return flatListeners;
+ };
+
+ /**
+ * Fetches the requested listeners via getListeners but will always return the results inside an object. This is mainly for internal use but others may find it useful.
+ *
+ * @param {String|RegExp} evt Name of the event to return the listeners from.
+ * @return {Object} All listener functions for an event in an object.
+ */
+ proto.getListenersAsObject = function getListenersAsObject(evt) {
+ var listeners = this.getListeners(evt);
+ var response;
+
+ if (listeners instanceof Array) {
+ response = {};
+ response[evt] = listeners;
+ }
+
+ return response || listeners;
+ };
+
+ /**
+ * Adds a listener function to the specified event.
+ * The listener will not be added if it is a duplicate.
+ * If the listener returns true then it will be removed after it is called.
+ * If you pass a regular expression as the event name then the listener will be added to all events that match it.
+ *
+ * @param {String|RegExp} evt Name of the event to attach the listener to.
+ * @param {Function} listener Method to be called when the event is emitted. If the function returns true then it will be removed after calling.
+ * @return {Object} Current instance of EventEmitter for chaining.
+ */
+ proto.addListener = function addListener(evt, listener) {
+ var listeners = this.getListenersAsObject(evt);
+ var listenerIsWrapped = typeof listener === 'object';
+ var key;
+
+ for (key in listeners) {
+ if (listeners.hasOwnProperty(key) && indexOfListener(listeners[key], listener) === -1) {
+ listeners[key].push(listenerIsWrapped ? listener : {
+ listener: listener,
+ once: false
+ });
+ }
+ }
+
+ return this;
+ };
+
+ /**
+ * Alias of addListener
+ */
+ proto.on = alias('addListener');
+
+ /**
+ * Semi-alias of addListener. It will add a listener that will be
+ * automatically removed after it's first execution.
+ *
+ * @param {String|RegExp} evt Name of the event to attach the listener to.
+ * @param {Function} listener Method to be called when the event is emitted. If the function returns true then it will be removed after calling.
+ * @return {Object} Current instance of EventEmitter for chaining.
+ */
+ proto.addOnceListener = function addOnceListener(evt, listener) {
+ return this.addListener(evt, {
+ listener: listener,
+ once: true
+ });
+ };
+
+ /**
+ * Alias of addOnceListener.
+ */
+ proto.once = alias('addOnceListener');
+
+ /**
+ * Defines an event name. This is required if you want to use a regex to add a listener to multiple events at once. If you don't do this then how do you expect it to know what event to add to? Should it just add to every possible match for a regex? No. That is scary and bad.
+ * You need to tell it what event names should be matched by a regex.
+ *
+ * @param {String} evt Name of the event to create.
+ * @return {Object} Current instance of EventEmitter for chaining.
+ */
+ proto.defineEvent = function defineEvent(evt) {
+ this.getListeners(evt);
+ return this;
+ };
+
+ /**
+ * Uses defineEvent to define multiple events.
+ *
+ * @param {String[]} evts An array of event names to define.
+ * @return {Object} Current instance of EventEmitter for chaining.
+ */
+ proto.defineEvents = function defineEvents(evts) {
+ for (var i = 0; i < evts.length; i += 1) {
+ this.defineEvent(evts[i]);
+ }
+ return this;
+ };
+
+ /**
+ * Removes a listener function from the specified event.
+ * When passed a regular expression as the event name, it will remove the listener from all events that match it.
+ *
+ * @param {String|RegExp} evt Name of the event to remove the listener from.
+ * @param {Function} listener Method to remove from the event.
+ * @return {Object} Current instance of EventEmitter for chaining.
+ */
+ proto.removeListener = function removeListener(evt, listener) {
+ var listeners = this.getListenersAsObject(evt);
+ var index;
+ var key;
+
+ for (key in listeners) {
+ if (listeners.hasOwnProperty(key)) {
+ index = indexOfListener(listeners[key], listener);
+
+ if (index !== -1) {
+ listeners[key].splice(index, 1);
+ }
+ }
+ }
+
+ return this;
+ };
+
+ /**
+ * Alias of removeListener
+ */
+ proto.off = alias('removeListener');
+
+ /**
+ * Adds listeners in bulk using the manipulateListeners method.
+ * If you pass an object as the second argument you can add to multiple events at once. The object should contain key value pairs of events and listeners or listener arrays. You can also pass it an event name and an array of listeners to be added.
+ * You can also pass it a regular expression to add the array of listeners to all events that match it.
+ * Yeah, this function does quite a bit. That's probably a bad thing.
+ *
+ * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to add to multiple events at once.
+ * @param {Function[]} [listeners] An optional array of listener functions to add.
+ * @return {Object} Current instance of EventEmitter for chaining.
+ */
+ proto.addListeners = function addListeners(evt, listeners) {
+ // Pass through to manipulateListeners
+ return this.manipulateListeners(false, evt, listeners);
+ };
+
+ /**
+ * Removes listeners in bulk using the manipulateListeners method.
+ * If you pass an object as the second argument you can remove from multiple events at once. The object should contain key value pairs of events and listeners or listener arrays.
+ * You can also pass it an event name and an array of listeners to be removed.
+ * You can also pass it a regular expression to remove the listeners from all events that match it.
+ *
+ * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to remove from multiple events at once.
+ * @param {Function[]} [listeners] An optional array of listener functions to remove.
+ * @return {Object} Current instance of EventEmitter for chaining.
+ */
+ proto.removeListeners = function removeListeners(evt, listeners) {
+ // Pass through to manipulateListeners
+ return this.manipulateListeners(true, evt, listeners);
+ };
+
+ /**
+ * Edits listeners in bulk. The addListeners and removeListeners methods both use this to do their job. You should really use those instead, this is a little lower level.
+ * The first argument will determine if the listeners are removed (true) or added (false).
+ * If you pass an object as the second argument you can add/remove from multiple events at once. The object should contain key value pairs of events and listeners or listener arrays.
+ * You can also pass it an event name and an array of listeners to be added/removed.
+ * You can also pass it a regular expression to manipulate the listeners of all events that match it.
+ *
+ * @param {Boolean} remove True if you want to remove listeners, false if you want to add.
+ * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to add/remove from multiple events at once.
+ * @param {Function[]} [listeners] An optional array of listener functions to add/remove.
+ * @return {Object} Current instance of EventEmitter for chaining.
+ */
+ proto.manipulateListeners = function manipulateListeners(remove, evt, listeners) {
+ var i;
+ var value;
+ var single = remove ? this.removeListener : this.addListener;
+ var multiple = remove ? this.removeListeners : this.addListeners;
+
+ // If evt is an object then pass each of it's properties to this method
+ if (typeof evt === 'object' && !(evt instanceof RegExp)) {
+ for (i in evt) {
+ if (evt.hasOwnProperty(i) && (value = evt[i])) {
+ // Pass the single listener straight through to the singular method
+ if (typeof value === 'function') {
+ single.call(this, i, value);
+ }
+ else {
+ // Otherwise pass back to the multiple function
+ multiple.call(this, i, value);
+ }
+ }
+ }
+ }
+ else {
+ // So evt must be a string
+ // And listeners must be an array of listeners
+ // Loop over it and pass each one to the multiple method
+ i = listeners.length;
+ while (i--) {
+ single.call(this, evt, listeners[i]);
+ }
+ }
+
+ return this;
+ };
+
+ /**
+ * Removes all listeners from a specified event.
+ * If you do not specify an event then all listeners will be removed.
+ * That means every event will be emptied.
+ * You can also pass a regex to remove all events that match it.
+ *
+ * @param {String|RegExp} [evt] Optional name of the event to remove all listeners for. Will remove from every event if not passed.
+ * @return {Object} Current instance of EventEmitter for chaining.
+ */
+ proto.removeEvent = function removeEvent(evt) {
+ var type = typeof evt;
+ var events = this._getEvents();
+ var key;
+
+ // Remove different things depending on the state of evt
+ if (type === 'string') {
+ // Remove all listeners for the specified event
+ delete events[evt];
+ }
+ else if (type === 'object') {
+ // Remove all events matching the regex.
+ for (key in events) {
+ if (events.hasOwnProperty(key) && evt.test(key)) {
+ delete events[key];
+ }
+ }
+ }
+ else {
+ // Remove all listeners in all events
+ delete this._events;
+ }
+
+ return this;
+ };
+
+ /**
+ * Emits an event of your choice.
+ * When emitted, every listener attached to that event will be executed.
+ * If you pass the optional argument array then those arguments will be passed to every listener upon execution.
+ * Because it uses `apply`, your array of arguments will be passed as if you wrote them out separately.
+ * So they will not arrive within the array on the other side, they will be separate.
+ * You can also pass a regular expression to emit to all events that match it.
+ *
+ * @param {String|RegExp} evt Name of the event to emit and execute listeners for.
+ * @param {Array} [args] Optional array of arguments to be passed to each listener.
+ * @return {Object} Current instance of EventEmitter for chaining.
+ */
+ proto.emitEvent = function emitEvent(evt, args) {
+ var listeners = this.getListenersAsObject(evt);
+ var listener;
+ var i;
+ var key;
+ var response;
+
+ for (key in listeners) {
+ if (listeners.hasOwnProperty(key)) {
+ i = listeners[key].length;
+
+ while (i--) {
+ // If the listener returns true then it shall be removed from the event
+ // The function is executed either with a basic call or an apply if there is an args array
+ listener = listeners[key][i];
+
+ if (listener.once === true) {
+ this.removeListener(evt, listener.listener);
+ }
+
+ response = listener.listener.apply(this, args || []);
+
+ if (response === this._getOnceReturnValue()) {
+ this.removeListener(evt, listener.listener);
+ }
+ }
+ }
+ }
+
+ return this;
+ };
+
+ /**
+ * Alias of emitEvent
+ */
+ proto.trigger = alias('emitEvent');
+
+ /**
+ * Subtly different from emitEvent in that it will pass its arguments on to the listeners, as opposed to taking a single array of arguments to pass on.
+ * As with emitEvent, you can pass a regex in place of the event name to emit to all events that match it.
+ *
+ * @param {String|RegExp} evt Name of the event to emit and execute listeners for.
+ * @param {...*} Optional additional arguments to be passed to each listener.
+ * @return {Object} Current instance of EventEmitter for chaining.
+ */
+ proto.emit = function emit(evt) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ return this.emitEvent(evt, args);
+ };
+
+ /**
+ * Sets the current value to check against when executing listeners. If a
+ * listeners return value matches the one set here then it will be removed
+ * after execution. This value defaults to true.
+ *
+ * @param {*} value The new value to check for when executing listeners.
+ * @return {Object} Current instance of EventEmitter for chaining.
+ */
+ proto.setOnceReturnValue = function setOnceReturnValue(value) {
+ this._onceReturnValue = value;
+ return this;
+ };
+
+ /**
+ * Fetches the current value to check against when executing listeners. If
+ * the listeners return value matches this one then it should be removed
+ * automatically. It will return true by default.
+ *
+ * @return {*|Boolean} The current value to check for or the default, true.
+ * @api private
+ */
+ proto._getOnceReturnValue = function _getOnceReturnValue() {
+ if (this.hasOwnProperty('_onceReturnValue')) {
+ return this._onceReturnValue;
+ }
+ else {
+ return true;
+ }
+ };
+
+ /**
+ * Fetches the events object and creates one if required.
+ *
+ * @return {Object} The events storage object.
+ * @api private
+ */
+ proto._getEvents = function _getEvents() {
+ return this._events || (this._events = {});
+ };
+
+ // Expose the class either via AMD, CommonJS or the global object
+ if (typeof define === 'function' && define.amd) {
+ define(function () {
+ return EventEmitter;
+ });
+ }
+ else if (typeof module === 'object' && module.exports){
+ module.exports = EventEmitter;
+ }
+ else {
+ this.EventEmitter = EventEmitter;
+ }
+}.call(this));
+
+/**
+ * Bridget makes jQuery widgets
+ * v1.0.0
+ */
+
+( function( window ) {
+
+'use strict';
+
+// -------------------------- utils -------------------------- //
+
+var slice = Array.prototype.slice;
+
+function noop() {}
+
+// -------------------------- definition -------------------------- //
+
+function defineBridget( $ ) {
+
+// bail if no jQuery
+if ( !$ ) {
+ return;
+}
+
+// -------------------------- addOptionMethod -------------------------- //
+
+/**
+ * adds option method -> $().plugin('option', {...})
+ * @param {Function} PluginClass - constructor class
+ */
+function addOptionMethod( PluginClass ) {
+ // don't overwrite original option method
+ if ( PluginClass.prototype.option ) {
+ return;
+ }
+
+ // option setter
+ PluginClass.prototype.option = function( opts ) {
+ // bail out if not an object
+ if ( !$.isPlainObject( opts ) ){
+ return;
+ }
+ this.options = $.extend( true, this.options, opts );
+ };
+}
+
+
+// -------------------------- plugin bridge -------------------------- //
+
+// helper function for logging errors
+// $.error breaks jQuery chaining
+var logError = typeof console === 'undefined' ? noop :
+ function( message ) {
+ console.error( message );
+ };
+
+/**
+ * jQuery plugin bridge, access methods like $elem.plugin('method')
+ * @param {String} namespace - plugin name
+ * @param {Function} PluginClass - constructor class
+ */
+function bridge( namespace, PluginClass ) {
+ // add to jQuery fn namespace
+ $.fn[ namespace ] = function( options ) {
+ if ( typeof options === 'string' ) {
+ // call plugin method when first argument is a string
+ // get arguments for method
+ var args = slice.call( arguments, 1 );
+
+ for ( var i=0, len = this.length; i < len; i++ ) {
+ var elem = this[i];
+ var instance = $.data( elem, namespace );
+ if ( !instance ) {
+ logError( "cannot call methods on " + namespace + " prior to initialization; " +
+ "attempted to call '" + options + "'" );
+ continue;
+ }
+ if ( !$.isFunction( instance[options] ) || options.charAt(0) === '_' ) {
+ logError( "no such method '" + options + "' for " + namespace + " instance" );
+ continue;
+ }
+
+ // trigger method with arguments
+ var returnValue = instance[ options ].apply( instance, args );
+
+ // break look and return first value if provided
+ if ( returnValue !== undefined ) {
+ return returnValue;
+ }
+ }
+ // return this if no return value
+ return this;
+ } else {
+ return this.each( function() {
+ var instance = $.data( this, namespace );
+ if ( instance ) {
+ // apply options & init
+ instance.option( options );
+ instance._init();
+ } else {
+ // initialize new instance
+ instance = new PluginClass( this, options );
+ $.data( this, namespace, instance );
+ }
+ });
+ }
+ };
+
+}
+
+// -------------------------- bridget -------------------------- //
+
+/**
+ * converts a Prototypical class into a proper jQuery plugin
+ * the class must have a ._init method
+ * @param {String} namespace - plugin name, used in $().pluginName
+ * @param {Function} PluginClass - constructor class
+ */
+$.bridget = function( namespace, PluginClass ) {
+ addOptionMethod( PluginClass );
+ bridge( namespace, PluginClass );
+};
+
+}
+
+// transport
+if ( typeof define === 'function' && define.amd ) {
+ // AMD
+ define( [ 'jquery' ], defineBridget );
+} else {
+ // get jquery from browser global
+ defineBridget( window.jQuery );
+}
+
+})( window );
+
+/**
+ * matchesSelector helper v1.0.1
+ *
+ * @name matchesSelector
+ * @param {Element} elem
+ * @param {String} selector
+ */
+
+/*jshint browser: true, strict: true, undef: true, unused: true */
+/*global define: false */
+
+( function( global, ElemProto ) {
+
+ 'use strict';
+
+ var matchesMethod = ( function() {
+ // check un-prefixed
+ if ( ElemProto.matchesSelector ) {
+ return 'matchesSelector';
+ }
+ // check vendor prefixes
+ var prefixes = [ 'webkit', 'moz', 'ms', 'o' ];
+
+ for ( var i=0, len = prefixes.length; i < len; i++ ) {
+ var prefix = prefixes[i];
+ var method = prefix + 'MatchesSelector';
+ if ( ElemProto[ method ] ) {
+ return method;
+ }
+ }
+ })();
+
+ // ----- match ----- //
+
+ function match( elem, selector ) {
+ return elem[ matchesMethod ]( selector );
+ }
+
+ // ----- appendToFragment ----- //
+
+ function checkParent( elem ) {
+ // not needed if already has parent
+ if ( elem.parentNode ) {
+ return;
+ }
+ var fragment = document.createDocumentFragment();
+ fragment.appendChild( elem );
+ }
+
+ // ----- query ----- //
+
+ // fall back to using QSA
+ // thx @jonathantneal https://gist.github.com/3062955
+ function query( elem, selector ) {
+ // append to fragment if no parent
+ checkParent( elem );
+
+ // match elem with all selected elems of parent
+ var elems = elem.parentNode.querySelectorAll( selector );
+ for ( var i=0, len = elems.length; i < len; i++ ) {
+ // return true if match
+ if ( elems[i] === elem ) {
+ return true;
+ }
+ }
+ // otherwise return false
+ return false;
+ }
+
+ // ----- matchChild ----- //
+
+ function matchChild( elem, selector ) {
+ checkParent( elem );
+ return match( elem, selector );
+ }
+
+ // ----- matchesSelector ----- //
+
+ var matchesSelector;
+
+ if ( matchesMethod ) {
+ // IE9 supports matchesSelector, but doesn't work on orphaned elems
+ // check for that
+ var div = document.createElement('div');
+ var supportsOrphans = match( div, 'div' );
+ matchesSelector = supportsOrphans ? match : matchChild;
+ } else {
+ matchesSelector = query;
+ }
+
+ // transport
+ if ( typeof define === 'function' && define.amd ) {
+ // AMD
+ define( function() {
+ return matchesSelector;
+ });
+ } else {
+ // browser global
+ window.matchesSelector = matchesSelector;
+ }
+
+})( this, Element.prototype );
+
+/**
+ * Outlayer Item
+**/
+
+( function( window ) {
+
+'use strict';
+
+// ----- get style ----- //
+
+var defView = document.defaultView;
+
+var getStyle = defView && defView.getComputedStyle ?
+ function( elem ) {
+ return defView.getComputedStyle( elem, null );
+ } :
+ function( elem ) {
+ return elem.currentStyle;
+ };
+
+
+// extend objects
+function extend( a, b ) {
+ for ( var prop in b ) {
+ a[ prop ] = b[ prop ];
+ }
+ return a;
+}
+
+function isEmptyObj( obj ) {
+ for ( var prop in obj ) {
+ return false;
+ }
+ prop = null;
+ return true;
+}
+
+// http://jamesroberts.name/blog/2010/02/22/string-functions-for-javascript-trim-to-camel-case-to-dashed-and-to-underscore/
+function toDash( str ) {
+ return str.replace( /([A-Z])/g, function( $1 ){
+ return '-' + $1.toLowerCase();
+ });
+}
+
+// -------------------------- Outlayer definition -------------------------- //
+
+function outlayerItemDefinition( EventEmitter, getSize, getStyleProperty ) {
+
+// -------------------------- CSS3 support -------------------------- //
+
+var transitionProperty = getStyleProperty('transition');
+var transformProperty = getStyleProperty('transform');
+var supportsCSS3 = transitionProperty && transformProperty;
+var is3d = !!getStyleProperty('perspective');
+
+var transitionEndEvent = {
+ WebkitTransition: 'webkitTransitionEnd',
+ MozTransition: 'transitionend',
+ OTransition: 'otransitionend',
+ transition: 'transitionend'
+}[ transitionProperty ];
+
+// properties that could have vendor prefix
+var prefixableProperties = [
+ 'transform',
+ 'transition',
+ 'transitionDuration',
+ 'transitionProperty'
+];
+
+// cache all vendor properties
+var vendorProperties = ( function() {
+ var cache = {};
+ for ( var i=0, len = prefixableProperties.length; i < len; i++ ) {
+ var prop = prefixableProperties[i];
+ var supportedProp = getStyleProperty( prop );
+ if ( supportedProp && supportedProp !== prop ) {
+ cache[ prop ] = supportedProp;
+ }
+ }
+ return cache;
+})();
+
+// -------------------------- Item -------------------------- //
+
+function Item( element, layout ) {
+ if ( !element ) {
+ return;
+ }
+
+ this.element = element;
+ // parent layout class, i.e. Masonry, Isotope, or Packery
+ this.layout = layout;
+ this.position = {
+ x: 0,
+ y: 0
+ };
+
+ this._create();
+}
+
+// inherit EventEmitter
+extend( Item.prototype, EventEmitter.prototype );
+
+Item.prototype._create = function() {
+ // transition objects
+ this._transition = {
+ ingProperties: {},
+ clean: {},
+ onEnd: {}
+ };
+
+ this.css({
+ position: 'absolute'
+ });
+};
+
+// trigger specified handler for event type
+Item.prototype.handleEvent = function( event ) {
+ var method = 'on' + event.type;
+ if ( this[ method ] ) {
+ this[ method ]( event );
+ }
+};
+
+Item.prototype.getSize = function() {
+ this.size = getSize( this.element );
+};
+
+/**
+ * apply CSS styles to element
+ * @param {Object} style
+ */
+Item.prototype.css = function( style ) {
+ var elemStyle = this.element.style;
+
+ for ( var prop in style ) {
+ // use vendor property if available
+ var supportedProp = vendorProperties[ prop ] || prop;
+ elemStyle[ supportedProp ] = style[ prop ];
+ }
+};
+
+ // measure position, and sets it
+Item.prototype.getPosition = function() {
+ var style = getStyle( this.element );
+ var layoutOptions = this.layout.options;
+ var isOriginLeft = layoutOptions.isOriginLeft;
+ var isOriginTop = layoutOptions.isOriginTop;
+ var x = parseInt( style[ isOriginLeft ? 'left' : 'right' ], 10 );
+ var y = parseInt( style[ isOriginTop ? 'top' : 'bottom' ], 10 );
+
+ // clean up 'auto' or other non-integer values
+ x = isNaN( x ) ? 0 : x;
+ y = isNaN( y ) ? 0 : y;
+ // remove padding from measurement
+ var layoutSize = this.layout.size;
+ x -= isOriginLeft ? layoutSize.paddingLeft : layoutSize.paddingRight;
+ y -= isOriginTop ? layoutSize.paddingTop : layoutSize.paddingBottom;
+
+ this.position.x = x;
+ this.position.y = y;
+};
+
+// set settled position, apply padding
+Item.prototype.layoutPosition = function() {
+ var layoutSize = this.layout.size;
+ var layoutOptions = this.layout.options;
+ var style = {};
+
+ if ( layoutOptions.isOriginLeft ) {
+ style.left = ( this.position.x + layoutSize.paddingLeft ) + 'px';
+ // reset other property
+ style.right = '';
+ } else {
+ style.right = ( this.position.x + layoutSize.paddingRight ) + 'px';
+ style.left = '';
+ }
+
+ if ( layoutOptions.isOriginTop ) {
+ style.top = ( this.position.y + layoutSize.paddingTop ) + 'px';
+ style.bottom = '';
+ } else {
+ style.bottom = ( this.position.y + layoutSize.paddingBottom ) + 'px';
+ style.top = '';
+ }
+
+ this.css( style );
+ this.emitEvent( 'layout', [ this ] );
+};
+
+
+// transform translate function
+var translate = is3d ?
+ function( x, y ) {
+ return 'translate3d(' + x + 'px, ' + y + 'px, 0)';
+ } :
+ function( x, y ) {
+ return 'translate(' + x + 'px, ' + y + 'px)';
+ };
+
+
+Item.prototype._transitionTo = function( x, y ) {
+ this.getPosition();
+ // get current x & y from top/left
+ var curX = this.position.x;
+ var curY = this.position.y;
+
+ var compareX = parseInt( x, 10 );
+ var compareY = parseInt( y, 10 );
+ var didNotMove = compareX === this.position.x && compareY === this.position.y;
+
+ // save end position
+ this.setPosition( x, y );
+
+ // if did not move and not transitioning, just go to layout
+ if ( didNotMove && !this.isTransitioning ) {
+ this.layoutPosition();
+ return;
+ }
+
+ var transX = x - curX;
+ var transY = y - curY;
+ var transitionStyle = {};
+ // flip cooridinates if origin on right or bottom
+ var layoutOptions = this.layout.options;
+ transX = layoutOptions.isOriginLeft ? transX : -transX;
+ transY = layoutOptions.isOriginTop ? transY : -transY;
+ transitionStyle.transform = translate( transX, transY );
+
+ this.transition({
+ to: transitionStyle,
+ onTransitionEnd: {
+ transform: this.layoutPosition
+ },
+ isCleaning: true
+ });
+};
+
+// non transition + transform support
+Item.prototype.goTo = function( x, y ) {
+ this.setPosition( x, y );
+ this.layoutPosition();
+};
+
+// use transition and transforms if supported
+Item.prototype.moveTo = supportsCSS3 ?
+ Item.prototype._transitionTo : Item.prototype.goTo;
+
+Item.prototype.setPosition = function( x, y ) {
+ this.position.x = parseInt( x, 10 );
+ this.position.y = parseInt( y, 10 );
+};
+
+// ----- transition ----- //
+
+/**
+ * @param {Object} style - CSS
+ * @param {Function} onTransitionEnd
+ */
+
+// non transition, just trigger callback
+Item.prototype._nonTransition = function( args ) {
+ this.css( args.to );
+ if ( args.isCleaning ) {
+ this._removeStyles( args.to );
+ }
+ for ( var prop in args.onTransitionEnd ) {
+ args.onTransitionEnd[ prop ].call( this );
+ }
+};
+
+/**
+ * proper transition
+ * @param {Object} args - arguments
+ * @param {Object} to - style to transition to
+ * @param {Object} from - style to start transition from
+ * @param {Boolean} isCleaning - removes transition styles after transition
+ * @param {Function} onTransitionEnd - callback
+ */
+Item.prototype._transition = function( args ) {
+ // redirect to nonTransition if no transition duration
+ if ( !parseFloat( this.layout.options.transitionDuration ) ) {
+ this._nonTransition( args );
+ return;
+ }
+
+ var _transition = this._transition;
+ // keep track of onTransitionEnd callback by css property
+ for ( var prop in args.onTransitionEnd ) {
+ _transition.onEnd[ prop ] = args.onTransitionEnd[ prop ];
+ }
+ // keep track of properties that are transitioning
+ for ( prop in args.to ) {
+ _transition.ingProperties[ prop ] = true;
+ // keep track of properties to clean up when transition is done
+ if ( args.isCleaning ) {
+ _transition.clean[ prop ] = true;
+ }
+ }
+
+ // set from styles
+ if ( args.from ) {
+ this.css( args.from );
+ // force redraw. http://blog.alexmaccaw.com/css-transitions
+ var h = this.element.offsetHeight;
+ // hack for JSHint to hush about unused var
+ h = null;
+ }
+ // enable transition
+ this.enableTransition( args.to );
+ // set styles that are transitioning
+ this.css( args.to );
+
+ this.isTransitioning = true;
+
+};
+
+var itemTransitionProperties = transformProperty && ( toDash( transformProperty ) +
+ ',opacity' );
+
+Item.prototype.enableTransition = function(/* style */) {
+ // only enable if not already transitioning
+ // bug in IE10 were re-setting transition style will prevent
+ // transitionend event from triggering
+ if ( this.isTransitioning ) {
+ return;
+ }
+
+ // make transition: foo, bar, baz from style object
+ // TODO uncomment this bit when IE10 bug is resolved
+ // var transitionValue = [];
+ // for ( var prop in style ) {
+ // // dash-ify camelCased properties like WebkitTransition
+ // transitionValue.push( toDash( prop ) );
+ // }
+ // enable transition styles
+ // HACK always enable transform,opacity for IE10
+ this.css({
+ transitionProperty: itemTransitionProperties,
+ transitionDuration: this.layout.options.transitionDuration
+ });
+ // listen for transition end event
+ this.element.addEventListener( transitionEndEvent, this, false );
+};
+
+Item.prototype.transition = Item.prototype[ transitionProperty ? '_transition' : '_nonTransition' ];
+
+// ----- events ----- //
+
+Item.prototype.onwebkitTransitionEnd = function( event ) {
+ this.ontransitionend( event );
+};
+
+Item.prototype.onotransitionend = function( event ) {
+ this.ontransitionend( event );
+};
+
+// properties that I munge to make my life easier
+var dashedVendorProperties = {
+ '-webkit-transform': 'transform',
+ '-moz-transform': 'transform',
+ '-o-transform': 'transform'
+};
+
+Item.prototype.ontransitionend = function( event ) {
+ // disregard bubbled events from children
+ if ( event.target !== this.element ) {
+ return;
+ }
+ var _transition = this._transition;
+ // get property name of transitioned property, convert to prefix-free
+ var propertyName = dashedVendorProperties[ event.propertyName ] || event.propertyName;
+
+ // remove property that has completed transitioning
+ delete _transition.ingProperties[ propertyName ];
+ // check if any properties are still transitioning
+ if ( isEmptyObj( _transition.ingProperties ) ) {
+ // all properties have completed transitioning
+ this.disableTransition();
+ }
+ // clean style
+ if ( propertyName in _transition.clean ) {
+ // clean up style
+ this.element.style[ event.propertyName ] = '';
+ delete _transition.clean[ propertyName ];
+ }
+ // trigger onTransitionEnd callback
+ if ( propertyName in _transition.onEnd ) {
+ var onTransitionEnd = _transition.onEnd[ propertyName ];
+ onTransitionEnd.call( this );
+ delete _transition.onEnd[ propertyName ];
+ }
+
+ this.emitEvent( 'transitionEnd', [ this ] );
+};
+
+Item.prototype.disableTransition = function() {
+ this.removeTransitionStyles();
+ this.element.removeEventListener( transitionEndEvent, this, false );
+ this.isTransitioning = false;
+};
+
+/**
+ * removes style property from element
+ * @param {Object} style
+**/
+Item.prototype._removeStyles = function( style ) {
+ // clean up transition styles
+ var cleanStyle = {};
+ for ( var prop in style ) {
+ cleanStyle[ prop ] = '';
+ }
+ this.css( cleanStyle );
+};
+
+var cleanTransitionStyle = {
+ transitionProperty: '',
+ transitionDuration: ''
+};
+
+Item.prototype.removeTransitionStyles = function() {
+ // remove transition
+ this.css( cleanTransitionStyle );
+};
+
+// ----- show/hide/remove ----- //
+
+// remove element from DOM
+Item.prototype.removeElem = function() {
+ this.element.parentNode.removeChild( this.element );
+ this.emitEvent( 'remove', [ this ] );
+};
+
+Item.prototype.remove = function() {
+ // just remove element if no transition support or no transition
+ if ( !transitionProperty || !parseFloat( this.layout.options.transitionDuration ) ) {
+ this.removeElem();
+ return;
+ }
+
+ // start transition
+ var _this = this;
+ this.on( 'transitionEnd', function() {
+ _this.removeElem();
+ return true; // bind once
+ });
+ this.hide();
+};
+
+Item.prototype.reveal = function() {
+ delete this.isHidden;
+ // remove display: none
+ this.css({ display: '' });
+
+ var options = this.layout.options;
+ this.transition({
+ from: options.hiddenStyle,
+ to: options.visibleStyle,
+ isCleaning: true
+ });
+};
+
+Item.prototype.hide = function() {
+ // set flag
+ this.isHidden = true;
+ // remove display: none
+ this.css({ display: '' });
+
+ var options = this.layout.options;
+ this.transition({
+ from: options.visibleStyle,
+ to: options.hiddenStyle,
+ // keep hidden stuff hidden
+ isCleaning: true,
+ onTransitionEnd: {
+ opacity: function() {
+ this.css({ display: 'none' });
+ }
+ }
+ });
+};
+
+Item.prototype.destroy = function() {
+ this.css({
+ position: '',
+ left: '',
+ right: '',
+ top: '',
+ bottom: '',
+ transition: '',
+ transform: ''
+ });
+};
+
+return Item;
+
+}
+
+// -------------------------- transport -------------------------- //
+
+if ( typeof define === 'function' && define.amd ) {
+ // AMD
+ define( [
+ 'eventEmitter/EventEmitter',
+ 'get-size/get-size',
+ 'get-style-property/get-style-property'
+ ],
+ outlayerItemDefinition );
+} else {
+ // browser global
+ window.Outlayer = {};
+ window.Outlayer.Item = outlayerItemDefinition(
+ window.EventEmitter,
+ window.getSize,
+ window.getStyleProperty
+ );
+}
+
+})( window );
+
+/*!
+ * Outlayer v1.1.5
+ * the brains and guts of a layout library
+ */
+
+( function( window ) {
+
+'use strict';
+
+// ----- vars ----- //
+
+var document = window.document;
+var console = window.console;
+var jQuery = window.jQuery;
+
+var noop = function() {};
+
+// -------------------------- helpers -------------------------- //
+
+// extend objects
+function extend( a, b ) {
+ for ( var prop in b ) {
+ a[ prop ] = b[ prop ];
+ }
+ return a;
+}
+
+
+var objToString = Object.prototype.toString;
+function isArray( obj ) {
+ return objToString.call( obj ) === '[object Array]';
+}
+
+// turn element or nodeList into an array
+function makeArray( obj ) {
+ var ary = [];
+ if ( isArray( obj ) ) {
+ // use object if already an array
+ ary = obj;
+ } else if ( obj && typeof obj.length === 'number' ) {
+ // convert nodeList to array
+ for ( var i=0, len = obj.length; i < len; i++ ) {
+ ary.push( obj[i] );
+ }
+ } else {
+ // array of single index
+ ary.push( obj );
+ }
+ return ary;
+}
+
+// http://stackoverflow.com/a/384380/182183
+var isElement = ( typeof HTMLElement === 'object' ) ?
+ function isElementDOM2( obj ) {
+ return obj instanceof HTMLElement;
+ } :
+ function isElementQuirky( obj ) {
+ return obj && typeof obj === 'object' &&
+ obj.nodeType === 1 && typeof obj.nodeName === 'string';
+ };
+
+// index of helper cause IE8
+var indexOf = Array.prototype.indexOf ? function( ary, obj ) {
+ return ary.indexOf( obj );
+ } : function( ary, obj ) {
+ for ( var i=0, len = ary.length; i < len; i++ ) {
+ if ( ary[i] === obj ) {
+ return i;
+ }
+ }
+ return -1;
+ };
+
+// http://jamesroberts.name/blog/2010/02/22/string-functions-for-javascript-trim-to-camel-case-to-dashed-and-to-underscore/
+function toDashed( str ) {
+ return str.replace( /(.)([A-Z])/g, function( match, $1, $2 ) {
+ return $1 + '-' + $2;
+ }).toLowerCase();
+}
+
+
+function outlayerDefinition( eventie, docReady, EventEmitter, getSize, matchesSelector, Item ) {
+
+// -------------------------- Outlayer -------------------------- //
+
+// globally unique identifiers
+var GUID = 0;
+// internal store of all Outlayer intances
+var instances = {};
+
+
+/**
+ * @param {Element, String} element
+ * @param {Object} options
+ * @constructor
+ */
+function Outlayer( element, options ) {
+ // use element as selector string
+ if ( typeof element === 'string' ) {
+ element = document.querySelector( element );
+ }
+
+ // bail out if not proper element
+ if ( !element || !isElement( element ) ) {
+ if ( console ) {
+ console.error( 'Bad ' + this.settings.namespace + ' element: ' + element );
+ }
+ return;
+ }
+
+ this.element = element;
+
+ // options
+ this.options = extend( {}, this.options );
+ this.option( options );
+
+ // add id for Outlayer.getFromElement
+ var id = ++GUID;
+ this.element.outlayerGUID = id; // expando
+ instances[ id ] = this; // associate via id
+
+ // kick it off
+ this._create();
+
+ if ( this.options.isInitLayout ) {
+ this.layout();
+ }
+}
+
+// settings are for internal use only
+Outlayer.prototype.settings = {
+ namespace: 'outlayer',
+ item: Item
+};
+
+// default options
+Outlayer.prototype.options = {
+ containerStyle: {
+ position: 'relative'
+ },
+ isInitLayout: true,
+ isOriginLeft: true,
+ isOriginTop: true,
+ isResizeBound: true,
+ // item options
+ transitionDuration: '0.4s',
+ hiddenStyle: {
+ opacity: 0,
+ transform: 'scale(0.001)'
+ },
+ visibleStyle: {
+ opacity: 1,
+ transform: 'scale(1)'
+ }
+};
+
+// inherit EventEmitter
+extend( Outlayer.prototype, EventEmitter.prototype );
+
+/**
+ * set options
+ * @param {Object} opts
+ */
+Outlayer.prototype.option = function( opts ) {
+ extend( this.options, opts );
+};
+
+Outlayer.prototype._create = function() {
+ // get items from children
+ this.reloadItems();
+ // elements that affect layout, but are not laid out
+ this.stamps = [];
+ this.stamp( this.options.stamp );
+ // set container style
+ extend( this.element.style, this.options.containerStyle );
+
+ // bind resize method
+ if ( this.options.isResizeBound ) {
+ this.bindResize();
+ }
+};
+
+// goes through all children again and gets bricks in proper order
+Outlayer.prototype.reloadItems = function() {
+ // collection of item elements
+ this.items = this._getItems( this.element.children );
+};
+
+
+/**
+ * get item elements to be used in layout
+ * @param {Array or NodeList or HTMLElement} elems
+ * @returns {Array} items - collection of new Outlayer Items
+ */
+Outlayer.prototype._getItems = function( elems ) {
+
+ var itemElems = this._filterFindItemElements( elems );
+ var Item = this.settings.item;
+
+ // create new Outlayer Items for collection
+ var items = [];
+ for ( var i=0, len = itemElems.length; i < len; i++ ) {
+ var elem = itemElems[i];
+ var item = new Item( elem, this, this.options.itemOptions );
+ items.push( item );
+ }
+
+ return items;
+};
+
+/**
+ * get item elements to be used in layout
+ * @param {Array or NodeList or HTMLElement} elems
+ * @returns {Array} items - item elements
+ */
+Outlayer.prototype._filterFindItemElements = function( elems ) {
+ // make array of elems
+ elems = makeArray( elems );
+ var itemSelector = this.options.itemSelector;
+ var itemElems = [];
+
+ for ( var i=0, len = elems.length; i < len; i++ ) {
+ var elem = elems[i];
+ // check that elem is an actual element
+ if ( !isElement( elem ) ) {
+ continue;
+ }
+ // filter & find items if we have an item selector
+ if ( itemSelector ) {
+ // filter siblings
+ if ( matchesSelector( elem, itemSelector ) ) {
+ itemElems.push( elem );
+ }
+ // find children
+ var childElems = elem.querySelectorAll( itemSelector );
+ // concat childElems to filterFound array
+ for ( var j=0, jLen = childElems.length; j < jLen; j++ ) {
+ itemElems.push( childElems[j] );
+ }
+ } else {
+ itemElems.push( elem );
+ }
+ }
+
+ return itemElems;
+};
+
+/**
+ * getter method for getting item elements
+ * @returns {Array} elems - collection of item elements
+ */
+Outlayer.prototype.getItemElements = function() {
+ var elems = [];
+ for ( var i=0, len = this.items.length; i < len; i++ ) {
+ elems.push( this.items[i].element );
+ }
+ return elems;
+};
+
+// ----- init & layout ----- //
+
+/**
+ * lays out all items
+ */
+Outlayer.prototype.layout = function() {
+ this._resetLayout();
+ this._manageStamps();
+
+ // don't animate first layout
+ var isInstant = this.options.isLayoutInstant !== undefined ?
+ this.options.isLayoutInstant : !this._isLayoutInited;
+ this.layoutItems( this.items, isInstant );
+
+ // flag for initalized
+ this._isLayoutInited = true;
+};
+
+// _init is alias for layout
+Outlayer.prototype._init = Outlayer.prototype.layout;
+
+/**
+ * logic before any new layout
+ */
+Outlayer.prototype._resetLayout = function() {
+ this.getSize();
+};
+
+
+Outlayer.prototype.getSize = function() {
+ this.size = getSize( this.element );
+};
+
+/**
+ * get measurement from option, for columnWidth, rowHeight, gutter
+ * if option is String -> get element from selector string, & get size of element
+ * if option is Element -> get size of element
+ * else use option as a number
+ *
+ * @param {String} measurement
+ * @param {String} size - width or height
+ * @private
+ */
+Outlayer.prototype._getMeasurement = function( measurement, size ) {
+ var option = this.options[ measurement ];
+ var elem;
+ if ( !option ) {
+ // default to 0
+ this[ measurement ] = 0;
+ } else {
+ if ( typeof option === 'string' ) {
+ elem = this.element.querySelector( option );
+ } else if ( isElement( option ) ) {
+ elem = option;
+ }
+ // use size of element, if element
+ this[ measurement ] = elem ? getSize( elem )[ size ] : option;
+ }
+};
+
+/**
+ * layout a collection of item elements
+ * @api public
+ */
+Outlayer.prototype.layoutItems = function( items, isInstant ) {
+ items = this._getItemsForLayout( items );
+
+ this._layoutItems( items, isInstant );
+
+ this._postLayout();
+};
+
+/**
+ * get the items to be laid out
+ * you may want to skip over some items
+ * @param {Array} items
+ * @returns {Array} items
+ */
+Outlayer.prototype._getItemsForLayout = function( items ) {
+ var layoutItems = [];
+ for ( var i=0, len = items.length; i < len; i++ ) {
+ var item = items[i];
+ if ( !item.isIgnored ) {
+ layoutItems.push( item );
+ }
+ }
+ return layoutItems;
+};
+
+/**
+ * layout items
+ * @param {Array} items
+ * @param {Boolean} isInstant
+ */
+Outlayer.prototype._layoutItems = function( items, isInstant ) {
+ if ( !items || !items.length ) {
+ // no items, emit event with empty array
+ this.emitEvent( 'layoutComplete', [ this, items ] );
+ return;
+ }
+
+ // emit layoutComplete when done
+ this._itemsOn( items, 'layout', function onItemsLayout() {
+ this.emitEvent( 'layoutComplete', [ this, items ] );
+ });
+
+ var queue = [];
+
+ for ( var i=0, len = items.length; i < len; i++ ) {
+ var item = items[i];
+ // get x/y object from method
+ var position = this._getItemLayoutPosition( item );
+ // enqueue
+ position.item = item;
+ position.isInstant = isInstant;
+ queue.push( position );
+ }
+
+ this._processLayoutQueue( queue );
+};
+
+/**
+ * get item layout position
+ * @param {Outlayer.Item} item
+ * @returns {Object} x and y position
+ */
+Outlayer.prototype._getItemLayoutPosition = function( /* item */ ) {
+ return {
+ x: 0,
+ y: 0
+ };
+};
+
+/**
+ * iterate over array and position each item
+ * Reason being - separating this logic prevents 'layout invalidation'
+ * thx @paul_irish
+ * @param {Array} queue
+ */
+Outlayer.prototype._processLayoutQueue = function( queue ) {
+ for ( var i=0, len = queue.length; i < len; i++ ) {
+ var obj = queue[i];
+ this._positionItem( obj.item, obj.x, obj.y, obj.isInstant );
+ }
+};
+
+/**
+ * Sets position of item in DOM
+ * @param {Outlayer.Item} item
+ * @param {Number} x - horizontal position
+ * @param {Number} y - vertical position
+ * @param {Boolean} isInstant - disables transitions
+ */
+Outlayer.prototype._positionItem = function( item, x, y, isInstant ) {
+ if ( isInstant ) {
+ // if not transition, just set CSS
+ item.goTo( x, y );
+ } else {
+ item.moveTo( x, y );
+ }
+};
+
+/**
+ * Any logic you want to do after each layout,
+ * i.e. size the container
+ */
+Outlayer.prototype._postLayout = function() {
+ var size = this._getContainerSize();
+ if ( size ) {
+ this._setContainerMeasure( size.width, true );
+ this._setContainerMeasure( size.height, false );
+ }
+};
+
+/**
+ * @returns {Object} size
+ * @param {Number} width
+ * @param {Number} height
+ */
+Outlayer.prototype._getContainerSize = noop;
+
+/**
+ * @param {Number} measure - size of width or height
+ * @param {Boolean} isWidth
+ */
+Outlayer.prototype._setContainerMeasure = function( measure, isWidth ) {
+ if ( measure === undefined ) {
+ return;
+ }
+
+ var elemSize = this.size;
+ // add padding and border width if border box
+ if ( elemSize.isBorderBox ) {
+ measure += isWidth ? elemSize.paddingLeft + elemSize.paddingRight +
+ elemSize.borderLeftWidth + elemSize.borderRightWidth :
+ elemSize.paddingBottom + elemSize.paddingTop +
+ elemSize.borderTopWidth + elemSize.borderBottomWidth;
+ }
+
+ measure = Math.max( measure, 0 );
+ this.element.style[ isWidth ? 'width' : 'height' ] = measure + 'px';
+};
+
+/**
+ * trigger a callback for a collection of items events
+ * @param {Array} items - Outlayer.Items
+ * @param {String} eventName
+ * @param {Function} callback
+ */
+Outlayer.prototype._itemsOn = function( items, eventName, callback ) {
+ var doneCount = 0;
+ var count = items.length;
+ // event callback
+ var _this = this;
+ function tick() {
+ doneCount++;
+ if ( doneCount === count ) {
+ callback.call( _this );
+ }
+ return true; // bind once
+ }
+ // bind callback
+ for ( var i=0, len = items.length; i < len; i++ ) {
+ var item = items[i];
+ item.on( eventName, tick );
+ }
+};
+
+// -------------------------- ignore & stamps -------------------------- //
+
+
+/**
+ * keep item in collection, but do not lay it out
+ * ignored items do not get skipped in layout
+ * @param {Element} elem
+ */
+Outlayer.prototype.ignore = function( elem ) {
+ var item = this.getItem( elem );
+ if ( item ) {
+ item.isIgnored = true;
+ }
+};
+
+/**
+ * return item to layout collection
+ * @param {Element} elem
+ */
+Outlayer.prototype.unignore = function( elem ) {
+ var item = this.getItem( elem );
+ if ( item ) {
+ delete item.isIgnored;
+ }
+};
+
+/**
+ * adds elements to stamps
+ * @param {NodeList, Array, Element, or String} elems
+ */
+Outlayer.prototype.stamp = function( elems ) {
+ elems = this._find( elems );
+ if ( !elems ) {
+ return;
+ }
+
+ this.stamps = this.stamps.concat( elems );
+ // ignore
+ for ( var i=0, len = elems.length; i < len; i++ ) {
+ var elem = elems[i];
+ this.ignore( elem );
+ }
+};
+
+/**
+ * removes elements to stamps
+ * @param {NodeList, Array, or Element} elems
+ */
+Outlayer.prototype.unstamp = function( elems ) {
+ elems = this._find( elems );
+ if ( !elems ){
+ return;
+ }
+
+ for ( var i=0, len = elems.length; i < len; i++ ) {
+ var elem = elems[i];
+ // filter out removed stamp elements
+ var index = indexOf( this.stamps, elem );
+ if ( index !== -1 ) {
+ this.stamps.splice( index, 1 );
+ }
+ this.unignore( elem );
+ }
+
+};
+
+/**
+ * finds child elements
+ * @param {NodeList, Array, Element, or String} elems
+ * @returns {Array} elems
+ */
+Outlayer.prototype._find = function( elems ) {
+ if ( !elems ) {
+ return;
+ }
+ // if string, use argument as selector string
+ if ( typeof elems === 'string' ) {
+ elems = this.element.querySelectorAll( elems );
+ }
+ elems = makeArray( elems );
+ return elems;
+};
+
+Outlayer.prototype._manageStamps = function() {
+ if ( !this.stamps || !this.stamps.length ) {
+ return;
+ }
+
+ this._getBoundingRect();
+
+ for ( var i=0, len = this.stamps.length; i < len; i++ ) {
+ var stamp = this.stamps[i];
+ this._manageStamp( stamp );
+ }
+};
+
+// update boundingLeft / Top
+Outlayer.prototype._getBoundingRect = function() {
+ // get bounding rect for container element
+ var boundingRect = this.element.getBoundingClientRect();
+ var size = this.size;
+ this._boundingRect = {
+ left: boundingRect.left + size.paddingLeft + size.borderLeftWidth,
+ top: boundingRect.top + size.paddingTop + size.borderTopWidth,
+ right: boundingRect.right - ( size.paddingRight + size.borderRightWidth ),
+ bottom: boundingRect.bottom - ( size.paddingBottom + size.borderBottomWidth )
+ };
+};
+
+/**
+ * @param {Element} stamp
+**/
+Outlayer.prototype._manageStamp = noop;
+
+/**
+ * get x/y position of element relative to container element
+ * @param {Element} elem
+ * @returns {Object} offset - has left, top, right, bottom
+ */
+Outlayer.prototype._getElementOffset = function( elem ) {
+ var boundingRect = elem.getBoundingClientRect();
+ var thisRect = this._boundingRect;
+ var size = getSize( elem );
+ var offset = {
+ left: boundingRect.left - thisRect.left - size.marginLeft,
+ top: boundingRect.top - thisRect.top - size.marginTop,
+ right: thisRect.right - boundingRect.right - size.marginRight,
+ bottom: thisRect.bottom - boundingRect.bottom - size.marginBottom
+ };
+ return offset;
+};
+
+// -------------------------- resize -------------------------- //
+
+// enable event handlers for listeners
+// i.e. resize -> onresize
+Outlayer.prototype.handleEvent = function( event ) {
+ var method = 'on' + event.type;
+ if ( this[ method ] ) {
+ this[ method ]( event );
+ }
+};
+
+/**
+ * Bind layout to window resizing
+ */
+Outlayer.prototype.bindResize = function() {
+ // bind just one listener
+ if ( this.isResizeBound ) {
+ return;
+ }
+ eventie.bind( window, 'resize', this );
+ this.isResizeBound = true;
+};
+
+/**
+ * Unbind layout to window resizing
+ */
+Outlayer.prototype.unbindResize = function() {
+ eventie.unbind( window, 'resize', this );
+ this.isResizeBound = false;
+};
+
+// original debounce by John Hann
+// http://unscriptable.com/index.php/2009/03/20/debouncing-javascript-methods/
+
+// this fires every resize
+Outlayer.prototype.onresize = function() {
+ if ( this.resizeTimeout ) {
+ clearTimeout( this.resizeTimeout );
+ }
+
+ var _this = this;
+ function delayed() {
+ _this.resize();
+ delete _this.resizeTimeout;
+ }
+
+ this.resizeTimeout = setTimeout( delayed, 100 );
+};
+
+// debounced, layout on resize
+Outlayer.prototype.resize = function() {
+ // don't trigger if size did not change
+ var size = getSize( this.element );
+ // check that this.size and size are there
+ // IE8 triggers resize on body size change, so they might not be
+ var hasSizes = this.size && size;
+ if ( hasSizes && size.innerWidth === this.size.innerWidth ) {
+ return;
+ }
+
+ this.layout();
+};
+
+
+// -------------------------- methods -------------------------- //
+
+/**
+ * add items to Outlayer instance
+ * @param {Array or NodeList or Element} elems
+ * @returns {Array} items - Outlayer.Items
+**/
+Outlayer.prototype.addItems = function( elems ) {
+ var items = this._getItems( elems );
+ if ( !items.length ) {
+ return;
+ }
+ // add items to collection
+ this.items = this.items.concat( items );
+ return items;
+};
+
+/**
+ * Layout newly-appended item elements
+ * @param {Array or NodeList or Element} elems
+ */
+Outlayer.prototype.appended = function( elems ) {
+ var items = this.addItems( elems );
+ if ( !items.length ) {
+ return;
+ }
+ // layout and reveal just the new items
+ this.layoutItems( items, true );
+ this.reveal( items );
+};
+
+/**
+ * Layout prepended elements
+ * @param {Array or NodeList or Element} elems
+ */
+Outlayer.prototype.prepended = function( elems ) {
+ var items = this._getItems( elems );
+ if ( !items.length ) {
+ return;
+ }
+ // add items to beginning of collection
+ var previousItems = this.items.slice(0);
+ this.items = items.concat( previousItems );
+ // start new layout
+ this._resetLayout();
+ // layout new stuff without transition
+ this.layoutItems( items, true );
+ this.reveal( items );
+ // layout previous items
+ this.layoutItems( previousItems );
+};
+
+/**
+ * reveal a collection of items
+ * @param {Array of Outlayer.Items} items
+ */
+Outlayer.prototype.reveal = function( items ) {
+ if ( !items || !items.length ) {
+ return;
+ }
+ for ( var i=0, len = items.length; i < len; i++ ) {
+ var item = items[i];
+ item.reveal();
+ }
+};
+
+/**
+ * hide a collection of items
+ * @param {Array of Outlayer.Items} items
+ */
+Outlayer.prototype.hide = function( items ) {
+ if ( !items || !items.length ) {
+ return;
+ }
+ for ( var i=0, len = items.length; i < len; i++ ) {
+ var item = items[i];
+ item.hide();
+ }
+};
+
+/**
+ * get Outlayer.Item, given an Element
+ * @param {Element} elem
+ * @param {Function} callback
+ * @returns {Outlayer.Item} item
+ */
+Outlayer.prototype.getItem = function( elem ) {
+ // loop through items to get the one that matches
+ for ( var i=0, len = this.items.length; i < len; i++ ) {
+ var item = this.items[i];
+ if ( item.element === elem ) {
+ // return item
+ return item;
+ }
+ }
+};
+
+/**
+ * get collection of Outlayer.Items, given Elements
+ * @param {Array} elems
+ * @returns {Array} items - Outlayer.Items
+ */
+Outlayer.prototype.getItems = function( elems ) {
+ if ( !elems || !elems.length ) {
+ return;
+ }
+ var items = [];
+ for ( var i=0, len = elems.length; i < len; i++ ) {
+ var elem = elems[i];
+ var item = this.getItem( elem );
+ if ( item ) {
+ items.push( item );
+ }
+ }
+
+ return items;
+};
+
+/**
+ * remove element(s) from instance and DOM
+ * @param {Array or NodeList or Element} elems
+ */
+Outlayer.prototype.remove = function( elems ) {
+ elems = makeArray( elems );
+
+ var removeItems = this.getItems( elems );
+ // bail if no items to remove
+ if ( !removeItems || !removeItems.length ) {
+ return;
+ }
+
+ this._itemsOn( removeItems, 'remove', function() {
+ this.emitEvent( 'removeComplete', [ this, removeItems ] );
+ });
+
+ for ( var i=0, len = removeItems.length; i < len; i++ ) {
+ var item = removeItems[i];
+ item.remove();
+ // remove item from collection
+ var index = indexOf( this.items, item );
+ this.items.splice( index, 1 );
+ }
+};
+
+// ----- destroy ----- //
+
+// remove and disable Outlayer instance
+Outlayer.prototype.destroy = function() {
+ // clean up dynamic styles
+ var style = this.element.style;
+ style.height = '';
+ style.position = '';
+ style.width = '';
+ // destroy items
+ for ( var i=0, len = this.items.length; i < len; i++ ) {
+ var item = this.items[i];
+ item.destroy();
+ }
+
+ this.unbindResize();
+
+ delete this.element.outlayerGUID;
+ // remove data for jQuery
+ if ( jQuery ) {
+ jQuery.removeData( this.element, this.settings.namespace );
+ }
+
+};
+
+// -------------------------- data -------------------------- //
+
+/**
+ * get Outlayer instance from element
+ * @param {Element} elem
+ * @returns {Outlayer}
+ */
+Outlayer.data = function( elem ) {
+ var id = elem && elem.outlayerGUID;
+ return id && instances[ id ];
+};
+
+// -------------------------- -------------------------- //
+
+// copy an object on the Outlayer prototype
+// used in options and settings
+function copyOutlayerProto( obj, property ) {
+ obj.prototype[ property ] = extend( {}, Outlayer.prototype[ property ] );
+}
+
+// -------------------------- create Outlayer class -------------------------- //
+
+/**
+ * create a layout class
+ * @param {String} namespace
+ */
+Outlayer.create = function( namespace, options ) {
+ // sub-class Outlayer
+ function Layout() {
+ Outlayer.apply( this, arguments );
+ }
+
+ extend( Layout.prototype, Outlayer.prototype );
+
+ copyOutlayerProto( Layout, 'options' );
+ copyOutlayerProto( Layout, 'settings' );
+
+ extend( Layout.prototype.options, options );
+
+ Layout.prototype.settings.namespace = namespace;
+
+ Layout.data = Outlayer.data;
+
+ // sub-class Item
+ Layout.Item = function LayoutItem() {
+ Item.apply( this, arguments );
+ };
+
+ Layout.Item.prototype = new Item();
+
+ Layout.prototype.settings.item = Layout.Item;
+
+ // -------------------------- declarative -------------------------- //
+
+ /**
+ * allow user to initialize Outlayer via .js-namespace class
+ * options are parsed from data-namespace-option attribute
+ */
+ docReady( function() {
+ var dashedNamespace = toDashed( namespace );
+ var elems = document.querySelectorAll( '.js-' + dashedNamespace );
+ var dataAttr = 'data-' + dashedNamespace + '-options';
+
+ for ( var i=0, len = elems.length; i < len; i++ ) {
+ var elem = elems[i];
+ var attr = elem.getAttribute( dataAttr );
+ var options;
+ try {
+ options = attr && JSON.parse( attr );
+ } catch ( error ) {
+ // log error, do not initialize
+ if ( console ) {
+ console.error( 'Error parsing ' + dataAttr + ' on ' +
+ elem.nodeName.toLowerCase() + ( elem.id ? '#' + elem.id : '' ) + ': ' +
+ error );
+ }
+ continue;
+ }
+ // initialize
+ var instance = new Layout( elem, options );
+ // make available via $().data('layoutname')
+ if ( jQuery ) {
+ jQuery.data( elem, namespace, instance );
+ }
+ }
+ });
+
+ // -------------------------- jQuery bridge -------------------------- //
+
+ // make into jQuery plugin
+ if ( jQuery && jQuery.bridget ) {
+ jQuery.bridget( namespace, Layout );
+ }
+
+ return Layout;
+};
+
+// ----- fin ----- //
+
+// back in global
+Outlayer.Item = Item;
+
+return Outlayer;
+
+}
+
+// -------------------------- transport -------------------------- //
+
+if ( typeof define === 'function' && define.amd ) {
+ // AMD
+ define( [
+ 'eventie/eventie',
+ 'doc-ready/doc-ready',
+ 'eventEmitter/EventEmitter',
+ 'get-size/get-size',
+ 'matches-selector/matches-selector',
+ './item'
+ ],
+ outlayerDefinition );
+} else {
+ // browser global
+ window.Outlayer = outlayerDefinition(
+ window.eventie,
+ window.docReady,
+ window.EventEmitter,
+ window.getSize,
+ window.matchesSelector,
+ window.Outlayer.Item
+ );
+}
+
+})( window );
+
+/**
+ * Rect
+ * low-level utility class for basic geometry
+ */
+
+( function( window ) {
+
+"use strict";
+
+// -------------------------- Packery -------------------------- //
+
+// global namespace
+var Packery = window.Packery = function() {};
+
+function rectDefinition() {
+
+// -------------------------- Rect -------------------------- //
+
+function Rect( props ) {
+ // extend properties from defaults
+ for ( var prop in Rect.defaults ) {
+ this[ prop ] = Rect.defaults[ prop ];
+ }
+
+ for ( prop in props ) {
+ this[ prop ] = props[ prop ];
+ }
+
+}
+
+// make available
+Packery.Rect = Rect;
+
+Rect.defaults = {
+ x: 0,
+ y: 0,
+ width: 0,
+ height: 0
+};
+
+/**
+ * Determines whether or not this rectangle wholly encloses another rectangle or point.
+ * @param {Rect} rect
+ * @returns {Boolean}
+**/
+Rect.prototype.contains = function( rect ) {
+ // points don't have width or height
+ var otherWidth = rect.width || 0;
+ var otherHeight = rect.height || 0;
+ return this.x <= rect.x &&
+ this.y <= rect.y &&
+ this.x + this.width >= rect.x + otherWidth &&
+ this.y + this.height >= rect.y + otherHeight;
+};
+
+/**
+ * Determines whether or not the rectangle intersects with another.
+ * @param {Rect} rect
+ * @returns {Boolean}
+**/
+Rect.prototype.overlaps = function( rect ) {
+ var thisRight = this.x + this.width;
+ var thisBottom = this.y + this.height;
+ var rectRight = rect.x + rect.width;
+ var rectBottom = rect.y + rect.height;
+
+ // http://stackoverflow.com/a/306332
+ return this.x < rectRight &&
+ thisRight > rect.x &&
+ this.y < rectBottom &&
+ thisBottom > rect.y;
+};
+
+/**
+ * @param {Rect} rect - the overlapping rect
+ * @returns {Array} freeRects - rects representing the area around the rect
+**/
+Rect.prototype.getMaximalFreeRects = function( rect ) {
+
+ // if no intersection, return false
+ if ( !this.overlaps( rect ) ) {
+ return false;
+ }
+
+ var freeRects = [];
+ var freeRect;
+
+ var thisRight = this.x + this.width;
+ var thisBottom = this.y + this.height;
+ var rectRight = rect.x + rect.width;
+ var rectBottom = rect.y + rect.height;
+
+ // top
+ if ( this.y < rect.y ) {
+ freeRect = new Rect({
+ x: this.x,
+ y: this.y,
+ width: this.width,
+ height: rect.y - this.y
+ });
+ freeRects.push( freeRect );
+ }
+
+ // right
+ if ( thisRight > rectRight ) {
+ freeRect = new Rect({
+ x: rectRight,
+ y: this.y,
+ width: thisRight - rectRight,
+ height: this.height
+ });
+ freeRects.push( freeRect );
+ }
+
+ // bottom
+ if ( thisBottom > rectBottom ) {
+ freeRect = new Rect({
+ x: this.x,
+ y: rectBottom,
+ width: this.width,
+ height: thisBottom - rectBottom
+ });
+ freeRects.push( freeRect );
+ }
+
+ // left
+ if ( this.x < rect.x ) {
+ freeRect = new Rect({
+ x: this.x,
+ y: this.y,
+ width: rect.x - this.x,
+ height: this.height
+ });
+ freeRects.push( freeRect );
+ }
+
+ return freeRects;
+};
+
+Rect.prototype.canFit = function( rect ) {
+ return this.width >= rect.width && this.height >= rect.height;
+};
+
+return Rect;
+
+}
+
+// -------------------------- transport -------------------------- //
+
+if ( typeof define === 'function' && define.amd ) {
+ // AMD
+ define( rectDefinition );
+} else {
+ // browser global
+ window.Packery = window.Packery || {};
+ window.Packery.Rect = rectDefinition();
+}
+
+})( window );
+
+( function( window ) {
+
+'use strict';
+
+// -------------------------- Packer -------------------------- //
+
+function packerDefinition( Rect ) {
+
+function Packer( width, height ) {
+ this.width = width || 0;
+ this.height = height || 0;
+
+ this.reset();
+}
+
+Packer.prototype.reset = function() {
+ this.spaces = [];
+ this.newSpaces = [];
+
+ var initialSpace = new Rect({
+ x: 0,
+ y: 0,
+ width: this.width,
+ height: this.height
+ });
+
+ this.spaces.push( initialSpace );
+};
+
+// change x and y of rect to fit with in Packer's available spaces
+Packer.prototype.pack = function( rect ) {
+ for ( var i=0, len = this.spaces.length; i < len; i++ ) {
+ var space = this.spaces[i];
+ if ( space.canFit( rect ) ) {
+ this.placeInSpace( rect, space );
+ break;
+ }
+ }
+};
+
+Packer.prototype.placeInSpace = function( rect, space ) {
+ // place rect in space
+ rect.x = space.x;
+ rect.y = space.y;
+
+ this.placed( rect );
+};
+
+// update spaces with placed rect
+Packer.prototype.placed = function( rect ) {
+ // update spaces
+ var revisedSpaces = [];
+ for ( var i=0, len = this.spaces.length; i < len; i++ ) {
+ var space = this.spaces[i];
+ var newSpaces = space.getMaximalFreeRects( rect );
+ // add either the original space or the new spaces to the revised spaces
+ if ( newSpaces ) {
+ revisedSpaces.push.apply( revisedSpaces, newSpaces );
+ } else {
+ revisedSpaces.push( space );
+ }
+ }
+
+ this.spaces = revisedSpaces;
+
+ // remove redundant spaces
+ Packer.mergeRects( this.spaces );
+
+ this.spaces.sort( Packer.spaceSorterTopLeft );
+};
+
+// -------------------------- utility functions -------------------------- //
+
+/**
+ * Remove redundant rectangle from array of rectangles
+ * @param {Array} rects: an array of Rects
+ * @returns {Array} rects: an array of Rects
+**/
+Packer.mergeRects = function( rects ) {
+ for ( var i=0, len = rects.length; i < len; i++ ) {
+ var rect = rects[i];
+ // skip over this rect if it was already removed
+ if ( !rect ) {
+ continue;
+ }
+ // clone rects we're testing, remove this rect
+ var compareRects = rects.slice(0);
+ // do not compare with self
+ compareRects.splice( i, 1 );
+ // compare this rect with others
+ var removedCount = 0;
+ for ( var j=0, jLen = compareRects.length; j < jLen; j++ ) {
+ var compareRect = compareRects[j];
+ // if this rect contains another,
+ // remove that rect from test collection
+ var indexAdjust = i > j ? 0 : 1;
+ if ( rect.contains( compareRect ) ) {
+ // console.log( 'current test rects:' + testRects.length, testRects );
+ // console.log( i, j, indexAdjust, rect, compareRect );
+ rects.splice( j + indexAdjust - removedCount, 1 );
+ removedCount++;
+ }
+ }
+ }
+
+ return rects;
+};
+
+// top down, then left to right
+Packer.spaceSorterTopLeft = function( a, b ) {
+ return a.y - b.y || a.x - b.x;
+};
+
+// left to right, then top down
+Packer.spaceSorterLeftTop = function( a, b ) {
+ return a.x - b.x || a.y - b.y;
+};
+
+return Packer;
+
+}
+
+// -------------------------- transport -------------------------- //
+
+if ( typeof define === 'function' && define.amd ) {
+ // AMD
+ define( [ './rect' ], packerDefinition );
+} else {
+ // browser global
+ var Packery = window.Packery = window.Packery || {};
+ Packery.Packer = packerDefinition( Packery.Rect );
+}
+
+})( window );
+
+/**
+ * Packery Item Element
+**/
+
+( function( window ) {
+
+'use strict';
+
+// -------------------------- Item -------------------------- //
+
+function itemDefinition( getStyleProperty, Outlayer, Rect ) {
+
+var transformProperty = getStyleProperty('transform');
+
+// sub-class Item
+var Item = function PackeryItem() {
+ Outlayer.Item.apply( this, arguments );
+};
+
+Item.prototype = new Outlayer.Item();
+
+var protoCreate = Item.prototype._create;
+Item.prototype._create = function() {
+ // call default _create logic
+ protoCreate.call( this );
+ this.rect = new Rect();
+ // rect used for placing, in drag or Packery.fit()
+ this.placeRect = new Rect();
+};
+
+// -------------------------- drag -------------------------- //
+
+Item.prototype.dragStart = function() {
+ this.getPosition();
+ this.removeTransitionStyles();
+ // remove transform property from transition
+ if ( this.isTransitioning && transformProperty ) {
+ this.element.style[ transformProperty ] = 'none';
+ }
+ this.getSize();
+ // create place rect, used for position when dragged then dropped
+ // or when positioning
+ this.isPlacing = true;
+ this.needsPositioning = false;
+ this.positionPlaceRect( this.position.x, this.position.y );
+ this.isTransitioning = false;
+ this.didDrag = false;
+};
+
+/**
+ * handle item when it is dragged
+ * @param {Number} x - horizontal position of dragged item
+ * @param {Number} y - vertical position of dragged item
+ */
+Item.prototype.dragMove = function( x, y ) {
+ this.didDrag = true;
+ var packerySize = this.layout.size;
+ x -= packerySize.paddingLeft;
+ y -= packerySize.paddingTop;
+ this.positionPlaceRect( x, y );
+};
+
+Item.prototype.dragStop = function() {
+ this.getPosition();
+ var isDiffX = this.position.x !== this.placeRect.x;
+ var isDiffY = this.position.y !== this.placeRect.y;
+ // set post-drag positioning flag
+ this.needsPositioning = isDiffX || isDiffY;
+ // reset flag
+ this.didDrag = false;
+};
+
+// -------------------------- placing -------------------------- //
+
+/**
+ * position a rect that will occupy space in the packer
+ * @param {Number} x
+ * @param {Number} y
+ * @param {Boolean} isMaxYContained
+ */
+Item.prototype.positionPlaceRect = function( x, y, isMaxYOpen ) {
+ this.placeRect.x = this.getPlaceRectCoord( x, true );
+ this.placeRect.y = this.getPlaceRectCoord( y, false, isMaxYOpen );
+};
+
+/**
+ * get x/y coordinate for place rect
+ * @param {Number} coord - x or y
+ * @param {Boolean} isX
+ * @param {Boolean} isMaxOpen - does not limit value to outer bound
+ * @returns {Number} coord - processed x or y
+ */
+Item.prototype.getPlaceRectCoord = function( coord, isX, isMaxOpen ) {
+ var measure = isX ? 'Width' : 'Height';
+ var size = this.size[ 'outer' + measure ];
+ var segment = this.layout[ isX ? 'columnWidth' : 'rowHeight' ];
+ var parentSize = this.layout.size[ 'inner' + measure ];
+
+ // additional parentSize calculations for Y
+ if ( !isX ) {
+ parentSize = Math.max( parentSize, this.layout.maxY );
+ // prevent gutter from bumping up height when non-vertical grid
+ if ( !this.layout.rowHeight ) {
+ parentSize -= this.layout.gutter;
+ }
+ }
+
+ var max;
+
+ if ( segment ) {
+ segment += this.layout.gutter;
+ // allow for last column to reach the edge
+ parentSize += isX ? this.layout.gutter : 0;
+ // snap to closest segment
+ coord = Math.round( coord / segment );
+ // contain to outer bound
+ // x values must be contained, y values can grow box by 1
+ var maxSegments = Math[ isX ? 'floor' : 'ceil' ]( parentSize / segment );
+ maxSegments -= Math.ceil( size / segment );
+ max = maxSegments;
+ } else {
+ max = parentSize - size;
+ }
+
+ coord = isMaxOpen ? coord : Math.min( coord, max );
+ coord *= segment || 1;
+
+ return Math.max( 0, coord );
+};
+
+Item.prototype.copyPlaceRectPosition = function() {
+ this.rect.x = this.placeRect.x;
+ this.rect.y = this.placeRect.y;
+};
+
+return Item;
+
+}
+
+// -------------------------- transport -------------------------- //
+
+if ( typeof define === 'function' && define.amd ) {
+ // AMD
+ define( [
+ 'get-style-property/get-style-property',
+ 'outlayer/outlayer',
+ './rect'
+ ],
+ itemDefinition );
+} else {
+ // browser global
+ window.Packery.Item = itemDefinition(
+ window.getStyleProperty,
+ window.Outlayer,
+ window.Packery.Rect
+ );
+}
+
+})( window );
+
+/*!
+ * Packery v1.1.1
+ * bin-packing layout library
+ * http://packery.metafizzy.co
+ *
+ * Commercial use requires one-time purchase of a commercial license
+ * http://packery.metafizzy.co/license.html
+ *
+ * Non-commercial use is licensed under the GPL v3 License
+ *
+ * Copyright 2013 Metafizzy
+ */
+
+( function( window ) {
+
+'use strict';
+
+// -------------------------- Packery -------------------------- //
+
+// used for AMD definition and requires
+function packeryDefinition( classie, getSize, Outlayer, Rect, Packer, Item ) {
+
+// create an Outlayer layout class
+var Packery = Outlayer.create('packery');
+Packery.Item = Packery.prototype.settings.item = Item;
+
+Packery.prototype._create = function() {
+ // call super
+ Outlayer.prototype._create.call( this );
+
+ // initial properties
+ this.packer = new Packer();
+
+ // Left over from v1.0
+ this.stamp( this.options.stamped );
+
+ // create drag handlers
+ var _this = this;
+ this.handleDraggabilly = {
+ dragStart: function( draggie ) {
+ _this.itemDragStart( draggie.element );
+ },
+ dragMove: function( draggie ) {
+ _this.itemDragMove( draggie.element, draggie.position.x, draggie.position.y );
+ },
+ dragEnd: function( draggie ) {
+ _this.itemDragEnd( draggie.element );
+ }
+ };
+
+ this.handleUIDraggable = {
+ start: function handleUIDraggableStart( event ) {
+ _this.itemDragStart( event.currentTarget );
+ },
+ drag: function handleUIDraggableDrag( event, ui ) {
+ _this.itemDragMove( event.currentTarget, ui.position.left, ui.position.top );
+ },
+ stop: function handleUIDraggableStop( event ) {
+ _this.itemDragEnd( event.currentTarget );
+ }
+ };
+
+};
+
+
+// ----- init & layout ----- //
+
+/**
+ * logic before any new layout
+ */
+Packery.prototype._resetLayout = function() {
+ this.getSize();
+
+ this._getMeasurements();
+
+ // reset packer
+ this.packer.width = this.size.innerWidth + this.gutter;
+ this.packer.height = Number.POSITIVE_INFINITY;
+ this.packer.reset();
+
+ // layout
+ this.maxY = 0;
+};
+
+/**
+ * update columnWidth, rowHeight, & gutter
+ * @private
+ */
+Packery.prototype._getMeasurements = function() {
+ this._getMeasurement( 'columnWidth', 'width' );
+ this._getMeasurement( 'rowHeight', 'height' );
+ this._getMeasurement( 'gutter', 'width' );
+};
+
+Packery.prototype._getItemLayoutPosition = function( item ) {
+ this._packItem( item );
+ return item.rect;
+};
+
+
+/**
+ * layout item in packer
+ * @param {Packery.Item} item
+ */
+Packery.prototype._packItem = function( item ) {
+ this._setRectSize( item.element, item.rect );
+ // pack the rect in the packer
+ this.packer.pack( item.rect );
+ this._setMaxY( item.rect );
+};
+
+/**
+ * set max Y value, for height of container
+ * @param {Packery.Rect} rect
+ * @private
+ */
+Packery.prototype._setMaxY = function( rect ) {
+ this.maxY = Math.max( rect.y + rect.height, this.maxY );
+};
+
+/**
+ * set the width and height of a rect, applying columnWidth and rowHeight
+ * @param {Element} elem
+ * @param {Packery.Rect} rect
+ */
+Packery.prototype._setRectSize = function( elem, rect ) {
+ var size = getSize( elem );
+ var w = size.outerWidth;
+ var h = size.outerHeight;
+ // size for columnWidth and rowHeight, if available
+ var colW = this.columnWidth + this.gutter;
+ var rowH = this.rowHeight + this.gutter;
+ w = this.columnWidth ? Math.ceil( w / colW ) * colW : w + this.gutter;
+ h = this.rowHeight ? Math.ceil( h / rowH ) * rowH : h + this.gutter;
+ // rect must fit in packer
+ rect.width = Math.min( w, this.packer.width );
+ rect.height = h;
+};
+
+Packery.prototype._getContainerSize = function() {
+ return {
+ height: this.maxY - this.gutter
+ };
+};
+
+
+// -------------------------- stamp -------------------------- //
+
+/**
+ * makes space for element
+ * @param {Element} elem
+ */
+Packery.prototype._manageStamp = function( elem ) {
+
+ var item = this.getItem( elem );
+ var rect;
+ if ( item && item.isPlacing ) {
+ rect = item.placeRect;
+ } else {
+ var offset = this._getElementOffset( elem );
+ rect = new Rect({
+ x: offset.left,
+ y: offset.top
+ });
+ }
+
+ this._setRectSize( elem, rect );
+ // save its space in the packer
+ this.packer.placed( rect );
+ this._setMaxY( rect );
+};
+
+// -------------------------- methods -------------------------- //
+
+
+Packery.prototype.sortItemsByPosition = function() {
+ this.items.sort( function( a, b ) {
+ return a.position.y - b.position.y || a.position.x - b.position.x;
+ });
+};
+
+/**
+ * Fit item element in its current position
+ * Packery will position elements around it
+ * useful for expanding elements
+ *
+ * @param {Element} elem
+ * @param {Number} x - horizontal destination position, optional
+ * @param {Number} y - vertical destination position, optional
+ */
+Packery.prototype.fit = function( elem, x, y ) {
+ var item = this.getItem( elem );
+ if ( !item ) {
+ return;
+ }
+
+ // prepare internal properties
+ this._getMeasurements();
+
+ // stamp item to get it out of layout
+ this.stamp( item.element );
+ // required for positionPlaceRect
+ item.getSize();
+ // set placing flag
+ item.isPlacing = true;
+ // fall back to current position for fitting
+ x = x === undefined ? item.rect.x: x;
+ y = y === undefined ? item.rect.y: y;
+
+ // position it best at its destination
+ item.positionPlaceRect( x, y, true );
+
+ this._bindFitEvents( item );
+ item.moveTo( item.placeRect.x, item.placeRect.y );
+ // layout everything else
+ this.layout();
+
+ // return back to regularly scheduled programming
+ this.unstamp( item.element );
+ this.sortItemsByPosition();
+ // un set placing flag, back to normal
+ item.isPlacing = false;
+ // copy place rect position
+ item.copyPlaceRectPosition();
+};
+
+/**
+ * emit event when item is fit and other items are laid out
+ * @param {Packery.Item} item
+ * @private
+ */
+Packery.prototype._bindFitEvents = function( item ) {
+ var _this = this;
+ var ticks = 0;
+ function tick() {
+ ticks++;
+ if ( ticks !== 2 ) {
+ return;
+ }
+ _this.emitEvent( 'fitComplete', [ _this, item ] );
+ }
+ // when item is laid out
+ item.on( 'layout', function() {
+ tick();
+ return true;
+ });
+ // when all items are laid out
+ this.on( 'layoutComplete', function() {
+ tick();
+ return true;
+ });
+};
+
+
+// -------------------------- drag -------------------------- //
+
+/**
+ * handle an item drag start event
+ * @param {Element} elem
+ */
+Packery.prototype.itemDragStart = function( elem ) {
+ this.stamp( elem );
+ var item = this.getItem( elem );
+ if ( item ) {
+ item.dragStart();
+ }
+};
+
+/**
+ * handle an item drag move event
+ * @param {Element} elem
+ * @param {Number} x - horizontal change in position
+ * @param {Number} y - vertical change in position
+ */
+Packery.prototype.itemDragMove = function( elem, x, y ) {
+ var item = this.getItem( elem );
+ if ( item ) {
+ item.dragMove( x, y );
+ }
+
+ // debounce
+ var _this = this;
+ // debounce triggering layout
+ function delayed() {
+ _this.layout();
+ delete _this.dragTimeout;
+ }
+
+ this.clearDragTimeout();
+
+ this.dragTimeout = setTimeout( delayed, 40 );
+};
+
+Packery.prototype.clearDragTimeout = function() {
+ if ( this.dragTimeout ) {
+ clearTimeout( this.dragTimeout );
+ }
+};
+
+/**
+ * handle an item drag end event
+ * @param {Element} elem
+ */
+Packery.prototype.itemDragEnd = function( elem ) {
+ var item = this.getItem( elem );
+ var itemDidDrag;
+ if ( item ) {
+ itemDidDrag = item.didDrag;
+ item.dragStop();
+ }
+ // if elem didn't move, or if it doesn't need positioning
+ // unignore and unstamp and call it a day
+ if ( !item || ( !itemDidDrag && !item.needsPositioning ) ) {
+ this.unstamp( elem );
+ return;
+ }
+ // procced with dragged item
+
+ classie.add( item.element, 'is-positioning-post-drag' );
+
+ // save this var, as it could get reset in dragStart
+ var onLayoutComplete = this._getDragEndLayoutComplete( elem, item );
+
+ if ( item.needsPositioning ) {
+ item.on( 'layout', onLayoutComplete );
+ item.moveTo( item.placeRect.x, item.placeRect.y );
+ } else if ( item ) {
+ // item didn't need placement
+ item.copyPlaceRectPosition();
+ }
+
+ this.clearDragTimeout();
+ this.on( 'layoutComplete', onLayoutComplete );
+ this.layout();
+
+};
+
+/**
+ * get drag end callback
+ * @param {Element} elem
+ * @param {Packery.Item} item
+ * @returns {Function} onLayoutComplete
+ */
+Packery.prototype._getDragEndLayoutComplete = function( elem, item ) {
+ var itemNeedsPositioning = item && item.needsPositioning;
+ var completeCount = 0;
+ var asyncCount = itemNeedsPositioning ? 2 : 1;
+ var _this = this;
+
+ return function onLayoutComplete() {
+ completeCount++;
+ // don't proceed if not complete
+ if ( completeCount !== asyncCount ) {
+ return true;
+ }
+ // reset item
+ if ( item ) {
+ classie.remove( item.element, 'is-positioning-post-drag' );
+ item.isPlacing = false;
+ item.copyPlaceRectPosition();
+ }
+
+ _this.unstamp( elem );
+ // only sort when item moved
+ _this.sortItemsByPosition();
+
+ // emit item drag event now that everything is done
+ if ( itemNeedsPositioning ) {
+ _this.emitEvent( 'dragItemPositioned', [ _this, item ] );
+ }
+ // listen once
+ return true;
+ };
+};
+
+/**
+ * binds Draggabilly events
+ * @param {Draggabilly} draggie
+ */
+Packery.prototype.bindDraggabillyEvents = function( draggie ) {
+ draggie.on( 'dragStart', this.handleDraggabilly.dragStart );
+ draggie.on( 'dragMove', this.handleDraggabilly.dragMove );
+ draggie.on( 'dragEnd', this.handleDraggabilly.dragEnd );
+};
+
+/**
+ * binds jQuery UI Draggable events
+ * @param {jQuery} $elems
+ */
+Packery.prototype.bindUIDraggableEvents = function( $elems ) {
+ $elems
+ .on( 'dragstart', this.handleUIDraggable.start )
+ .on( 'drag', this.handleUIDraggable.drag )
+ .on( 'dragstop', this.handleUIDraggable.stop );
+};
+
+Packery.Rect = Rect;
+Packery.Packer = Packer;
+
+return Packery;
+
+}
+
+// -------------------------- transport -------------------------- //
+
+if ( typeof define === 'function' && define.amd ) {
+ // AMD
+ define( [
+ 'classie/classie',
+ 'get-size/get-size',
+ 'outlayer/outlayer',
+ './rect',
+ './packer',
+ './item'
+ ],
+ packeryDefinition );
+} else {
+ // browser global
+ window.Packery = packeryDefinition(
+ window.classie,
+ window.getSize,
+ window.Outlayer,
+ window.Packery.Rect,
+ window.Packery.Packer,
+ window.Packery.Item
+ );
+}
+
+})( window );
diff --git a/library/AP/client-vendor/after-body/state-machine/state-machine.js b/library/AP/client-vendor/after-body/state-machine/state-machine.js
new file mode 100755
index 0000000..61aba92
--- /dev/null
+++ b/library/AP/client-vendor/after-body/state-machine/state-machine.js
@@ -0,0 +1,202 @@
+/*
+
+ Javascript State Machine Library - https://github.com/jakesgordon/javascript-state-machine
+
+ Copyright (c) 2012, 2013 Jake Gordon and contributors
+ Released under the MIT license - https://github.com/jakesgordon/javascript-state-machine/blob/master/LICENSE
+
+*/
+
+(function (window) {
+
+ var StateMachine = {
+
+ //---------------------------------------------------------------------------
+
+ VERSION: "2.2.0",
+
+ //---------------------------------------------------------------------------
+
+ Result: {
+ SUCCEEDED: 1, // the event transitioned successfully from one state to another
+ NOTRANSITION: 2, // the event was successfull but no state transition was necessary
+ CANCELLED: 3, // the event was cancelled by the caller in a beforeEvent callback
+ PENDING: 4 // the event is asynchronous and the caller is in control of when the transition occurs
+ },
+
+ Error: {
+ INVALID_TRANSITION: 100, // caller tried to fire an event that was innapropriate in the current state
+ PENDING_TRANSITION: 200, // caller tried to fire an event while an async transition was still pending
+ INVALID_CALLBACK: 300 // caller provided callback function threw an exception
+ },
+
+ WILDCARD: '*',
+ ASYNC: 'async',
+
+ //---------------------------------------------------------------------------
+
+ create: function(cfg, target) {
+
+ var initial = (typeof cfg.initial == 'string') ? { state: cfg.initial } : cfg.initial; // allow for a simple string, or an object with { state: 'foo', event: 'setup', defer: true|false }
+ var terminal = cfg.terminal || cfg['final'];
+ var fsm = target || cfg.target || {};
+ var events = cfg.events || [];
+ var callbacks = cfg.callbacks || {};
+ var map = {};
+
+ var add = function(e) {
+ var from = (e.from instanceof Array) ? e.from : (e.from ? [e.from] : [StateMachine.WILDCARD]); // allow 'wildcard' transition if 'from' is not specified
+ map[e.name] = map[e.name] || {};
+ for (var n = 0 ; n < from.length ; n++)
+ map[e.name][from[n]] = e.to || from[n]; // allow no-op transition if 'to' is not specified
+ };
+
+ if (initial) {
+ initial.event = initial.event || 'startup';
+ add({ name: initial.event, from: 'none', to: initial.state });
+ }
+
+ for(var n = 0 ; n < events.length ; n++)
+ add(events[n]);
+
+ for(var name in map) {
+ if (map.hasOwnProperty(name))
+ fsm[name] = StateMachine.buildEvent(name, map[name]);
+ }
+
+ for(var name in callbacks) {
+ if (callbacks.hasOwnProperty(name))
+ fsm[name] = callbacks[name]
+ }
+
+ fsm.current = 'none';
+ fsm.is = function(state) { return (state instanceof Array) ? (state.indexOf(this.current) >= 0) : (this.current === state); };
+ fsm.can = function(event) { return !this.transition && (map[event].hasOwnProperty(this.current) || map[event].hasOwnProperty(StateMachine.WILDCARD)); }
+ fsm.cannot = function(event) { return !this.can(event); };
+ fsm.error = cfg.error || function(name, from, to, args, error, msg, e) { throw e || msg; }; // default behavior when something unexpected happens is to throw an exception, but caller can override this behavior if desired (see github issue #3 and #17)
+
+ fsm.isFinished = function() { return this.is(terminal); };
+
+ if (initial && !initial.defer)
+ fsm[initial.event]();
+
+ return fsm;
+
+ },
+
+ //===========================================================================
+
+ doCallback: function(fsm, func, name, from, to, args) {
+ if (func) {
+ try {
+ return func.apply(fsm, [name, from, to].concat(args));
+ }
+ catch(e) {
+ return fsm.error(name, from, to, args, StateMachine.Error.INVALID_CALLBACK, "an exception occurred in a caller-provided callback function", e);
+ }
+ }
+ },
+
+ beforeAnyEvent: function(fsm, name, from, to, args) { return StateMachine.doCallback(fsm, fsm['onbeforeevent'], name, from, to, args); },
+ afterAnyEvent: function(fsm, name, from, to, args) { return StateMachine.doCallback(fsm, fsm['onafterevent'] || fsm['onevent'], name, from, to, args); },
+ leaveAnyState: function(fsm, name, from, to, args) { return StateMachine.doCallback(fsm, fsm['onleavestate'], name, from, to, args); },
+ enterAnyState: function(fsm, name, from, to, args) { return StateMachine.doCallback(fsm, fsm['onenterstate'] || fsm['onstate'], name, from, to, args); },
+ changeState: function(fsm, name, from, to, args) { return StateMachine.doCallback(fsm, fsm['onchangestate'], name, from, to, args); },
+
+ beforeThisEvent: function(fsm, name, from, to, args) { return StateMachine.doCallback(fsm, fsm['onbefore' + name], name, from, to, args); },
+ afterThisEvent: function(fsm, name, from, to, args) { return StateMachine.doCallback(fsm, fsm['onafter' + name] || fsm['on' + name], name, from, to, args); },
+ leaveThisState: function(fsm, name, from, to, args) { return StateMachine.doCallback(fsm, fsm['onleave' + from], name, from, to, args); },
+ enterThisState: function(fsm, name, from, to, args) { return StateMachine.doCallback(fsm, fsm['onenter' + to] || fsm['on' + to], name, from, to, args); },
+
+ beforeEvent: function(fsm, name, from, to, args) {
+ if ((false === StateMachine.beforeThisEvent(fsm, name, from, to, args)) ||
+ (false === StateMachine.beforeAnyEvent( fsm, name, from, to, args)))
+ return false;
+ },
+
+ afterEvent: function(fsm, name, from, to, args) {
+ StateMachine.afterThisEvent(fsm, name, from, to, args);
+ StateMachine.afterAnyEvent( fsm, name, from, to, args);
+ },
+
+ leaveState: function(fsm, name, from, to, args) {
+ var specific = StateMachine.leaveThisState(fsm, name, from, to, args),
+ general = StateMachine.leaveAnyState( fsm, name, from, to, args);
+ if ((false === specific) || (false === general))
+ return false;
+ else if ((StateMachine.ASYNC === specific) || (StateMachine.ASYNC === general))
+ return StateMachine.ASYNC;
+ },
+
+ enterState: function(fsm, name, from, to, args) {
+ StateMachine.enterThisState(fsm, name, from, to, args);
+ StateMachine.enterAnyState( fsm, name, from, to, args);
+ },
+
+ //===========================================================================
+
+ buildEvent: function(name, map) {
+ return function() {
+
+ var from = this.current;
+ var to = map[from] || map[StateMachine.WILDCARD] || from;
+ var args = Array.prototype.slice.call(arguments); // turn arguments into pure array
+
+ if (this.transition)
+ return this.error(name, from, to, args, StateMachine.Error.PENDING_TRANSITION, "event " + name + " inappropriate because previous transition did not complete");
+
+ if (this.cannot(name))
+ return this.error(name, from, to, args, StateMachine.Error.INVALID_TRANSITION, "event " + name + " inappropriate in current state " + this.current);
+
+ if (false === StateMachine.beforeEvent(this, name, from, to, args))
+ return StateMachine.Result.CANCELLED;
+
+ if (from === to) {
+ StateMachine.afterEvent(this, name, from, to, args);
+ return StateMachine.Result.NOTRANSITION;
+ }
+
+ // prepare a transition method for use EITHER lower down, or by caller if they want an async transition (indicated by an ASYNC return value from leaveState)
+ var fsm = this;
+ this.transition = function() {
+ fsm.transition = null; // this method should only ever be called once
+ fsm.current = to;
+ StateMachine.enterState( fsm, name, from, to, args);
+ StateMachine.changeState(fsm, name, from, to, args);
+ StateMachine.afterEvent( fsm, name, from, to, args);
+ return StateMachine.Result.SUCCEEDED;
+ };
+ this.transition.cancel = function() { // provide a way for caller to cancel async transition if desired (issue #22)
+ fsm.transition = null;
+ StateMachine.afterEvent(fsm, name, from, to, args);
+ }
+
+ var leave = StateMachine.leaveState(this, name, from, to, args);
+ if (false === leave) {
+ this.transition = null;
+ return StateMachine.Result.CANCELLED;
+ }
+ else if (StateMachine.ASYNC === leave) {
+ return StateMachine.Result.PENDING;
+ }
+ else {
+ if (this.transition) // need to check in case user manually called transition() but forgot to return StateMachine.ASYNC
+ return this.transition();
+ }
+
+ };
+ }
+
+ }; // StateMachine
+
+ //===========================================================================
+
+ if ("function" === typeof define) {
+ define(function(require) { return StateMachine; });
+ }
+ else {
+ window.StateMachine = StateMachine;
+ }
+
+}(this));
+
diff --git a/library/AP/layout/default/Component/Account/default.tpl b/library/AP/layout/default/Component/Account/default.tpl
new file mode 100755
index 0000000..18b38df
--- /dev/null
+++ b/library/AP/layout/default/Component/Account/default.tpl
@@ -0,0 +1,32 @@
+{box}
+{box_header}
+ User account
+{/box_header}
+{form name='AP_Form_AccountUser'}
+{formField name='email' label='Your Email'}
+{formField label='Password' prepend="{button_link label='Change Password' class="changePassword"}"}
+{formAction action='Save' label='Save' theme='highlight'}
+{/form}
+{/box}
+
+{box}
+{box_header}
+ Tokens
+{/box_header}
+{component name='AP_Component_TokenList'}
+{/box}
+
+{*{box}*}
+{*{box_header}*}
+ {*Company account
*}
+{*{/box_header}*}
+ {*// ADD form*}
+ {*
*}
+ {*
*}
+ {**}
+ {*- company name
*}
+ {*- Address
*}
+ {*- business
*}
+ {*- ...
*}
+ {*
*}
+{*{/box}*}
diff --git a/library/AP/layout/default/Component/Alerts/default.less b/library/AP/layout/default/Component/Alerts/default.less
new file mode 100755
index 0000000..72d5173
--- /dev/null
+++ b/library/AP/layout/default/Component/Alerts/default.less
@@ -0,0 +1,55 @@
+& {
+ position: fixed;
+ transform: translateZ(0);
+ bottom: 40px;
+ z-index: 80;
+ left: 15px;
+
+ .alert {
+ position: relative;
+ display: block;
+ width: 200px;
+ right: 100%;
+ margin-top: 4px;
+ padding: 3px 26px 3px 0;
+ border-radius: 2px;
+ background-color: lighten(@colorNotice, 10);
+ box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.5);
+ color: @colorBg;
+ text-decoration: none;
+ transition: margin-left 100ms;
+
+ &:before {
+ .triangle(transparent, lighten(@colorNotice, 10), transparent, transparent, 7px);
+ left: -14px;
+ }
+
+ .alert-content {
+ overflow: hidden;
+ min-height: 36px;
+ margin-left: 42px;
+ }
+
+ .alert-thumb {
+ position: absolute;
+ left: 6px;
+ top: 6px;
+ width: 30px;
+ height: auto;
+ }
+
+ .alert-icon {
+ color: @colorFgTheme;
+ position: absolute;
+ right: 5px;
+ opacity: .7;
+ font-size: 18px;
+ }
+
+ &:hover {
+ .alert-icon {
+ opacity: 1;
+ }
+ }
+ }
+}
diff --git a/library/AP/layout/default/Component/Alerts/default.tpl b/library/AP/layout/default/Component/Alerts/default.tpl
new file mode 100755
index 0000000..e69de29
diff --git a/library/AP/layout/default/Component/ApplicationFeedList/default.less b/library/AP/layout/default/Component/ApplicationFeedList/default.less
new file mode 100755
index 0000000..674bd5e
--- /dev/null
+++ b/library/AP/layout/default/Component/ApplicationFeedList/default.less
@@ -0,0 +1,18 @@
+.feed {
+ .actions {
+ text-align: right;
+ }
+}
+
+.form-feedAdd {
+ margin-top: 12px;
+}
+
+.CM_FormField_Text {
+ overflow: hidden;
+}
+
+.AP_Form_Feed .button, {
+ float: right;
+ margin: 0 0 0 5px;
+}
diff --git a/library/AP/layout/default/Component/ApplicationFeedList/default.tpl b/library/AP/layout/default/Component/ApplicationFeedList/default.tpl
new file mode 100755
index 0000000..55261e3
--- /dev/null
+++ b/library/AP/layout/default/Component/ApplicationFeedList/default.tpl
@@ -0,0 +1,23 @@
+{box}
+{box_header}
+ Amount: {$feedList->getCount()}
+ Feed List | ApplicationName: {$application->getName()}
+{/box_header}
+
+ {foreach $feedList as $feed}
+ -
+ {$feed->getId()} |
+ {$feed->getName()} |
+ {$feed->getChannelId()} |
+ {button_link page='AP_Page_Feed' application=$application->getId() feed=$feed->getId() label='view'}
+ {button_link title='Delete' icon='delete' iconConfirm='delete-confirm' class='warning deleteFeed' data=['feed-id'=>$feed->getId(), 'application-id'=>$application->getId(), 'click-confirmed' => true]}
+
+ {/foreach}
+
+
+{/box}
diff --git a/library/AP/layout/default/Component/ApplicationForm/default.tpl b/library/AP/layout/default/Component/ApplicationForm/default.tpl
new file mode 100755
index 0000000..16ad680
--- /dev/null
+++ b/library/AP/layout/default/Component/ApplicationForm/default.tpl
@@ -0,0 +1,9 @@
+{form name='AP_Form_Application' application=$application}
+{formField name='name' label='Name'}
+{formField name='description' label='Description'}
+{if $application}
+ {formAction action='Save' label='Save' theme='highlight'}
+{else}
+ {formAction action='Create' label='Create' theme='highlight'}
+{/if}
+{/form}
diff --git a/library/AP/layout/default/Component/ApplicationList/default.less b/library/AP/layout/default/Component/ApplicationList/default.less
new file mode 100755
index 0000000..142c81e
--- /dev/null
+++ b/library/AP/layout/default/Component/ApplicationList/default.less
@@ -0,0 +1,3 @@
+.form-application {
+ margin-bottom: 12px;
+}
diff --git a/library/AP/layout/default/Component/ApplicationList/default.tpl b/library/AP/layout/default/Component/ApplicationList/default.tpl
new file mode 100755
index 0000000..7890a1b
--- /dev/null
+++ b/library/AP/layout/default/Component/ApplicationList/default.tpl
@@ -0,0 +1,10 @@
+
+
+{foreach $applicationList as $application}
+ {component name='AP_Component_ApplicationViewSmall' application=$application}
+{/foreach}
diff --git a/library/AP/layout/default/Component/ApplicationView/default.less b/library/AP/layout/default/Component/ApplicationView/default.less
new file mode 100755
index 0000000..d760147
--- /dev/null
+++ b/library/AP/layout/default/Component/ApplicationView/default.less
@@ -0,0 +1,3 @@
+.form-application {
+ margin-top: 12px;
+}
diff --git a/library/AP/layout/default/Component/ApplicationView/default.tpl b/library/AP/layout/default/Component/ApplicationView/default.tpl
new file mode 100755
index 0000000..654ec3b
--- /dev/null
+++ b/library/AP/layout/default/Component/ApplicationView/default.tpl
@@ -0,0 +1,18 @@
+{box}
+{box_header}
+ created: {$application->getCreated()|date_format}
+ Application name: {$application->getName()}
+{/box_header}
+
+ {button_link title='Delete' icon='delete' iconConfirm='delete-confirm' class='warning deleteApplication' data=['application-id'=>$application->getId(), 'click-confirmed' => true]}
+
+{$application->getDescription()}
+
+{/box}
+
+{component name='AP_Component_ApplicationFeedList' application=$application}
diff --git a/library/AP/layout/default/Component/ApplicationViewSmall/default.less b/library/AP/layout/default/Component/ApplicationViewSmall/default.less
new file mode 100755
index 0000000..674bd5e
--- /dev/null
+++ b/library/AP/layout/default/Component/ApplicationViewSmall/default.less
@@ -0,0 +1,18 @@
+.feed {
+ .actions {
+ text-align: right;
+ }
+}
+
+.form-feedAdd {
+ margin-top: 12px;
+}
+
+.CM_FormField_Text {
+ overflow: hidden;
+}
+
+.AP_Form_Feed .button, {
+ float: right;
+ margin: 0 0 0 5px;
+}
diff --git a/library/AP/layout/default/Component/ApplicationViewSmall/default.tpl b/library/AP/layout/default/Component/ApplicationViewSmall/default.tpl
new file mode 100755
index 0000000..8b50c1f
--- /dev/null
+++ b/library/AP/layout/default/Component/ApplicationViewSmall/default.tpl
@@ -0,0 +1,11 @@
+{box}
+{box_header}
+ created: {$application->getCreated()|date_format}
+ {$application->getName()}
+{/box_header}
+
+ {button_link page='AP_Page_Application' application=$application->getId() label='view'}
+ {button_link title='Delete' icon='delete' iconConfirm='delete-confirm' class='warning deleteApplication' data=['application-id'=>$application->getId(), 'click-confirmed' => true]}
+
+
+{/box}
diff --git a/library/AP/layout/default/Component/AuthRequired/default.less b/library/AP/layout/default/Component/AuthRequired/default.less
new file mode 100755
index 0000000..1bcfdc7
--- /dev/null
+++ b/library/AP/layout/default/Component/AuthRequired/default.less
@@ -0,0 +1,33 @@
+& {
+ padding: 5px;
+}
+
+.floatbox & {
+ background-color: @colorBg;
+}
+
+.menu-tabs {
+ text-align: left;
+ margin-bottom: 6px;
+ padding: 0;
+
+ .link:hover .label {
+ text-decoration: none;
+ }
+}
+
+.tabs-content {
+ padding: 5px;
+}
+
+.AP_Component_SignUp {
+ .signUpHeading {
+ display: none;
+ }
+}
+
+.AP_Component_SignIn {
+ .visitor {
+ display: none;
+ }
+}
diff --git a/library/AP/layout/default/Component/AuthRequired/default.tpl b/library/AP/layout/default/Component/AuthRequired/default.tpl
new file mode 100755
index 0000000..bbd4ba8
--- /dev/null
+++ b/library/AP/layout/default/Component/AuthRequired/default.tpl
@@ -0,0 +1,16 @@
+
+
+
+ {component name='AP_Component_SignUp'}
+
+
+ {component name='AP_Component_SignIn'}
+
+
diff --git a/library/AP/layout/default/Component/ChangePassword/default.tpl b/library/AP/layout/default/Component/ChangePassword/default.tpl
new file mode 100755
index 0000000..d4a5958
--- /dev/null
+++ b/library/AP/layout/default/Component/ChangePassword/default.tpl
@@ -0,0 +1,8 @@
+{box title='Change Password'}
+{form name='AP_Form_ChangePassword'}
+{formField name='old_password' label='Old Password'}
+{formField name='new_password' label='New Password'}
+{formField name='new_password_confirm' label='Confirm Password'}
+{formAction action='Process' label='Change'}
+{/form}
+{/box}
diff --git a/library/AP/layout/default/Component/FeedEntryList/default.less b/library/AP/layout/default/Component/FeedEntryList/default.less
new file mode 100755
index 0000000..9363f52
--- /dev/null
+++ b/library/AP/layout/default/Component/FeedEntryList/default.less
@@ -0,0 +1,5 @@
+.feed {
+ .actions {
+ text-align: right;
+ }
+}
diff --git a/library/AP/layout/default/Component/FeedEntryList/default.tpl b/library/AP/layout/default/Component/FeedEntryList/default.tpl
new file mode 100755
index 0000000..236335d
--- /dev/null
+++ b/library/AP/layout/default/Component/FeedEntryList/default.tpl
@@ -0,0 +1,15 @@
+{box}
+{box_header}
+ Amount: {$entryList->getCount()}
+ Entry List | FeedName: {$feed->getName()}
+{/box_header}
+
+ {foreach $entryList as $entry}
+ -
+ {$entry->getId()} |
+ {$entry->getData()} |
+ {button_link title='Delete' icon='delete' iconConfirm='delete-confirm' class='warning deleteEntry' data=['entry-id'=>$entry->getId(), 'feed-id'=>$feed->getId(), 'application-id'=>$application->getId(), 'click-confirmed' => true]}
+
+ {/foreach}
+
+{/box}
diff --git a/library/AP/layout/default/Component/FeedForm/default.tpl b/library/AP/layout/default/Component/FeedForm/default.tpl
new file mode 100755
index 0000000..182eb5d
--- /dev/null
+++ b/library/AP/layout/default/Component/FeedForm/default.tpl
@@ -0,0 +1,9 @@
+{form name='AP_Form_Feed' application=$application feed=$feed}
+{formField name='name' label='Name'}
+{formField name='description' label='Description'}
+{if $feed}
+ {formAction action='Save' label='Save' theme='highlight'}
+{else}
+ {formAction action='Create' label='Create' theme='highlight'}
+{/if}
+{/form}
diff --git a/library/AP/layout/default/Component/FeedList/default.less b/library/AP/layout/default/Component/FeedList/default.less
new file mode 100755
index 0000000..e69de29
diff --git a/library/AP/layout/default/Component/FeedList/default.tpl b/library/AP/layout/default/Component/FeedList/default.tpl
new file mode 100755
index 0000000..dbb8d50
--- /dev/null
+++ b/library/AP/layout/default/Component/FeedList/default.tpl
@@ -0,0 +1,3 @@
+{foreach $applicationList as $application}
+ {component name='AP_Component_ApplicationFeedList' application=$application}
+{/foreach}
diff --git a/library/AP/layout/default/Component/FeedView/default.less b/library/AP/layout/default/Component/FeedView/default.less
new file mode 100755
index 0000000..0219f5a
--- /dev/null
+++ b/library/AP/layout/default/Component/FeedView/default.less
@@ -0,0 +1,3 @@
+.form-feed {
+ margin-top: 12px;
+}
diff --git a/library/AP/layout/default/Component/FeedView/default.tpl b/library/AP/layout/default/Component/FeedView/default.tpl
new file mode 100755
index 0000000..a6c443a
--- /dev/null
+++ b/library/AP/layout/default/Component/FeedView/default.tpl
@@ -0,0 +1,19 @@
+{box}
+{box_header}
+ created: {$feed->getCreated()|date_format}
+ Feed name: {$feed->getName()}
+{/box_header}
+
+ {button_link title='Delete' icon='delete' iconConfirm='delete-confirm' class='warning deleteFeed' data=['application-id'=>$application->getId(), 'feed-id'=>$feed->getId(), 'click-confirmed' => true]}
+
+{$feed->getChannelId()}
+{$feed->getDescription()}
+
+{/box}
+
+{component name='AP_Component_FeedEntryList' application=$application feed=$feed}
diff --git a/library/AP/layout/default/Component/Header/default.tpl b/library/AP/layout/default/Component/Header/default.tpl
deleted file mode 100644
index 660c8c1..0000000
--- a/library/AP/layout/default/Component/Header/default.tpl
+++ /dev/null
@@ -1,25 +0,0 @@
-
-
-
-
-
- {*- *}
- {*Account *}
- {**}
- {*
*}
-
-
-
-
diff --git a/library/AP/layout/default/Component/HeaderBar/default.less b/library/AP/layout/default/Component/HeaderBar/default.less
new file mode 100755
index 0000000..037aa5d
--- /dev/null
+++ b/library/AP/layout/default/Component/HeaderBar/default.less
@@ -0,0 +1,269 @@
+& {
+ max-width: 990px;
+ margin: 0 auto;
+ min-height: @barSize;
+}
+
+.bar {
+ position: relative;
+
+ &.search-expand {
+ .navButton, .navButton.search, .logo {
+ display: none;
+ }
+
+ .searchForm {
+ display: block;
+ width: 100%;
+ }
+ }
+}
+
+.navButton {
+ &.navigation {
+ float: left;
+ }
+
+ &.indication {
+ position: relative;
+ float: left;
+ opacity: 1;
+ padding: 0 4px;
+ min-width: 0;
+
+ &.empty {
+ opacity: .5;
+
+ .counter {
+ display: none;
+ }
+
+ &:hover {
+ opacity: 1;
+ }
+ }
+ .counter {
+ position: relative;
+ display: inline-block;
+ .nowrap;
+ top: -7px;
+ left: -6px;
+ max-width: 25px;
+ padding: 2px 3px;
+ border-radius: 2px;
+ background-color: @colorNotice;
+ font-size: @fontSizeTiny;
+ line-height: 1;
+ box-shadow: 1px 1px 1px rgba(0, 0, 0, .3);
+ text-shadow: 1px 1px rgba(0, 0, 0, 0.2);
+
+ &:empty {
+ display: none;
+ }
+ }
+ }
+
+ &.search {
+ float: right;
+ display: none;
+
+ @media (max-width: 549px) {
+ display: block;
+ }
+ }
+
+ &.chat {
+ float: right;
+
+ &.unread {
+ opacity: 1;
+
+ .icon-chat {
+ display: block;
+ .animation(blink, 1500ms, ease, 0, infinite);
+ }
+ }
+ }
+
+ &.add {
+ float: right;
+ position: relative;
+ transition: 200ms;
+
+ .icon {
+ display: inline-block;
+ transition: 200ms;
+ }
+
+ &.active {
+ opacity: 1;
+
+ .icon {
+ transform: rotate(45deg);
+ }
+
+ &:after {
+ .triangle(transparent, transparent, darken(@colorBg, 1), transparent, 6px);
+ top: auto;
+ bottom: 0;
+ left: 50%;
+ margin-left: -6px;
+ transform: translate(0, 0);
+ opacity: 1;
+ transition: 200ms;
+ }
+
+ &.hideTriangle {
+ &:after {
+ transform: translate(0, 6px);
+ opacity: 0;
+ }
+ }
+ }
+ }
+}
+
+.logo.monochrome {
+ display: block;
+ float: left;
+ height: @barSize;
+ background-size: 65%;
+ background-image: image('logo-monochrome.svg');
+
+ html.no-svg & {
+ background-image: image('logo-monochrome.png');
+ }
+
+ &:not(.viewer) {
+ float: none;
+ margin: 8px auto 0;
+ width: 140px;
+ background-size: 100%;
+
+ @media (min-width: 550px) {
+ float: left;
+ margin: 10px 12px;
+ }
+ }
+
+ &.viewer {
+ width: @barSize;
+ background-image: image('logo-monochrome-mini.svg');
+
+ html.no-svg & {
+ background-image: image('logo-monochrome-mini.png');
+ }
+
+ @media (min-width: 420px) {
+ width: 100px;
+ margin: 0 8px;
+ background-size: 85%;
+ background-image: image('logo-monochrome.svg');
+
+ html.no-svg & {
+ background-image: image('logo-monochrome.png');
+ }
+ }
+ }
+}
+
+.searchForm {
+ box-sizing: border-box;
+ display: none;
+ position: relative;
+ float: right;
+ padding: 0 6px;
+ width: 200px;
+
+ @media (min-width: 550px) {
+ display: block;
+ }
+
+ @media (min-width: 660px) {
+ width: 300px;
+ }
+
+ height: @barSize;
+ line-height: @barSize - 2px;
+
+ .AP_Form_SearchContent {
+ display: inline-block;
+ width: 100%;
+ vertical-align: middle;
+ line-height: 1;
+
+ .CM_FormField_Text {
+ .textinput {
+ background-color: fadeout(@colorBg, 85);
+ border-color: transparent;
+ color: @colorFgTheme;
+
+ &:focus {
+ border-color: fadeout(@colorBg, 50);
+ }
+ }
+ .placeholder(@colorFgTheme);
+ }
+ }
+
+ .icon-search {
+ pointer-events: none;
+ position: absolute;
+ color: @colorFgTheme;
+ top: 2px;
+ right: 12px;
+ opacity: .6;
+ }
+}
+
+.AP_Component_SignIn {
+ text-align: center;
+
+ .AP_Form_SignIn {
+ box-sizing: border-box;
+ padding: 5px 10px;
+ }
+
+ @media (min-width: 550px) {
+ text-align: right;
+
+ .visitor {
+ &:after {
+ left: 10%;
+ }
+ }
+ }
+
+ @media (min-width: 800px) {
+ .AP_Form_SignIn {
+ float: right;
+ }
+
+ .visitor {
+ float: left;
+ margin: 8px;
+ padding: 7px;
+
+ &:after {
+ border-bottom-color: transparent;
+ border-right-color: fadeout(@colorFg, 80);
+ top: 50%;
+ left: -16px;
+ margin-left: 0;
+ margin-top: -8px;
+ }
+ }
+ }
+
+ .small {
+ color: darken(@colorFgTheme, 10);
+
+ &:hover {
+ color: @colorFgTheme;
+ }
+ }
+
+ .formField-error {
+ color: lighten(@colorNotice, 30);
+ }
+}
diff --git a/library/AP/layout/default/Component/HeaderBar/default.tpl b/library/AP/layout/default/Component/HeaderBar/default.tpl
new file mode 100755
index 0000000..3eaf18a
--- /dev/null
+++ b/library/AP/layout/default/Component/HeaderBar/default.tpl
@@ -0,0 +1,7 @@
+
+ {if $viewer}
+ {link icon="menu" class="navButton navigation showNavigation"}
+ {else}
+ {component name='AP_Component_SignIn'}
+ {/if}
+
diff --git a/library/AP/layout/default/Component/Navigation/default.less b/library/AP/layout/default/Component/Navigation/default.less
new file mode 100755
index 0000000..04840d0
--- /dev/null
+++ b/library/AP/layout/default/Component/Navigation/default.less
@@ -0,0 +1,135 @@
+& {
+ height: 100%;
+ overflow-y: hidden;
+
+ &:hover {
+ overflow-y: auto;
+ }
+}
+
+.main {
+ overflow: auto;
+ -webkit-overflow-scrolling: touch;
+ padding-bottom: 20px;
+
+ a {
+ color: darken(@colorFgTheme, 30);
+
+ &:hover {
+ background-color: darken(@colorFg, 10);
+
+ .icon {
+ color: lighten(@colorFgSubtle, 45);
+ }
+ }
+ }
+
+ > .menu-sub {
+ position: relative;
+
+ > li {
+ position: relative;
+
+ > a {
+ padding-left: 12px;
+ padding-right: 12px;
+ color: darken(@colorFgTheme, 30);
+ text-shadow: 1px 1px 1px rgba(0, 0, 0, .3);
+
+ .icon {
+ color: @colorFgSubtle;
+ font-size: 15px;
+ margin-right: 14px;
+ }
+
+ &:hover {
+ .icon {
+ color: lighten(@colorFgSubtle, 25);
+ }
+ }
+
+ &:active {
+ background-color: fadeout(@colorBg, 90);
+ }
+
+ }
+ &.active {
+ position: relative;
+
+ > a {
+ position: relative;
+ background-color: transparent;
+ font-weight: bold;
+ color: darken(@colorFgTheme, 20);
+
+ .icon {
+ color: @colorFgHeading;
+ }
+ }
+
+ &:after {
+ .triangle(transparent, @colorBgBody, transparent, transparent, 7px);
+ top: 20px;
+ left: auto;
+ right: 0;
+
+ .offCanvas-active & {
+ display: none;
+ }
+ }
+
+ }
+
+ &.AP_Page_Account_Premium > a {
+ color: @colorPremium;
+
+ .icon {
+ color: @colorPremium;
+ }
+ }
+ }
+ }
+
+ hr {
+ border-top: 1px solid lighten(@colorFg, 5);
+ margin: 0;
+ }
+
+ .button.logout {
+ display: block;
+ width: 100%;
+ height: auto;
+ margin: 0;
+ padding: 8px 12px;
+ border: 0;
+ font-weight: normal;
+ background: none;
+ filter: none;
+ color: darken(@colorFgTheme, 30);
+ text-shadow: 1px 1px 1px rgba(0, 0, 0, .3);
+ font-size: @fontSize;
+ text-align: left;
+
+ .label {
+ line-height: 1;
+ vertical-align: baseline;
+ }
+
+ .icon {
+ font-size: 15px;
+ margin-right: 14px;
+ display: inline-block;
+ width: 1.25em;
+ text-align: center;
+ color: @colorFgSubtle;
+ }
+
+ &:hover {
+ background-color: darken(@colorFg, 10);
+
+ .icon {
+ color: lighten(@colorFgSubtle, 25);
+ }
+ }
+ }
+}
diff --git a/library/AP/layout/default/Component/Navigation/default.tpl b/library/AP/layout/default/Component/Navigation/default.tpl
old mode 100644
new mode 100755
index 69d2d3a..ac2fc65
--- a/library/AP/layout/default/Component/Navigation/default.tpl
+++ b/library/AP/layout/default/Component/Navigation/default.tpl
@@ -1,16 +1,7 @@
-
-
-{**}
-{**}
+
diff --git a/library/AP/layout/default/Component/SignIn/default.less b/library/AP/layout/default/Component/SignIn/default.less
new file mode 100755
index 0000000..3a007ff
--- /dev/null
+++ b/library/AP/layout/default/Component/SignIn/default.less
@@ -0,0 +1,103 @@
+.floatbox & {
+ background-color: @colorBg;
+}
+
+.AP_Form_SignIn {
+ text-align: left;
+ max-width: 100%;
+
+ @media (min-width: 400px) {
+ display: inline-block;
+ }
+}
+
+.formField, .formAction {
+ padding: 6px 12px;
+
+ @media (min-width: 400px) {
+ width: auto;
+ float: left;
+ padding: 0;
+
+ .CM_FormField_Text {
+ padding-right: 5px;
+
+ input {
+ width: 130px;
+ }
+ }
+ }
+}
+
+.formField {
+ @media (min-width: 400px) {
+
+ .CM_FormField_Text {
+ padding-right: 5px;
+
+ input {
+ width: 130px;
+ }
+ }
+ }
+
+ > .input {
+ margin: 0;
+ }
+}
+
+.formAction {
+ text-align: center;
+
+ .button {
+ margin: 0;
+ }
+}
+
+.CM_FormField_Boolean {
+ line-height: normal;
+
+ input[type=checkbox] + label {
+ margin-left: 16px;
+
+ &:before {
+ left: -16px;
+ margin-top: -6px;
+ width: 12px;
+ height: 12px;
+ }
+ }
+}
+
+.small {
+ font-size: 10px;
+ color: @colorFgSubtle;
+ display: inline-block;
+
+ &:hover {
+ color: @colorFg;
+ text-decoration: none;
+ }
+}
+
+.visitor {
+ position: relative;
+ padding: 10px;
+ border-top: @colorFgBorderEmphasize1;
+ background-color: fadeout(@colorFg, 80);
+ text-align: center;
+
+ h2 {
+ color: @colorFgTheme;
+ margin-right: 5px;
+ display: inline-block;
+ line-height: @sizeButton+2;
+ }
+
+ &:after {
+ .triangle(transparent, transparent, fadeout(@colorFg, 80), transparent, 8px);
+ top: -8px;
+ left: 50%;
+ margin-left: -4px;
+ }
+}
diff --git a/library/AP/layout/default/Component/SignIn/default.tpl b/library/AP/layout/default/Component/SignIn/default.tpl
new file mode 100755
index 0000000..826429d
--- /dev/null
+++ b/library/AP/layout/default/Component/SignIn/default.tpl
@@ -0,0 +1,6 @@
+{form name='AP_Form_SignIn'}
+{formField name='login' class="noLabel" tabindex=1 placeholder='Username/Email' autocorrect="off" autocapitalize="off"}
+{formField class="noLabel" name='password' tabindex=2 placeholder='Password'}
+{formAction action='Process' theme='highlight' label='Login'}
+{/form}
+
diff --git a/library/AP/layout/default/Component/SignUp/default.less b/library/AP/layout/default/Component/SignUp/default.less
new file mode 100755
index 0000000..c7b3c58
--- /dev/null
+++ b/library/AP/layout/default/Component/SignUp/default.less
@@ -0,0 +1,33 @@
+& {
+ width: 450px;
+ max-width: 100%;
+}
+
+.floatbox & {
+ background-color: @colorBg;
+}
+
+.signUpHeading {
+ margin: 0;
+ padding: 12px 12px 0;
+ text-align: center;
+}
+
+.agreement {
+ margin: 7px 0;
+ font-size: @fontSizeTiny;
+ text-align: center;
+}
+
+.AP_Form_SignUp {
+ padding: 12px;
+}
+
+.formField {
+ padding: 6px 0;
+ width: 426px; // Workaround IE9 Select2 in floatbox expanding bug
+}
+
+.formAction {
+ text-align: center;
+}
diff --git a/library/AP/layout/default/Component/SignUp/default.tpl b/library/AP/layout/default/Component/SignUp/default.tpl
new file mode 100755
index 0000000..af3be0e
--- /dev/null
+++ b/library/AP/layout/default/Component/SignUp/default.tpl
@@ -0,0 +1,6 @@
+{form name='AP_Form_SignUp'}
+{formField name='email' label='Your Email'}
+{formField name='username' label='Username' autocorrect="off" autocapitalize="off"}
+{formField name='password' label='Password'}
+{formAction action='Create' label='Sign Up' theme='highlight' class="button-large"}
+{/form}
diff --git a/library/AP/layout/default/Component/TokenList/default.less b/library/AP/layout/default/Component/TokenList/default.less
new file mode 100755
index 0000000..0da0c2b
--- /dev/null
+++ b/library/AP/layout/default/Component/TokenList/default.less
@@ -0,0 +1,12 @@
+.form-tokenAdd {
+ margin-top: 12px;
+}
+
+.CM_FormField_Text {
+ overflow: hidden;
+}
+
+.AP_Form_Token .button, {
+ float: right;
+ margin: 0 0 0 5px;
+}
diff --git a/library/AP/layout/default/Component/TokenList/default.tpl b/library/AP/layout/default/Component/TokenList/default.tpl
new file mode 100755
index 0000000..4935025
--- /dev/null
+++ b/library/AP/layout/default/Component/TokenList/default.tpl
@@ -0,0 +1,33 @@
+
+ {*- *}
+ {*FHSDJKFH897SD98F7DS98 | Token name*}
+ {*{button_link title='Delete' icon='delete' iconConfirm='delete-confirm' class='warning deleteToken' data=['click-confirmed' => true]}*}
+ {*
*}
+ {*- *}
+ {*FHSDJKFH897SD98F7DS98 | Token name*}
+ {*{button_link title='Delete' icon='delete' iconConfirm='delete-confirm' class='warning deleteToken' data=['click-confirmed' => true]}*}
+ {*
*}
+ {*- *}
+ {*FHSDJKFH897SD98F7DS98 | Token name*}
+ {*{button_link title='Delete' icon='delete' iconConfirm='delete-confirm' class='warning deleteToken' data=['click-confirmed' => true]}*}
+ {*
*}
+
+ {foreach $tokenList as $token}
+ -
+ {$token->getToken()} |
+ {$token->getName()} |
+ {button_link title='Delete' icon='delete' iconConfirm='delete-confirm' class='warning deleteToken' data=['click-confirmed' => true]}
+
+ {/foreach}
+
+
+
+
+
diff --git a/library/AP/layout/default/Layout/Default/default.less b/library/AP/layout/default/Layout/Default/default.less
new file mode 100755
index 0000000..e027cbe
--- /dev/null
+++ b/library/AP/layout/default/Layout/Default/default.less
@@ -0,0 +1,80 @@
+#header {
+ .gradient(vertical, lighten(@colorBgTheme, 5), darken(@colorBgTheme, 10));
+ box-shadow: inset 0 -4px 10px 0 rgba(0, 0, 0, .1);
+}
+
+#headerWrapper {
+ min-height: @barSize;
+
+ #header {
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ z-index: 50;
+ transform: translateZ(0);
+
+ &.no-fixed {
+ position: relative;
+ }
+ }
+}
+
+#navigation {
+ position: absolute;
+ top: 0;
+ width: 260px;
+ max-width: 100%;
+ right: 100%;
+ z-index: 71;
+ background-color: @colorBgOffCanvas;
+}
+
+#middle {
+ position: relative;
+}
+
+#page {
+ position: relative;
+ min-height: 200px;
+
+ @media (min-height: @breakpointSmall) {
+ min-height: 300px;
+ }
+}
+
+
+.navButton {
+ height: @barSize;
+ min-width: @barSize;
+ line-height: @barSize;
+ display: block;
+ text-decoration: none;
+ text-align: center;
+ color: @colorFgTheme;
+ font-size: 18px;
+ opacity: .5;
+ text-shadow: 1px 1px rgba(0, 0, 0, 0.1);
+
+ &:hover {
+ opacity: 1;
+ }
+}
+
+@media (min-width: @breakpointMedium) {
+ #middle {
+ margin-left: 260px;
+ }
+
+ #navigation {
+ position: fixed;
+ transform: translateZ(0);
+ left: 0;
+ bottom: 0;
+ top: 44px;
+ }
+
+ .navButton.navigation {
+ display: none;
+ }
+}
diff --git a/library/AP/layout/default/Layout/Default/default.tpl b/library/AP/layout/default/Layout/Default/default.tpl
old mode 100644
new mode 100755
index 3915ca2..0552989
--- a/library/AP/layout/default/Layout/Default/default.tpl
+++ b/library/AP/layout/default/Layout/Default/default.tpl
@@ -1,31 +1,23 @@
-
-
-
-
-
-
- {$pageTitle|escape}
- {resourceCss file='all.css' type="vendor"}
- {resourceCss file='all.css' type="library"}
- {resourceJs file='before-body.js' type="vendor"}
-
-
- {component name="AP_Component_Header"}
-
-
-
-
- {$renderAdapter->fetchPage()}
-
-
-
- {resourceJs file='after-body.js' type="vendor"}
- {resourceJs file='library.js' type="library"}
- {if $render->getLanguage()}
- {resourceJs file="translations/{CM_Model_Language::getVersionJavascript()}.js" type="library"}
- {/if}
- {$render->getGlobalResponse()->getHtml()}
-
-
+{extends file=$render->getLayoutPath('Layout/Abstract/default.tpl', 'CM')}
+
+{block name='body-start'}
+ {component name='AP_Component_Alerts'}
+{/block}
+
+{block name='body'}
+
+
+ {component name="AP_Component_Navigation"}
+
+
+
+ {$renderAdapter->fetchPage()}
+
+
+{/block}
diff --git a/library/AP/layout/default/Layout/Default/title.tpl b/library/AP/layout/default/Layout/Default/title.tpl
old mode 100644
new mode 100755
diff --git a/library/AP/layout/default/Layout/Index/default.less b/library/AP/layout/default/Layout/Index/default.less
new file mode 100644
index 0000000..06f32a0
--- /dev/null
+++ b/library/AP/layout/default/Layout/Index/default.less
@@ -0,0 +1,7 @@
+#middle, #header {
+ margin-left: 0;
+}
+
+#page {
+ max-width: none;
+}
diff --git a/library/AP/layout/default/Layout/Index/default.tpl b/library/AP/layout/default/Layout/Index/default.tpl
new file mode 100644
index 0000000..54375aa
--- /dev/null
+++ b/library/AP/layout/default/Layout/Index/default.tpl
@@ -0,0 +1,7 @@
+{extends file=$render->getLayoutPath('Layout/Default/default.tpl', 'AP')}
+
+{block name='body'}
+
+ {$renderAdapter->fetchPage()}
+
+{/block}
diff --git a/library/AP/layout/default/Page/Profile/default.tpl b/library/AP/layout/default/Page/About/default.tpl
old mode 100644
new mode 100755
similarity index 85%
rename from library/AP/layout/default/Page/Profile/default.tpl
rename to library/AP/layout/default/Page/About/default.tpl
index f8aea23..581bfa5
--- a/library/AP/layout/default/Page/Profile/default.tpl
+++ b/library/AP/layout/default/Page/About/default.tpl
@@ -1,5 +1,5 @@
{extends file=$render->getLayoutPath('Page/Abstract/default.tpl')}
{block name='content-main'}
- Profile content
+ About
{/block}
diff --git a/library/AP/layout/default/Page/Abstract/default.tpl b/library/AP/layout/default/Page/Abstract/default.tpl
new file mode 100644
index 0000000..3da0bc3
--- /dev/null
+++ b/library/AP/layout/default/Page/Abstract/default.tpl
@@ -0,0 +1,16 @@
+{extends file=$render->getLayoutPath('Page/Abstract/default.tpl', 'CM')}
+
+{block name='content'}
+
+ {block name='content-title'}
{$pageTitle|escape}
{/block}
+ {block name='content-main'}{/block}
+
+{/block}
+
+{block name='after'}
+
+{/block}
diff --git a/library/AP/layout/default/Page/Account/default.tpl b/library/AP/layout/default/Page/Account/default.tpl
new file mode 100755
index 0000000..908841e
--- /dev/null
+++ b/library/AP/layout/default/Page/Account/default.tpl
@@ -0,0 +1,5 @@
+{extends file=$render->getLayoutPath('Page/Abstract/default.tpl')}
+
+{block name='content-main'}
+ {component name='AP_Component_Account'}
+{/block}
diff --git a/library/AP/layout/default/Page/Account/title.tpl b/library/AP/layout/default/Page/Account/title.tpl
new file mode 100644
index 0000000..171e128
--- /dev/null
+++ b/library/AP/layout/default/Page/Account/title.tpl
@@ -0,0 +1 @@
+Account
diff --git a/library/AP/layout/default/Page/Application/default.tpl b/library/AP/layout/default/Page/Application/default.tpl
old mode 100644
new mode 100755
index cde3a4d..c027d37
--- a/library/AP/layout/default/Page/Application/default.tpl
+++ b/library/AP/layout/default/Page/Application/default.tpl
@@ -1,35 +1,5 @@
{extends file=$render->getLayoutPath('Page/Abstract/default.tpl')}
{block name='content-main'}
-
-
Application Overview
-
-
-
- | Id |
- Name |
- Actions |
-
-
-
-
- | 1 |
- Mark |
- edit |
-
-
- | 2 |
- Jacob |
- Thornton |
- @fat |
-
-
- | 3 |
- Larry |
- the Bird |
- @twitter |
-
-
-
-
+ {component name='AP_Component_ApplicationView' application=$application}
{/block}
diff --git a/library/AP/layout/default/Page/Application/title.tpl b/library/AP/layout/default/Page/Application/title.tpl
deleted file mode 100644
index b2ce346..0000000
--- a/library/AP/layout/default/Page/Application/title.tpl
+++ /dev/null
@@ -1 +0,0 @@
-Application
diff --git a/library/AP/layout/default/Page/ApplicationOverview/default.tpl b/library/AP/layout/default/Page/ApplicationOverview/default.tpl
new file mode 100755
index 0000000..b1d842c
--- /dev/null
+++ b/library/AP/layout/default/Page/ApplicationOverview/default.tpl
@@ -0,0 +1,5 @@
+{extends file=$render->getLayoutPath('Page/Abstract/default.tpl')}
+
+{block name='content-main'}
+ {component name='AP_Component_ApplicationList'}
+{/block}
diff --git a/library/AP/layout/default/Page/ApplicationOverview/title.tpl b/library/AP/layout/default/Page/ApplicationOverview/title.tpl
new file mode 100644
index 0000000..bb848b5
--- /dev/null
+++ b/library/AP/layout/default/Page/ApplicationOverview/title.tpl
@@ -0,0 +1 @@
+Application Overview
diff --git a/library/AP/layout/default/Page/Contact/default.tpl b/library/AP/layout/default/Page/Contact/default.tpl
new file mode 100755
index 0000000..8887006
--- /dev/null
+++ b/library/AP/layout/default/Page/Contact/default.tpl
@@ -0,0 +1,5 @@
+{extends file=$render->getLayoutPath('Page/Abstract/default.tpl')}
+
+{block name='content-main'}
+ Contact
+{/block}
diff --git a/library/AP/layout/default/Page/Error_AuthRequired/default.tpl b/library/AP/layout/default/Page/Error_AuthRequired/default.tpl
new file mode 100644
index 0000000..bdcfbd7
--- /dev/null
+++ b/library/AP/layout/default/Page/Error_AuthRequired/default.tpl
@@ -0,0 +1,7 @@
+{extends file=$render->getLayoutPath('Page/Abstract/default.tpl')}
+
+{block name='content-title'}{/block}
+
+{block name='content-main'}
+ {component name='AP_Component_SignUp'}
+{/block}
diff --git a/library/AP/layout/default/Page/Error_AuthRequired/title.tpl b/library/AP/layout/default/Page/Error_AuthRequired/title.tpl
new file mode 100644
index 0000000..b763c95
--- /dev/null
+++ b/library/AP/layout/default/Page/Error_AuthRequired/title.tpl
@@ -0,0 +1 @@
+{translate 'Create an Account or Sign In'}
diff --git a/library/AP/layout/default/Page/Feed/default.less b/library/AP/layout/default/Page/Feed/default.less
new file mode 100755
index 0000000..e42cc02
--- /dev/null
+++ b/library/AP/layout/default/Page/Feed/default.less
@@ -0,0 +1,6 @@
+
+.entry {
+ .actions {
+ text-align: right;
+ }
+}
diff --git a/library/AP/layout/default/Page/Feed/default.tpl b/library/AP/layout/default/Page/Feed/default.tpl
old mode 100644
new mode 100755
index f7da708..ae8e420
--- a/library/AP/layout/default/Page/Feed/default.tpl
+++ b/library/AP/layout/default/Page/Feed/default.tpl
@@ -1,5 +1,5 @@
{extends file=$render->getLayoutPath('Page/Abstract/default.tpl')}
{block name='content-main'}
- Feed content
+ {component name='AP_Component_FeedView' application=$application feed=$feed}
{/block}
diff --git a/library/AP/layout/default/Page/Feed/title.tpl b/library/AP/layout/default/Page/Feed/title.tpl
index 06bffc6..9364c9c 100644
--- a/library/AP/layout/default/Page/Feed/title.tpl
+++ b/library/AP/layout/default/Page/Feed/title.tpl
@@ -1 +1 @@
-Feed
+Feed name
diff --git a/library/AP/layout/default/Page/FeedOverview/default.less b/library/AP/layout/default/Page/FeedOverview/default.less
new file mode 100755
index 0000000..e69de29
diff --git a/library/AP/layout/default/Page/FeedOverview/default.tpl b/library/AP/layout/default/Page/FeedOverview/default.tpl
new file mode 100755
index 0000000..4eb12db
--- /dev/null
+++ b/library/AP/layout/default/Page/FeedOverview/default.tpl
@@ -0,0 +1,5 @@
+{extends file=$render->getLayoutPath('Page/Abstract/default.tpl')}
+
+{block name='content-main'}
+ {component name='AP_Component_FeedList'}
+{/block}
diff --git a/library/AP/layout/default/Page/FeedOverview/title.tpl b/library/AP/layout/default/Page/FeedOverview/title.tpl
new file mode 100644
index 0000000..51b0df8
--- /dev/null
+++ b/library/AP/layout/default/Page/FeedOverview/title.tpl
@@ -0,0 +1 @@
+Feed Overview
diff --git a/library/AP/layout/default/Page/Feedback/default.tpl b/library/AP/layout/default/Page/Feedback/default.tpl
new file mode 100755
index 0000000..3990042
--- /dev/null
+++ b/library/AP/layout/default/Page/Feedback/default.tpl
@@ -0,0 +1,5 @@
+{extends file=$render->getLayoutPath('Page/Abstract/default.tpl')}
+
+{block name='content-main'}
+ Feedback
+{/block}
diff --git a/library/AP/layout/default/Page/Index/default.tpl b/library/AP/layout/default/Page/Index/default.tpl
old mode 100644
new mode 100755
index 930e320..a334be8
--- a/library/AP/layout/default/Page/Index/default.tpl
+++ b/library/AP/layout/default/Page/Index/default.tpl
@@ -1,5 +1,7 @@
{extends file=$render->getLayoutPath('Page/Abstract/default.tpl')}
{block name='content-main'}
- Overview content
+ Index
+ {component name='AP_Component_SignIn'}
+ {component name='AP_Component_SignUp'}
{/block}
diff --git a/library/AP/layout/default/Page/Overview/default.tpl b/library/AP/layout/default/Page/Overview/default.tpl
new file mode 100755
index 0000000..ef65b78
--- /dev/null
+++ b/library/AP/layout/default/Page/Overview/default.tpl
@@ -0,0 +1,14 @@
+{extends file=$render->getLayoutPath('Page/Abstract/default.tpl')}
+
+{block name='content-main'}
+ maybe we remove this for now?
+ when we can show some stats then this page makes sense.
+ also we could show some ads for premium account
+
+
+
+
+ - basic stats (amount applications/feeds/feedEntries)
+ - ???
+
+{/block}
diff --git a/library/AP/layout/default/Page/Index/title.tpl b/library/AP/layout/default/Page/Overview/title.tpl
similarity index 100%
rename from library/AP/layout/default/Page/Index/title.tpl
rename to library/AP/layout/default/Page/Overview/title.tpl
diff --git a/library/AP/layout/default/Page/Profile/title.tpl b/library/AP/layout/default/Page/Profile/title.tpl
deleted file mode 100644
index 99455ed..0000000
--- a/library/AP/layout/default/Page/Profile/title.tpl
+++ /dev/null
@@ -1 +0,0 @@
-Profile
diff --git a/library/AP/layout/default/Page/Settings/default.tpl b/library/AP/layout/default/Page/Settings/default.tpl
old mode 100644
new mode 100755
index 2f86f49..ad800bd
--- a/library/AP/layout/default/Page/Settings/default.tpl
+++ b/library/AP/layout/default/Page/Settings/default.tpl
@@ -1,5 +1,97 @@
{extends file=$render->getLayoutPath('Page/Abstract/default.tpl')}
{block name='content-main'}
- settings content
+
+ {box}
+ {box_header}
+ List of Users
+ {/box_header}
+
+ -
+ ms@example.com
+ {button_link title='Send invite' icon='send'}
+ {button_link title='Send invite' icon='delete'}
+
+ -
+ ms@example.com
+ {button_link title='Send invite' icon='send'}
+ {button_link title='Send invite' icon='delete'}
+
+ -
+ ms@example.com
+ {button_link title='Send invite' icon='send'}
+ {button_link title='Send invite' icon='delete'}
+
+
+
+ {button_link label='Add new user'}
+ {/box}
+
+ {box}
+ {box_header}
+ User roles
+ {/box_header}
+
+
+ |
+ Application |
+ Feed |
+ User |
+
+
+ | User |
+ View |
+ Edit |
+ Delete |
+ View |
+ Edit |
+ Delete |
+ Add |
+ Edit |
+ Delete |
+
+
+ {form name='AP_Form_UserPermissions' user='user123'}
+ | ms@example.com |
+ {input name="application_view" class='noLabel' display='switch'} |
+ {input name="application_edit" class='noLabel' display='switch'} |
+ {input name="application_delete" class='noLabel' display='switch'} |
+ {input name="feed_view" class='noLabel' display='switch'} |
+ {input name="feed_edit" class='noLabel' display='switch'} |
+ {input name="feed_delete" class='noLabel' display='switch'} |
+ {input name="user_view" class='noLabel' display='switch'} |
+ {input name="user_edit" class='noLabel' display='switch'} |
+ {input name="user_delete" class='noLabel' display='switch'} |
+ {/form}
+
+
+ {form name='AP_Form_UserPermissions' user='user123'}
+ | ms@example.com |
+ {input name="application_view" class='noLabel' display='switch'} |
+ {input name="application_edit" class='noLabel' display='switch'} |
+ {input name="application_delete" class='noLabel' display='switch'} |
+ {input name="feed_view" class='noLabel' display='switch'} |
+ {input name="feed_edit" class='noLabel' display='switch'} |
+ {input name="feed_delete" class='noLabel' display='switch'} |
+ {input name="user_view" class='noLabel' display='switch'} |
+ {input name="user_edit" class='noLabel' display='switch'} |
+ {input name="user_delete" class='noLabel' display='switch'} |
+ {/form}
+
+
+ {form name='AP_Form_UserPermissions' user='user123'}
+ | ms@example.com |
+ {input name="application_view" class='noLabel' display='switch'} |
+ {input name="application_edit" class='noLabel' display='switch'} |
+ {input name="application_delete" class='noLabel' display='switch'} |
+ {input name="feed_view" class='noLabel' display='switch'} |
+ {input name="feed_edit" class='noLabel' display='switch'} |
+ {input name="feed_delete" class='noLabel' display='switch'} |
+ {input name="user_view" class='noLabel' display='switch'} |
+ {input name="user_edit" class='noLabel' display='switch'} |
+ {input name="user_delete" class='noLabel' display='switch'} |
+ {/form}
+
+
+ {/box}
{/block}
diff --git a/library/AP/layout/default/Page/Terms/default.tpl b/library/AP/layout/default/Page/Terms/default.tpl
new file mode 100755
index 0000000..5a2eda9
--- /dev/null
+++ b/library/AP/layout/default/Page/Terms/default.tpl
@@ -0,0 +1,5 @@
+{extends file=$render->getLayoutPath('Page/Abstract/default.tpl')}
+
+{block name='content-main'}
+ Terms
+{/block}
diff --git a/library/AP/layout/default/css/animation.less b/library/AP/layout/default/css/animation.less
new file mode 100755
index 0000000..ef444e4
--- /dev/null
+++ b/library/AP/layout/default/css/animation.less
@@ -0,0 +1,59 @@
+@keyframes blink {
+ 0% {
+ transform: scale3d(1, 1, 1);
+ }
+ 90% {
+ transform: scale3d(1, 1, 1);
+ }
+ 95% {
+ transform: scale3d(1.2, 1.2, 1.2);
+ }
+ 100% {
+ transform: scale3d(1, 1, 1);
+ }
+}
+
+@-webkit-keyframes blink {
+ 0% {
+ -webkit-transform: scale3d(1, 1, 1);
+ }
+ 90% {
+ -webkit-transform: scale3d(1, 1, 1);
+ }
+ 95% {
+ -webkit-transform: scale3d(1.2, 1.2, 1.2);
+ }
+ 100% {
+ -webkit-transform: scale3d(1, 1, 1);
+ }
+}
+
+@-moz-keyframes blink {
+ 0% {
+ -moz-transform: scale3d(1, 1, 1);
+ }
+ 90% {
+ -moz-transform: scale3d(1, 1, 1);
+ }
+ 95% {
+ -moz-transform: scale3d(1.2, 1.2, 1.2);
+ }
+ 100% {
+ -moz-transform: scale3d(1, 1, 1);
+ }
+}
+
+@-o-keyframes blink {
+ 0% {
+ -o-transform: scale3d(1, 1, 1);
+ }
+ 90% {
+ -o-transform: scale3d(1, 1, 1);
+ }
+ 95% {
+ -o-transform: scale3d(1.2, 1.2, 1.2);
+ }
+ 100% {
+ -o-transform: scale3d(1, 1, 1);
+ }
+}
diff --git a/library/AP/layout/default/css/bootstrap.less b/library/AP/layout/default/css/bootstrap.less
deleted file mode 100644
index 935879a..0000000
--- a/library/AP/layout/default/css/bootstrap.less
+++ /dev/null
@@ -1,123 +0,0 @@
-.sub-header {
- padding-bottom: 10px;
- border-bottom: 1px solid #eee;
-}
-
-.navbar-fixed-top {
- border: 0;
-}
-
-@media (min-width: 768px) {
- .sidebar {
- position: fixed;
- top: 51px;
- bottom: 0;
- left: 0;
- z-index: 1000;
- display: block;
- padding: 20px;
- overflow-x: hidden;
- overflow-y: auto; /* Scrollable contents if viewport is shorter than content. */
- background-color: #f5f5f5;
- border-right: 1px solid #eee;
- }
-
- .nav-sidebar {
- margin-right: -21px; /* 20px padding + 1px border */
- margin-left: -20px;
- }
-}
-
-.nav-sidebar {
- margin-bottom: 20px;
-}
-
-.nav-sidebar > li > a {
- padding-right: 20px;
- padding-left: 20px;
-}
-
-.nav-sidebar > .active > a,
-.nav-sidebar > .active > a:hover,
-.nav-sidebar > .active > a:focus {
- color: #fff;
- background-color: #428bca;
-}
-
-.main {
- padding: 20px;
-}
-
-@media (min-width: 768px) {
- .main {
- padding-right: 40px;
- padding-left: 40px;
- }
-}
-
-.main .page-header {
- margin-top: 0;
-}
-
-.placeholders {
- margin-bottom: 30px;
- text-align: center;
-}
-
-.placeholders h4 {
- margin-bottom: 0;
-}
-
-.placeholder {
- margin-bottom: 20px;
-}
-
-.placeholder img {
- display: inline-block;
- border-radius: 50%;
-}
-
-/*
- * Off Canvas
- * --------------------------------------------------
- */
-@media screen and (max-width: 767px) {
- .row-offcanvas {
- position: relative;
- -webkit-transition: all .25s ease-out;
- -o-transition: all .25s ease-out;
- transition: all .25s ease-out;
- }
-
- .row-offcanvas-right {
- right: 0;
- }
-
- .row-offcanvas-left {
- left: 0;
- }
-
- .row-offcanvas-right
- .sidebar-offcanvas {
- right: -50%; /* 6 columns */
- }
-
- .row-offcanvas-left
- .sidebar-offcanvas {
- left: -50%; /* 6 columns */
- }
-
- .row-offcanvas-right.active {
- right: 50%; /* 6 columns */
- }
-
- .row-offcanvas-left.active {
- left: 50%; /* 6 columns */
- }
-
- .sidebar-offcanvas {
- position: absolute;
- top: 0;
- width: 50%; /* 6 columns */
- }
-}
diff --git a/library/AP/layout/default/css/box.less b/library/AP/layout/default/css/box.less
new file mode 100755
index 0000000..10c7051
--- /dev/null
+++ b/library/AP/layout/default/css/box.less
@@ -0,0 +1,70 @@
+.box {
+ margin: 0 0 12px 0;
+ border: 1px solid @colorFgBorderEmphasize3;
+
+ &.light {
+ .box-body {
+ background-color: @colorBgEmphasize1;
+ }
+ }
+
+ &.important {
+ .box-body {
+ background-color: lighten(@colorNotice, 48);
+ }
+ }
+}
+
+.box-header {
+ line-height: @sizeButton;
+ background-color: @colorBgEmphasize1;
+ border-bottom: 1px solid @colorFgBorderEmphasize3;
+
+ h2 {
+ line-height: inherit;
+ margin: 0 12px;
+ font-size: 14px;
+ color: @colorFgSubtle;
+ }
+
+ h3 {
+ color: @colorFgSubtle;
+ display: inline-block;
+ }
+
+ .box-info {
+ font-size: @fontSizeSmall;
+ float: right;
+ margin: 0 12px;
+
+ .total_count {
+ color: @colorFgSubtle;
+ }
+ }
+}
+
+.box-body {
+ padding: 12px;
+ background-color: @colorBg;
+ .clearfix;
+
+ .actions {
+ float: right;
+ margin: 0 0 10px 10px;
+ }
+}
+
+.box-footer {
+ padding: 5px 5px;
+ text-align: center;
+}
+
+.floatbox {
+ .box {
+ margin: 0;
+
+ .box_cap {
+ padding-right: @sizeButton;
+ }
+ }
+}
diff --git a/library/AP/layout/default/css/columns.less b/library/AP/layout/default/css/columns.less
new file mode 100755
index 0000000..e498597
--- /dev/null
+++ b/library/AP/layout/default/css/columns.less
@@ -0,0 +1,90 @@
+.columns {
+ .clearfix;
+}
+
+.column {
+ box-sizing: border-box;
+ padding: 2px;
+ width: 100%;
+}
+
+.column2 {
+ .column;
+
+ @media (min-width: @breakpointSmall) {
+ width: 50%;
+ float: left;
+ }
+}
+
+.column3 {
+ .column;
+
+ @media (min-width: @breakpointSmall) {
+ float: left;
+ width: 33.3%;
+ }
+}
+
+.column4 {
+ .column;
+
+ @media (min-width: 300px) {
+ width: 50%;
+ float: left;
+ }
+
+ @media (min-width: 550px) {
+ width: 33.3%;
+ }
+
+ @media (min-width: 800px) {
+ width: 25%;
+ }
+}
+
+.column5 {
+ .column;
+
+ @media (min-width: 300px) {
+ width: 50%;
+ float: left;
+ }
+
+ @media (min-width: 550px) {
+ width: 33.3%;
+ }
+
+ @media (min-width: 700px) {
+ width: 25%;
+ }
+
+ @media (min-width: 900px) {
+ width: 20%;
+ }
+}
+
+.column6 {
+ .column;
+
+ @media (min-width: 320px) {
+ width: 50%;
+ float: left;
+ }
+
+ @media (min-width: 480px) {
+ width: 33.3%;
+ }
+
+ @media (min-width: @breakpointSmall) {
+ width: 25%;
+ }
+
+ @media (min-width: 800px) {
+ width: 20%;
+ }
+
+ @media (min-width: 900px) {
+ width: 16.66%;
+ }
+}
diff --git a/library/AP/layout/default/css/function.date_timeago.less b/library/AP/layout/default/css/function.date_timeago.less
new file mode 100755
index 0000000..1aa9e1f
--- /dev/null
+++ b/library/AP/layout/default/css/function.date_timeago.less
@@ -0,0 +1,6 @@
+.timeago {
+
+ &.corner {
+ margin-top: -1px;
+ }
+}
diff --git a/library/AP/layout/default/css/jquery.toggleNext.less b/library/AP/layout/default/css/jquery.toggleNext.less
new file mode 100755
index 0000000..a4ec202
--- /dev/null
+++ b/library/AP/layout/default/css/jquery.toggleNext.less
@@ -0,0 +1,8 @@
+.toggleNext {
+ padding: 6px;
+}
+
+.toggleNext-content {
+ padding: 5px 20px;
+ background-color: lighten(@colorBgEmphasize3, 5);
+}
diff --git a/library/AP/layout/default/css/layout.less b/library/AP/layout/default/css/layout.less
deleted file mode 100755
index 156c3f9..0000000
--- a/library/AP/layout/default/css/layout.less
+++ /dev/null
@@ -1,32 +0,0 @@
-html {
- font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
- font-size: 12px;
- overflow-x: hidden;
-}
-
-body {
- padding-top: 50px;
- overflow-x: hidden;
-}
-
-h1, h2, h3 {
- font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
- font-weight: normal;
- color: #333;
-}
-
-h1 {
- margin: 7px 0;
- font-size: 28px;
- letter-spacing: 1px;
-}
-
-h2 {
- margin: 0;
- font-size: 20px;
-}
-
-h3 {
- margin: 0;
- font-size: 18px;
-}
diff --git a/library/AP/layout/default/css/menu.less b/library/AP/layout/default/css/menu.less
new file mode 100755
index 0000000..1ca62fc
--- /dev/null
+++ b/library/AP/layout/default/css/menu.less
@@ -0,0 +1,73 @@
+.menu-sub {
+ li {
+ > .menu-sub {
+ display: none;
+ }
+
+ &.open > .menu-sub, &.active > .menu-sub {
+ display: block;
+ }
+
+ a {
+ display: block;
+ .nowrap;
+ padding: 8px 6px;
+
+ color: @colorFgLinkSubtle;
+
+ &:hover {
+ background-color: @colorBgEmphasize1;
+ text-decoration: none;
+ }
+
+ .icon {
+ margin-right: 5px;
+ display: inline-block;
+ width: 1.25em;
+ text-align: center;
+ }
+
+ .indication {
+ background-color: @colorBgTheme;
+ color: @colorFgTheme;
+ padding: 1px 4px;
+ float: right;
+ display: block;
+ max-width: 50%;
+ margin-left: 10px;
+
+ &.empty {
+ display: none;
+ }
+ }
+ }
+
+ &.active > a {
+ background-color: @colorBgEmphasize1;
+
+ .icon {
+ color: @colorFgHeading;
+ }
+ }
+
+ .menu-sub {
+ padding-bottom: 0;
+
+ li {
+ a {
+ padding-left: 27px;
+
+ &:hover {
+ color: @colorFgHeading;
+ background: none;
+ }
+ }
+ &.active a, &.active a:hover {
+ color: @colorFgHeading;
+ background: none;
+ }
+ }
+ }
+ }
+}
+
diff --git a/library/AP/layout/default/css/mixins.less b/library/AP/layout/default/css/mixins.less
new file mode 100755
index 0000000..e940601
--- /dev/null
+++ b/library/AP/layout/default/css/mixins.less
@@ -0,0 +1,22 @@
+.statusEntity {
+ font-style: italic;
+ &:before {
+ content: "«";
+ }
+ &:after {
+ content: "»";
+ }
+}
+
+.play-button(@size) {
+ position: absolute;
+ left: 50%;
+ top: 50%;
+ font-size: @size;
+ line-height: 1;
+ margin-left: -.5em;
+ margin-top: -.625em;
+ color: @colorFgTheme;
+ text-shadow: 1px 1px 0 rgba(0, 0, 0, 1), 0 0 1px rgba(0, 0, 0, 0.6);
+}
+
diff --git a/library/AP/layout/default/css/noContent.less b/library/AP/layout/default/css/noContent.less
new file mode 100755
index 0000000..4842440
--- /dev/null
+++ b/library/AP/layout/default/css/noContent.less
@@ -0,0 +1,7 @@
+.noContent {
+ border: 1px solid @colorFgBorderEmphasize2;
+ border-style: dashed;
+ text-align: center;
+ padding: 20px 10px;
+ margin: 10px;
+}
diff --git a/library/AP/layout/default/css/page.less b/library/AP/layout/default/css/page.less
new file mode 100755
index 0000000..1dd4781
--- /dev/null
+++ b/library/AP/layout/default/css/page.less
@@ -0,0 +1,85 @@
+.CM_Page_Abstract {
+ max-width: @maxPageWidth;
+ margin: 0 auto;
+
+ .columnContent {
+ box-sizing: border-box;
+ width: 100%;
+ min-height: 200px;
+ padding: 7px;
+
+ @media (min-width: @breakpointSmall) {
+ padding: 12px;
+ }
+
+ @media (min-height: @breakpointSmall) {
+ min-height: 500px;
+ }
+
+ &.twoColumnContent {
+ @media (min-width: 796px) {
+ display: table;
+ table-layout: fixed; //needed for word-wrap to work
+ }
+
+ .columnContentLeft, .columnContentRight {
+ box-sizing: border-box;
+
+ @media (min-width: 796px) {
+ display: table-cell;
+ vertical-align: top;
+ }
+ }
+
+ .columnContentRight {
+ @media (min-width: 796px) {
+ width: 262px; //adzone + padding
+ padding-left: 12px;
+ }
+
+ &.drop {
+ display: none;
+
+ @media (min-width: 796px) {
+ display: table-cell;
+ }
+ }
+ }
+ }
+ }
+
+ #footer {
+ margin: 30px 7px 30px;
+ padding-bottom: 5px;
+
+ @media (min-width: @breakpointSmall) {
+ margin: 30px 12px 30px;
+ }
+
+ border-top: 1px solid @colorFgBorderEmphasize3;
+
+ &, a {
+ color: @colorFgSubtle;
+ }
+
+ .copyright {
+ float: right;
+ padding: 5px;
+ }
+
+ .menu.about {
+ > a {
+ display: none;
+ }
+
+ li {
+ display: inline-block;
+
+ a {
+ padding: 5px;
+ display: inline-block;
+ }
+ }
+ }
+ }
+}
diff --git a/library/AP/layout/default/css/table.less b/library/AP/layout/default/css/table.less
new file mode 100644
index 0000000..96e92c5
--- /dev/null
+++ b/library/AP/layout/default/css/table.less
@@ -0,0 +1,20 @@
+table {
+ width: 100%;
+
+ tr {
+ &:nth-child(2n) {
+ background-color: fadeout(@colorBgEmphasize3, 50);
+ }
+
+ th, td {
+ padding: 4px 8px;
+ border-top: 1px solid @colorFgBorderEmphasize2;
+ text-align: left;
+ .nowrap;
+ }
+
+ td {
+ background: none;
+ }
+ }
+}
diff --git a/library/AP/layout/default/menu/default.tpl b/library/AP/layout/default/menu/default.tpl
old mode 100644
new mode 100755
index 11148f9..1541989
--- a/library/AP/layout/default/menu/default.tpl
+++ b/library/AP/layout/default/menu/default.tpl
@@ -1,9 +1,14 @@
{if !empty($menu_entries)}
{strip}
- {foreach from=$menu_entries item=entry}
-
- {translate $entry->getLabel()}
-
- {/foreach}
+
{/strip}
{/if}
diff --git a/library/AP/layout/default/menu/tree.tpl b/library/AP/layout/default/menu/tree.tpl
new file mode 100644
index 0000000..0524ecf
--- /dev/null
+++ b/library/AP/layout/default/menu/tree.tpl
@@ -0,0 +1,20 @@
+{function printMenu}
+ {if !empty($menu_entries)}
+
+ {/if}
+{/function}
+
+{printMenu}
diff --git a/library/AP/layout/default/resource/browserconfig.xml.smarty b/library/AP/layout/default/resource/browserconfig.xml.smarty
new file mode 100644
index 0000000..f82cf30
--- /dev/null
+++ b/library/AP/layout/default/resource/browserconfig.xml.smarty
@@ -0,0 +1,3 @@
+{extends file=$render->getLayoutPath('resource/browserconfig.xml.smarty', 'CM')}
+
+{block name='tileColor'}#e22b59{/block}
diff --git a/library/AP/layout/default/resource/img/apple-touch-icon-114x114.png b/library/AP/layout/default/resource/img/apple-touch-icon-114x114.png
new file mode 100755
index 0000000..3e1b6e5
Binary files /dev/null and b/library/AP/layout/default/resource/img/apple-touch-icon-114x114.png differ
diff --git a/library/AP/layout/default/resource/img/apple-touch-icon-120x120.png b/library/AP/layout/default/resource/img/apple-touch-icon-120x120.png
new file mode 100755
index 0000000..139980d
Binary files /dev/null and b/library/AP/layout/default/resource/img/apple-touch-icon-120x120.png differ
diff --git a/library/AP/layout/default/resource/img/apple-touch-icon-144x144.png b/library/AP/layout/default/resource/img/apple-touch-icon-144x144.png
new file mode 100755
index 0000000..b8a032a
Binary files /dev/null and b/library/AP/layout/default/resource/img/apple-touch-icon-144x144.png differ
diff --git a/library/AP/layout/default/resource/img/apple-touch-icon-152x152.png b/library/AP/layout/default/resource/img/apple-touch-icon-152x152.png
new file mode 100755
index 0000000..65e80ad
Binary files /dev/null and b/library/AP/layout/default/resource/img/apple-touch-icon-152x152.png differ
diff --git a/library/AP/layout/default/resource/img/apple-touch-icon-180x180.png b/library/AP/layout/default/resource/img/apple-touch-icon-180x180.png
new file mode 100755
index 0000000..4f026aa
Binary files /dev/null and b/library/AP/layout/default/resource/img/apple-touch-icon-180x180.png differ
diff --git a/library/AP/layout/default/resource/img/apple-touch-icon-57x57.png b/library/AP/layout/default/resource/img/apple-touch-icon-57x57.png
new file mode 100755
index 0000000..2b9e808
Binary files /dev/null and b/library/AP/layout/default/resource/img/apple-touch-icon-57x57.png differ
diff --git a/library/AP/layout/default/resource/img/apple-touch-icon-60x60.png b/library/AP/layout/default/resource/img/apple-touch-icon-60x60.png
new file mode 100755
index 0000000..1eb0228
Binary files /dev/null and b/library/AP/layout/default/resource/img/apple-touch-icon-60x60.png differ
diff --git a/library/AP/layout/default/resource/img/apple-touch-icon-72x72.png b/library/AP/layout/default/resource/img/apple-touch-icon-72x72.png
new file mode 100755
index 0000000..52b2466
Binary files /dev/null and b/library/AP/layout/default/resource/img/apple-touch-icon-72x72.png differ
diff --git a/library/AP/layout/default/resource/img/apple-touch-icon-76x76.png b/library/AP/layout/default/resource/img/apple-touch-icon-76x76.png
new file mode 100755
index 0000000..bfcafd2
Binary files /dev/null and b/library/AP/layout/default/resource/img/apple-touch-icon-76x76.png differ
diff --git a/library/AP/layout/default/resource/img/apple-touch-startup-image-1242x2208.png b/library/AP/layout/default/resource/img/apple-touch-startup-image-1242x2208.png
new file mode 100755
index 0000000..7b1d8dc
Binary files /dev/null and b/library/AP/layout/default/resource/img/apple-touch-startup-image-1242x2208.png differ
diff --git a/library/AP/layout/default/resource/img/apple-touch-startup-image-1496x2048.png b/library/AP/layout/default/resource/img/apple-touch-startup-image-1496x2048.png
new file mode 100755
index 0000000..e6aa119
Binary files /dev/null and b/library/AP/layout/default/resource/img/apple-touch-startup-image-1496x2048.png differ
diff --git a/library/AP/layout/default/resource/img/apple-touch-startup-image-1536x2008.png b/library/AP/layout/default/resource/img/apple-touch-startup-image-1536x2008.png
new file mode 100755
index 0000000..c7c2883
Binary files /dev/null and b/library/AP/layout/default/resource/img/apple-touch-startup-image-1536x2008.png differ
diff --git a/library/AP/layout/default/resource/img/apple-touch-startup-image-320x460.png b/library/AP/layout/default/resource/img/apple-touch-startup-image-320x460.png
new file mode 100755
index 0000000..b666c29
Binary files /dev/null and b/library/AP/layout/default/resource/img/apple-touch-startup-image-320x460.png differ
diff --git a/library/AP/layout/default/resource/img/apple-touch-startup-image-640x1096.png b/library/AP/layout/default/resource/img/apple-touch-startup-image-640x1096.png
new file mode 100755
index 0000000..64dbe2b
Binary files /dev/null and b/library/AP/layout/default/resource/img/apple-touch-startup-image-640x1096.png differ
diff --git a/library/AP/layout/default/resource/img/apple-touch-startup-image-640x920.png b/library/AP/layout/default/resource/img/apple-touch-startup-image-640x920.png
new file mode 100755
index 0000000..2f2c540
Binary files /dev/null and b/library/AP/layout/default/resource/img/apple-touch-startup-image-640x920.png differ
diff --git a/library/AP/layout/default/resource/img/apple-touch-startup-image-748x1024.png b/library/AP/layout/default/resource/img/apple-touch-startup-image-748x1024.png
new file mode 100755
index 0000000..2e1d1f3
Binary files /dev/null and b/library/AP/layout/default/resource/img/apple-touch-startup-image-748x1024.png differ
diff --git a/library/AP/layout/default/resource/img/apple-touch-startup-image-750x1334.png b/library/AP/layout/default/resource/img/apple-touch-startup-image-750x1334.png
new file mode 100755
index 0000000..5cf2eba
Binary files /dev/null and b/library/AP/layout/default/resource/img/apple-touch-startup-image-750x1334.png differ
diff --git a/library/AP/layout/default/resource/img/apple-touch-startup-image-768x1004.png b/library/AP/layout/default/resource/img/apple-touch-startup-image-768x1004.png
new file mode 100755
index 0000000..8ded5a1
Binary files /dev/null and b/library/AP/layout/default/resource/img/apple-touch-startup-image-768x1004.png differ
diff --git a/library/AP/layout/default/resource/img/favicon-160x160.png b/library/AP/layout/default/resource/img/favicon-160x160.png
new file mode 100755
index 0000000..c538efe
Binary files /dev/null and b/library/AP/layout/default/resource/img/favicon-160x160.png differ
diff --git a/library/AP/layout/default/resource/img/favicon-16x16.png b/library/AP/layout/default/resource/img/favicon-16x16.png
new file mode 100755
index 0000000..463c827
Binary files /dev/null and b/library/AP/layout/default/resource/img/favicon-16x16.png differ
diff --git a/library/AP/layout/default/resource/img/favicon-192x192.png b/library/AP/layout/default/resource/img/favicon-192x192.png
new file mode 100755
index 0000000..5f40058
Binary files /dev/null and b/library/AP/layout/default/resource/img/favicon-192x192.png differ
diff --git a/library/AP/layout/default/resource/img/favicon-32x32.png b/library/AP/layout/default/resource/img/favicon-32x32.png
new file mode 100755
index 0000000..62fb418
Binary files /dev/null and b/library/AP/layout/default/resource/img/favicon-32x32.png differ
diff --git a/library/AP/layout/default/resource/img/favicon-96x96.png b/library/AP/layout/default/resource/img/favicon-96x96.png
new file mode 100755
index 0000000..d480127
Binary files /dev/null and b/library/AP/layout/default/resource/img/favicon-96x96.png differ
diff --git a/library/AP/layout/default/resource/img/favicon.ico b/library/AP/layout/default/resource/img/favicon.ico
new file mode 100755
index 0000000..62bc1aa
Binary files /dev/null and b/library/AP/layout/default/resource/img/favicon.ico differ
diff --git a/library/AP/layout/default/variables.less b/library/AP/layout/default/variables.less
new file mode 100755
index 0000000..3f33284
--- /dev/null
+++ b/library/AP/layout/default/variables.less
@@ -0,0 +1,50 @@
+@colorBrand: #e22b59;
+@colorClose: #C2113D;
+@colorBgBody: #eeeeee;
+
+@fontFamily: "Helvetica Neue", Helvetica, Arial, sans-serif;
+@fontFamilyHeading: "Helvetica Neue", Helvetica, Arial, sans-serif;
+
+@colorFgHeadingHighlight: #C2113D;
+
+@colorLike: #68C800;
+@colorDislike: #E00000;
+@colorBgOffCanvas: #333333;
+
+// Review Colors
+@colorBgReviewLegit: #73d266;
+@colorBgReviewWarn: #fff024;
+@colorBgReviewSpam: #e9ad58;
+@colorBgReviewDelete: #ef8a80;
+@colorBgReviewMale: #7ab2d5;
+
+// Roles & Awards
+@colorPremium: #ffb230;
+@colorGold: #ffb230;
+@colorSilver: #adadad;
+@colorBronze: #ca9b5d;
+@colorModerator: #e22b59;
+
+// Default Sex
+@colorSex1: rgb(255, 189, 200);
+@colorSex2: rgb(158, 196, 213);
+@colorSex4: rgb(163, 153, 182);
+
+// Page
+@maxPageWidth: 1000px;
+
+// Media Queries
+@breakpointSmall: 600px;
+@breakpointMedium: 995px;
+@breakpointLarge: 1400px;
+
+// Header Bar
+@barSize: 44px;
+
+// PhotoView and PhotoGallery
+@photoSidebarWidth: 270px;
+@photoColorBg: darken(@colorFg, 20);
+@photoColorFg: darken(@colorBg, 20);
+@photoBreakpointLarge: 700px;
+
+@colorBgSelect: darken(@colorBg, 4);
diff --git a/library/AP/library/AP/App.js b/library/AP/library/AP/App.js
old mode 100644
new mode 100755
index c1b9304..88a5ac9
--- a/library/AP/library/AP/App.js
+++ b/library/AP/library/AP/App.js
@@ -17,5 +17,10 @@ var AP_App = CM_App.extend({
}
return false;
});
+
+ this.error.bindType('CM_Exception_Nonexistent', function(msg, type, isPublic) {
+ cm.window.hint(cm.language.get('The content you tried to interact with has been deleted.'));
+ return false;
+ });
}
});
diff --git a/library/AP/library/AP/App/Auth.php b/library/AP/library/AP/App/Auth.php
new file mode 100755
index 0000000..84aea36
--- /dev/null
+++ b/library/AP/library/AP/App/Auth.php
@@ -0,0 +1,50 @@
+getId(), '6t9qdslghdkasjghdf89g7dfs98ghdfug87afdgzoi827b5f8i2d324deagstzujj');
+ }
+
+ /**
+ * @param AP_Model_User $user
+ * @return string
+ */
+ public static function generateHashUser(AP_Model_User $user) {
+ return self::_generateHash($user->getId(), 'zikc686c8k564sadkfhsda98f7sad97f98asdhfiuasdfadszfa4u938jng94j595gj4f');
+ }
+
+ /**
+ * @param string $login
+ * @param string $password
+ * @return AP_Model_User|bool
+ */
+ public static function checkLogin($login, $password) {
+ $userId = CM_Db_Db::exec("SELECT `userId` FROM `ap_user` WHERE (`username` = ? OR `email` = ?)", array($login, $login))->fetchColumn();
+ if (!$userId) {
+ return false;
+ }
+ $user = new AP_Model_User($userId);
+ $hash = self::generateHashUserPassword($user, $password);
+ $hashMatchesProfile = CM_Db_Db::count('ap_user', array('userId' => $userId, 'password' => $hash));
+ if (!$hashMatchesProfile) {
+ return false;
+ }
+ return $user;
+ }
+
+ /**
+ * @param string $base
+ * @param string $salt
+ * @return string
+ */
+ private static function _generateHash($base, $salt) {
+ $hash = hash('sha256', $salt . ':' . $base);
+ return $hash;
+ }
+}
diff --git a/library/AP/library/AP/CacheConst.php b/library/AP/library/AP/CacheConst.php
new file mode 100644
index 0000000..2d3b129
--- /dev/null
+++ b/library/AP/library/AP/CacheConst.php
@@ -0,0 +1,7 @@
+' + '' + '' + '
 + ')
' + '
' + msg + '
' + '');
+ if (_.isFunction(link)) {
+ var handler = this;
+ $alert.on('click', function() {
+ link.call(handler);
+ });
+ } else {
+ $alert.attr('href', link);
+ }
+ var maxAlerts = 3;
+ this.$el.children(':lt(' + -(maxAlerts - 1) + ')').stop(true).transition({x: '-20px'}, '400ms', 'snap', function() {
+ $(this).remove();
+ });
+
+ $alert.stop().appendTo(this.$el).transition({x: '100%'}, '400ms', 'snap', function() {
+ $(this).delay(8000).transition({x: '-20px'}, '400ms', 'snap', function() {
+ $(this).remove();
+ });
+ });
+ },
+
+ /**
+ * @param {Object} action
+ * @param {Object} model
+ * @param {Object} data
+ */
+ _onActionConversationMessage: function(action, model, data) {
+ if (action.actor.id != cm.viewer.id) {
+ var mailbox = cm.findView('AP_Component_Mailbox');
+ if (!mailbox || !mailbox.isConversationVisible(model.conversation.id)) {
+ this.addMessage(action.actor, cm.language.get('{$user} sent you a message.', {user: cm.user.getUsernameHtml(action.actor, {href: false})}), 'mailbox', cm.getUrl(model.path));
+ }
+ }
+ }
+});
diff --git a/library/AP/library/AP/Component/Alerts.php b/library/AP/library/AP/Component/Alerts.php
new file mode 100755
index 0000000..7dbd1b2
--- /dev/null
+++ b/library/AP/library/AP/Component/Alerts.php
@@ -0,0 +1,5 @@
+getParams()->get('application');
+
+ $viewResponse->set('application', $application);
+ $viewResponse->set('feedList', $application->getFeedList());
+ }
+
+ public function ajax_deleteFeed(CM_Params $params, CM_Frontend_JavascriptContainer_View $handler, CM_Response_View_Ajax $response) {
+ $applicationId = $params->getString('applicationId');
+ $feedId = (string) $params->get('feedId');
+
+ $client = AP_Helper::getClient();
+ $client->feed->delete($applicationId, $feedId);
+
+ $handler->message('Success: Feed delete.');
+ $application = AP_Helper::getApplication($applicationId);
+ $response->reloadComponent(['application' => $application]);
+ }
+}
diff --git a/library/AP/library/AP/Component/ApplicationForm.js b/library/AP/library/AP/Component/ApplicationForm.js
new file mode 100755
index 0000000..d05ce5c
--- /dev/null
+++ b/library/AP/library/AP/Component/ApplicationForm.js
@@ -0,0 +1,9 @@
+/**
+ * @class AP_Component_ApplicationForm
+ * @extends AP_Component_Abstract
+ */
+var AP_Component_ApplicationForm = AP_Component_Abstract.extend({
+
+ /** @type String */
+ _class: 'AP_Component_ApplicationForm'
+});
diff --git a/library/AP/library/AP/Component/ApplicationForm.php b/library/AP/library/AP/Component/ApplicationForm.php
new file mode 100755
index 0000000..5941cc1
--- /dev/null
+++ b/library/AP/library/AP/Component/ApplicationForm.php
@@ -0,0 +1,14 @@
+getParams();
+ $application = null;
+ if ($params->has('application')) {
+ $application = $this->getParams()->get('application');
+ }
+
+ $viewResponse->set('application', $application);
+ }
+}
diff --git a/library/AP/library/AP/Component/ApplicationList.js b/library/AP/library/AP/Component/ApplicationList.js
new file mode 100755
index 0000000..619f16f
--- /dev/null
+++ b/library/AP/library/AP/Component/ApplicationList.js
@@ -0,0 +1,30 @@
+/**
+ * @class AP_Component_ApplicationList
+ * @extends AP_Component_Abstract
+ */
+var AP_Component_ApplicationList = AP_Component_Abstract.extend({
+
+ /** @type String */
+ _class: 'AP_Component_ApplicationList',
+
+ events: {
+ 'click .deleteApplication': function(e) {
+ var applicationId = $(e.currentTarget).data('application-id');
+ this.deleteApplication(applicationId);
+ return false;
+ }
+ },
+
+ childrenEvents: {
+ 'AP_Form_Application success': function() {
+ this.reload();
+ }
+ },
+
+ /**
+ * @param {Number} applicationId
+ */
+ deleteApplication: function(applicationId) {
+ this.ajax('deleteApplication', {'applicationId': applicationId});
+ }
+});
diff --git a/library/AP/library/AP/Component/ApplicationList.php b/library/AP/library/AP/Component/ApplicationList.php
new file mode 100755
index 0000000..1fd0d4d
--- /dev/null
+++ b/library/AP/library/AP/Component/ApplicationList.php
@@ -0,0 +1,21 @@
+application->getList();
+
+ $viewResponse->set('applicationList', $applicationList);
+ }
+
+ public function ajax_deleteApplication(CM_Params $params, CM_Frontend_JavascriptContainer_View $handler, CM_Response_View_Ajax $response) {
+ $applicationId = $params->getString('applicationId');
+
+ $client = AP_Helper::getClient();
+ $client->application->delete($applicationId);
+
+ $handler->message('Success: Application delete.');
+ $response->reloadComponent();
+ }
+}
diff --git a/library/AP/library/AP/Component/ApplicationView.js b/library/AP/library/AP/Component/ApplicationView.js
new file mode 100755
index 0000000..49e3736
--- /dev/null
+++ b/library/AP/library/AP/Component/ApplicationView.js
@@ -0,0 +1,30 @@
+/**
+ * @class AP_Component_ApplicationView
+ * @extends AP_Component_Abstract
+ */
+var AP_Component_ApplicationView = AP_Component_Abstract.extend({
+
+ /** @type String */
+ _class: 'AP_Component_ApplicationView',
+
+ events: {
+ 'click .deleteApplication': function(e) {
+ var applicationId = $(e.currentTarget).data('application-id');
+ this.deleteApplication(applicationId);
+ return false;
+ }
+ },
+
+ childrenEvents: {
+ 'AP_Form_Application success': function() {
+ this.reload();
+ }
+ },
+
+ /**
+ * @param {Number} applicationId
+ */
+ deleteApplication: function(applicationId) {
+ this.ajax('deleteApplication', {'applicationId': applicationId});
+ }
+});
diff --git a/library/AP/library/AP/Component/ApplicationView.php b/library/AP/library/AP/Component/ApplicationView.php
new file mode 100755
index 0000000..1ee8a84
--- /dev/null
+++ b/library/AP/library/AP/Component/ApplicationView.php
@@ -0,0 +1,21 @@
+getParams()->getString('application');
+ $application = AP_Helper::getApplication($applicationId);
+
+ $viewResponse->set('application', $application);
+ }
+
+ public function ajax_deleteApplication(CM_Params $params, CM_Frontend_JavascriptContainer_View $handler, CM_Response_View_Ajax $response) {
+ $applicationId = $params->getString('applicationId');
+
+ $client = AP_Helper::getClient();
+ $client->application->delete($applicationId);
+
+ $handler->message('Success: Application delete.');
+ $response->redirect('AP_Page_ApplicationOverview');
+ }
+}
diff --git a/library/AP/library/AP/Component/ApplicationViewSmall.js b/library/AP/library/AP/Component/ApplicationViewSmall.js
new file mode 100755
index 0000000..5f593a6
--- /dev/null
+++ b/library/AP/library/AP/Component/ApplicationViewSmall.js
@@ -0,0 +1,9 @@
+/**
+ * @class AP_Component_ApplicationViewSmall
+ * @extends AP_Component_Abstract
+ */
+var AP_Component_ApplicationViewSmall = AP_Component_Abstract.extend({
+
+ /** @type String */
+ _class: 'AP_Component_ApplicationViewSmall'
+});
diff --git a/library/AP/library/AP/Component/ApplicationViewSmall.php b/library/AP/library/AP/Component/ApplicationViewSmall.php
new file mode 100755
index 0000000..f828fe6
--- /dev/null
+++ b/library/AP/library/AP/Component/ApplicationViewSmall.php
@@ -0,0 +1,15 @@
+getViewer(true)->getRoles()->contains(AP_Role::ADMIN)) {
+ // throw new CM_Exception_NotAllowed();
+ }
+ }
+
+ public function prepare(CM_Frontend_Environment $environment, CM_Frontend_ViewResponse $viewResponse) {
+ $application = $this->getParams()->get('application');
+ $viewResponse->set('application', $application);
+ }
+}
diff --git a/library/AP/library/AP/Component/AuthRequired.js b/library/AP/library/AP/Component/AuthRequired.js
new file mode 100755
index 0000000..7c0f2ea
--- /dev/null
+++ b/library/AP/library/AP/Component/AuthRequired.js
@@ -0,0 +1,9 @@
+/**
+ * @class AP_Component_AuthRequired
+ * @extends AP_Component_Abstract
+ */
+var AP_Component_AuthRequired = AP_Component_Abstract.extend({
+
+ /** @type String */
+ _class: 'AP_Component_AuthRequired'
+});
diff --git a/library/AP/library/AP/Component/AuthRequired.php b/library/AP/library/AP/Component/AuthRequired.php
new file mode 100755
index 0000000..39b0ede
--- /dev/null
+++ b/library/AP/library/AP/Component/AuthRequired.php
@@ -0,0 +1,10 @@
+_params->getBoolean('hadViewer', false);
+
+ $viewResponse->set('hadViewer', $hadViewer);
+ }
+}
diff --git a/library/AP/library/AP/Component/ChangePassword.js b/library/AP/library/AP/Component/ChangePassword.js
new file mode 100644
index 0000000..b2a7e84
--- /dev/null
+++ b/library/AP/library/AP/Component/ChangePassword.js
@@ -0,0 +1,7 @@
+/**
+ * @class AP_Component_ChangePassword
+ * @extends AP_Component_Abstract
+ */
+var AP_Component_ChangePassword = AP_Component_Abstract.extend({
+ _class: 'AP_Component_ChangePassword'
+});
diff --git a/library/AP/library/AP/Component/ChangePassword.php b/library/AP/library/AP/Component/ChangePassword.php
new file mode 100755
index 0000000..e0df89d
--- /dev/null
+++ b/library/AP/library/AP/Component/ChangePassword.php
@@ -0,0 +1,8 @@
+_checkViewer($environment);
+ }
+}
diff --git a/library/AP/library/AP/Component/FeedEntryList.js b/library/AP/library/AP/Component/FeedEntryList.js
new file mode 100755
index 0000000..e360203
--- /dev/null
+++ b/library/AP/library/AP/Component/FeedEntryList.js
@@ -0,0 +1,28 @@
+/**
+ * @class AP_Component_FeedEntryList
+ * @extends AP_Component_Abstract
+ */
+var AP_Component_FeedEntryList = AP_Component_Abstract.extend({
+
+ /** @type String */
+ _class: 'AP_Component_FeedEntryList',
+
+ events: {
+ 'click .deleteEntry': function(e) {
+ var applicationId = $(e.currentTarget).data('application-id');
+ var feedId = $(e.currentTarget).data('feed-id');
+ var entryId = $(e.currentTarget).data('entry-id');
+ this.deleteEntry(applicationId, feedId, entryId);
+ return false;
+ }
+ },
+
+ /**
+ * @param {Number} applicationId
+ * @param {Number} feedId
+ * @param {Number} entryId
+ */
+ deleteEntry: function(applicationId, feedId, entryId) {
+ this.ajax('deleteEntry', {'applicationId': applicationId, 'feedId': feedId, 'entryId': entryId});
+ }
+});
diff --git a/library/AP/library/AP/Component/FeedEntryList.php b/library/AP/library/AP/Component/FeedEntryList.php
new file mode 100755
index 0000000..a233da3
--- /dev/null
+++ b/library/AP/library/AP/Component/FeedEntryList.php
@@ -0,0 +1,29 @@
+getParams()->get('application');
+ $feed = $this->getParams()->get('feed');
+
+ $viewResponse->set('application', $application);
+ $viewResponse->set('feed', $feed);
+ $viewResponse->set('entryList', $feed->getEntryList());
+ }
+
+ public function ajax_deleteEntry(CM_Params $params, CM_Frontend_JavascriptContainer_View $handler, CM_Response_View_Ajax $response) {
+ $applicationId = $params->getString('applicationId');
+ $feedId = $params->getString('feedId');
+ $entryId = (string) $params->get('entryId');
+
+ $client = AP_Helper::getClient();
+ $client->entry->delete($applicationId, $feedId, $entryId);
+
+ $handler->message('Success: Entry delete.');
+
+ $application = AP_Helper::getApplication($applicationId);
+ $feed = AP_Helper::getFeed($applicationId, $feedId);
+ $response->reloadComponent(['application' => $application, 'feed' => $feed]);
+ }
+}
diff --git a/library/AP/library/AP/Component/FeedForm.js b/library/AP/library/AP/Component/FeedForm.js
new file mode 100755
index 0000000..ca1fedd
--- /dev/null
+++ b/library/AP/library/AP/Component/FeedForm.js
@@ -0,0 +1,9 @@
+/**
+ * @class AP_Component_FeedForm
+ * @extends AP_Component_Abstract
+ */
+var AP_Component_FeedForm = AP_Component_Abstract.extend({
+
+ /** @type String */
+ _class: 'AP_Component_FeedForm'
+});
diff --git a/library/AP/library/AP/Component/FeedForm.php b/library/AP/library/AP/Component/FeedForm.php
new file mode 100755
index 0000000..95a2391
--- /dev/null
+++ b/library/AP/library/AP/Component/FeedForm.php
@@ -0,0 +1,16 @@
+getParams();
+ $application = $params->get('application');
+ $feed = null;
+ if ($params->has('feed')) {
+ $feed = $this->getParams()->get('feed');
+ }
+
+ $viewResponse->set('application', $application);
+ $viewResponse->set('feed', $feed);
+ }
+}
diff --git a/library/AP/library/AP/Component/FeedList.js b/library/AP/library/AP/Component/FeedList.js
new file mode 100755
index 0000000..026c81e
--- /dev/null
+++ b/library/AP/library/AP/Component/FeedList.js
@@ -0,0 +1,15 @@
+/**
+ * @class AP_Component_FeedList
+ * @extends AP_Component_Abstract
+ */
+var AP_Component_FeedList = AP_Component_Abstract.extend({
+
+ /** @type String */
+ _class: 'AP_Component_FeedList',
+
+ childrenEvents: {
+ 'AP_Form_Feed success': function() {
+ this.reload();
+ }
+ }
+});
diff --git a/library/AP/library/AP/Component/FeedList.php b/library/AP/library/AP/Component/FeedList.php
new file mode 100755
index 0000000..aa8fd9c
--- /dev/null
+++ b/library/AP/library/AP/Component/FeedList.php
@@ -0,0 +1,11 @@
+application->getList();
+
+ $viewResponse->set('applicationList', $applicationList);
+ }
+}
diff --git a/library/AP/library/AP/Component/FeedView.js b/library/AP/library/AP/Component/FeedView.js
new file mode 100755
index 0000000..0aaf829
--- /dev/null
+++ b/library/AP/library/AP/Component/FeedView.js
@@ -0,0 +1,32 @@
+/**
+ * @class AP_Component_FeedView
+ * @extends AP_Component_Abstract
+ */
+var AP_Component_FeedView = AP_Component_Abstract.extend({
+
+ /** @type String */
+ _class: 'AP_Component_FeedView',
+
+ events: {
+ 'click .deleteFeed': function(e) {
+ var applicationId = $(e.currentTarget).data('application-id');
+ var feedId = $(e.currentTarget).data('feed-id');
+ this.deleteFeed(applicationId, feedId);
+ return false;
+ }
+ },
+
+ childrenEvents: {
+ 'AP_Form_Feed success': function() {
+ this.reload();
+ }
+ },
+
+ /**
+ * @param {Number} applicationId
+ * @param {Number} feedId
+ */
+ deleteFeed: function(applicationId, feedId) {
+ this.ajax('deleteFeed', {'applicationId': applicationId, 'feedId': feedId});
+ }
+});
diff --git a/library/AP/library/AP/Component/FeedView.php b/library/AP/library/AP/Component/FeedView.php
new file mode 100755
index 0000000..c468a72
--- /dev/null
+++ b/library/AP/library/AP/Component/FeedView.php
@@ -0,0 +1,25 @@
+getParams()->getString('application');
+ $application = AP_Helper::getApplication($applicationId);
+ $feedId = $this->getParams()->getString('feed');
+ $feed = AP_Helper::getFeed($applicationId, $feedId);
+
+ $viewResponse->set('application', $application);
+ $viewResponse->set('feed', $feed);
+ }
+
+ public function ajax_deleteFeed(CM_Params $params, CM_Frontend_JavascriptContainer_View $handler, CM_Response_View_Ajax $response) {
+ $applicationId = $params->getString('applicationId');
+ $feedId = $params->getString('feedId');
+
+ $client = AP_Helper::getClient();
+ $client->feed->delete($applicationId, $feedId);
+
+ $handler->message('Success: Feed delete.');
+ $response->redirect('AP_Page_FeedOverview');
+ }
+}
diff --git a/library/AP/library/AP/Component/Header.js b/library/AP/library/AP/Component/Header.js
deleted file mode 100755
index c80665f..0000000
--- a/library/AP/library/AP/Component/Header.js
+++ /dev/null
@@ -1,9 +0,0 @@
-/**
- * @class AP_Component_Header
- * @extends AP_Component_Abstract
- */
-var AP_Component_Header = AP_Component_Abstract.extend({
-
- /** @type String */
- _class: 'AP_Component_Header'
-});
diff --git a/library/AP/library/AP/Component/Header.php b/library/AP/library/AP/Component/Header.php
deleted file mode 100644
index d9f9216..0000000
--- a/library/AP/library/AP/Component/Header.php
+++ /dev/null
@@ -1,5 +0,0 @@
-getRequest()->getSession()->deleteUser();
+ $response->getRequest()->getSession()->setLifetime();
+
+ $response->redirect($redirectPage, null, true);
+ }
}
diff --git a/library/AP/library/AP/Component/SignIn.js b/library/AP/library/AP/Component/SignIn.js
new file mode 100755
index 0000000..60c2347
--- /dev/null
+++ b/library/AP/library/AP/Component/SignIn.js
@@ -0,0 +1,19 @@
+/**
+ * @class AP_Component_SignIn
+ * @extends AP_Component_Abstract
+ */
+var AP_Component_SignIn = AP_Component_Abstract.extend({
+
+ /** @type String */
+ _class: 'AP_Component_SignIn',
+
+ ready: function() {
+ var handler = this;
+ this.$('.forgotPW').click(function() {
+ handler.loadComponent('AP_Component_ForgotPassword');
+ });
+ this.$('.signup').click(function() {
+ handler.loadComponent('AP_Component_SignUp');
+ });
+ }
+});
diff --git a/library/AP/library/AP/Component/SignIn.php b/library/AP/library/AP/Component/SignIn.php
new file mode 100755
index 0000000..ad8ea59
--- /dev/null
+++ b/library/AP/library/AP/Component/SignIn.php
@@ -0,0 +1,5 @@
+token->getList();
+
+ $viewResponse->set('tokenList', $tokenList);
+ }
+
+ public function ajax_deleteToken(CM_Params $params, CM_Frontend_JavascriptContainer_View $handler, CM_Response_View_Ajax $response) {
+ $token = $params->getString('token');
+
+ $client = AP_Helper::getClient();
+ $client->token->delete($token);
+
+ $handler->message('Success: Token delete.');
+ $response->reloadComponent();
+ }
+}
diff --git a/library/AP/library/AP/Form/AccountUser.js b/library/AP/library/AP/Form/AccountUser.js
new file mode 100755
index 0000000..dd7e4a4
--- /dev/null
+++ b/library/AP/library/AP/Form/AccountUser.js
@@ -0,0 +1,9 @@
+/**
+ * @class AP_Form_AccountUser
+ * @extends CM_Form_Abstract
+ */
+var AP_Form_AccountUser = CM_Form_Abstract.extend({
+
+ /** @type String */
+ _class: 'AP_Form_AccountUser'
+});
diff --git a/library/AP/library/AP/Form/AccountUser.php b/library/AP/library/AP/Form/AccountUser.php
new file mode 100755
index 0000000..96216ab
--- /dev/null
+++ b/library/AP/library/AP/Form/AccountUser.php
@@ -0,0 +1,15 @@
+registerField(new CM_FormField_Email(['name' => 'email']));
+ $this->registerField(new CM_FormField_Password(['name' => 'password']));
+
+ $this->registerAction(new AP_FormAction_AccountUser_Save($this));
+ }
+
+ public function prepare(CM_Frontend_Environment $environment) {
+ $this->getField('email')->setValue($environment->getViewer(true)->getEmail());
+ }
+}
diff --git a/library/AP/library/AP/Form/Application.js b/library/AP/library/AP/Form/Application.js
new file mode 100755
index 0000000..b8b7df1
--- /dev/null
+++ b/library/AP/library/AP/Form/Application.js
@@ -0,0 +1,9 @@
+/**
+ * @class AP_Form_Application
+ * @extends CM_Form_Abstract
+ */
+var AP_Form_Application = CM_Form_Abstract.extend({
+
+ /** @type String */
+ _class: 'AP_Form_Application'
+});
diff --git a/library/AP/library/AP/Form/Application.php b/library/AP/library/AP/Form/Application.php
new file mode 100755
index 0000000..7cec782
--- /dev/null
+++ b/library/AP/library/AP/Form/Application.php
@@ -0,0 +1,24 @@
+registerField(new CM_FormField_Hidden(['name' => 'applicationId']));
+ $this->registerField(new CM_FormField_Text(['name' => 'name']));
+ $this->registerField(new CM_FormField_Textarea(['name' => 'description']));
+
+ $this->registerAction(new AP_FormAction_Application_Create($this));
+ $this->registerAction(new AP_FormAction_Application_Save($this));
+ }
+
+ public function prepare(CM_Frontend_Environment $environment) {
+ $params = $this->getParams();
+ if ($params->has('application')) {
+ /** @var \Feedlabs\Feedify\Resource\Application $application */
+ $application = $params->get('application');
+ $this->getField('applicationId')->setValue($application->getId());
+ $this->getField('name')->setValue($application->getName());
+ $this->getField('description')->setValue($application->getDescription());
+ }
+ }
+}
diff --git a/library/AP/library/AP/Form/ChangePassword.js b/library/AP/library/AP/Form/ChangePassword.js
new file mode 100644
index 0000000..564d96a
--- /dev/null
+++ b/library/AP/library/AP/Form/ChangePassword.js
@@ -0,0 +1,7 @@
+/**
+ * @class AP_Form_ChangePassword
+ * @extends CM_Form_Abstract
+ */
+var AP_Form_ChangePassword = CM_Form_Abstract.extend({
+ _class: 'AP_Form_ChangePassword'
+});
diff --git a/library/AP/library/AP/Form/ChangePassword.php b/library/AP/library/AP/Form/ChangePassword.php
new file mode 100755
index 0000000..79363e5
--- /dev/null
+++ b/library/AP/library/AP/Form/ChangePassword.php
@@ -0,0 +1,12 @@
+registerField(new CM_FormField_Password(['name' => 'old_password']));
+ $this->registerField(new CM_FormField_Password(['name' => 'new_password']));
+ $this->registerField(new CM_FormField_Password(['name' => 'new_password_confirm']));
+
+ $this->registerAction(new AP_FormAction_ChangePassword_Process($this));
+ }
+}
diff --git a/library/AP/library/AP/Form/Feed.js b/library/AP/library/AP/Form/Feed.js
new file mode 100755
index 0000000..b456ee6
--- /dev/null
+++ b/library/AP/library/AP/Form/Feed.js
@@ -0,0 +1,9 @@
+/**
+ * @class AP_Form_Feed
+ * @extends CM_Form_Abstract
+ */
+var AP_Form_Feed = CM_Form_Abstract.extend({
+
+ /** @type String */
+ _class: 'AP_Form_Feed'
+});
diff --git a/library/AP/library/AP/Form/Feed.php b/library/AP/library/AP/Form/Feed.php
new file mode 100755
index 0000000..74f6f33
--- /dev/null
+++ b/library/AP/library/AP/Form/Feed.php
@@ -0,0 +1,29 @@
+registerField(new CM_FormField_Hidden(['name' => 'applicationId']));
+ $this->registerField(new CM_FormField_Hidden(['name' => 'feedId']));
+ $this->registerField(new CM_FormField_Text(['name' => 'name']));
+ $this->registerField(new CM_FormField_Textarea(['name' => 'description']));
+
+ $this->registerAction(new AP_FormAction_Feed_Create($this));
+ $this->registerAction(new AP_FormAction_Feed_Save($this));
+ }
+
+ public function prepare(CM_Frontend_Environment $environment) {
+ $params = $this->getParams();
+ /** @var \Feedlabs\Feedify\Resource\Application $application */
+ $application = $params->get('application');
+ $this->getField('applicationId')->setValue($application->getId());
+
+ if ($params->has('feed')) {
+ /** @var \Feedlabs\Feedify\Resource\Feed $feed */
+ $feed = $params->get('feed');
+ $this->getField('feedId')->setValue($feed->getId());
+ $this->getField('name')->setValue($feed->getName());
+ $this->getField('description')->setValue($feed->getDescription());
+ }
+ }
+}
diff --git a/library/AP/library/AP/Form/SignIn.js b/library/AP/library/AP/Form/SignIn.js
new file mode 100755
index 0000000..bd34be2
--- /dev/null
+++ b/library/AP/library/AP/Form/SignIn.js
@@ -0,0 +1,9 @@
+/**
+ * @class AP_Form_SignIn
+ * @extends CM_Form_Abstract
+ */
+var AP_Form_SignIn = CM_Form_Abstract.extend({
+
+ /** @type String */
+ _class: 'AP_Form_SignIn'
+});
diff --git a/library/AP/library/AP/Form/SignIn.php b/library/AP/library/AP/Form/SignIn.php
new file mode 100755
index 0000000..e4ef77d
--- /dev/null
+++ b/library/AP/library/AP/Form/SignIn.php
@@ -0,0 +1,12 @@
+registerField(new CM_FormField_Text(['name' => 'login']));
+ $this->registerField(new CM_FormField_Password(['name' => 'password']));
+ $this->registerField(new CM_FormField_Boolean(['name' => 'remember_me']));
+
+ $this->registerAction(new AP_FormAction_SignIn_Process($this));
+ }
+}
diff --git a/library/AP/library/AP/Form/SignUp.js b/library/AP/library/AP/Form/SignUp.js
new file mode 100755
index 0000000..fdd2504
--- /dev/null
+++ b/library/AP/library/AP/Form/SignUp.js
@@ -0,0 +1,9 @@
+/**
+ * @class AP_Form_SignUp
+ * @extends CM_Form_Abstract
+ */
+var AP_Form_SignUp = CM_Form_Abstract.extend({
+
+ /** @type String */
+ _class: 'AP_Form_SignUp'
+});
diff --git a/library/AP/library/AP/Form/SignUp.php b/library/AP/library/AP/Form/SignUp.php
new file mode 100755
index 0000000..ba0230d
--- /dev/null
+++ b/library/AP/library/AP/Form/SignUp.php
@@ -0,0 +1,12 @@
+registerField(new AP_FormField_Username(['name' => 'username']));
+ $this->registerField(new CM_FormField_Email(['name' => 'email']));
+ $this->registerField(new CM_FormField_Password(['name' => 'password']));
+
+ $this->registerAction(new AP_FormAction_SignUp_Create($this));
+ }
+}
diff --git a/library/AP/library/AP/Form/Token.js b/library/AP/library/AP/Form/Token.js
new file mode 100755
index 0000000..247ffe6
--- /dev/null
+++ b/library/AP/library/AP/Form/Token.js
@@ -0,0 +1,9 @@
+/**
+ * @class AP_Form_Token
+ * @extends CM_Form_Abstract
+ */
+var AP_Form_Token = CM_Form_Abstract.extend({
+
+ /** @type String */
+ _class: 'AP_Form_Token'
+});
diff --git a/library/AP/library/AP/Form/Token.php b/library/AP/library/AP/Form/Token.php
new file mode 100755
index 0000000..f4c03e3
--- /dev/null
+++ b/library/AP/library/AP/Form/Token.php
@@ -0,0 +1,10 @@
+registerField(new CM_FormField_Text(['name' => 'name']));
+
+ $this->registerAction(new AP_FormAction_Token_Create($this));
+ }
+}
diff --git a/library/AP/library/AP/Form/UserPermissions.js b/library/AP/library/AP/Form/UserPermissions.js
new file mode 100755
index 0000000..c0ca86a
--- /dev/null
+++ b/library/AP/library/AP/Form/UserPermissions.js
@@ -0,0 +1,9 @@
+/**
+ * @class AP_Form_UserPermissions
+ * @extends CM_Form_Abstract
+ */
+var AP_Form_UserPermissions = CM_Form_Abstract.extend({
+
+ /** @type String */
+ _class: 'AP_Form_UserPermissions'
+});
diff --git a/library/AP/library/AP/Form/UserPermissions.php b/library/AP/library/AP/Form/UserPermissions.php
new file mode 100755
index 0000000..f59970e
--- /dev/null
+++ b/library/AP/library/AP/Form/UserPermissions.php
@@ -0,0 +1,21 @@
+registerField(new CM_FormField_Boolean(['name' => 'application_view']));
+ $this->registerField(new CM_FormField_Boolean(['name' => 'application_edit']));
+ $this->registerField(new CM_FormField_Boolean(['name' => 'application_delete']));
+ $this->registerField(new CM_FormField_Boolean(['name' => 'feed_view']));
+ $this->registerField(new CM_FormField_Boolean(['name' => 'feed_edit']));
+ $this->registerField(new CM_FormField_Boolean(['name' => 'feed_delete']));
+ $this->registerField(new CM_FormField_Boolean(['name' => 'user_view']));
+ $this->registerField(new CM_FormField_Boolean(['name' => 'user_edit']));
+ $this->registerField(new CM_FormField_Boolean(['name' => 'user_delete']));
+ }
+
+ public function prepare(CM_Frontend_Environment $environment) {
+ $user = $this->getParams()->getString('user');
+ // todo: get user permissions over API and set to formFields
+ }
+}
diff --git a/library/AP/library/AP/FormAction/AccountUser/Save.php b/library/AP/library/AP/FormAction/AccountUser/Save.php
new file mode 100755
index 0000000..69c4c91
--- /dev/null
+++ b/library/AP/library/AP/FormAction/AccountUser/Save.php
@@ -0,0 +1,30 @@
+getViewer(true);
+ $email = $params->getString('email');
+ if ($email != $user->getEmail()) {
+ if (AP_Model_User::findEmail($email)) {
+ $response->addError('This email address is already used.', 'email');
+ }
+ }
+ }
+
+ protected function _process(CM_Params $params, CM_Response_View_Form $response, CM_Form_Abstract $form) {
+ $email = $params->getString('email');
+ /** @var AP_Model_User $viewer */
+ $viewer = $response->getViewer(true);
+ $viewer->setEmail($email);
+
+ // todo: update userinfo over API
+
+ $response->addMessage('Success: Account infos save.');
+ $response->reloadComponent();
+ }
+}
diff --git a/library/AP/library/AP/FormAction/Application/Create.php b/library/AP/library/AP/FormAction/Application/Create.php
new file mode 100755
index 0000000..5a534e3
--- /dev/null
+++ b/library/AP/library/AP/FormAction/Application/Create.php
@@ -0,0 +1,18 @@
+getString('name');
+ $description = $params->has('description') ? $params->getString('description') : null;
+
+ $client = AP_Helper::getClient();
+ $client->application->create($name, $description);
+
+ $response->addMessage('Success: Application created.');
+ }
+}
diff --git a/library/AP/library/AP/FormAction/Application/Save.php b/library/AP/library/AP/FormAction/Application/Save.php
new file mode 100755
index 0000000..270c3ca
--- /dev/null
+++ b/library/AP/library/AP/FormAction/Application/Save.php
@@ -0,0 +1,19 @@
+getString('applicationId');
+ $name = $params->getString('name');
+ $description = $params->has('description') ? $params->getString('description') : null;
+
+ $client = AP_Helper::getClient();
+ $client->application->update($applicationId, $name, $description);
+
+ $response->addMessage('Success: Application saved.');
+ }
+}
diff --git a/library/AP/library/AP/FormAction/ChangePassword/Process.php b/library/AP/library/AP/FormAction/ChangePassword/Process.php
new file mode 100644
index 0000000..a740ddc
--- /dev/null
+++ b/library/AP/library/AP/FormAction/ChangePassword/Process.php
@@ -0,0 +1,29 @@
+getViewer(true);
+
+ if (!AP_App_Auth::checkLogin($user->getUsername(), $params->getString('old_password'))) {
+ $response->addError('Incorrect old password.', 'old_password');
+ } else {
+ if ($params->getString('new_password') != $params->getString('new_password_confirm')) {
+ $response->addError('Passwords do not match.', 'new_password');
+ }
+ }
+ }
+
+ protected function _process(CM_Params $params, CM_Response_View_Form $response, CM_Form_Abstract $form) {
+ /** @var AP_Model_User $user */
+ $user = $response->getViewer(true);
+ $user->setPassword($params->getString('new_password'));
+ $response->addMessage('Success: Password changed.');
+ $response->popinComponent();
+ }
+}
diff --git a/library/AP/library/AP/FormAction/Feed/Create.php b/library/AP/library/AP/FormAction/Feed/Create.php
new file mode 100755
index 0000000..159dd18
--- /dev/null
+++ b/library/AP/library/AP/FormAction/Feed/Create.php
@@ -0,0 +1,20 @@
+getString('applicationId');
+ $name = $params->getString('name');
+ $description = $params->has('description') ? $params->getString('description') : null;
+ $tagList = $params->has('tagList') ? $params->getArray('tagList') : null;
+
+ $client = AP_Helper::getClient();
+ $client->feed->create($applicationId, $name, $description, $tagList);
+
+ $response->addMessage('Success: New Feed has been added.');
+ }
+}
diff --git a/library/AP/library/AP/FormAction/Feed/Save.php b/library/AP/library/AP/FormAction/Feed/Save.php
new file mode 100755
index 0000000..111c46e
--- /dev/null
+++ b/library/AP/library/AP/FormAction/Feed/Save.php
@@ -0,0 +1,21 @@
+getString('applicationId');
+ $feedId = $params->getString('feedId');
+ $name = $params->getString('name');
+ $description = $params->has('description') ? $params->getString('description') : null;
+ $tagList = $params->has('tagList') ? $params->getArray('tagList') : null;
+
+ $client = AP_Helper::getClient();
+ $client->feed->update($applicationId, $feedId, $name, $description, $tagList);
+
+ $response->addMessage('Success: Feed saved.');
+ }
+}
diff --git a/library/AP/library/AP/FormAction/SignIn/Process.php b/library/AP/library/AP/FormAction/SignIn/Process.php
new file mode 100755
index 0000000..c64f698
--- /dev/null
+++ b/library/AP/library/AP/FormAction/SignIn/Process.php
@@ -0,0 +1,27 @@
+getRequest()->getIpBlocked()) {
+ $response->addError($response->getRender()->getTranslation('Your IP address is blocked.'));
+ }
+ }
+
+ protected function _process(CM_Params $params, CM_Response_View_Form $response, CM_Form_Abstract $form) {
+ try {
+ $user = AP_Model_User::authenticate($params->getString('login'), $params->getString('password'));
+ } catch (CM_Exception_AuthFailed $e) {
+ $response->addError($e->getMessagePublic($response->getRender()), 'password');
+ return;
+ }
+
+ $response->getRequest()->getSession()->setUser($user);
+
+ $response->reloadPage();
+ }
+}
diff --git a/library/AP/library/AP/FormAction/SignUp/Create.php b/library/AP/library/AP/FormAction/SignUp/Create.php
new file mode 100755
index 0000000..ab6bd6e
--- /dev/null
+++ b/library/AP/library/AP/FormAction/SignUp/Create.php
@@ -0,0 +1,34 @@
+getString('email'))) {
+ $response->addError($response->getRender()->getTranslation('This email address is already used.'), 'email');
+ }
+ if ($response->getRequest()->getIpBlocked()) {
+ $response->addError($response->getRender()->getTranslation('Your IP address is blocked.'));
+ }
+ }
+
+ protected function _process(CM_Params $params, CM_Response_View_Form $response, CM_Form_Abstract $form) {
+ $data = $params->getParamsDecoded();
+ $ip = $response->getRequest()->getIp();
+ if ($ip) {
+ $data['join_ip'] = $ip;
+ }
+ $data['site'] = $response->getSite();
+ $data['language'] = $response->getRequest()->getLanguage();
+
+ $user = AP_Model_User::createStatic($data);
+
+ $response->getRequest()->getSession()->setUser($user);
+ $response->getRequest()->getSession()->set('firstvisit', true);
+
+ $response->reloadPage();
+ }
+}
diff --git a/library/AP/library/AP/FormAction/Token/Create.php b/library/AP/library/AP/FormAction/Token/Create.php
new file mode 100755
index 0000000..464bce9
--- /dev/null
+++ b/library/AP/library/AP/FormAction/Token/Create.php
@@ -0,0 +1,18 @@
+getString('name');
+
+ $client = AP_Helper::getClient();
+ $client->token->create($name);
+
+ $response->addMessage('Success: New Token has been added.');
+ $response->reloadComponent();
+ }
+}
diff --git a/library/AP/library/AP/FormField/Username.js b/library/AP/library/AP/FormField/Username.js
new file mode 100644
index 0000000..5dc71cd
--- /dev/null
+++ b/library/AP/library/AP/FormField/Username.js
@@ -0,0 +1,14 @@
+/**
+ * @class AP_FormField_Username
+ * @extends CM_FormField_Text
+ */
+var AP_FormField_Username = CM_FormField_Text.extend({
+ _class: 'AP_FormField_Username',
+
+ ready: function() {
+ this.enableTriggerChangeOnInput();
+ this.on('change', function() {
+ this.validate();
+ }, this);
+ }
+});
diff --git a/library/AP/library/AP/FormField/Username.php b/library/AP/library/AP/FormField/Username.php
new file mode 100644
index 0000000..50fb14e
--- /dev/null
+++ b/library/AP/library/AP/FormField/Username.php
@@ -0,0 +1,32 @@
+_options['allowViewer'] = $this->_params->getBoolean('allowViewer', false);
+ $this->_params->set('lengthMax', 32);
+ parent::_initialize();
+ }
+
+ public function validate(CM_Frontend_Environment $environment, $userInput) {
+ $userInput = parent::validate($environment, $userInput);
+
+ if (!AP_Model_User::usernameIsValid($userInput)) {
+ throw new CM_Exception_FormFieldValidation('Username may only contain alphanumerical characters.');
+ }
+
+ /** @var AP_Model_User $viewer */
+ $viewer = $environment->getViewer();
+ $equalsViewer = $viewer && $this->_options['allowViewer'] && $userInput == $viewer->getUsername();
+ if (!$equalsViewer && AP_Model_User::findUsername($userInput)) {
+ throw new CM_Exception_FormFieldValidation('Username already taken');
+ }
+
+ $badwordList = new CM_Paging_ContentList_Badwords();
+ if ($badword = $badwordList->getMatch($userInput)) {
+ throw new CM_Exception_FormFieldValidation('Sorry, but we don\'t accept user names containing "{$badword}"', array('badword' => $badword));
+ }
+
+ return $userInput;
+ }
+}
diff --git a/library/AP/library/AP/Helper.php b/library/AP/library/AP/Helper.php
new file mode 100755
index 0000000..a089a50
--- /dev/null
+++ b/library/AP/library/AP/Helper.php
@@ -0,0 +1,40 @@
+application->get($applicationId);
+ }
+
+ /**
+ * @param string $applicationId
+ * @param string $feedId
+ * @return Feed
+ */
+ public static function getFeed($applicationId, $feedId) {
+ $client = static::getClient();
+ return $client->feed->get($applicationId, $feedId);
+ }
+}
diff --git a/library/AP/library/AP/Layout/Default.js b/library/AP/library/AP/Layout/Default.js
old mode 100644
new mode 100755
index 7ce6bdb..d9c3d30
--- a/library/AP/library/AP/Layout/Default.js
+++ b/library/AP/library/AP/Layout/Default.js
@@ -7,9 +7,78 @@ var AP_Layout_Default = CM_Layout_Abstract.extend({
/** @type String */
_class: 'AP_Layout_Default',
+ /** @type {OffCanvas|Null} */
+ _offCanvasNavigation: null,
+
+ /** @type {OffCanvas|Null} */
+ _offCanvasChat: null,
+
+ /** @type {Boolean} */
+ _shareVisible: false,
+
ready: function() {
- $('[data-toggle="offcanvas"]').click(function() {
- $('.row-offcanvas').toggleClass('active');
+ var self = this;
+
+ this._offCanvasNavigation = this.$('#navigation').offCanvas({wrap: '#body-container'}).data('offCanvas');
+ this._offCanvasChat = this.$('#chat').offCanvas({wrap: '#body-container'}).data('offCanvas');
+
+ var mediaQuerySmall = {
+ match: function() {
+ if (self._offCanvasNavigation) {
+ self._offCanvasNavigation.enable();
+ }
+ if (self._offCanvasChat) {
+ self._offCanvasChat.enable();
+ }
+ }
+ };
+
+ var mediaQueryMedium = {
+ match: function() {
+ if (self._offCanvasNavigation) {
+ self._offCanvasNavigation.disable();
+ }
+ if (self._offCanvasChat) {
+ self._offCanvasChat.disable();
+ }
+ }
+ };
+
+ var mediaQueryLarge = {
+ match: function() {
+ if (self._offCanvasNavigation) {
+ self._offCanvasNavigation.disable();
+ }
+ if (self._offCanvasChat) {
+ self._offCanvasChat.disable();
+ }
+ }
+ };
+
+ enquire.register('(max-width: 994px)', mediaQuerySmall);
+ enquire.register('(min-width: 995px) and (max-width: 1399px)', mediaQueryMedium);
+ enquire.register('(min-width: 1400px)', mediaQueryLarge);
+
+ this.on('destruct', function() {
+ enquire.unregister('(max-width: 994px)', mediaQuerySmall);
+ enquire.unregister('(min-width: 995px) and (max-width: 1399px)', mediaQueryMedium);
+ enquire.unregister('(min-width: 1400px)', mediaQueryLarge);
});
+
+ this.on('navigate', function() {
+ this.hideNavigation();
+ }, this);
+ },
+
+ showNavigation: function() {
+ if (this._offCanvasNavigation) {
+ this._offCanvasNavigation.open('100%', this.$('#navigation').outerHeight(true));
+ }
+ },
+
+ hideNavigation: function() {
+ if (this._offCanvasNavigation) {
+ this._offCanvasNavigation.close();
+ }
}
});
diff --git a/library/AP/library/AP/Layout/Default.php b/library/AP/library/AP/Layout/Default.php
old mode 100644
new mode 100755
diff --git a/library/AP/library/AP/Layout/Index.js b/library/AP/library/AP/Layout/Index.js
new file mode 100644
index 0000000..18b3817
--- /dev/null
+++ b/library/AP/library/AP/Layout/Index.js
@@ -0,0 +1,9 @@
+/**
+ * @class AP_Layout_Index
+ * @extends AP_Layout_Default
+ */
+var AP_Layout_Index = AP_Layout_Default.extend({
+
+ /** @type String */
+ _class: 'AP_Layout_Index'
+});
diff --git a/library/AP/library/AP/Layout/Index.php b/library/AP/library/AP/Layout/Index.php
new file mode 100644
index 0000000..5d73026
--- /dev/null
+++ b/library/AP/library/AP/Layout/Index.php
@@ -0,0 +1,5 @@
+ 'About', 'page' => 'AP_Page_About'),
+ array('label' => 'Contact', 'page' => 'AP_Page_Contact'),
+ array('label' => 'Feedback', 'page' => 'AP_Page_Feedback'),
+ array('label' => 'Terms', 'page' => 'AP_Page_Terms'),
+ ));
+ }
+}
diff --git a/library/AP/library/AP/Menu/Account.php b/library/AP/library/AP/Menu/Account.php
old mode 100644
new mode 100755
index 48961f4..df8cb5d
--- a/library/AP/library/AP/Menu/Account.php
+++ b/library/AP/library/AP/Menu/Account.php
@@ -4,8 +4,7 @@ class AP_Menu_Account extends CM_Menu {
public function __construct() {
parent::__construct(array(
- array('label' => 'Settings', 'page' => 'AP_Page_Settings'),
- array('label' => 'Profile', 'page' => 'AP_Page_Profile'),
+ array('label' => 'Settings', 'page' => 'AP_Page_Settings', 'icon' => 'gear'),
));
}
}
diff --git a/library/AP/library/AP/Menu/Browse.php b/library/AP/library/AP/Menu/Browse.php
new file mode 100755
index 0000000..e55f79b
--- /dev/null
+++ b/library/AP/library/AP/Menu/Browse.php
@@ -0,0 +1,17 @@
+ 'Overview', 'page' => 'AP_Page_Overview', 'icon' => 'home'),
+ array('label' => 'Application', 'page' => 'AP_Page_ApplicationOverview', 'icon' => 'overview', 'submenu' => array(
+ array('label' => 'Application', 'page' => 'AP_Page_Application', 'viewable' => false),
+ )),
+ array('label' => 'Feed', 'page' => 'AP_Page_FeedOverview', 'icon' => 'feed', 'submenu' => array(
+ array('label' => 'Feed', 'page' => 'AP_Page_Feed', 'viewable' => false),
+ )),
+ array('label' => 'Account', 'page' => 'AP_Page_Account', 'icon' => 'friends'),
+ ));
+ }
+}
diff --git a/library/AP/library/AP/Menu/Main.php b/library/AP/library/AP/Menu/Main.php
deleted file mode 100644
index 3adbc32..0000000
--- a/library/AP/library/AP/Menu/Main.php
+++ /dev/null
@@ -1,12 +0,0 @@
- 'Overview', 'page' => 'AP_Page_Index'),
- array('label' => 'Application', 'page' => 'AP_Page_Application'),
- array('label' => 'Feed', 'page' => 'AP_Page_Feed'),
- ));
- }
-}
diff --git a/library/AP/library/AP/Model/User.php b/library/AP/library/AP/Model/User.php
new file mode 100755
index 0000000..aeec3ba
--- /dev/null
+++ b/library/AP/library/AP/Model/User.php
@@ -0,0 +1,169 @@
+_get('email');
+ }
+
+ /**
+ * @param string $email
+ * @return AP_Model_User
+ */
+ public function setEmail($email) {
+ CM_Db_Db::update('ap_user', array('email' => $email), array('userId' => $this->getId()));
+ return $this->_change();
+ }
+
+ /**
+ * @return string
+ */
+ public function getUsername() {
+ return $this->_get('username');
+ }
+
+ /**
+ * @param string $username
+ * @return AP_Model_User
+ */
+ public function setUsername($username) {
+ CM_Db_Db::update('ap_user', array('username' => $username), array('userId' => $this->getId()));
+ return $this->_change();
+ }
+
+ /**
+ * @param string $password
+ * @return AP_Model_User
+ */
+ public function setPassword($password) {
+ $hash = AP_App_Auth::generateHashUserPassword($this, $password);
+ CM_Db_Db::update('ap_user', array('password' => $hash), array('userId' => $this->getId()));
+ return $this->_change();
+ }
+
+
+
+ protected function _loadData() {
+ $return = CM_Db_Db::exec("SELECT `main`.*, `secondary`.*, `online`.`userId` AS `online`, `online`.`visible`
+ FROM `cm_user` AS `main`
+ JOIN `ap_user` AS `secondary` USING (`userId`)
+ LEFT JOIN `cm_user_online` AS `online` USING(`userId`)
+ WHERE `main`.`userId`=?", array($this->getId()))->fetch();
+ return $return;
+ }
+
+ protected function _onDelete() {
+ CM_Db_Db::delete('ap_user', array('userId' => $this->getId()));
+ parent::_onDelete();
+ }
+
+ /**
+ * @param string $login
+ * @param string $password
+ * @return AP_Model_User
+ * @throws CM_Exception_AuthFailed
+ */
+ public static function authenticate($login, $password) {
+ if (!$login || !$password) {
+ throw new CM_Exception_AuthFailed('Username and password required', null, array('messagePublic' => 'Username or Password is empty'));
+ }
+ $user = AP_App_Auth::checkLogin($login, $password);
+ if (!$user) {
+ throw new CM_Exception_AuthFailed('Authentication failed', null, array('messagePublic' => 'Password and Username do not match'));
+ }
+
+ if (isset($_SERVER['HTTP_USER_AGENT'])) {
+ $user->getUseragents()->add($_SERVER['HTTP_USER_AGENT']);
+ }
+ return $user;
+ }
+
+ /**
+ * @param string $username
+ * @return bool
+ */
+ public static function usernameIsValid($username) {
+ return (bool) preg_match("/^[" . self::USERNAME_CHARACTERS . "]*$/", $username);
+ }
+
+ /**
+ * @param string $username
+ * @return AP_Model_User|null
+ */
+ public static function findUsername($username) {
+ $cacheKey = self::_getUsernameCacheKey($username);
+ $cache = CM_Cache_Shared::getInstance();
+ if (($id = $cache->get($cacheKey)) === false) {
+ $id = CM_Db_Db::select('ap_user', 'userId', array('username' => $username))->fetchColumn();
+ if (!$id) {
+ return null;
+ }
+ $cache->set($cacheKey, (int) $id);
+ }
+ return new self($id);
+ }
+
+ /**
+ * @param string $email
+ * @return AP_Model_User|null
+ */
+ public static function findEmail($email) {
+ $id = CM_Db_Db::select('ap_user', 'userId', array('email' => $email))->fetchColumn();
+ if (!$id) {
+ return null;
+ }
+ return new self($id);
+ }
+
+
+ /**
+ * @param array $data
+ * @throws CM_Exception|Exception
+ * @return AP_Model_User
+ */
+ public static function _createStatic(array $data) {
+ $site = null;
+ if (isset($data['site'])) {
+ /** @var CM_Site_Abstract $site */
+ $site = $data['site'];
+ }
+ $language = null;
+ if (isset($data['language'])) {
+ /** @var CM_Model_Language $language */
+ $language = $data['language'];
+ }
+ $username = (string) $data['username'];
+ $email = (string) $data['email'];
+ $password = (string) $data['password'];
+ $user = CM_Model_User::createStatic(array('site' => $site, 'language' => $language));
+ $userId = $user->getId();
+ $hash = AP_App_Auth::generateHashUserPassword($user, $password);
+ $values = array('userId' => $userId,
+ 'username' => $username,
+ 'email' => $email,
+ 'password' => $hash,
+ );
+ try {
+ CM_Db_Db::insert('ap_user', $values);
+ } catch (CM_Exception $e) {
+ CM_Db_Db::delete('cm_user', array('userId' => $userId));
+ throw $e;
+ }
+
+ return new self($userId);
+ }
+
+ /**
+ * @param string $username
+ * @return string
+ */
+ private static function _getUsernameCacheKey($username) {
+ return AP_CacheConst::User . '_username:' . $username;
+ }
+}
diff --git a/library/AP/library/AP/Page/About.js b/library/AP/library/AP/Page/About.js
new file mode 100755
index 0000000..3dc52c3
--- /dev/null
+++ b/library/AP/library/AP/Page/About.js
@@ -0,0 +1,9 @@
+/**
+ * @class AP_Page_About
+ * @extends CM_Page_Abstract
+ */
+var AP_Page_About = CM_Page_Abstract.extend({
+
+ /** @type String */
+ _class: 'AP_Page_About'
+});
diff --git a/library/AP/library/AP/Page/About.php b/library/AP/library/AP/Page/About.php
new file mode 100755
index 0000000..317b2c7
--- /dev/null
+++ b/library/AP/library/AP/Page/About.php
@@ -0,0 +1,5 @@
+getParams()->getString('application');
+ $viewResponse->set('application', $application);
+ }
}
diff --git a/library/AP/library/AP/Page/ApplicationOverview.js b/library/AP/library/AP/Page/ApplicationOverview.js
new file mode 100755
index 0000000..a07d3ef
--- /dev/null
+++ b/library/AP/library/AP/Page/ApplicationOverview.js
@@ -0,0 +1,9 @@
+/**
+ * @class AP_Page_ApplicationOverview
+ * @extends CM_Page_Abstract
+ */
+var AP_Page_ApplicationOverview = CM_Page_Abstract.extend({
+
+ /** @type String */
+ _class: 'AP_Page_ApplicationOverview'
+});
diff --git a/library/AP/library/AP/Page/ApplicationOverview.php b/library/AP/library/AP/Page/ApplicationOverview.php
new file mode 100755
index 0000000..e55b14c
--- /dev/null
+++ b/library/AP/library/AP/Page/ApplicationOverview.php
@@ -0,0 +1,5 @@
+getParams()->getString('application');
+ $feed = $this->getParams()->getString('feed');
+
+ $viewResponse->set('application', $application);
+ $viewResponse->set('feed', $feed);
+ }
}
diff --git a/library/AP/library/AP/Page/FeedOverview.js b/library/AP/library/AP/Page/FeedOverview.js
new file mode 100755
index 0000000..aa36576
--- /dev/null
+++ b/library/AP/library/AP/Page/FeedOverview.js
@@ -0,0 +1,9 @@
+/**
+ * @class AP_Page_FeedOverview
+ * @extends CM_Page_Abstract
+ */
+var AP_Page_FeedOverview = CM_Page_Abstract.extend({
+
+ /** @type String */
+ _class: 'AP_Page_FeedOverview'
+});
diff --git a/library/AP/library/AP/Page/FeedOverview.php b/library/AP/library/AP/Page/FeedOverview.php
new file mode 100755
index 0000000..e9b4c73
--- /dev/null
+++ b/library/AP/library/AP/Page/FeedOverview.php
@@ -0,0 +1,5 @@
+getViewer()) {
+ $response->redirect('AP_Page_Overview');
+ return;
+ }
+ }
+
+ public function getLayout(CM_Frontend_Environment $environment, $layoutName = null) {
+ if (null === $layoutName) {
+ $layoutName = 'Index';
+ }
+ return parent::getLayout($environment, $layoutName);
+ }
}
diff --git a/library/AP/library/AP/Page/Overview.js b/library/AP/library/AP/Page/Overview.js
new file mode 100755
index 0000000..82b3c6b
--- /dev/null
+++ b/library/AP/library/AP/Page/Overview.js
@@ -0,0 +1,9 @@
+/**
+ * @class AP_Page_Overview
+ * @extends CM_Page_Abstract
+ */
+var AP_Page_Overview = CM_Page_Abstract.extend({
+
+ /** @type String */
+ _class: 'AP_Page_Overview'
+});
diff --git a/library/AP/library/AP/Page/Overview.php b/library/AP/library/AP/Page/Overview.php
new file mode 100755
index 0000000..637ade7
--- /dev/null
+++ b/library/AP/library/AP/Page/Overview.php
@@ -0,0 +1,5 @@
+_setModule('AP');
+ }
}
diff --git a/library/AP/library/AP/Site/AdminPanel.php b/library/AP/library/AP/Site/AdminPanel.php
old mode 100644
new mode 100755
index 193d59f..4b75685
--- a/library/AP/library/AP/Site/AdminPanel.php
+++ b/library/AP/library/AP/Site/AdminPanel.php
@@ -2,15 +2,11 @@
class AP_Site_AdminPanel extends AP_Site_Abstract {
- public function __construct() {
- parent::__construct();
- $this->_setModule('AP');
- }
-
public function getMenus() {
return array(
- 'main' => new AP_Menu_Main(),
+ 'browse' => new AP_Menu_Browse(),
'account' => new AP_Menu_Account(),
+ 'about' => new AP_Menu_About(),
);
}
}
diff --git a/library/AP/library/AP/SmartyPlugins/block.box.php b/library/AP/library/AP/SmartyPlugins/block.box.php
new file mode 100644
index 0000000..a6dd506
--- /dev/null
+++ b/library/AP/library/AP/SmartyPlugins/block.box.php
@@ -0,0 +1,30 @@
+' . CM_Util::htmlspecialchars($params['title']) . '';
+ }
+ $template->assign('box-header', $header);
+ $template->assign('box-footer', null);
+ return '';
+ } else {
+ $class = isset($params['class']) ? $params['class'] : null;
+
+ $header = $template->getVariable('box-header');
+ $footer = $template->getVariable('box-footer');
+
+
+ $output = '';
+ if ($header->value) {
+ $output .= '';
+ }
+ $output .= '
' . $content . '
';
+ if ($footer->value) {
+ $output .= '';
+ }
+ $output .= '
';
+ return $output;
+ }
+}
diff --git a/library/AP/library/AP/SmartyPlugins/block.box_footer.php b/library/AP/library/AP/SmartyPlugins/block.box_footer.php
new file mode 100644
index 0000000..9057d66
--- /dev/null
+++ b/library/AP/library/AP/SmartyPlugins/block.box_footer.php
@@ -0,0 +1,8 @@
+assign('box-footer', $content);
+ }
+}
diff --git a/library/AP/library/AP/SmartyPlugins/block.box_header.php b/library/AP/library/AP/SmartyPlugins/block.box_header.php
new file mode 100644
index 0000000..1bfa5bb
--- /dev/null
+++ b/library/AP/library/AP/SmartyPlugins/block.box_header.php
@@ -0,0 +1,8 @@
+assign('box-header', $content);
+ }
+}
diff --git a/library/AP/resources/config/default.php b/library/AP/resources/config/default.php
old mode 100644
new mode 100755
index e849e8a..d8518c5
--- a/library/AP/resources/config/default.php
+++ b/library/AP/resources/config/default.php
@@ -2,11 +2,15 @@
return function (CM_Config_Node $config) {
+ $config->installationName = '';
+
+ $config->CM_Model_User->class = 'AP_Model_User';
+
$config->CM_Response_Page->catch = array(
- 'CM_Exception_Nonexistent' => '/error/not-found',
- 'CM_Exception_InvalidParam' => '/error/not-found',
- 'CM_Exception_AuthRequired' => '/error/auth-required',
- 'CM_Exception_NotAllowed' => '/error/not-allowed',
+// 'CM_Exception_Nonexistent' => '/error/not-found',
+// 'CM_Exception_InvalidParam' => '/error/not-found',
+// 'CM_Exception_AuthRequired' => '/error/auth-required',
+// 'CM_Exception_NotAllowed' => '/error/not-allowed',
);
$config->CM_Response_View_Abstract->catch = array(
diff --git a/library/AP/resources/db/setup.php b/library/AP/resources/db/setup.php
new file mode 100755
index 0000000..e1a4d15
--- /dev/null
+++ b/library/AP/resources/db/setup.php
@@ -0,0 +1,7 @@
+ 'admin',
+ 'email' => 'admin@example.com',
+ 'password' => 'admin',
+]);
diff --git a/library/AP/resources/db/structure.sql b/library/AP/resources/db/structure.sql
old mode 100644
new mode 100755
index f3075d3..e6c64dc
--- a/library/AP/resources/db/structure.sql
+++ b/library/AP/resources/db/structure.sql
@@ -1,2 +1,14 @@
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
/*!40101 SET NAMES utf8 */;
+DROP TABLE IF EXISTS `ap_user`;
+
+
+CREATE TABLE `ap_user` (
+ `userId` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `email` varchar(128) NOT NULL DEFAULT '',
+ `username` varchar(32) NOT NULL DEFAULT '',
+ `password` char(64) DEFAULT NULL,
+ PRIMARY KEY (`userId`),
+ UNIQUE KEY `email` (`email`),
+ UNIQUE KEY `username` (`username`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
diff --git a/library/AP/resources/db/update/316.php b/library/AP/resources/db/update/316.php
new file mode 100755
index 0000000..b0ea264
--- /dev/null
+++ b/library/AP/resources/db/update/316.php
@@ -0,0 +1,5 @@
+
-
-
- tests/
-
-
+
+
+ tests/
+
+
diff --git a/public/maintenance.html b/public/maintenance.html
old mode 100644
new mode 100755
index f119399..7800ff6
--- a/public/maintenance.html
+++ b/public/maintenance.html
@@ -2,8 +2,6 @@
Maintenance
-
-
-
+
+
We are currently undergoing maintenance
Sorry for the inconvenience. We hope to be back soon!
diff --git a/public/static/css/library/icon.less b/public/static/css/library/icon.less
new file mode 100755
index 0000000..fec4629
--- /dev/null
+++ b/public/static/css/library/icon.less
@@ -0,0 +1,315 @@
+/*
+ Icon Font: icon-webfont
+*/
+
+@font-face {
+ font-family: "icon-webfont";
+ src: url(urlFont("icon-webfont.eot") + "");
+ src: url(urlFont("icon-webfont.eot") + "?#iefix") format("embedded-opentype"),
+ url(urlFont("icon-webfont.woff") + "") format("woff"),
+ url(urlFont("icon-webfont.ttf") + "") format("truetype"),
+ url(urlFont("icon-webfont.svg") + "#icon-webfont") format("svg");
+ font-weight: normal;
+ font-style: normal;
+}
+
+@media screen and (-webkit-min-device-pixel-ratio:0) {
+ @font-face {
+ font-family: "icon-webfont";
+ src: url(urlFont("icon-webfont.svg") + "#icon-webfont") format("svg");
+ }
+}
+
+[data-icon]:before { content: attr(data-icon); }
+
+[data-icon]:before,
+.icon-add:before,
+.icon-animation:before,
+.icon-arrow-down:before,
+.icon-arrow-first:before,
+.icon-arrow-last:before,
+.icon-arrow-left:before,
+.icon-arrow-right:before,
+.icon-arrow-up:before,
+.icon-audio:before,
+.icon-audio-mute:before,
+.icon-award:before,
+.icon-blog:before,
+.icon-bold:before,
+.icon-bomb:before,
+.icon-bookmark:before,
+.icon-calendar:before,
+.icon-cam:before,
+.icon-cam-off:before,
+.icon-categories:before,
+.icon-chat:before,
+.icon-chat-cam:before,
+.icon-check:before,
+.icon-check-false:before,
+.icon-clapper:before,
+.icon-close:before,
+.icon-close2:before,
+.icon-coin:before,
+.icon-comment:before,
+.icon-cross:before,
+.icon-crosshair:before,
+.icon-cupid:before,
+.icon-debug:before,
+.icon-delete:before,
+.icon-delete-confirm:before,
+.icon-dice:before,
+.icon-disable:before,
+.icon-dot:before,
+.icon-download:before,
+.icon-edit:before,
+.icon-emoticon:before,
+.icon-enter:before,
+.icon-expand:before,
+.icon-external:before,
+.icon-eye:before,
+.icon-feed:before,
+.icon-friends:before,
+.icon-game:before,
+.icon-gamescore:before,
+.icon-gear:before,
+.icon-gift:before,
+.icon-graph:before,
+.icon-heart:before,
+.icon-home:before,
+.icon-hot:before,
+.icon-image:before,
+.icon-info:before,
+.icon-italic:before,
+.icon-locked:before,
+.icon-logout:before,
+.icon-mailbox:before,
+.icon-mailbox-inbox:before,
+.icon-mailbox-read:before,
+.icon-mailbox-sent:before,
+.icon-mailbox-unread:before,
+.icon-map:before,
+.icon-markdown:before,
+.icon-member-add:before,
+.icon-member-delete:before,
+.icon-menu:before,
+.icon-menu-dropdown:before,
+.icon-menu-micro:before,
+.icon-menu-profile:before,
+.icon-mic:before,
+.icon-mic-off:before,
+.icon-minimize:before,
+.icon-minus:before,
+.icon-mobile:before,
+.icon-moderator:before,
+.icon-money:before,
+.icon-music:before,
+.icon-nav-left:before,
+.icon-nav-right:before,
+.icon-new:before,
+.icon-notification:before,
+.icon-online:before,
+.icon-overview:before,
+.icon-pause:before,
+.icon-photo:before,
+.icon-pin:before,
+.icon-pin-add:before,
+.icon-play:before,
+.icon-play2:before,
+.icon-playboy:before,
+.icon-plus:before,
+.icon-pluslove:before,
+.icon-popin:before,
+.icon-popout:before,
+.icon-premium:before,
+.icon-profile:before,
+.icon-puzzle:before,
+.icon-question:before,
+.icon-quotation:before,
+.icon-redirect:before,
+.icon-reload:before,
+.icon-report:before,
+.icon-reputation:before,
+.icon-resize-full:before,
+.icon-resize-small:before,
+.icon-roller:before,
+.icon-rotate-ccw:before,
+.icon-rotate-cw:before,
+.icon-search:before,
+.icon-select:before,
+.icon-send:before,
+.icon-sex1:before,
+.icon-sex2:before,
+.icon-sex4:before,
+.icon-share:before,
+.icon-standby:before,
+.icon-star:before,
+.icon-stats:before,
+.icon-stats-up:before,
+.icon-stop:before,
+.icon-switch:before,
+.icon-tag:before,
+.icon-talk:before,
+.icon-talk-off:before,
+.icon-test:before,
+.icon-thumbs-down:before,
+.icon-thumbs-up:before,
+.icon-time:before,
+.icon-trophy:before,
+.icon-underline:before,
+.icon-upload:before,
+.icon-verified:before,
+.icon-video:before,
+.icon-warning:before,
+.icon-webcam:before {
+ display: inline-block;
+ font-family: "icon-webfont";
+ font-style: normal;
+ font-weight: normal;
+ font-variant: normal;
+ line-height: 1;
+ text-decoration: inherit;
+ text-rendering: optimizeLegibility;
+ text-transform: none;
+ -moz-osx-font-smoothing: grayscale;
+ -webkit-font-smoothing: antialiased;
+ font-smoothing: antialiased;
+}
+
+.icon-add:before { content: "\f100"; }
+.icon-animation:before { content: "\f101"; }
+.icon-arrow-down:before { content: "\f102"; }
+.icon-arrow-first:before { content: "\f103"; }
+.icon-arrow-last:before { content: "\f104"; }
+.icon-arrow-left:before { content: "\f105"; }
+.icon-arrow-right:before { content: "\f106"; }
+.icon-arrow-up:before { content: "\f107"; }
+.icon-audio:before { content: "\f108"; }
+.icon-audio-mute:before { content: "\f109"; }
+.icon-award:before { content: "\f10a"; }
+.icon-blog:before { content: "\f10b"; }
+.icon-bold:before { content: "\f10c"; }
+.icon-bomb:before { content: "\f10d"; }
+.icon-bookmark:before { content: "\f10e"; }
+.icon-calendar:before { content: "\f10f"; }
+.icon-cam:before { content: "\f110"; }
+.icon-cam-off:before { content: "\f111"; }
+.icon-categories:before { content: "\f112"; }
+.icon-chat:before { content: "\f113"; }
+.icon-chat-cam:before { content: "\f114"; }
+.icon-check:before { content: "\f115"; }
+.icon-check-false:before { content: "\f116"; }
+.icon-clapper:before { content: "\f117"; }
+.icon-close:before { content: "\f118"; }
+.icon-close2:before { content: "\f119"; }
+.icon-coin:before { content: "\f11a"; }
+.icon-comment:before { content: "\f11b"; }
+.icon-cross:before { content: "\f11c"; }
+.icon-crosshair:before { content: "\f11d"; }
+.icon-cupid:before { content: "\f11e"; }
+.icon-debug:before { content: "\f11f"; }
+.icon-delete:before { content: "\f120"; }
+.icon-delete-confirm:before { content: "\f121"; }
+.icon-dice:before { content: "\f122"; }
+.icon-disable:before { content: "\f123"; }
+.icon-dot:before { content: "\f124"; }
+.icon-download:before { content: "\f125"; }
+.icon-edit:before { content: "\f126"; }
+.icon-emoticon:before { content: "\f127"; }
+.icon-enter:before { content: "\f128"; }
+.icon-expand:before { content: "\f12a"; }
+.icon-external:before { content: "\f12b"; }
+.icon-eye:before { content: "\f12c"; }
+.icon-feed:before { content: "\f12d"; }
+.icon-friends:before { content: "\f12e"; }
+.icon-game:before { content: "\f12f"; }
+.icon-gamescore:before { content: "\f130"; }
+.icon-gear:before { content: "\f131"; }
+.icon-gift:before { content: "\f132"; }
+.icon-graph:before { content: "\f133"; }
+.icon-heart:before { content: "\f134"; }
+.icon-home:before { content: "\f135"; }
+.icon-hot:before { content: "\f136"; }
+.icon-image:before { content: "\f137"; }
+.icon-info:before { content: "\f138"; }
+.icon-italic:before { content: "\f139"; }
+.icon-locked:before { content: "\f13a"; }
+.icon-logout:before { content: "\f13b"; }
+.icon-mailbox:before { content: "\f13c"; }
+.icon-mailbox-inbox:before { content: "\f13d"; }
+.icon-mailbox-read:before { content: "\f13e"; }
+.icon-mailbox-sent:before { content: "\f13f"; }
+.icon-mailbox-unread:before { content: "\f140"; }
+.icon-map:before { content: "\f141"; }
+.icon-markdown:before { content: "\f142"; }
+.icon-member-add:before { content: "\f143"; }
+.icon-member-delete:before { content: "\f144"; }
+.icon-menu:before { content: "\f145"; }
+.icon-menu-dropdown:before { content: "\f146"; }
+.icon-menu-micro:before { content: "\f147"; }
+.icon-menu-profile:before { content: "\f148"; }
+.icon-mic:before { content: "\f149"; }
+.icon-mic-off:before { content: "\f14a"; }
+.icon-minimize:before { content: "\f14b"; }
+.icon-minus:before { content: "\f14c"; }
+.icon-mobile:before { content: "\f14d"; }
+.icon-moderator:before { content: "\f14e"; }
+.icon-money:before { content: "\f14f"; }
+.icon-music:before { content: "\f150"; }
+.icon-nav-left:before { content: "\f151"; }
+.icon-nav-right:before { content: "\f152"; }
+.icon-new:before { content: "\f153"; }
+.icon-notification:before { content: "\f154"; }
+.icon-online:before { content: "\f155"; }
+.icon-overview:before { content: "\f156"; }
+.icon-pause:before { content: "\f157"; }
+.icon-photo:before { content: "\f158"; }
+.icon-pin:before { content: "\f159"; }
+.icon-pin-add:before { content: "\f15a"; }
+.icon-play:before { content: "\f15b"; }
+.icon-play2:before { content: "\f15c"; }
+.icon-playboy:before { content: "\f15d"; }
+.icon-plus:before { content: "\f15e"; }
+.icon-pluslove:before { content: "\f15f"; }
+.icon-popin:before { content: "\f160"; }
+.icon-popout:before { content: "\f161"; }
+.icon-premium:before { content: "\f162"; }
+.icon-profile:before { content: "\f163"; }
+.icon-puzzle:before { content: "\f164"; }
+.icon-question:before { content: "\f165"; }
+.icon-quotation:before { content: "\f166"; }
+.icon-redirect:before { content: "\f167"; }
+.icon-reload:before { content: "\f168"; }
+.icon-report:before { content: "\f169"; }
+.icon-reputation:before { content: "\f16a"; }
+.icon-resize-full:before { content: "\f16b"; }
+.icon-resize-small:before { content: "\f16c"; }
+.icon-roller:before { content: "\f16d"; }
+.icon-rotate-ccw:before { content: "\f16e"; }
+.icon-rotate-cw:before { content: "\f16f"; }
+.icon-search:before { content: "\f170"; }
+.icon-select:before { content: "\f171"; }
+.icon-send:before { content: "\f18d"; }
+.icon-sex1:before { content: "\f172"; }
+.icon-sex2:before { content: "\f173"; }
+.icon-sex4:before { content: "\f174"; }
+.icon-share:before { content: "\f175"; }
+.icon-standby:before { content: "\f176"; }
+.icon-star:before { content: "\f177"; }
+.icon-stats:before { content: "\f178"; }
+.icon-stats-up:before { content: "\f179"; }
+.icon-stop:before { content: "\f17a"; }
+.icon-switch:before { content: "\f17b"; }
+.icon-tag:before { content: "\f17c"; }
+.icon-talk:before { content: "\f17d"; }
+.icon-talk-off:before { content: "\f17e"; }
+.icon-test:before { content: "\f17f"; }
+.icon-thumbs-down:before { content: "\f180"; }
+.icon-thumbs-up:before { content: "\f181"; }
+.icon-time:before { content: "\f182"; }
+.icon-trophy:before { content: "\f183"; }
+.icon-underline:before { content: "\f184"; }
+.icon-upload:before { content: "\f185"; }
+.icon-verified:before { content: "\f186"; }
+.icon-video:before { content: "\f187"; }
+.icon-warning:before { content: "\f18c"; }
+.icon-webcam:before { content: "\f189"; }
diff --git a/public/static/font/icon-webfont.eot b/public/static/font/icon-webfont.eot
new file mode 100755
index 0000000..99d1766
Binary files /dev/null and b/public/static/font/icon-webfont.eot differ
diff --git a/public/static/font/icon-webfont.svg b/public/static/font/icon-webfont.svg
new file mode 100755
index 0000000..b97046a
--- /dev/null
+++ b/public/static/font/icon-webfont.svg
@@ -0,0 +1,688 @@
+
+
+
+
diff --git a/public/static/font/icon-webfont.ttf b/public/static/font/icon-webfont.ttf
new file mode 100755
index 0000000..9b34d31
Binary files /dev/null and b/public/static/font/icon-webfont.ttf differ
diff --git a/public/static/font/icon-webfont.woff b/public/static/font/icon-webfont.woff
new file mode 100755
index 0000000..559951e
Binary files /dev/null and b/public/static/font/icon-webfont.woff differ
diff --git a/public/static/font/lsans_0-webfont.eot b/public/static/font/lsans_0-webfont.eot
new file mode 100755
index 0000000..e3f7adb
Binary files /dev/null and b/public/static/font/lsans_0-webfont.eot differ
diff --git a/public/static/font/lsans_0-webfont.svg b/public/static/font/lsans_0-webfont.svg
new file mode 100755
index 0000000..7cd4e88
--- /dev/null
+++ b/public/static/font/lsans_0-webfont.svg
@@ -0,0 +1,237 @@
+
+
+
\ No newline at end of file
diff --git a/public/static/font/lsans_0-webfont.ttf b/public/static/font/lsans_0-webfont.ttf
new file mode 100755
index 0000000..4e2264b
Binary files /dev/null and b/public/static/font/lsans_0-webfont.ttf differ
diff --git a/public/static/font/lsans_0-webfont.woff b/public/static/font/lsans_0-webfont.woff
new file mode 100755
index 0000000..0de09cf
Binary files /dev/null and b/public/static/font/lsans_0-webfont.woff differ
diff --git a/public/static/font/lsansd_0.eot b/public/static/font/lsansd_0.eot
new file mode 100755
index 0000000..a2dfe7b
Binary files /dev/null and b/public/static/font/lsansd_0.eot differ
diff --git a/public/static/font/lsansd_0.svg b/public/static/font/lsansd_0.svg
new file mode 100755
index 0000000..c4155df
--- /dev/null
+++ b/public/static/font/lsansd_0.svg
@@ -0,0 +1,608 @@
+
+
+
diff --git a/public/static/font/lsansd_0.ttf b/public/static/font/lsansd_0.ttf
new file mode 100755
index 0000000..1486f92
Binary files /dev/null and b/public/static/font/lsansd_0.ttf differ
diff --git a/public/static/font/lsansd_0.woff b/public/static/font/lsansd_0.woff
new file mode 100755
index 0000000..2c54412
Binary files /dev/null and b/public/static/font/lsansd_0.woff differ
diff --git a/public/static/font/trebuc.eot b/public/static/font/trebuc.eot
new file mode 100755
index 0000000..584392e
Binary files /dev/null and b/public/static/font/trebuc.eot differ
diff --git a/public/static/font/trebuc.ttf b/public/static/font/trebuc.ttf
new file mode 100755
index 0000000..b3bd292
Binary files /dev/null and b/public/static/font/trebuc.ttf differ
diff --git a/public/static/font/trebuc.woff b/public/static/font/trebuc.woff
new file mode 100755
index 0000000..6ed2301
Binary files /dev/null and b/public/static/font/trebuc.woff differ
diff --git a/public/static/img/gifts/34.jpg b/public/static/img/gifts/34.jpg
new file mode 100755
index 0000000..24b79e4
Binary files /dev/null and b/public/static/img/gifts/34.jpg differ
diff --git a/public/static/img/gifts/35.jpg b/public/static/img/gifts/35.jpg
new file mode 100755
index 0000000..8ad2364
Binary files /dev/null and b/public/static/img/gifts/35.jpg differ
diff --git a/public/static/img/gifts/36.jpg b/public/static/img/gifts/36.jpg
new file mode 100755
index 0000000..e9b7807
Binary files /dev/null and b/public/static/img/gifts/36.jpg differ
diff --git a/public/static/img/gifts/37.jpg b/public/static/img/gifts/37.jpg
new file mode 100755
index 0000000..a3d6bb7
Binary files /dev/null and b/public/static/img/gifts/37.jpg differ
diff --git a/public/static/img/gifts/38.jpg b/public/static/img/gifts/38.jpg
new file mode 100755
index 0000000..9618d98
Binary files /dev/null and b/public/static/img/gifts/38.jpg differ
diff --git a/public/static/img/gifts/39.jpg b/public/static/img/gifts/39.jpg
new file mode 100755
index 0000000..850a5df
Binary files /dev/null and b/public/static/img/gifts/39.jpg differ
diff --git a/puppet/.gitignore b/puppet/.gitignore
old mode 100644
new mode 100755
diff --git a/puppet/.librarian/puppet/config b/puppet/.librarian/puppet/config
old mode 100644
new mode 100755
diff --git a/puppet/Puppetfile b/puppet/Puppetfile
old mode 100644
new mode 100755
diff --git a/puppet/manifests/default.pp b/puppet/manifests/default.pp
old mode 100644
new mode 100755
diff --git a/resources/config/default.php b/resources/config/default.php
old mode 100644
new mode 100755
index 6d3222e..9fe412b
--- a/resources/config/default.php
+++ b/resources/config/default.php
@@ -3,5 +3,6 @@
return function (CM_Config_Node $config) {
$config->CM_Site_Abstract->class = 'AP_Site_AdminPanel';
+
$config->AP_Site_AdminPanel->name = 'Feedlabs | Admin Panel';
};
diff --git a/resources/config/internal.php b/resources/config/internal.php
old mode 100644
new mode 100755
index a7821ad..f6e4a0f
--- a/resources/config/internal.php
+++ b/resources/config/internal.php
@@ -29,6 +29,7 @@
$config->CM_Model_Abstract->types[29] = 'CM_Model_Location_State';
$config->CM_Model_Abstract->types[30] = 'CM_Model_Location_Zip';
$config->CM_Model_Abstract->types[36] = 'CM_Model_LanguageKey';
+ $config->CM_Model_Abstract->types[38] = 'AP_Model_User';
$config->CM_Paging_ContentList_Abstract->types = array();
$config->CM_Paging_ContentList_Abstract->types[19] = 'CM_Paging_ContentList_Badwords';
@@ -41,7 +42,7 @@
$config->CM_Paging_Log_Abstract->types[24] = 'CM_Paging_Log_Warn';
$config->CM_Site_Abstract->types = array();
- $config->CM_Site_Abstract->types[37] = 'AP_Site_AdminPanel';
+ $config->CM_Site_Abstract->types[39] = 'AP_Site_AdminPanel';
$config->CM_Stream_Adapter_Abstract->types = array();
$config->CM_Stream_Adapter_Abstract->types[25] = 'CM_Stream_Adapter_Message_SocketRedis';
@@ -78,9 +79,10 @@
$config->CM_Model_Location_State->type = 29;
$config->CM_Model_Location_Zip->type = 30;
$config->CM_Model_LanguageKey->type = 36;
- $config->AP_Site_AdminPanel->type = 37;
+ $config->AP_Model_User->type = 38;
+ $config->AP_Site_AdminPanel->type = 39;
- $config->CM_Class_Abstract->typesMaxValue = 37;
+ $config->CM_Class_Abstract->typesMaxValue = 39;
$config->CM_Action_Abstract->verbs = array();
$config->CM_Action_Abstract->verbs[CM_Action_Abstract::CREATE] = 1;
diff --git a/resources/config/js/internal.js b/resources/config/js/internal.js
old mode 100644
new mode 100755
index 71fcd5e..3b4a973
--- a/resources/config/js/internal.js
+++ b/resources/config/js/internal.js
@@ -1,2 +1,2 @@
-cm.model.types = {"CM_Model_Language":5,"CM_Model_LanguageKey":36,"CM_Model_Location":6,"CM_Model_Splitfeature":7,"CM_Model_Splittest":8,"CM_Model_SplittestVariation":9,"CM_Model_User":10,"CM_Model_Location_City":27,"CM_Model_Location_Country":28,"CM_Model_Location_State":29,"CM_Model_Location_Zip":30,"CM_Model_Splittest_RequestClient":11,"CM_Model_Splittest_User":12,"CM_Model_Stream_Publish":13,"CM_Model_Stream_Subscribe":14,"CM_Model_StreamChannel_Message":15,"CM_Model_StreamChannel_Video":16,"CM_Model_StreamChannel_Message_User":17,"CM_Model_StreamChannelArchive_Video":18};
+cm.model.types = {"CM_Model_Language":5,"CM_Model_LanguageKey":36,"CM_Model_Location":6,"CM_Model_Splitfeature":7,"CM_Model_Splittest":8,"CM_Model_SplittestVariation":9,"CM_Model_User":10,"CM_Model_Location_City":27,"CM_Model_Location_Country":28,"CM_Model_Location_State":29,"CM_Model_Location_Zip":30,"CM_Model_Splittest_RequestClient":11,"CM_Model_Splittest_User":12,"CM_Model_Stream_Publish":13,"CM_Model_Stream_Subscribe":14,"CM_Model_StreamChannel_Message":15,"CM_Model_StreamChannel_Video":16,"CM_Model_StreamChannel_Message_User":17,"CM_Model_StreamChannelArchive_Video":18,"AP_Model_User":38};
cm.action.types = {"CM_Action_Email":3};
diff --git a/resources/config/local.dev.php b/resources/config/local.dev.php
old mode 100644
new mode 100755
index 7660475..b72f6e5
--- a/resources/config/local.dev.php
+++ b/resources/config/local.dev.php
@@ -8,7 +8,7 @@
$config->CM_Mail->send = false;
$config->CM_Redis_Client->server = array('host' => '127.0.0.1', 'port' => 6379);
$config->CM_Stream_Adapter_Message_SocketRedis->servers = array(
- array('httpHost' => 'localhost', 'httpPort' => 8085, 'sockjsUrls' => array('http://www.feed.dev:8090')),
+ array('httpHost' => 'localhost', 'httpPort' => 8085, 'sockjsUrls' => array('http://www.admin-panel.dev:8090')),
);
$config->CM_Elasticsearch_Client->servers = array(
array('host' => '127.0.0.1', 'port' => 9200),
@@ -39,7 +39,7 @@
'arguments' => array(array(
'default' => array(
'filesystem' => 'filesystem-usercontent',
- 'url' => 'http://origin-www.feed.dev/userfiles',
+ 'url' => 'http://origin-www.admin-panel.dev/userfiles',
)
)));
};
diff --git a/resources/db/setup.php b/resources/db/setup.php
old mode 100644
new mode 100755
diff --git a/scripts/test.php b/scripts/test.php
index d2a6a46..2858a8f 100755
--- a/scripts/test.php
+++ b/scripts/test.php
@@ -6,3 +6,7 @@
$bootloader->load();
echo "test\n";
+
+AP_Model_User::_createStatic([
+
+]);
diff --git a/tests/bootstrap.php b/tests/bootstrap.php
old mode 100644
new mode 100755
index 6750eaa..9a5f35b
--- a/tests/bootstrap.php
+++ b/tests/bootstrap.php
@@ -6,4 +6,5 @@
$bootloader->load();
$suite = new CMTest_TestSuite();
+$suite->setDirTestData(__DIR__ . '/data/');
$suite->bootstrap();
diff --git a/tests/data/img/animated.gif b/tests/data/img/animated.gif
new file mode 100755
index 0000000..6ae1e63
Binary files /dev/null and b/tests/data/img/animated.gif differ
diff --git a/tests/data/img/corrupt-content.jpg b/tests/data/img/corrupt-content.jpg
new file mode 100755
index 0000000..7fac2d0
Binary files /dev/null and b/tests/data/img/corrupt-content.jpg differ
diff --git a/tests/data/img/corrupt-header.jpg b/tests/data/img/corrupt-header.jpg
new file mode 100755
index 0000000..b0ec538
Binary files /dev/null and b/tests/data/img/corrupt-header.jpg differ
diff --git a/tests/data/img/jpg-no-extension b/tests/data/img/jpg-no-extension
new file mode 100755
index 0000000..074be5f
Binary files /dev/null and b/tests/data/img/jpg-no-extension differ
diff --git a/tests/data/img/square-image. b/tests/data/img/square-image.
new file mode 100755
index 0000000..3d8c20a
Binary files /dev/null and b/tests/data/img/square-image. differ
diff --git a/tests/data/img/test.gif b/tests/data/img/test.gif
new file mode 100755
index 0000000..81adf88
Binary files /dev/null and b/tests/data/img/test.gif differ
diff --git a/tests/data/img/test.jpg b/tests/data/img/test.jpg
new file mode 100755
index 0000000..d6850ce
Binary files /dev/null and b/tests/data/img/test.jpg differ
diff --git a/tests/data/test.jpg.zip b/tests/data/test.jpg.zip
new file mode 100755
index 0000000..c09f68d
Binary files /dev/null and b/tests/data/test.jpg.zip differ
diff --git a/tests/helpers/APTest/TestCase.php b/tests/helpers/APTest/TestCase.php
new file mode 100755
index 0000000..34f566f
--- /dev/null
+++ b/tests/helpers/APTest/TestCase.php
@@ -0,0 +1,14 @@
+getMockSite('AP_Site_Abstract', null, array(
+ 'url' => 'http://www.default.dev',
+ 'urlCdn' => 'http://cdn.default.dev',
+ 'name' => 'Default',
+ ));
+ CM_Config::get()->CM_Site_Abstract->class = get_class($siteDefault);
+ parent::runBare();
+ }
+}
diff --git a/tests/library/AP/Page/IndexTest.php b/tests/library/AP/Page/IndexTest.php
new file mode 100755
index 0000000..c1b4966
--- /dev/null
+++ b/tests/library/AP/Page/IndexTest.php
@@ -0,0 +1,12 @@
+_createPage('AP_Page_Index');
+ $html = $this->_renderPage($page);
+
+ $this->assertTrue($html->has('.AP_Component_SignIn'));
+ $this->assertTrue($html->has('.AP_Component_SignUp'));
+ }
+}