Suralc
12 years ago
215 changed files with 8276 additions and 10496 deletions
@ -1,5 +1,4 @@ |
|||||||
<?php |
<?php |
||||||
|
|
||||||
return array( |
return array( |
||||||
'adminEmail' => 'admin@example.com', |
'adminEmail' => 'admin@example.com', |
||||||
); |
); |
@ -1,5 +1,4 @@ |
|||||||
<?php |
<?php |
||||||
|
|
||||||
return array( |
return array( |
||||||
'adminEmail' => 'admin@example.com', |
'adminEmail' => 'admin@example.com', |
||||||
); |
); |
@ -1,5 +1,4 @@ |
|||||||
<?php |
<?php |
||||||
|
|
||||||
return array( |
return array( |
||||||
'adminEmail' => 'admin@example.com', |
'adminEmail' => 'admin@example.com', |
||||||
); |
); |
@ -1,16 +1,16 @@ |
|||||||
<?php |
<?php |
||||||
use yii\helpers\Html; |
use yii\helpers\Html; |
||||||
|
|
||||||
/** |
/** |
||||||
* @var yii\base\View $this |
* @var yii\base\View $this |
||||||
*/ |
*/ |
||||||
$this->title = 'About'; |
$this->title = 'About'; |
||||||
$this->params['breadcrumbs'][] = $this->title; |
$this->params['breadcrumbs'][] = $this->title; |
||||||
?> |
?> |
||||||
|
<div class="site-about"> |
||||||
<h1><?php echo Html::encode($this->title); ?></h1>
|
<h1><?php echo Html::encode($this->title); ?></h1>
|
||||||
|
|
||||||
<p> |
<p>This is the About page. You may modify the following file to customize its content:</p> |
||||||
This is the About page. You may modify the following file to customize its content: |
|
||||||
</p> |
|
||||||
|
|
||||||
<code><?php echo __FILE__; ?></code>
|
<code><?php echo __FILE__; ?></code>
|
||||||
|
</div> |
||||||
|
@ -0,0 +1,29 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
use yii\helpers\Html; |
||||||
|
|
||||||
|
/** |
||||||
|
* @var yii\base\View $this |
||||||
|
* @var string $name |
||||||
|
* @var string $message |
||||||
|
* @var Exception $exception |
||||||
|
*/ |
||||||
|
|
||||||
|
$this->title = $name; |
||||||
|
?> |
||||||
|
<div class="site-error"> |
||||||
|
|
||||||
|
<h1><?php echo Html::encode($this->title); ?></h1>
|
||||||
|
|
||||||
|
<div class="alert alert-danger"> |
||||||
|
<?php echo nl2br(Html::encode($message)); ?> |
||||||
|
</div> |
||||||
|
|
||||||
|
<p> |
||||||
|
The above error occurred while the Web server was processing your request. |
||||||
|
</p> |
||||||
|
<p> |
||||||
|
Please contact us if you think this is a server error. Thank you. |
||||||
|
</p> |
||||||
|
|
||||||
|
</div> |
@ -0,0 +1,138 @@ |
|||||||
|
Advanced application template |
||||||
|
============================= |
||||||
|
|
||||||
|
This template is for large projects developed in teams where backend is divided from frontend, application is deployed |
||||||
|
to multiple servers etc. This application template also goes a bit further regarding features and provides essential |
||||||
|
database, signup and password restore out of the box. |
||||||
|
|
||||||
|
Directory structure |
||||||
|
------------------- |
||||||
|
|
||||||
|
The root directory contains the following subdirectories: |
||||||
|
|
||||||
|
- `backend` - backend web application. |
||||||
|
- `common` - files common to all applications. |
||||||
|
- `console` - console application. |
||||||
|
- `environments` - environment configs. |
||||||
|
- `frontend` - frontend web application. |
||||||
|
|
||||||
|
Root directory contains a set of files. |
||||||
|
|
||||||
|
- `.gitignore` contains a list of directories ignored by git version system. If you need something never get to your source |
||||||
|
code repository, add it there. |
||||||
|
- `composer.json` - Composer config described in detail below. |
||||||
|
- `init` - initialization script described in "Composer config described in detail below". |
||||||
|
- `init.bat` - same for Windows. |
||||||
|
- `LICENSE.md` - license info. Put your project license there. Especially when opensourcing. |
||||||
|
- `README.md` - basic info about installing template. Consider replacing it with information about your project and its |
||||||
|
installation. |
||||||
|
- `requirements.php` - Yii requirements checker. |
||||||
|
- `yii` - console application bootstrap. |
||||||
|
- `yii.bat` - same for Windows. |
||||||
|
|
||||||
|
Applications |
||||||
|
------------ |
||||||
|
|
||||||
|
There are three applications in advanced template: frontend, backend and console. Frontend is typically what is presented |
||||||
|
to end user, the project itself. Backend is admin panel, analytics and such functionality. Console is typically used for |
||||||
|
cron jobs and low-level server management. Also it's used during application deployment and handles migrations and assets. |
||||||
|
|
||||||
|
There's also a `common` directory that contains files used by more than one application. For example, `User` model. |
||||||
|
|
||||||
|
frontend and backend are both web applications and both contain `web` directory. That's the webroot you should point your |
||||||
|
webserver to. |
||||||
|
|
||||||
|
Each application has its own namespace and alias corresponding to its name. Same applies to common directory. |
||||||
|
|
||||||
|
Configuration and environments |
||||||
|
------------------------------ |
||||||
|
|
||||||
|
There are multiple problems with straightforward approach to configuration: |
||||||
|
|
||||||
|
- Each team member has its own configuration options. Commiting such config will affect other team members. |
||||||
|
- Production database password and API keys should not end up in repository. |
||||||
|
- There are multiple servers: development, testing, production. Each should have its own configuration. |
||||||
|
- Defining all configuration options for each case is very repetitive and takes too much time to maintain. |
||||||
|
|
||||||
|
In order to solve these issues Yii introduces environments concept that is very simple. Each environment is represented |
||||||
|
by a set of files under `environments` directory. `init` command is used to switch between these. What is really does is |
||||||
|
just copying everything from environment directory over the root directory where all applications are. |
||||||
|
|
||||||
|
Typically environment contains application bootstrap files such as `index.php` and config files postfixed with |
||||||
|
`-local.php`. These are added to `.gitignore` and never added to source code repository. |
||||||
|
|
||||||
|
In order to avoid duplication configurations are overrding each other. For example, frontend reads configuration in the |
||||||
|
following order: |
||||||
|
|
||||||
|
- `frontend/config/main.php` |
||||||
|
- `frontend/config/main-local.php` |
||||||
|
|
||||||
|
Parameters are read in the following order: |
||||||
|
|
||||||
|
- `common/config/params.php` |
||||||
|
- `common/config/params-local.php` |
||||||
|
- `frontend/config/params.php` |
||||||
|
- `frontend/config/params-local.php` |
||||||
|
|
||||||
|
The later config file overrides the former. |
||||||
|
|
||||||
|
Another difference is that most application component configurations are moved to params. Since params are read from |
||||||
|
`common` as well it allows you to specify database connection in one file and it will be then used for all applications. |
||||||
|
|
||||||
|
Configuring Composer |
||||||
|
-------------------- |
||||||
|
|
||||||
|
After application template is installed it's a good idea to adjust defaul `composer.json` that can be found in the root |
||||||
|
directory: |
||||||
|
|
||||||
|
```javascript |
||||||
|
{ |
||||||
|
"name": "yiisoft/yii2-app-advanced", |
||||||
|
"description": "Yii 2 Advanced Application Template", |
||||||
|
"keywords": ["yii", "framework", "advanced", "application template"], |
||||||
|
"homepage": "http://www.yiiframework.com/", |
||||||
|
"type": "project", |
||||||
|
"license": "BSD-3-Clause", |
||||||
|
"support": { |
||||||
|
"issues": "https://github.com/yiisoft/yii2/issues?state=open", |
||||||
|
"forum": "http://www.yiiframework.com/forum/", |
||||||
|
"wiki": "http://www.yiiframework.com/wiki/", |
||||||
|
"irc": "irc://irc.freenode.net/yii", |
||||||
|
"source": "https://github.com/yiisoft/yii2" |
||||||
|
}, |
||||||
|
"minimum-stability": "dev", |
||||||
|
"require": { |
||||||
|
"php": ">=5.3.0", |
||||||
|
"yiisoft/yii2": "dev-master", |
||||||
|
"yiisoft/yii2-composer": "dev-master" |
||||||
|
}, |
||||||
|
"scripts": { |
||||||
|
"post-create-project-cmd": [ |
||||||
|
"yii\\composer\\InstallHandler::setPermissions" |
||||||
|
] |
||||||
|
}, |
||||||
|
"extra": { |
||||||
|
"yii-install-writable": [ |
||||||
|
"backend/runtime", |
||||||
|
"backend/web/assets", |
||||||
|
|
||||||
|
"console/runtime", |
||||||
|
"console/migrations", |
||||||
|
|
||||||
|
"frontend/runtime", |
||||||
|
"frontend/web/assets" |
||||||
|
] |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
``` |
||||||
|
|
||||||
|
First we're updating basic information. Change `name`, `description`, `keywords`, `homepage` and `support` to match |
||||||
|
your project. |
||||||
|
|
||||||
|
Now the interesting part. You can add more packages your application needs to `require` section. |
||||||
|
For example, to use markdown helper you need to add `michelf/php-markdown`. All these packages are coming from |
||||||
|
[packagist.org](https://packagist.org/) so feel free to browse the website for useful code. |
||||||
|
|
||||||
|
After your `composer.json` is changed you can run `php composer.phar update`, wait till packages are downloaded and |
||||||
|
installed and then just use them. Autoloading of classes will be handled automatically. |
@ -0,0 +1,142 @@ |
|||||||
|
Basic application template |
||||||
|
========================== |
||||||
|
|
||||||
|
This template is a perfect fit for small projects or learning Yii2. |
||||||
|
|
||||||
|
The application has four pages: the homepage, the about page, the contact page and the login page. |
||||||
|
The contact page displays a contact form that users can fill in to submit their inquiries to the webmaster, |
||||||
|
and the login page allows users to be authenticated before accessing privileged contents. |
||||||
|
|
||||||
|
Directory structure |
||||||
|
------------------- |
||||||
|
|
||||||
|
The basic application does not divide application directories much. Here's the basic structure: |
||||||
|
|
||||||
|
- `commands` - console controllers. |
||||||
|
- `config` - configuration. |
||||||
|
- `controllers` - web controllers. |
||||||
|
- `models` - application models. |
||||||
|
- `runtime` - logs, states, file cache. |
||||||
|
- `views` - view templates. |
||||||
|
- `web` - webroot. |
||||||
|
|
||||||
|
Root directory contains a set of files. |
||||||
|
|
||||||
|
- `.gitignore` contains a list of directories ignored by git version system. If you need something never get to your source |
||||||
|
code repository, add it there. |
||||||
|
- `codeception.yml` - Codeception config. |
||||||
|
- `composer.json` - Composer config described in detail below. |
||||||
|
- `LICENSE.md` - license info. Put your project license there. Especially when opensourcing. |
||||||
|
- `README.md` - basic info about installing template. Consider replacing it with information about your project and its |
||||||
|
installation. |
||||||
|
- `requirements.php` - Yii requirements checker. |
||||||
|
- `yii` - console application bootstrap. |
||||||
|
- `yii.bat` - same for Windows. |
||||||
|
|
||||||
|
|
||||||
|
### config |
||||||
|
|
||||||
|
This directory contains configuration files: |
||||||
|
|
||||||
|
- `AppAsset.php` - definition of application assets such as CSS, JavaScript etc. Check [Managing assets](assets.md) for |
||||||
|
details. |
||||||
|
- `console.php` - console application configuration. |
||||||
|
- `params.php` - common application parameters. |
||||||
|
- `web.php` - web application configuration. |
||||||
|
- `web-test.php` - web application configuration used when running functional tests. |
||||||
|
|
||||||
|
All these files except `AppAsset.php` are returning arrays used to configure corresponding application properties. Check |
||||||
|
[Configuration](configuration.md) guide section for details. |
||||||
|
|
||||||
|
### views |
||||||
|
|
||||||
|
Views directory contains templates your application is using. In the basic template there are: |
||||||
|
|
||||||
|
``` |
||||||
|
layouts |
||||||
|
main.php |
||||||
|
site |
||||||
|
about.php |
||||||
|
contact.php |
||||||
|
error.php |
||||||
|
index.php |
||||||
|
login.php |
||||||
|
``` |
||||||
|
|
||||||
|
`layouts` contains HTML layouts i.e. page markup except content: doctype, head section, main menu, footer etc. |
||||||
|
The rest are typically controller views. By convention these are located in subdirectories matching controller id. For |
||||||
|
`SiteController` views are under `site`. Names of the views themselves are typically match controller action names. |
||||||
|
Partials are often named starting with underscore. |
||||||
|
|
||||||
|
### web |
||||||
|
|
||||||
|
Directory is a webroot. Typically a webserver is pointed into it. |
||||||
|
|
||||||
|
``` |
||||||
|
assets |
||||||
|
css |
||||||
|
index.php |
||||||
|
index-test.php |
||||||
|
``` |
||||||
|
|
||||||
|
`assets` contains published asset files such as CSS, JavaScript etc. Publishing process is automatic so you don't need |
||||||
|
to do anything with this directory other than making sure Yii has enough permissions to write to it. |
||||||
|
|
||||||
|
`css` contains plain CSS files and is useful for global CSS that isn't going to be compressed or merged by assets manager. |
||||||
|
|
||||||
|
`index.php` is the main web application bootstrap and is the central entry point for it. `index-test.php` is the entry |
||||||
|
point for functional testing. |
||||||
|
|
||||||
|
Configuring Composer |
||||||
|
-------------------- |
||||||
|
|
||||||
|
After application template is installed it's a good idea to adjust defaul `composer.json` that can be found in the root |
||||||
|
directory: |
||||||
|
|
||||||
|
```javascript |
||||||
|
{ |
||||||
|
"name": "yiisoft/yii2-app-basic", |
||||||
|
"description": "Yii 2 Basic Application Template", |
||||||
|
"keywords": ["yii", "framework", "basic", "application template"], |
||||||
|
"homepage": "http://www.yiiframework.com/", |
||||||
|
"type": "project", |
||||||
|
"license": "BSD-3-Clause", |
||||||
|
"support": { |
||||||
|
"issues": "https://github.com/yiisoft/yii2/issues?state=open", |
||||||
|
"forum": "http://www.yiiframework.com/forum/", |
||||||
|
"wiki": "http://www.yiiframework.com/wiki/", |
||||||
|
"irc": "irc://irc.freenode.net/yii", |
||||||
|
"source": "https://github.com/yiisoft/yii2" |
||||||
|
}, |
||||||
|
"minimum-stability": "dev", |
||||||
|
"require": { |
||||||
|
"php": ">=5.3.0", |
||||||
|
"yiisoft/yii2": "dev-master", |
||||||
|
"yiisoft/yii2-composer": "dev-master" |
||||||
|
}, |
||||||
|
"scripts": { |
||||||
|
"post-create-project-cmd": [ |
||||||
|
"yii\\composer\\InstallHandler::setPermissions" |
||||||
|
] |
||||||
|
}, |
||||||
|
"extra": { |
||||||
|
"yii-install-writable": [ |
||||||
|
"runtime", |
||||||
|
"web/assets" |
||||||
|
], |
||||||
|
"yii-install-executable": [ |
||||||
|
"yii" |
||||||
|
] |
||||||
|
} |
||||||
|
} |
||||||
|
``` |
||||||
|
|
||||||
|
First we're updating basic information. Change `name`, `description`, `keywords`, `homepage` and `support` to match |
||||||
|
your project. |
||||||
|
|
||||||
|
Now the interesting part. You can add more packages your application needs to `require` section. |
||||||
|
For example, to use markdown helper you need to add `michelf/php-markdown`. All these packages are coming from |
||||||
|
[packagist.org](https://packagist.org/) so feel free to browse the website for useful code. |
||||||
|
|
||||||
|
After your `composer.json` is changed you can run `php composer.phar update`, wait till packages are downloaded and |
||||||
|
installed and then just use them. Autoloading of classes will be handled automatically. |
@ -0,0 +1,6 @@ |
|||||||
|
Twitter Bootstrap widgets |
||||||
|
========================= |
||||||
|
|
||||||
|
Overview |
||||||
|
-------- |
||||||
|
|
@ -1,69 +0,0 @@ |
|||||||
Bootstrap with Yii |
|
||||||
================== |
|
||||||
|
|
||||||
Yii provides a few ready-to-use application templates. Based on your needs, you may |
|
||||||
choose one of them to bootstrap your project. |
|
||||||
|
|
||||||
In the following, we describe how to get started with the "Yii 2 Basic Application Template". |
|
||||||
|
|
||||||
|
|
||||||
### Install via Composer |
|
||||||
|
|
||||||
If you do not have [Composer](http://getcomposer.org/), you may download it from |
|
||||||
[http://getcomposer.org/](http://getcomposer.org/) or run the following command on Linux/Unix/MacOS: |
|
||||||
|
|
||||||
~~~ |
|
||||||
curl -s http://getcomposer.org/installer | php |
|
||||||
~~~ |
|
||||||
|
|
||||||
You can then install the Bootstrap Application using the following command: |
|
||||||
|
|
||||||
~~~ |
|
||||||
php composer.phar create-project --stability=dev yiisoft/yii2-app-basic yii-basic |
|
||||||
~~~ |
|
||||||
|
|
||||||
Now you should be able to access the Bootstrap Application using the URL `http://localhost/yii-basic/web/`, |
|
||||||
assuming `yii-basic` is directly under the document root of your Web server. |
|
||||||
|
|
||||||
|
|
||||||
As you can see, the application has four pages: the homepage, the about page, |
|
||||||
the contact page and the login page. The contact page displays a contact |
|
||||||
form that users can fill in to submit their inquiries to the webmaster, |
|
||||||
and the login page allows users to be authenticated before accessing privileged contents. |
|
||||||
|
|
||||||
|
|
||||||
The following diagram shows the directory structure of this application. |
|
||||||
|
|
||||||
~~~ |
|
||||||
yii-basic/ |
|
||||||
yii yii command line script for Unix/Linux |
|
||||||
yii.bat yii command line script for Windows |
|
||||||
requirements.php the requirement checker script |
|
||||||
commands/ containing customized yii console commands |
|
||||||
config/ containing configuration files |
|
||||||
console.php the console application configuration |
|
||||||
main.php the Web application configuration |
|
||||||
controllers/ containing controller class files |
|
||||||
SiteController.php the default controller class |
|
||||||
vendor/ containing third-party extensions and libraries |
|
||||||
models/ containing model class files |
|
||||||
User.php the User model |
|
||||||
LoginForm.php the form model for 'login' action |
|
||||||
ContactForm.php the form model for 'contact' action |
|
||||||
runtime/ containing temporarily generated files |
|
||||||
views/ containing controller view and layout files |
|
||||||
layouts/ containing layout view files |
|
||||||
main.php the base layout shared by all pages |
|
||||||
site/ containing view files for the 'site' controller |
|
||||||
about.php the view for the 'about' action |
|
||||||
contact.php the view for the 'contact' action |
|
||||||
index.php the view for the 'index' action |
|
||||||
login.php the view for the 'login' action |
|
||||||
web/ containing Web-accessible resources |
|
||||||
index.php Web application entry script file |
|
||||||
assets/ containing published resource files |
|
||||||
css/ containing CSS files |
|
||||||
~~~ |
|
||||||
|
|
||||||
|
|
||||||
TBD |
|
@ -0,0 +1,98 @@ |
|||||||
|
Configuration |
||||||
|
============= |
||||||
|
|
||||||
|
In Yii application and majority of components have sensible defaults so it's unlikely you spend lots of time configuring |
||||||
|
it. Still there are some mandatory options such as database connection you should set up. |
||||||
|
|
||||||
|
How application is configured depends on application template but there are some genral principles applying in any case. |
||||||
|
|
||||||
|
Configuring options in bootstrap file |
||||||
|
------------------------------------- |
||||||
|
|
||||||
|
For each application in Yii there is at least one bootstrap file. For web applications it's typically `index.php`, for |
||||||
|
console applications it's `yii`. Both are doing nearly the same job: |
||||||
|
|
||||||
|
1. Setting common constants. |
||||||
|
2. Including Yii itself. |
||||||
|
3. Including Composer autoloader. |
||||||
|
4. Reading config file into `$config`. |
||||||
|
5. Creating new application instance using `$config` and running it. |
||||||
|
|
||||||
|
Bootstrap file is not the part of framework but your application so it's OK to adjust it to fit your application. Typical |
||||||
|
adjustments are the value of `YII_DEBUG` that should never be `true` on production and the way config is read. |
||||||
|
|
||||||
|
Configuring application instance |
||||||
|
-------------------------------- |
||||||
|
|
||||||
|
It was mentioned above that application is configured in bootstrap file when its instance is created. Config is typically |
||||||
|
stored in a PHP file in `/config` directory of the application and looks like the following: |
||||||
|
|
||||||
|
```php |
||||||
|
<?php |
||||||
|
return array( |
||||||
|
'id' => 'applicationId', |
||||||
|
'basePath' => dirname(__DIR__), |
||||||
|
'components' => array( |
||||||
|
// ... |
||||||
|
), |
||||||
|
'params' => require(__DIR__ . '/params.php'), |
||||||
|
); |
||||||
|
``` |
||||||
|
|
||||||
|
In the above array keys are names of application properties. Depending on application type you can check properies of |
||||||
|
either `\yii\web\Application` or `\yii\console\Application`. Both are extended from `\yii\base\Application`. |
||||||
|
|
||||||
|
> Note that you can configure not only public class properties but anything accessible via setter. For example, to |
||||||
|
configure runtime path you can use key named `runtimePath`. There's no such property in the application class but |
||||||
|
since there's a corresponding setter named `setRuntimePath` it will be properly configured. |
||||||
|
|
||||||
|
Configuring application components |
||||||
|
---------------------------------- |
||||||
|
|
||||||
|
Majority of Yii functionality are application components. These are attached to application via its `components` property: |
||||||
|
|
||||||
|
```php |
||||||
|
<?php |
||||||
|
return array( |
||||||
|
'id' => 'applicationId', |
||||||
|
'basePath' => dirname(__DIR__), |
||||||
|
'components' => array( |
||||||
|
'cache' => array( |
||||||
|
'class' => 'yii\caching\FileCache', |
||||||
|
), |
||||||
|
'user' => array( |
||||||
|
'identityClass' => 'app\models\User', |
||||||
|
), |
||||||
|
'errorHandler' => array( |
||||||
|
'errorAction' => 'site/error', |
||||||
|
), |
||||||
|
'log' => array( |
||||||
|
'traceLevel' => YII_DEBUG ? 3 : 0, |
||||||
|
'targets' => array( |
||||||
|
array( |
||||||
|
'class' => 'yii\log\FileTarget', |
||||||
|
'levels' => array('error', 'warning'), |
||||||
|
), |
||||||
|
), |
||||||
|
), |
||||||
|
), |
||||||
|
// ... |
||||||
|
); |
||||||
|
``` |
||||||
|
|
||||||
|
In the above four components are configured: `cache`, `user`, `errorHandler`, `log`. Each entry key is a component ID |
||||||
|
and the value is the configuration array. ID is used to access the component like `\Yii::$app->myComponent`. |
||||||
|
Configuration array has one special key named `class` that sets component class. The rest of the keys and values are used |
||||||
|
to configure component properties in the same way as top-level keys are used to configure application properties. |
||||||
|
|
||||||
|
Each application has predefined set of the components. In case of configuring one of these `class` key is omitted and |
||||||
|
application default class is used instead. You can check `registerCoreComponents` method of the application you are using |
||||||
|
to get a list of component IDs and corresponding classes. |
||||||
|
|
||||||
|
Note that Yii is smart enough to configure the component when it's actually used i.e. if `cache` is never used it will |
||||||
|
not be instantiated and configured at all. |
||||||
|
|
||||||
|
Setting component defaults classwide |
||||||
|
------------------------------------ |
||||||
|
|
||||||
|
TBD |
@ -0,0 +1,9 @@ |
|||||||
|
Debug toolbar and debugger |
||||||
|
========================== |
||||||
|
|
||||||
|
Overview |
||||||
|
-------- |
||||||
|
|
||||||
|
Creating your own panels |
||||||
|
------------------------ |
||||||
|
|
@ -0,0 +1,78 @@ |
|||||||
|
/** |
||||||
|
* Yii GridView widget. |
||||||
|
* |
||||||
|
* This is the JavaScript widget used by the yii\grid\GridView widget. |
||||||
|
* |
||||||
|
* @link http://www.yiiframework.com/
|
||||||
|
* @copyright Copyright (c) 2008 Yii Software LLC |
||||||
|
* @license http://www.yiiframework.com/license/
|
||||||
|
* @author Qiang Xue <qiang.xue@gmail.com> |
||||||
|
* @since 2.0 |
||||||
|
*/ |
||||||
|
(function ($) { |
||||||
|
$.fn.yiiGridView = function (method) { |
||||||
|
if (methods[method]) { |
||||||
|
return methods[method].apply(this, Array.prototype.slice.call(arguments, 1)); |
||||||
|
} else if (typeof method === 'object' || !method) { |
||||||
|
return methods.init.apply(this, arguments); |
||||||
|
} else { |
||||||
|
$.error('Method ' + method + ' does not exist on jQuery.yiiGridView'); |
||||||
|
return false; |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
var defaults = { |
||||||
|
}; |
||||||
|
|
||||||
|
var methods = { |
||||||
|
init: function (options) { |
||||||
|
return this.each(function () { |
||||||
|
var $e = $(this); |
||||||
|
var settings = $.extend({}, defaults, options || {}); |
||||||
|
$e.data('yiiGridView', { |
||||||
|
settings: settings |
||||||
|
}); |
||||||
|
}); |
||||||
|
}, |
||||||
|
|
||||||
|
setSelectionColumn: function (options) { |
||||||
|
var $grid = $(this); |
||||||
|
var data = $grid.data('yiiGridView'); |
||||||
|
data.selectionColumn = options.name; |
||||||
|
if (!options.multiple) { |
||||||
|
return; |
||||||
|
} |
||||||
|
$grid.on('click.yiiGridView', "input[name='" + options.checkAll + "']", function () { |
||||||
|
$grid.find("input[name='" + options.name + "']:enabled").prop('checked', this.checked); |
||||||
|
}); |
||||||
|
$grid.on('click.yiiGridView', "input[name='" + options.name + "']:enabled", function () { |
||||||
|
var all = $grid.find("input[name='" + options.name + "']").length == $grid.find("input[name='" + options.name + "']:checked").length; |
||||||
|
$grid.find("input[name='" + options.checkAll + "']").prop('checked', all); |
||||||
|
}); |
||||||
|
}, |
||||||
|
|
||||||
|
getSelectedRows: function () { |
||||||
|
var $grid = $(this); |
||||||
|
var data = $grid.data('yiiGridView'); |
||||||
|
var keys = []; |
||||||
|
if (data.selectionColumn) { |
||||||
|
$grid.find("input[name='" + data.selectionColumn + "']:checked").each(function () { |
||||||
|
keys.push($(this).parent().closest('tr').data('key')); |
||||||
|
}); |
||||||
|
} |
||||||
|
return keys; |
||||||
|
}, |
||||||
|
|
||||||
|
destroy: function () { |
||||||
|
return this.each(function () { |
||||||
|
$(window).unbind('.yiiGridView'); |
||||||
|
$(this).removeData('yiiGridView'); |
||||||
|
}); |
||||||
|
}, |
||||||
|
|
||||||
|
data: function() { |
||||||
|
return this.data('yiiGridView'); |
||||||
|
} |
||||||
|
}; |
||||||
|
})(window.jQuery); |
||||||
|
|
@ -1,25 +0,0 @@ |
|||||||
<?php |
|
||||||
/** |
|
||||||
* @link http://www.yiiframework.com/ |
|
||||||
* @copyright Copyright (c) 2008 Yii Software LLC |
|
||||||
* @license http://www.yiiframework.com/license/ |
|
||||||
*/ |
|
||||||
|
|
||||||
namespace yii\base; |
|
||||||
|
|
||||||
/** |
|
||||||
* UnknownClassException represents an exception caused by accessing an unknown class. |
|
||||||
* |
|
||||||
* @author Qiang Xue <qiang.xue@gmail.com> |
|
||||||
* @since 2.0 |
|
||||||
*/ |
|
||||||
class UnknownClassException extends Exception |
|
||||||
{ |
|
||||||
/** |
|
||||||
* @return string the user-friendly name of this exception |
|
||||||
*/ |
|
||||||
public function getName() |
|
||||||
{ |
|
||||||
return \Yii::t('yii', 'Unknown Class'); |
|
||||||
} |
|
||||||
} |
|
@ -1,26 +0,0 @@ |
|||||||
<?php |
|
||||||
/** |
|
||||||
* @link http://www.yiiframework.com/ |
|
||||||
* @copyright Copyright (c) 2008 Yii Software LLC |
|
||||||
* @license http://www.yiiframework.com/license/ |
|
||||||
*/ |
|
||||||
|
|
||||||
namespace yii\bootstrap; |
|
||||||
use yii\web\AssetBundle; |
|
||||||
|
|
||||||
/** |
|
||||||
* @author Qiang Xue <qiang.xue@gmail.com> |
|
||||||
* @since 2.0 |
|
||||||
*/ |
|
||||||
class AffixAsset extends AssetBundle |
|
||||||
{ |
|
||||||
public $sourcePath = '@yii/bootstrap/assets'; |
|
||||||
public $js = array( |
|
||||||
'js/bootstrap-affix.js', |
|
||||||
); |
|
||||||
public $depends = array( |
|
||||||
'yii\bootstrap\TransitionAsset', |
|
||||||
'yii\bootstrap\BootstrapAsset', |
|
||||||
'yii\web\JqueryAsset', |
|
||||||
); |
|
||||||
} |
|
@ -1,26 +0,0 @@ |
|||||||
<?php |
|
||||||
/** |
|
||||||
* @link http://www.yiiframework.com/ |
|
||||||
* @copyright Copyright (c) 2008 Yii Software LLC |
|
||||||
* @license http://www.yiiframework.com/license/ |
|
||||||
*/ |
|
||||||
|
|
||||||
namespace yii\bootstrap; |
|
||||||
use yii\web\AssetBundle; |
|
||||||
|
|
||||||
/** |
|
||||||
* @author Qiang Xue <qiang.xue@gmail.com> |
|
||||||
* @since 2.0 |
|
||||||
*/ |
|
||||||
class AlertAsset extends AssetBundle |
|
||||||
{ |
|
||||||
public $sourcePath = '@yii/bootstrap/assets'; |
|
||||||
public $js = array( |
|
||||||
'js/bootstrap-alert.js', |
|
||||||
); |
|
||||||
public $depends = array( |
|
||||||
'yii\bootstrap\TransitionAsset', |
|
||||||
'yii\bootstrap\BootstrapAsset', |
|
||||||
'yii\web\JqueryAsset', |
|
||||||
); |
|
||||||
} |
|
@ -1,26 +0,0 @@ |
|||||||
<?php |
|
||||||
/** |
|
||||||
* @link http://www.yiiframework.com/ |
|
||||||
* @copyright Copyright (c) 2008 Yii Software LLC |
|
||||||
* @license http://www.yiiframework.com/license/ |
|
||||||
*/ |
|
||||||
|
|
||||||
namespace yii\bootstrap; |
|
||||||
use yii\web\AssetBundle; |
|
||||||
|
|
||||||
/** |
|
||||||
* @author Qiang Xue <qiang.xue@gmail.com> |
|
||||||
* @since 2.0 |
|
||||||
*/ |
|
||||||
class ButtonAsset extends AssetBundle |
|
||||||
{ |
|
||||||
public $sourcePath = '@yii/bootstrap/assets'; |
|
||||||
public $js = array( |
|
||||||
'js/bootstrap-button.js', |
|
||||||
); |
|
||||||
public $depends = array( |
|
||||||
'yii\bootstrap\TransitionAsset', |
|
||||||
'yii\bootstrap\BootstrapAsset', |
|
||||||
'yii\web\JqueryAsset', |
|
||||||
); |
|
||||||
} |
|
@ -1,26 +0,0 @@ |
|||||||
<?php |
|
||||||
/** |
|
||||||
* @link http://www.yiiframework.com/ |
|
||||||
* @copyright Copyright (c) 2008 Yii Software LLC |
|
||||||
* @license http://www.yiiframework.com/license/ |
|
||||||
*/ |
|
||||||
|
|
||||||
namespace yii\bootstrap; |
|
||||||
use yii\web\AssetBundle; |
|
||||||
|
|
||||||
/** |
|
||||||
* @author Qiang Xue <qiang.xue@gmail.com> |
|
||||||
* @since 2.0 |
|
||||||
*/ |
|
||||||
class CarouselAsset extends AssetBundle |
|
||||||
{ |
|
||||||
public $sourcePath = '@yii/bootstrap/assets'; |
|
||||||
public $js = array( |
|
||||||
'js/bootstrap-carousel.js', |
|
||||||
); |
|
||||||
public $depends = array( |
|
||||||
'yii\bootstrap\TransitionAsset', |
|
||||||
'yii\bootstrap\BootstrapAsset', |
|
||||||
'yii\web\JqueryAsset', |
|
||||||
); |
|
||||||
} |
|
@ -1,26 +0,0 @@ |
|||||||
<?php |
|
||||||
/** |
|
||||||
* @link http://www.yiiframework.com/ |
|
||||||
* @copyright Copyright (c) 2008 Yii Software LLC |
|
||||||
* @license http://www.yiiframework.com/license/ |
|
||||||
*/ |
|
||||||
|
|
||||||
namespace yii\bootstrap; |
|
||||||
use yii\web\AssetBundle; |
|
||||||
|
|
||||||
/** |
|
||||||
* @author Qiang Xue <qiang.xue@gmail.com> |
|
||||||
* @since 2.0 |
|
||||||
*/ |
|
||||||
class CollapseAsset extends AssetBundle |
|
||||||
{ |
|
||||||
public $sourcePath = '@yii/bootstrap/assets'; |
|
||||||
public $js = array( |
|
||||||
'js/bootstrap-collapse.js', |
|
||||||
); |
|
||||||
public $depends = array( |
|
||||||
'yii\bootstrap\TransitionAsset', |
|
||||||
'yii\bootstrap\BootstrapAsset', |
|
||||||
'yii\web\JqueryAsset', |
|
||||||
); |
|
||||||
} |
|
@ -1,26 +0,0 @@ |
|||||||
<?php |
|
||||||
/** |
|
||||||
* @link http://www.yiiframework.com/ |
|
||||||
* @copyright Copyright (c) 2008 Yii Software LLC |
|
||||||
* @license http://www.yiiframework.com/license/ |
|
||||||
*/ |
|
||||||
|
|
||||||
namespace yii\bootstrap; |
|
||||||
use yii\web\AssetBundle; |
|
||||||
|
|
||||||
/** |
|
||||||
* @author Qiang Xue <qiang.xue@gmail.com> |
|
||||||
* @since 2.0 |
|
||||||
*/ |
|
||||||
class DropdownAsset extends AssetBundle |
|
||||||
{ |
|
||||||
public $sourcePath = '@yii/bootstrap/assets'; |
|
||||||
public $js = array( |
|
||||||
'js/bootstrap-dropdown.js', |
|
||||||
); |
|
||||||
public $depends = array( |
|
||||||
'yii\bootstrap\TransitionAsset', |
|
||||||
'yii\bootstrap\BootstrapAsset', |
|
||||||
'yii\web\JqueryAsset', |
|
||||||
); |
|
||||||
} |
|
@ -1,26 +0,0 @@ |
|||||||
<?php |
|
||||||
/** |
|
||||||
* @link http://www.yiiframework.com/ |
|
||||||
* @copyright Copyright (c) 2008 Yii Software LLC |
|
||||||
* @license http://www.yiiframework.com/license/ |
|
||||||
*/ |
|
||||||
|
|
||||||
namespace yii\bootstrap; |
|
||||||
use yii\web\AssetBundle; |
|
||||||
|
|
||||||
/** |
|
||||||
* @author Qiang Xue <qiang.xue@gmail.com> |
|
||||||
* @since 2.0 |
|
||||||
*/ |
|
||||||
class ModalAsset extends AssetBundle |
|
||||||
{ |
|
||||||
public $sourcePath = '@yii/bootstrap/assets'; |
|
||||||
public $js = array( |
|
||||||
'js/bootstrap-modal.js', |
|
||||||
); |
|
||||||
public $depends = array( |
|
||||||
'yii\bootstrap\TransitionAsset', |
|
||||||
'yii\bootstrap\BootstrapAsset', |
|
||||||
'yii\web\JqueryAsset', |
|
||||||
); |
|
||||||
} |
|
@ -1,24 +0,0 @@ |
|||||||
<?php |
|
||||||
/** |
|
||||||
* @link http://www.yiiframework.com/ |
|
||||||
* @copyright Copyright (c) 2008 Yii Software LLC |
|
||||||
* @license http://www.yiiframework.com/license/ |
|
||||||
*/ |
|
||||||
|
|
||||||
namespace yii\bootstrap; |
|
||||||
use yii\web\AssetBundle; |
|
||||||
|
|
||||||
/** |
|
||||||
* @author Qiang Xue <qiang.xue@gmail.com> |
|
||||||
* @since 2.0 |
|
||||||
*/ |
|
||||||
class ResponsiveAsset extends AssetBundle |
|
||||||
{ |
|
||||||
public $sourcePath = '@yii/bootstrap/assets'; |
|
||||||
public $css = array( |
|
||||||
'css/bootstrap-responsive.css', |
|
||||||
); |
|
||||||
public $depends = array( |
|
||||||
'yii\bootstrap\BootstrapAsset', |
|
||||||
); |
|
||||||
} |
|
@ -1,26 +0,0 @@ |
|||||||
<?php |
|
||||||
/** |
|
||||||
* @link http://www.yiiframework.com/ |
|
||||||
* @copyright Copyright (c) 2008 Yii Software LLC |
|
||||||
* @license http://www.yiiframework.com/license/ |
|
||||||
*/ |
|
||||||
|
|
||||||
namespace yii\bootstrap; |
|
||||||
use yii\web\AssetBundle; |
|
||||||
|
|
||||||
/** |
|
||||||
* @author Qiang Xue <qiang.xue@gmail.com> |
|
||||||
* @since 2.0 |
|
||||||
*/ |
|
||||||
class ScrollspyAsset extends AssetBundle |
|
||||||
{ |
|
||||||
public $sourcePath = '@yii/bootstrap/assets'; |
|
||||||
public $js = array( |
|
||||||
'js/bootstrap-scrollspy.js', |
|
||||||
); |
|
||||||
public $depends = array( |
|
||||||
'yii\bootstrap\TransitionAsset', |
|
||||||
'yii\bootstrap\BootstrapAsset', |
|
||||||
'yii\web\JqueryAsset', |
|
||||||
); |
|
||||||
} |
|
@ -1,26 +0,0 @@ |
|||||||
<?php |
|
||||||
/** |
|
||||||
* @link http://www.yiiframework.com/ |
|
||||||
* @copyright Copyright (c) 2008 Yii Software LLC |
|
||||||
* @license http://www.yiiframework.com/license/ |
|
||||||
*/ |
|
||||||
|
|
||||||
namespace yii\bootstrap; |
|
||||||
use yii\web\AssetBundle; |
|
||||||
|
|
||||||
/** |
|
||||||
* @author Qiang Xue <qiang.xue@gmail.com> |
|
||||||
* @since 2.0 |
|
||||||
*/ |
|
||||||
class TabAsset extends AssetBundle |
|
||||||
{ |
|
||||||
public $sourcePath = '@yii/bootstrap/assets'; |
|
||||||
public $js = array( |
|
||||||
'js/bootstrap-tab.js', |
|
||||||
); |
|
||||||
public $depends = array( |
|
||||||
'yii\bootstrap\TransitionAsset', |
|
||||||
'yii\bootstrap\BootstrapAsset', |
|
||||||
'yii\web\JqueryAsset', |
|
||||||
); |
|
||||||
} |
|
@ -1,26 +0,0 @@ |
|||||||
<?php |
|
||||||
/** |
|
||||||
* @link http://www.yiiframework.com/ |
|
||||||
* @copyright Copyright (c) 2008 Yii Software LLC |
|
||||||
* @license http://www.yiiframework.com/license/ |
|
||||||
*/ |
|
||||||
|
|
||||||
namespace yii\bootstrap; |
|
||||||
use yii\web\AssetBundle; |
|
||||||
|
|
||||||
/** |
|
||||||
* @author Qiang Xue <qiang.xue@gmail.com> |
|
||||||
* @since 2.0 |
|
||||||
*/ |
|
||||||
class TooltipAsset extends AssetBundle |
|
||||||
{ |
|
||||||
public $sourcePath = '@yii/bootstrap/assets'; |
|
||||||
public $js = array( |
|
||||||
'js/bootstrap-tooltip.js', |
|
||||||
); |
|
||||||
public $depends = array( |
|
||||||
'yii\bootstrap\TransitionAsset', |
|
||||||
'yii\bootstrap\BootstrapAsset', |
|
||||||
'yii\web\JqueryAsset', |
|
||||||
); |
|
||||||
} |
|
@ -1,26 +0,0 @@ |
|||||||
<?php |
|
||||||
/** |
|
||||||
* @link http://www.yiiframework.com/ |
|
||||||
* @copyright Copyright (c) 2008 Yii Software LLC |
|
||||||
* @license http://www.yiiframework.com/license/ |
|
||||||
*/ |
|
||||||
|
|
||||||
namespace yii\bootstrap; |
|
||||||
use yii\web\AssetBundle; |
|
||||||
|
|
||||||
/** |
|
||||||
* @author Qiang Xue <qiang.xue@gmail.com> |
|
||||||
* @since 2.0 |
|
||||||
*/ |
|
||||||
class TypeaheadAsset extends AssetBundle |
|
||||||
{ |
|
||||||
public $sourcePath = '@yii/bootstrap/assets'; |
|
||||||
public $js = array( |
|
||||||
'js/bootstrap-typeahead.js', |
|
||||||
); |
|
||||||
public $depends = array( |
|
||||||
'yii\bootstrap\TransitionAsset', |
|
||||||
'yii\bootstrap\BootstrapAsset', |
|
||||||
'yii\web\JqueryAsset', |
|
||||||
); |
|
||||||
} |
|
@ -1,24 +0,0 @@ |
|||||||
<?php |
|
||||||
/** |
|
||||||
* @link http://www.yiiframework.com/ |
|
||||||
* @copyright Copyright (c) 2008 Yii Software LLC |
|
||||||
* @license http://www.yiiframework.com/license/ |
|
||||||
*/ |
|
||||||
|
|
||||||
return array( |
|
||||||
yii\bootstrap\BootstrapAsset::className(), |
|
||||||
yii\bootstrap\ResponsiveAsset::className(), |
|
||||||
yii\bootstrap\DropdownAsset::className(), |
|
||||||
yii\bootstrap\TransitionAsset::className(), |
|
||||||
yii\bootstrap\AffixAsset::className(), |
|
||||||
yii\bootstrap\AlertAsset::className(), |
|
||||||
yii\bootstrap\ButtonAsset::className(), |
|
||||||
yii\bootstrap\CarouselAsset::className(), |
|
||||||
yii\bootstrap\CollapseAsset::className(), |
|
||||||
yii\bootstrap\ModalAsset::className(), |
|
||||||
yii\bootstrap\PopoverAsset::className(), |
|
||||||
yii\bootstrap\TooltipAsset::className(), |
|
||||||
yii\bootstrap\ScrollspyAsset::className(), |
|
||||||
yii\bootstrap\TabAsset::className(), |
|
||||||
yii\bootstrap\TypeaheadAsset::className(), |
|
||||||
); |
|
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
After Width: | Height: | Size: 50 KiB |
Binary file not shown.
Binary file not shown.
Before Width: | Height: | Size: 8.6 KiB |
Before Width: | Height: | Size: 12 KiB |
@ -1,117 +0,0 @@ |
|||||||
/* ========================================================== |
|
||||||
* bootstrap-affix.js v2.3.2 |
|
||||||
* http://twitter.github.com/bootstrap/javascript.html#affix
|
|
||||||
* ========================================================== |
|
||||||
* Copyright 2012 Twitter, Inc. |
|
||||||
* |
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
||||||
* you may not use this file except in compliance with the License. |
|
||||||
* You may obtain a copy of the License at |
|
||||||
* |
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
* |
|
||||||
* Unless required by applicable law or agreed to in writing, software |
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, |
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
||||||
* See the License for the specific language governing permissions and |
|
||||||
* limitations under the License. |
|
||||||
* ========================================================== */ |
|
||||||
|
|
||||||
|
|
||||||
!function ($) { |
|
||||||
|
|
||||||
"use strict"; // jshint ;_;
|
|
||||||
|
|
||||||
|
|
||||||
/* AFFIX CLASS DEFINITION |
|
||||||
* ====================== */ |
|
||||||
|
|
||||||
var Affix = function (element, options) { |
|
||||||
this.options = $.extend({}, $.fn.affix.defaults, options) |
|
||||||
this.$window = $(window) |
|
||||||
.on('scroll.affix.data-api', $.proxy(this.checkPosition, this)) |
|
||||||
.on('click.affix.data-api', $.proxy(function () { setTimeout($.proxy(this.checkPosition, this), 1) }, this)) |
|
||||||
this.$element = $(element) |
|
||||||
this.checkPosition() |
|
||||||
} |
|
||||||
|
|
||||||
Affix.prototype.checkPosition = function () { |
|
||||||
if (!this.$element.is(':visible')) return |
|
||||||
|
|
||||||
var scrollHeight = $(document).height() |
|
||||||
, scrollTop = this.$window.scrollTop() |
|
||||||
, position = this.$element.offset() |
|
||||||
, offset = this.options.offset |
|
||||||
, offsetBottom = offset.bottom |
|
||||||
, offsetTop = offset.top |
|
||||||
, reset = 'affix affix-top affix-bottom' |
|
||||||
, affix |
|
||||||
|
|
||||||
if (typeof offset != 'object') offsetBottom = offsetTop = offset |
|
||||||
if (typeof offsetTop == 'function') offsetTop = offset.top() |
|
||||||
if (typeof offsetBottom == 'function') offsetBottom = offset.bottom() |
|
||||||
|
|
||||||
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 |
|
||||||
|
|
||||||
this.affixed = affix |
|
||||||
this.unpin = affix == 'bottom' ? position.top - scrollTop : null |
|
||||||
|
|
||||||
this.$element.removeClass(reset).addClass('affix' + (affix ? '-' + affix : '')) |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/* AFFIX PLUGIN DEFINITION |
|
||||||
* ======================= */ |
|
||||||
|
|
||||||
var old = $.fn.affix |
|
||||||
|
|
||||||
$.fn.affix = function (option) { |
|
||||||
return this.each(function () { |
|
||||||
var $this = $(this) |
|
||||||
, data = $this.data('affix') |
|
||||||
, options = typeof option == 'object' && option |
|
||||||
if (!data) $this.data('affix', (data = new Affix(this, options))) |
|
||||||
if (typeof option == 'string') data[option]() |
|
||||||
}) |
|
||||||
} |
|
||||||
|
|
||||||
$.fn.affix.Constructor = Affix |
|
||||||
|
|
||||||
$.fn.affix.defaults = { |
|
||||||
offset: 0 |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/* 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) |
|
||||||
, data = $spy.data() |
|
||||||
|
|
||||||
data.offset = data.offset || {} |
|
||||||
|
|
||||||
data.offsetBottom && (data.offset.bottom = data.offsetBottom) |
|
||||||
data.offsetTop && (data.offset.top = data.offsetTop) |
|
||||||
|
|
||||||
$spy.affix(data) |
|
||||||
}) |
|
||||||
}) |
|
||||||
|
|
||||||
|
|
||||||
}(window.jQuery); |
|
@ -1,99 +0,0 @@ |
|||||||
/* ========================================================== |
|
||||||
* bootstrap-alert.js v2.3.2 |
|
||||||
* http://twitter.github.com/bootstrap/javascript.html#alerts
|
|
||||||
* ========================================================== |
|
||||||
* Copyright 2012 Twitter, Inc. |
|
||||||
* |
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
||||||
* you may not use this file except in compliance with the License. |
|
||||||
* You may obtain a copy of the License at |
|
||||||
* |
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
* |
|
||||||
* Unless required by applicable law or agreed to in writing, software |
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, |
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
||||||
* See the License for the specific language governing permissions and |
|
||||||
* limitations under the License. |
|
||||||
* ========================================================== */ |
|
||||||
|
|
||||||
|
|
||||||
!function ($) { |
|
||||||
|
|
||||||
"use strict"; // jshint ;_;
|
|
||||||
|
|
||||||
|
|
||||||
/* ALERT CLASS DEFINITION |
|
||||||
* ====================== */ |
|
||||||
|
|
||||||
var dismiss = '[data-dismiss="alert"]' |
|
||||||
, Alert = function (el) { |
|
||||||
$(el).on('click', dismiss, this.close) |
|
||||||
} |
|
||||||
|
|
||||||
Alert.prototype.close = function (e) { |
|
||||||
var $this = $(this) |
|
||||||
, selector = $this.attr('data-target') |
|
||||||
, $parent |
|
||||||
|
|
||||||
if (!selector) { |
|
||||||
selector = $this.attr('href') |
|
||||||
selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
|
|
||||||
} |
|
||||||
|
|
||||||
$parent = $(selector) |
|
||||||
|
|
||||||
e && e.preventDefault() |
|
||||||
|
|
||||||
$parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent()) |
|
||||||
|
|
||||||
$parent.trigger(e = $.Event('close')) |
|
||||||
|
|
||||||
if (e.isDefaultPrevented()) return |
|
||||||
|
|
||||||
$parent.removeClass('in') |
|
||||||
|
|
||||||
function removeElement() { |
|
||||||
$parent |
|
||||||
.trigger('closed') |
|
||||||
.remove() |
|
||||||
} |
|
||||||
|
|
||||||
$.support.transition && $parent.hasClass('fade') ? |
|
||||||
$parent.on($.support.transition.end, removeElement) : |
|
||||||
removeElement() |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/* ALERT PLUGIN DEFINITION |
|
||||||
* ======================= */ |
|
||||||
|
|
||||||
var old = $.fn.alert |
|
||||||
|
|
||||||
$.fn.alert = function (option) { |
|
||||||
return this.each(function () { |
|
||||||
var $this = $(this) |
|
||||||
, data = $this.data('alert') |
|
||||||
if (!data) $this.data('alert', (data = new Alert(this))) |
|
||||||
if (typeof option == 'string') data[option].call($this) |
|
||||||
}) |
|
||||||
} |
|
||||||
|
|
||||||
$.fn.alert.Constructor = Alert |
|
||||||
|
|
||||||
|
|
||||||
/* ALERT NO CONFLICT |
|
||||||
* ================= */ |
|
||||||
|
|
||||||
$.fn.alert.noConflict = function () { |
|
||||||
$.fn.alert = old |
|
||||||
return this |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/* ALERT DATA-API |
|
||||||
* ============== */ |
|
||||||
|
|
||||||
$(document).on('click.alert.data-api', dismiss, Alert.prototype.close) |
|
||||||
|
|
||||||
}(window.jQuery); |
|
@ -1,105 +0,0 @@ |
|||||||
/* ============================================================ |
|
||||||
* bootstrap-button.js v2.3.2 |
|
||||||
* http://twitter.github.com/bootstrap/javascript.html#buttons
|
|
||||||
* ============================================================ |
|
||||||
* Copyright 2012 Twitter, Inc. |
|
||||||
* |
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
||||||
* you may not use this file except in compliance with the License. |
|
||||||
* You may obtain a copy of the License at |
|
||||||
* |
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
* |
|
||||||
* Unless required by applicable law or agreed to in writing, software |
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, |
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
||||||
* See the License for the specific language governing permissions and |
|
||||||
* limitations under the License. |
|
||||||
* ============================================================ */ |
|
||||||
|
|
||||||
|
|
||||||
!function ($) { |
|
||||||
|
|
||||||
"use strict"; // jshint ;_;
|
|
||||||
|
|
||||||
|
|
||||||
/* BUTTON PUBLIC CLASS DEFINITION |
|
||||||
* ============================== */ |
|
||||||
|
|
||||||
var Button = function (element, options) { |
|
||||||
this.$element = $(element) |
|
||||||
this.options = $.extend({}, $.fn.button.defaults, options) |
|
||||||
} |
|
||||||
|
|
||||||
Button.prototype.setState = function (state) { |
|
||||||
var d = 'disabled' |
|
||||||
, $el = this.$element |
|
||||||
, data = $el.data() |
|
||||||
, val = $el.is('input') ? 'val' : 'html' |
|
||||||
|
|
||||||
state = state + 'Text' |
|
||||||
data.resetText || $el.data('resetText', $el[val]()) |
|
||||||
|
|
||||||
$el[val](data[state] || this.options[state]) |
|
||||||
|
|
||||||
// push to event loop to allow forms to submit
|
|
||||||
setTimeout(function () { |
|
||||||
state == 'loadingText' ? |
|
||||||
$el.addClass(d).attr(d, d) : |
|
||||||
$el.removeClass(d).removeAttr(d) |
|
||||||
}, 0) |
|
||||||
} |
|
||||||
|
|
||||||
Button.prototype.toggle = function () { |
|
||||||
var $parent = this.$element.closest('[data-toggle="buttons-radio"]') |
|
||||||
|
|
||||||
$parent && $parent |
|
||||||
.find('.active') |
|
||||||
.removeClass('active') |
|
||||||
|
|
||||||
this.$element.toggleClass('active') |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/* BUTTON PLUGIN DEFINITION |
|
||||||
* ======================== */ |
|
||||||
|
|
||||||
var old = $.fn.button |
|
||||||
|
|
||||||
$.fn.button = function (option) { |
|
||||||
return this.each(function () { |
|
||||||
var $this = $(this) |
|
||||||
, data = $this.data('button') |
|
||||||
, options = typeof option == 'object' && option |
|
||||||
if (!data) $this.data('button', (data = new Button(this, options))) |
|
||||||
if (option == 'toggle') data.toggle() |
|
||||||
else if (option) data.setState(option) |
|
||||||
}) |
|
||||||
} |
|
||||||
|
|
||||||
$.fn.button.defaults = { |
|
||||||
loadingText: 'loading...' |
|
||||||
} |
|
||||||
|
|
||||||
$.fn.button.Constructor = Button |
|
||||||
|
|
||||||
|
|
||||||
/* BUTTON NO CONFLICT |
|
||||||
* ================== */ |
|
||||||
|
|
||||||
$.fn.button.noConflict = function () { |
|
||||||
$.fn.button = old |
|
||||||
return this |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/* BUTTON DATA-API |
|
||||||
* =============== */ |
|
||||||
|
|
||||||
$(document).on('click.button.data-api', '[data-toggle^=button]', function (e) { |
|
||||||
var $btn = $(e.target) |
|
||||||
if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') |
|
||||||
$btn.button('toggle') |
|
||||||
}) |
|
||||||
|
|
||||||
}(window.jQuery); |
|
@ -1,207 +0,0 @@ |
|||||||
/* ========================================================== |
|
||||||
* bootstrap-carousel.js v2.3.2 |
|
||||||
* http://twitter.github.com/bootstrap/javascript.html#carousel
|
|
||||||
* ========================================================== |
|
||||||
* Copyright 2012 Twitter, Inc. |
|
||||||
* |
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
||||||
* you may not use this file except in compliance with the License. |
|
||||||
* You may obtain a copy of the License at |
|
||||||
* |
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
* |
|
||||||
* Unless required by applicable law or agreed to in writing, software |
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, |
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
||||||
* See the License for the specific language governing permissions and |
|
||||||
* limitations under the License. |
|
||||||
* ========================================================== */ |
|
||||||
|
|
||||||
|
|
||||||
!function ($) { |
|
||||||
|
|
||||||
"use strict"; // jshint ;_;
|
|
||||||
|
|
||||||
|
|
||||||
/* CAROUSEL CLASS DEFINITION |
|
||||||
* ========================= */ |
|
||||||
|
|
||||||
var Carousel = function (element, options) { |
|
||||||
this.$element = $(element) |
|
||||||
this.$indicators = this.$element.find('.carousel-indicators') |
|
||||||
this.options = options |
|
||||||
this.options.pause == 'hover' && this.$element |
|
||||||
.on('mouseenter', $.proxy(this.pause, this)) |
|
||||||
.on('mouseleave', $.proxy(this.cycle, this)) |
|
||||||
} |
|
||||||
|
|
||||||
Carousel.prototype = { |
|
||||||
|
|
||||||
cycle: function (e) { |
|
||||||
if (!e) this.paused = false |
|
||||||
if (this.interval) clearInterval(this.interval); |
|
||||||
this.options.interval |
|
||||||
&& !this.paused |
|
||||||
&& (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) |
|
||||||
return this |
|
||||||
} |
|
||||||
|
|
||||||
, getActiveIndex: function () { |
|
||||||
this.$active = this.$element.find('.item.active') |
|
||||||
this.$items = this.$active.parent().children() |
|
||||||
return this.$items.index(this.$active) |
|
||||||
} |
|
||||||
|
|
||||||
, to: function (pos) { |
|
||||||
var activeIndex = this.getActiveIndex() |
|
||||||
, that = this |
|
||||||
|
|
||||||
if (pos > (this.$items.length - 1) || pos < 0) return |
|
||||||
|
|
||||||
if (this.sliding) { |
|
||||||
return this.$element.one('slid', function () { |
|
||||||
that.to(pos) |
|
||||||
}) |
|
||||||
} |
|
||||||
|
|
||||||
if (activeIndex == pos) { |
|
||||||
return this.pause().cycle() |
|
||||||
} |
|
||||||
|
|
||||||
return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos])) |
|
||||||
} |
|
||||||
|
|
||||||
, pause: function (e) { |
|
||||||
if (!e) this.paused = true |
|
||||||
if (this.$element.find('.next, .prev').length && $.support.transition.end) { |
|
||||||
this.$element.trigger($.support.transition.end) |
|
||||||
this.cycle(true) |
|
||||||
} |
|
||||||
clearInterval(this.interval) |
|
||||||
this.interval = null |
|
||||||
return this |
|
||||||
} |
|
||||||
|
|
||||||
, next: function () { |
|
||||||
if (this.sliding) return |
|
||||||
return this.slide('next') |
|
||||||
} |
|
||||||
|
|
||||||
, prev: function () { |
|
||||||
if (this.sliding) return |
|
||||||
return this.slide('prev') |
|
||||||
} |
|
||||||
|
|
||||||
, slide: function (type, next) { |
|
||||||
var $active = this.$element.find('.item.active') |
|
||||||
, $next = next || $active[type]() |
|
||||||
, isCycling = this.interval |
|
||||||
, direction = type == 'next' ? 'left' : 'right' |
|
||||||
, fallback = type == 'next' ? 'first' : 'last' |
|
||||||
, that = this |
|
||||||
, e |
|
||||||
|
|
||||||
this.sliding = true |
|
||||||
|
|
||||||
isCycling && this.pause() |
|
||||||
|
|
||||||
$next = $next.length ? $next : this.$element.find('.item')[fallback]() |
|
||||||
|
|
||||||
e = $.Event('slide', { |
|
||||||
relatedTarget: $next[0] |
|
||||||
, direction: direction |
|
||||||
}) |
|
||||||
|
|
||||||
if ($next.hasClass('active')) return |
|
||||||
|
|
||||||
if (this.$indicators.length) { |
|
||||||
this.$indicators.find('.active').removeClass('active') |
|
||||||
this.$element.one('slid', function () { |
|
||||||
var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()]) |
|
||||||
$nextIndicator && $nextIndicator.addClass('active') |
|
||||||
}) |
|
||||||
} |
|
||||||
|
|
||||||
if ($.support.transition && this.$element.hasClass('slide')) { |
|
||||||
this.$element.trigger(e) |
|
||||||
if (e.isDefaultPrevented()) return |
|
||||||
$next.addClass(type) |
|
||||||
$next[0].offsetWidth // force reflow
|
|
||||||
$active.addClass(direction) |
|
||||||
$next.addClass(direction) |
|
||||||
this.$element.one($.support.transition.end, function () { |
|
||||||
$next.removeClass([type, direction].join(' ')).addClass('active') |
|
||||||
$active.removeClass(['active', direction].join(' ')) |
|
||||||
that.sliding = false |
|
||||||
setTimeout(function () { that.$element.trigger('slid') }, 0) |
|
||||||
}) |
|
||||||
} else { |
|
||||||
this.$element.trigger(e) |
|
||||||
if (e.isDefaultPrevented()) return |
|
||||||
$active.removeClass('active') |
|
||||||
$next.addClass('active') |
|
||||||
this.sliding = false |
|
||||||
this.$element.trigger('slid') |
|
||||||
} |
|
||||||
|
|
||||||
isCycling && this.cycle() |
|
||||||
|
|
||||||
return this |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/* CAROUSEL PLUGIN DEFINITION |
|
||||||
* ========================== */ |
|
||||||
|
|
||||||
var old = $.fn.carousel |
|
||||||
|
|
||||||
$.fn.carousel = function (option) { |
|
||||||
return this.each(function () { |
|
||||||
var $this = $(this) |
|
||||||
, data = $this.data('carousel') |
|
||||||
, options = $.extend({}, $.fn.carousel.defaults, typeof option == 'object' && option) |
|
||||||
, action = typeof option == 'string' ? option : options.slide |
|
||||||
if (!data) $this.data('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() |
|
||||||
}) |
|
||||||
} |
|
||||||
|
|
||||||
$.fn.carousel.defaults = { |
|
||||||
interval: 5000 |
|
||||||
, pause: 'hover' |
|
||||||
} |
|
||||||
|
|
||||||
$.fn.carousel.Constructor = Carousel |
|
||||||
|
|
||||||
|
|
||||||
/* CAROUSEL NO CONFLICT |
|
||||||
* ==================== */ |
|
||||||
|
|
||||||
$.fn.carousel.noConflict = function () { |
|
||||||
$.fn.carousel = old |
|
||||||
return this |
|
||||||
} |
|
||||||
|
|
||||||
/* CAROUSEL DATA-API |
|
||||||
* ================= */ |
|
||||||
|
|
||||||
$(document).on('click.carousel.data-api', '[data-slide], [data-slide-to]', function (e) { |
|
||||||
var $this = $(this), href |
|
||||||
, $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
|
|
||||||
, options = $.extend({}, $target.data(), $this.data()) |
|
||||||
, slideIndex |
|
||||||
|
|
||||||
$target.carousel(options) |
|
||||||
|
|
||||||
if (slideIndex = $this.attr('data-slide-to')) { |
|
||||||
$target.data('carousel').pause().to(slideIndex).cycle() |
|
||||||
} |
|
||||||
|
|
||||||
e.preventDefault() |
|
||||||
}) |
|
||||||
|
|
||||||
}(window.jQuery); |
|
@ -1,167 +0,0 @@ |
|||||||
/* ============================================================= |
|
||||||
* bootstrap-collapse.js v2.3.2 |
|
||||||
* http://twitter.github.com/bootstrap/javascript.html#collapse
|
|
||||||
* ============================================================= |
|
||||||
* Copyright 2012 Twitter, Inc. |
|
||||||
* |
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
||||||
* you may not use this file except in compliance with the License. |
|
||||||
* You may obtain a copy of the License at |
|
||||||
* |
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
* |
|
||||||
* Unless required by applicable law or agreed to in writing, software |
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, |
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
||||||
* See the License for the specific language governing permissions and |
|
||||||
* limitations under the License. |
|
||||||
* ============================================================ */ |
|
||||||
|
|
||||||
|
|
||||||
!function ($) { |
|
||||||
|
|
||||||
"use strict"; // jshint ;_;
|
|
||||||
|
|
||||||
|
|
||||||
/* COLLAPSE PUBLIC CLASS DEFINITION |
|
||||||
* ================================ */ |
|
||||||
|
|
||||||
var Collapse = function (element, options) { |
|
||||||
this.$element = $(element) |
|
||||||
this.options = $.extend({}, $.fn.collapse.defaults, options) |
|
||||||
|
|
||||||
if (this.options.parent) { |
|
||||||
this.$parent = $(this.options.parent) |
|
||||||
} |
|
||||||
|
|
||||||
this.options.toggle && this.toggle() |
|
||||||
} |
|
||||||
|
|
||||||
Collapse.prototype = { |
|
||||||
|
|
||||||
constructor: Collapse |
|
||||||
|
|
||||||
, dimension: function () { |
|
||||||
var hasWidth = this.$element.hasClass('width') |
|
||||||
return hasWidth ? 'width' : 'height' |
|
||||||
} |
|
||||||
|
|
||||||
, show: function () { |
|
||||||
var dimension |
|
||||||
, scroll |
|
||||||
, actives |
|
||||||
, hasData |
|
||||||
|
|
||||||
if (this.transitioning || this.$element.hasClass('in')) return |
|
||||||
|
|
||||||
dimension = this.dimension() |
|
||||||
scroll = $.camelCase(['scroll', dimension].join('-')) |
|
||||||
actives = this.$parent && this.$parent.find('> .accordion-group > .in') |
|
||||||
|
|
||||||
if (actives && actives.length) { |
|
||||||
hasData = actives.data('collapse') |
|
||||||
if (hasData && hasData.transitioning) return |
|
||||||
actives.collapse('hide') |
|
||||||
hasData || actives.data('collapse', null) |
|
||||||
} |
|
||||||
|
|
||||||
this.$element[dimension](0) |
|
||||||
this.transition('addClass', $.Event('show'), 'shown') |
|
||||||
$.support.transition && this.$element[dimension](this.$element[0][scroll]) |
|
||||||
} |
|
||||||
|
|
||||||
, hide: function () { |
|
||||||
var dimension |
|
||||||
if (this.transitioning || !this.$element.hasClass('in')) return |
|
||||||
dimension = this.dimension() |
|
||||||
this.reset(this.$element[dimension]()) |
|
||||||
this.transition('removeClass', $.Event('hide'), 'hidden') |
|
||||||
this.$element[dimension](0) |
|
||||||
} |
|
||||||
|
|
||||||
, reset: function (size) { |
|
||||||
var dimension = this.dimension() |
|
||||||
|
|
||||||
this.$element |
|
||||||
.removeClass('collapse') |
|
||||||
[dimension](size || 'auto') |
|
||||||
[0].offsetWidth |
|
||||||
|
|
||||||
this.$element[size !== null ? 'addClass' : 'removeClass']('collapse') |
|
||||||
|
|
||||||
return this |
|
||||||
} |
|
||||||
|
|
||||||
, transition: function (method, startEvent, completeEvent) { |
|
||||||
var that = this |
|
||||||
, complete = function () { |
|
||||||
if (startEvent.type == 'show') that.reset() |
|
||||||
that.transitioning = 0 |
|
||||||
that.$element.trigger(completeEvent) |
|
||||||
} |
|
||||||
|
|
||||||
this.$element.trigger(startEvent) |
|
||||||
|
|
||||||
if (startEvent.isDefaultPrevented()) return |
|
||||||
|
|
||||||
this.transitioning = 1 |
|
||||||
|
|
||||||
this.$element[method]('in') |
|
||||||
|
|
||||||
$.support.transition && this.$element.hasClass('collapse') ? |
|
||||||
this.$element.one($.support.transition.end, complete) : |
|
||||||
complete() |
|
||||||
} |
|
||||||
|
|
||||||
, toggle: function () { |
|
||||||
this[this.$element.hasClass('in') ? 'hide' : 'show']() |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/* COLLAPSE PLUGIN DEFINITION |
|
||||||
* ========================== */ |
|
||||||
|
|
||||||
var old = $.fn.collapse |
|
||||||
|
|
||||||
$.fn.collapse = function (option) { |
|
||||||
return this.each(function () { |
|
||||||
var $this = $(this) |
|
||||||
, data = $this.data('collapse') |
|
||||||
, options = $.extend({}, $.fn.collapse.defaults, $this.data(), typeof option == 'object' && option) |
|
||||||
if (!data) $this.data('collapse', (data = new Collapse(this, options))) |
|
||||||
if (typeof option == 'string') data[option]() |
|
||||||
}) |
|
||||||
} |
|
||||||
|
|
||||||
$.fn.collapse.defaults = { |
|
||||||
toggle: true |
|
||||||
} |
|
||||||
|
|
||||||
$.fn.collapse.Constructor = Collapse |
|
||||||
|
|
||||||
|
|
||||||
/* COLLAPSE NO CONFLICT |
|
||||||
* ==================== */ |
|
||||||
|
|
||||||
$.fn.collapse.noConflict = function () { |
|
||||||
$.fn.collapse = old |
|
||||||
return this |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/* COLLAPSE DATA-API |
|
||||||
* ================= */ |
|
||||||
|
|
||||||
$(document).on('click.collapse.data-api', '[data-toggle=collapse]', function (e) { |
|
||||||
var $this = $(this), href |
|
||||||
, target = $this.attr('data-target') |
|
||||||
|| e.preventDefault() |
|
||||||
|| (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
|
|
||||||
, option = $(target).data('collapse') ? 'toggle' : $this.data() |
|
||||||
$this[$(target).hasClass('in') ? 'addClass' : 'removeClass']('collapsed') |
|
||||||
$(target).collapse(option) |
|
||||||
}) |
|
||||||
|
|
||||||
}(window.jQuery); |
|
@ -1,169 +0,0 @@ |
|||||||
/* ============================================================ |
|
||||||
* bootstrap-dropdown.js v2.3.2 |
|
||||||
* http://twitter.github.com/bootstrap/javascript.html#dropdowns
|
|
||||||
* ============================================================ |
|
||||||
* Copyright 2012 Twitter, Inc. |
|
||||||
* |
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
||||||
* you may not use this file except in compliance with the License. |
|
||||||
* You may obtain a copy of the License at |
|
||||||
* |
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
* |
|
||||||
* Unless required by applicable law or agreed to in writing, software |
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, |
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
||||||
* See the License for the specific language governing permissions and |
|
||||||
* limitations under the License. |
|
||||||
* ============================================================ */ |
|
||||||
|
|
||||||
|
|
||||||
!function ($) { |
|
||||||
|
|
||||||
"use strict"; // jshint ;_;
|
|
||||||
|
|
||||||
|
|
||||||
/* DROPDOWN CLASS DEFINITION |
|
||||||
* ========================= */ |
|
||||||
|
|
||||||
var toggle = '[data-toggle=dropdown]' |
|
||||||
, Dropdown = function (element) { |
|
||||||
var $el = $(element).on('click.dropdown.data-api', this.toggle) |
|
||||||
$('html').on('click.dropdown.data-api', function () { |
|
||||||
$el.parent().removeClass('open') |
|
||||||
}) |
|
||||||
} |
|
||||||
|
|
||||||
Dropdown.prototype = { |
|
||||||
|
|
||||||
constructor: Dropdown |
|
||||||
|
|
||||||
, toggle: function (e) { |
|
||||||
var $this = $(this) |
|
||||||
, $parent |
|
||||||
, isActive |
|
||||||
|
|
||||||
if ($this.is('.disabled, :disabled')) return |
|
||||||
|
|
||||||
$parent = getParent($this) |
|
||||||
|
|
||||||
isActive = $parent.hasClass('open') |
|
||||||
|
|
||||||
clearMenus() |
|
||||||
|
|
||||||
if (!isActive) { |
|
||||||
if ('ontouchstart' in document.documentElement) { |
|
||||||
// if mobile we we use a backdrop because click events don't delegate
|
|
||||||
$('<div class="dropdown-backdrop"/>').insertBefore($(this)).on('click', clearMenus) |
|
||||||
} |
|
||||||
$parent.toggleClass('open') |
|
||||||
} |
|
||||||
|
|
||||||
$this.focus() |
|
||||||
|
|
||||||
return false |
|
||||||
} |
|
||||||
|
|
||||||
, keydown: function (e) { |
|
||||||
var $this |
|
||||||
, $items |
|
||||||
, $active |
|
||||||
, $parent |
|
||||||
, isActive |
|
||||||
, index |
|
||||||
|
|
||||||
if (!/(38|40|27)/.test(e.keyCode)) return |
|
||||||
|
|
||||||
$this = $(this) |
|
||||||
|
|
||||||
e.preventDefault() |
|
||||||
e.stopPropagation() |
|
||||||
|
|
||||||
if ($this.is('.disabled, :disabled')) return |
|
||||||
|
|
||||||
$parent = getParent($this) |
|
||||||
|
|
||||||
isActive = $parent.hasClass('open') |
|
||||||
|
|
||||||
if (!isActive || (isActive && e.keyCode == 27)) { |
|
||||||
if (e.which == 27) $parent.find(toggle).focus() |
|
||||||
return $this.click() |
|
||||||
} |
|
||||||
|
|
||||||
$items = $('[role=menu] li:not(.divider):visible a', $parent) |
|
||||||
|
|
||||||
if (!$items.length) return |
|
||||||
|
|
||||||
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) |
|
||||||
.focus() |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
function clearMenus() { |
|
||||||
$('.dropdown-backdrop').remove() |
|
||||||
$(toggle).each(function () { |
|
||||||
getParent($(this)).removeClass('open') |
|
||||||
}) |
|
||||||
} |
|
||||||
|
|
||||||
function getParent($this) { |
|
||||||
var selector = $this.attr('data-target') |
|
||||||
, $parent |
|
||||||
|
|
||||||
if (!selector) { |
|
||||||
selector = $this.attr('href') |
|
||||||
selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
|
|
||||||
} |
|
||||||
|
|
||||||
$parent = selector && $(selector) |
|
||||||
|
|
||||||
if (!$parent || !$parent.length) $parent = $this.parent() |
|
||||||
|
|
||||||
return $parent |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/* DROPDOWN PLUGIN DEFINITION |
|
||||||
* ========================== */ |
|
||||||
|
|
||||||
var old = $.fn.dropdown |
|
||||||
|
|
||||||
$.fn.dropdown = function (option) { |
|
||||||
return this.each(function () { |
|
||||||
var $this = $(this) |
|
||||||
, data = $this.data('dropdown') |
|
||||||
if (!data) $this.data('dropdown', (data = new Dropdown(this))) |
|
||||||
if (typeof option == 'string') data[option].call($this) |
|
||||||
}) |
|
||||||
} |
|
||||||
|
|
||||||
$.fn.dropdown.Constructor = Dropdown |
|
||||||
|
|
||||||
|
|
||||||
/* DROPDOWN NO CONFLICT |
|
||||||
* ==================== */ |
|
||||||
|
|
||||||
$.fn.dropdown.noConflict = function () { |
|
||||||
$.fn.dropdown = old |
|
||||||
return this |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/* APPLY TO STANDARD DROPDOWN ELEMENTS |
|
||||||
* =================================== */ |
|
||||||
|
|
||||||
$(document) |
|
||||||
.on('click.dropdown.data-api', clearMenus) |
|
||||||
.on('click.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() }) |
|
||||||
.on('click.dropdown.data-api' , toggle, Dropdown.prototype.toggle) |
|
||||||
.on('keydown.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown) |
|
||||||
|
|
||||||
}(window.jQuery); |
|
@ -1,247 +0,0 @@ |
|||||||
/* ========================================================= |
|
||||||
* bootstrap-modal.js v2.3.2 |
|
||||||
* http://twitter.github.com/bootstrap/javascript.html#modals
|
|
||||||
* ========================================================= |
|
||||||
* Copyright 2012 Twitter, Inc. |
|
||||||
* |
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
||||||
* you may not use this file except in compliance with the License. |
|
||||||
* You may obtain a copy of the License at |
|
||||||
* |
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
* |
|
||||||
* Unless required by applicable law or agreed to in writing, software |
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, |
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
||||||
* See the License for the specific language governing permissions and |
|
||||||
* limitations under the License. |
|
||||||
* ========================================================= */ |
|
||||||
|
|
||||||
|
|
||||||
!function ($) { |
|
||||||
|
|
||||||
"use strict"; // jshint ;_;
|
|
||||||
|
|
||||||
|
|
||||||
/* MODAL CLASS DEFINITION |
|
||||||
* ====================== */ |
|
||||||
|
|
||||||
var Modal = function (element, options) { |
|
||||||
this.options = options |
|
||||||
this.$element = $(element) |
|
||||||
.delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this)) |
|
||||||
this.options.remote && this.$element.find('.modal-body').load(this.options.remote) |
|
||||||
} |
|
||||||
|
|
||||||
Modal.prototype = { |
|
||||||
|
|
||||||
constructor: Modal |
|
||||||
|
|
||||||
, toggle: function () { |
|
||||||
return this[!this.isShown ? 'show' : 'hide']() |
|
||||||
} |
|
||||||
|
|
||||||
, show: function () { |
|
||||||
var that = this |
|
||||||
, e = $.Event('show') |
|
||||||
|
|
||||||
this.$element.trigger(e) |
|
||||||
|
|
||||||
if (this.isShown || e.isDefaultPrevented()) return |
|
||||||
|
|
||||||
this.isShown = true |
|
||||||
|
|
||||||
this.escape() |
|
||||||
|
|
||||||
this.backdrop(function () { |
|
||||||
var transition = $.support.transition && that.$element.hasClass('fade') |
|
||||||
|
|
||||||
if (!that.$element.parent().length) { |
|
||||||
that.$element.appendTo(document.body) //don't move modals dom position
|
|
||||||
} |
|
||||||
|
|
||||||
that.$element.show() |
|
||||||
|
|
||||||
if (transition) { |
|
||||||
that.$element[0].offsetWidth // force reflow
|
|
||||||
} |
|
||||||
|
|
||||||
that.$element |
|
||||||
.addClass('in') |
|
||||||
.attr('aria-hidden', false) |
|
||||||
|
|
||||||
that.enforceFocus() |
|
||||||
|
|
||||||
transition ? |
|
||||||
that.$element.one($.support.transition.end, function () { that.$element.focus().trigger('shown') }) : |
|
||||||
that.$element.focus().trigger('shown') |
|
||||||
|
|
||||||
}) |
|
||||||
} |
|
||||||
|
|
||||||
, hide: function (e) { |
|
||||||
e && e.preventDefault() |
|
||||||
|
|
||||||
var that = this |
|
||||||
|
|
||||||
e = $.Event('hide') |
|
||||||
|
|
||||||
this.$element.trigger(e) |
|
||||||
|
|
||||||
if (!this.isShown || e.isDefaultPrevented()) return |
|
||||||
|
|
||||||
this.isShown = false |
|
||||||
|
|
||||||
this.escape() |
|
||||||
|
|
||||||
$(document).off('focusin.modal') |
|
||||||
|
|
||||||
this.$element |
|
||||||
.removeClass('in') |
|
||||||
.attr('aria-hidden', true) |
|
||||||
|
|
||||||
$.support.transition && this.$element.hasClass('fade') ? |
|
||||||
this.hideWithTransition() : |
|
||||||
this.hideModal() |
|
||||||
} |
|
||||||
|
|
||||||
, enforceFocus: function () { |
|
||||||
var that = this |
|
||||||
$(document).on('focusin.modal', function (e) { |
|
||||||
if (that.$element[0] !== e.target && !that.$element.has(e.target).length) { |
|
||||||
that.$element.focus() |
|
||||||
} |
|
||||||
}) |
|
||||||
} |
|
||||||
|
|
||||||
, escape: function () { |
|
||||||
var that = this |
|
||||||
if (this.isShown && this.options.keyboard) { |
|
||||||
this.$element.on('keyup.dismiss.modal', function ( e ) { |
|
||||||
e.which == 27 && that.hide() |
|
||||||
}) |
|
||||||
} else if (!this.isShown) { |
|
||||||
this.$element.off('keyup.dismiss.modal') |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
, hideWithTransition: function () { |
|
||||||
var that = this |
|
||||||
, timeout = setTimeout(function () { |
|
||||||
that.$element.off($.support.transition.end) |
|
||||||
that.hideModal() |
|
||||||
}, 500) |
|
||||||
|
|
||||||
this.$element.one($.support.transition.end, function () { |
|
||||||
clearTimeout(timeout) |
|
||||||
that.hideModal() |
|
||||||
}) |
|
||||||
} |
|
||||||
|
|
||||||
, hideModal: function () { |
|
||||||
var that = this |
|
||||||
this.$element.hide() |
|
||||||
this.backdrop(function () { |
|
||||||
that.removeBackdrop() |
|
||||||
that.$element.trigger('hidden') |
|
||||||
}) |
|
||||||
} |
|
||||||
|
|
||||||
, removeBackdrop: function () { |
|
||||||
this.$backdrop && this.$backdrop.remove() |
|
||||||
this.$backdrop = null |
|
||||||
} |
|
||||||
|
|
||||||
, backdrop: function (callback) { |
|
||||||
var that = this |
|
||||||
, animate = this.$element.hasClass('fade') ? 'fade' : '' |
|
||||||
|
|
||||||
if (this.isShown && this.options.backdrop) { |
|
||||||
var doAnimate = $.support.transition && animate |
|
||||||
|
|
||||||
this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />') |
|
||||||
.appendTo(document.body) |
|
||||||
|
|
||||||
this.$backdrop.click( |
|
||||||
this.options.backdrop == 'static' ? |
|
||||||
$.proxy(this.$element[0].focus, this.$element[0]) |
|
||||||
: $.proxy(this.hide, this) |
|
||||||
) |
|
||||||
|
|
||||||
if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
|
|
||||||
|
|
||||||
this.$backdrop.addClass('in') |
|
||||||
|
|
||||||
if (!callback) return |
|
||||||
|
|
||||||
doAnimate ? |
|
||||||
this.$backdrop.one($.support.transition.end, callback) : |
|
||||||
callback() |
|
||||||
|
|
||||||
} else if (!this.isShown && this.$backdrop) { |
|
||||||
this.$backdrop.removeClass('in') |
|
||||||
|
|
||||||
$.support.transition && this.$element.hasClass('fade')? |
|
||||||
this.$backdrop.one($.support.transition.end, callback) : |
|
||||||
callback() |
|
||||||
|
|
||||||
} else if (callback) { |
|
||||||
callback() |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/* MODAL PLUGIN DEFINITION |
|
||||||
* ======================= */ |
|
||||||
|
|
||||||
var old = $.fn.modal |
|
||||||
|
|
||||||
$.fn.modal = function (option) { |
|
||||||
return this.each(function () { |
|
||||||
var $this = $(this) |
|
||||||
, data = $this.data('modal') |
|
||||||
, options = $.extend({}, $.fn.modal.defaults, $this.data(), typeof option == 'object' && option) |
|
||||||
if (!data) $this.data('modal', (data = new Modal(this, options))) |
|
||||||
if (typeof option == 'string') data[option]() |
|
||||||
else if (options.show) data.show() |
|
||||||
}) |
|
||||||
} |
|
||||||
|
|
||||||
$.fn.modal.defaults = { |
|
||||||
backdrop: true |
|
||||||
, keyboard: true |
|
||||||
, show: true |
|
||||||
} |
|
||||||
|
|
||||||
$.fn.modal.Constructor = Modal |
|
||||||
|
|
||||||
|
|
||||||
/* MODAL NO CONFLICT |
|
||||||
* ================= */ |
|
||||||
|
|
||||||
$.fn.modal.noConflict = function () { |
|
||||||
$.fn.modal = old |
|
||||||
return this |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/* MODAL DATA-API |
|
||||||
* ============== */ |
|
||||||
|
|
||||||
$(document).on('click.modal.data-api', '[data-toggle="modal"]', function (e) { |
|
||||||
var $this = $(this) |
|
||||||
, href = $this.attr('href') |
|
||||||
, $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) //strip for ie7
|
|
||||||
, option = $target.data('modal') ? 'toggle' : $.extend({ remote:!/#/.test(href) && href }, $target.data(), $this.data()) |
|
||||||
|
|
||||||
e.preventDefault() |
|
||||||
|
|
||||||
$target |
|
||||||
.modal(option) |
|
||||||
.one('hide', function () { |
|
||||||
$this.focus() |
|
||||||
}) |
|
||||||
}) |
|
||||||
|
|
||||||
}(window.jQuery); |
|
@ -1,114 +0,0 @@ |
|||||||
/* =========================================================== |
|
||||||
* bootstrap-popover.js v2.3.2 |
|
||||||
* http://twitter.github.com/bootstrap/javascript.html#popovers
|
|
||||||
* =========================================================== |
|
||||||
* Copyright 2012 Twitter, Inc. |
|
||||||
* |
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
||||||
* you may not use this file except in compliance with the License. |
|
||||||
* You may obtain a copy of the License at |
|
||||||
* |
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
* |
|
||||||
* Unless required by applicable law or agreed to in writing, software |
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, |
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
||||||
* See the License for the specific language governing permissions and |
|
||||||
* limitations under the License. |
|
||||||
* =========================================================== */ |
|
||||||
|
|
||||||
|
|
||||||
!function ($) { |
|
||||||
|
|
||||||
"use strict"; // jshint ;_;
|
|
||||||
|
|
||||||
|
|
||||||
/* POPOVER PUBLIC CLASS DEFINITION |
|
||||||
* =============================== */ |
|
||||||
|
|
||||||
var Popover = function (element, options) { |
|
||||||
this.init('popover', element, options) |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/* NOTE: POPOVER EXTENDS BOOTSTRAP-TOOLTIP.js |
|
||||||
========================================== */ |
|
||||||
|
|
||||||
Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype, { |
|
||||||
|
|
||||||
constructor: Popover |
|
||||||
|
|
||||||
, setContent: function () { |
|
||||||
var $tip = this.tip() |
|
||||||
, title = this.getTitle() |
|
||||||
, content = this.getContent() |
|
||||||
|
|
||||||
$tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title) |
|
||||||
$tip.find('.popover-content')[this.options.html ? 'html' : 'text'](content) |
|
||||||
|
|
||||||
$tip.removeClass('fade top bottom left right in') |
|
||||||
} |
|
||||||
|
|
||||||
, hasContent: function () { |
|
||||||
return this.getTitle() || this.getContent() |
|
||||||
} |
|
||||||
|
|
||||||
, getContent: function () { |
|
||||||
var content |
|
||||||
, $e = this.$element |
|
||||||
, o = this.options |
|
||||||
|
|
||||||
content = (typeof o.content == 'function' ? o.content.call($e[0]) : o.content) |
|
||||||
|| $e.attr('data-content') |
|
||||||
|
|
||||||
return content |
|
||||||
} |
|
||||||
|
|
||||||
, tip: function () { |
|
||||||
if (!this.$tip) { |
|
||||||
this.$tip = $(this.options.template) |
|
||||||
} |
|
||||||
return this.$tip |
|
||||||
} |
|
||||||
|
|
||||||
, destroy: function () { |
|
||||||
this.hide().$element.off('.' + this.type).removeData(this.type) |
|
||||||
} |
|
||||||
|
|
||||||
}) |
|
||||||
|
|
||||||
|
|
||||||
/* POPOVER PLUGIN DEFINITION |
|
||||||
* ======================= */ |
|
||||||
|
|
||||||
var old = $.fn.popover |
|
||||||
|
|
||||||
$.fn.popover = function (option) { |
|
||||||
return this.each(function () { |
|
||||||
var $this = $(this) |
|
||||||
, data = $this.data('popover') |
|
||||||
, options = typeof option == 'object' && option |
|
||||||
if (!data) $this.data('popover', (data = new Popover(this, options))) |
|
||||||
if (typeof option == 'string') data[option]() |
|
||||||
}) |
|
||||||
} |
|
||||||
|
|
||||||
$.fn.popover.Constructor = Popover |
|
||||||
|
|
||||||
$.fn.popover.defaults = $.extend({} , $.fn.tooltip.defaults, { |
|
||||||
placement: 'right' |
|
||||||
, trigger: 'click' |
|
||||||
, content: '' |
|
||||||
, template: '<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>' |
|
||||||
}) |
|
||||||
|
|
||||||
|
|
||||||
/* POPOVER NO CONFLICT |
|
||||||
* =================== */ |
|
||||||
|
|
||||||
$.fn.popover.noConflict = function () { |
|
||||||
$.fn.popover = old |
|
||||||
return this |
|
||||||
} |
|
||||||
|
|
||||||
}(window.jQuery); |
|
@ -1,162 +0,0 @@ |
|||||||
/* ============================================================= |
|
||||||
* bootstrap-scrollspy.js v2.3.2 |
|
||||||
* http://twitter.github.com/bootstrap/javascript.html#scrollspy
|
|
||||||
* ============================================================= |
|
||||||
* Copyright 2012 Twitter, Inc. |
|
||||||
* |
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
||||||
* you may not use this file except in compliance with the License. |
|
||||||
* You may obtain a copy of the License at |
|
||||||
* |
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
* |
|
||||||
* Unless required by applicable law or agreed to in writing, software |
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, |
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
||||||
* See the License for the specific language governing permissions and |
|
||||||
* limitations under the License. |
|
||||||
* ============================================================== */ |
|
||||||
|
|
||||||
|
|
||||||
!function ($) { |
|
||||||
|
|
||||||
"use strict"; // jshint ;_;
|
|
||||||
|
|
||||||
|
|
||||||
/* SCROLLSPY CLASS DEFINITION |
|
||||||
* ========================== */ |
|
||||||
|
|
||||||
function ScrollSpy(element, options) { |
|
||||||
var process = $.proxy(this.process, this) |
|
||||||
, $element = $(element).is('body') ? $(window) : $(element) |
|
||||||
, href |
|
||||||
this.options = $.extend({}, $.fn.scrollspy.defaults, options) |
|
||||||
this.$scrollElement = $element.on('scroll.scroll-spy.data-api', process) |
|
||||||
this.selector = (this.options.target |
|
||||||
|| ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
|
|
||||||
|| '') + ' .nav li > a' |
|
||||||
this.$body = $('body') |
|
||||||
this.refresh() |
|
||||||
this.process() |
|
||||||
} |
|
||||||
|
|
||||||
ScrollSpy.prototype = { |
|
||||||
|
|
||||||
constructor: ScrollSpy |
|
||||||
|
|
||||||
, refresh: function () { |
|
||||||
var self = this |
|
||||||
, $targets |
|
||||||
|
|
||||||
this.offsets = $([]) |
|
||||||
this.targets = $([]) |
|
||||||
|
|
||||||
$targets = this.$body |
|
||||||
.find(this.selector) |
|
||||||
.map(function () { |
|
||||||
var $el = $(this) |
|
||||||
, href = $el.data('target') || $el.attr('href') |
|
||||||
, $href = /^#\w/.test(href) && $(href) |
|
||||||
return ( $href |
|
||||||
&& $href.length |
|
||||||
&& [[ $href.position().top + (!$.isWindow(self.$scrollElement.get(0)) && self.$scrollElement.scrollTop()), href ]] ) || null |
|
||||||
}) |
|
||||||
.sort(function (a, b) { return a[0] - b[0] }) |
|
||||||
.each(function () { |
|
||||||
self.offsets.push(this[0]) |
|
||||||
self.targets.push(this[1]) |
|
||||||
}) |
|
||||||
} |
|
||||||
|
|
||||||
, process: function () { |
|
||||||
var scrollTop = this.$scrollElement.scrollTop() + this.options.offset |
|
||||||
, scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight |
|
||||||
, maxScroll = scrollHeight - this.$scrollElement.height() |
|
||||||
, offsets = this.offsets |
|
||||||
, targets = this.targets |
|
||||||
, activeTarget = this.activeTarget |
|
||||||
, i |
|
||||||
|
|
||||||
if (scrollTop >= maxScroll) { |
|
||||||
return activeTarget != (i = targets.last()[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] ) |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
, activate: function (target) { |
|
||||||
var active |
|
||||||
, selector |
|
||||||
|
|
||||||
this.activeTarget = target |
|
||||||
|
|
||||||
$(this.selector) |
|
||||||
.parent('.active') |
|
||||||
.removeClass('active') |
|
||||||
|
|
||||||
selector = this.selector |
|
||||||
+ '[data-target="' + target + '"],' |
|
||||||
+ this.selector + '[href="' + target + '"]' |
|
||||||
|
|
||||||
active = $(selector) |
|
||||||
.parent('li') |
|
||||||
.addClass('active') |
|
||||||
|
|
||||||
if (active.parent('.dropdown-menu').length) { |
|
||||||
active = active.closest('li.dropdown').addClass('active') |
|
||||||
} |
|
||||||
|
|
||||||
active.trigger('activate') |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/* SCROLLSPY PLUGIN DEFINITION |
|
||||||
* =========================== */ |
|
||||||
|
|
||||||
var old = $.fn.scrollspy |
|
||||||
|
|
||||||
$.fn.scrollspy = function (option) { |
|
||||||
return this.each(function () { |
|
||||||
var $this = $(this) |
|
||||||
, data = $this.data('scrollspy') |
|
||||||
, options = typeof option == 'object' && option |
|
||||||
if (!data) $this.data('scrollspy', (data = new ScrollSpy(this, options))) |
|
||||||
if (typeof option == 'string') data[option]() |
|
||||||
}) |
|
||||||
} |
|
||||||
|
|
||||||
$.fn.scrollspy.Constructor = ScrollSpy |
|
||||||
|
|
||||||
$.fn.scrollspy.defaults = { |
|
||||||
offset: 10 |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/* SCROLLSPY NO CONFLICT |
|
||||||
* ===================== */ |
|
||||||
|
|
||||||
$.fn.scrollspy.noConflict = function () { |
|
||||||
$.fn.scrollspy = old |
|
||||||
return this |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/* SCROLLSPY DATA-API |
|
||||||
* ================== */ |
|
||||||
|
|
||||||
$(window).on('load', function () { |
|
||||||
$('[data-spy="scroll"]').each(function () { |
|
||||||
var $spy = $(this) |
|
||||||
$spy.scrollspy($spy.data()) |
|
||||||
}) |
|
||||||
}) |
|
||||||
|
|
||||||
}(window.jQuery); |
|
@ -1,144 +0,0 @@ |
|||||||
/* ======================================================== |
|
||||||
* bootstrap-tab.js v2.3.2 |
|
||||||
* http://twitter.github.com/bootstrap/javascript.html#tabs
|
|
||||||
* ======================================================== |
|
||||||
* Copyright 2012 Twitter, Inc. |
|
||||||
* |
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
||||||
* you may not use this file except in compliance with the License. |
|
||||||
* You may obtain a copy of the License at |
|
||||||
* |
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
* |
|
||||||
* Unless required by applicable law or agreed to in writing, software |
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, |
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
||||||
* See the License for the specific language governing permissions and |
|
||||||
* limitations under the License. |
|
||||||
* ======================================================== */ |
|
||||||
|
|
||||||
|
|
||||||
!function ($) { |
|
||||||
|
|
||||||
"use strict"; // jshint ;_;
|
|
||||||
|
|
||||||
|
|
||||||
/* TAB CLASS DEFINITION |
|
||||||
* ==================== */ |
|
||||||
|
|
||||||
var Tab = function (element) { |
|
||||||
this.element = $(element) |
|
||||||
} |
|
||||||
|
|
||||||
Tab.prototype = { |
|
||||||
|
|
||||||
constructor: Tab |
|
||||||
|
|
||||||
, show: function () { |
|
||||||
var $this = this.element |
|
||||||
, $ul = $this.closest('ul:not(.dropdown-menu)') |
|
||||||
, selector = $this.attr('data-target') |
|
||||||
, previous |
|
||||||
, $target |
|
||||||
, e |
|
||||||
|
|
||||||
if (!selector) { |
|
||||||
selector = $this.attr('href') |
|
||||||
selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
|
|
||||||
} |
|
||||||
|
|
||||||
if ( $this.parent('li').hasClass('active') ) return |
|
||||||
|
|
||||||
previous = $ul.find('.active:last a')[0] |
|
||||||
|
|
||||||
e = $.Event('show', { |
|
||||||
relatedTarget: previous |
|
||||||
}) |
|
||||||
|
|
||||||
$this.trigger(e) |
|
||||||
|
|
||||||
if (e.isDefaultPrevented()) return |
|
||||||
|
|
||||||
$target = $(selector) |
|
||||||
|
|
||||||
this.activate($this.parent('li'), $ul) |
|
||||||
this.activate($target, $target.parent(), function () { |
|
||||||
$this.trigger({ |
|
||||||
type: 'shown' |
|
||||||
, relatedTarget: previous |
|
||||||
}) |
|
||||||
}) |
|
||||||
} |
|
||||||
|
|
||||||
, activate: function ( element, container, callback) { |
|
||||||
var $active = container.find('> .active') |
|
||||||
, 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($.support.transition.end, next) : |
|
||||||
next() |
|
||||||
|
|
||||||
$active.removeClass('in') |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/* TAB PLUGIN DEFINITION |
|
||||||
* ===================== */ |
|
||||||
|
|
||||||
var old = $.fn.tab |
|
||||||
|
|
||||||
$.fn.tab = function ( option ) { |
|
||||||
return this.each(function () { |
|
||||||
var $this = $(this) |
|
||||||
, data = $this.data('tab') |
|
||||||
if (!data) $this.data('tab', (data = new Tab(this))) |
|
||||||
if (typeof option == 'string') data[option]() |
|
||||||
}) |
|
||||||
} |
|
||||||
|
|
||||||
$.fn.tab.Constructor = Tab |
|
||||||
|
|
||||||
|
|
||||||
/* TAB NO CONFLICT |
|
||||||
* =============== */ |
|
||||||
|
|
||||||
$.fn.tab.noConflict = function () { |
|
||||||
$.fn.tab = old |
|
||||||
return this |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/* TAB DATA-API |
|
||||||
* ============ */ |
|
||||||
|
|
||||||
$(document).on('click.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) { |
|
||||||
e.preventDefault() |
|
||||||
$(this).tab('show') |
|
||||||
}) |
|
||||||
|
|
||||||
}(window.jQuery); |
|
@ -1,361 +0,0 @@ |
|||||||
/* =========================================================== |
|
||||||
* bootstrap-tooltip.js v2.3.2 |
|
||||||
* http://twitter.github.com/bootstrap/javascript.html#tooltips
|
|
||||||
* Inspired by the original jQuery.tipsy by Jason Frame |
|
||||||
* =========================================================== |
|
||||||
* Copyright 2012 Twitter, Inc. |
|
||||||
* |
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
||||||
* you may not use this file except in compliance with the License. |
|
||||||
* You may obtain a copy of the License at |
|
||||||
* |
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
* |
|
||||||
* Unless required by applicable law or agreed to in writing, software |
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, |
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
||||||
* See the License for the specific language governing permissions and |
|
||||||
* limitations under the License. |
|
||||||
* ========================================================== */ |
|
||||||
|
|
||||||
|
|
||||||
!function ($) { |
|
||||||
|
|
||||||
"use strict"; // jshint ;_;
|
|
||||||
|
|
||||||
|
|
||||||
/* TOOLTIP PUBLIC CLASS DEFINITION |
|
||||||
* =============================== */ |
|
||||||
|
|
||||||
var Tooltip = function (element, options) { |
|
||||||
this.init('tooltip', element, options) |
|
||||||
} |
|
||||||
|
|
||||||
Tooltip.prototype = { |
|
||||||
|
|
||||||
constructor: Tooltip |
|
||||||
|
|
||||||
, init: function (type, element, options) { |
|
||||||
var eventIn |
|
||||||
, eventOut |
|
||||||
, triggers |
|
||||||
, trigger |
|
||||||
, i |
|
||||||
|
|
||||||
this.type = type |
|
||||||
this.$element = $(element) |
|
||||||
this.options = this.getOptions(options) |
|
||||||
this.enabled = true |
|
||||||
|
|
||||||
triggers = this.options.trigger.split(' ') |
|
||||||
|
|
||||||
for (i = triggers.length; i--;) { |
|
||||||
trigger = triggers[i] |
|
||||||
if (trigger == 'click') { |
|
||||||
this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this)) |
|
||||||
} else if (trigger != 'manual') { |
|
||||||
eventIn = trigger == 'hover' ? 'mouseenter' : 'focus' |
|
||||||
eventOut = trigger == 'hover' ? 'mouseleave' : 'blur' |
|
||||||
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() |
|
||||||
} |
|
||||||
|
|
||||||
, getOptions: function (options) { |
|
||||||
options = $.extend({}, $.fn[this.type].defaults, this.$element.data(), options) |
|
||||||
|
|
||||||
if (options.delay && typeof options.delay == 'number') { |
|
||||||
options.delay = { |
|
||||||
show: options.delay |
|
||||||
, hide: options.delay |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
return options |
|
||||||
} |
|
||||||
|
|
||||||
, enter: function (e) { |
|
||||||
var defaults = $.fn[this.type].defaults |
|
||||||
, options = {} |
|
||||||
, self |
|
||||||
|
|
||||||
this._options && $.each(this._options, function (key, value) { |
|
||||||
if (defaults[key] != value) options[key] = value |
|
||||||
}, this) |
|
||||||
|
|
||||||
self = $(e.currentTarget)[this.type](options).data(this.type) |
|
||||||
|
|
||||||
if (!self.options.delay || !self.options.delay.show) return self.show() |
|
||||||
|
|
||||||
clearTimeout(this.timeout) |
|
||||||
self.hoverState = 'in' |
|
||||||
this.timeout = setTimeout(function() { |
|
||||||
if (self.hoverState == 'in') self.show() |
|
||||||
}, self.options.delay.show) |
|
||||||
} |
|
||||||
|
|
||||||
, leave: function (e) { |
|
||||||
var self = $(e.currentTarget)[this.type](this._options).data(this.type) |
|
||||||
|
|
||||||
if (this.timeout) clearTimeout(this.timeout) |
|
||||||
if (!self.options.delay || !self.options.delay.hide) return self.hide() |
|
||||||
|
|
||||||
self.hoverState = 'out' |
|
||||||
this.timeout = setTimeout(function() { |
|
||||||
if (self.hoverState == 'out') self.hide() |
|
||||||
}, self.options.delay.hide) |
|
||||||
} |
|
||||||
|
|
||||||
, show: function () { |
|
||||||
var $tip |
|
||||||
, pos |
|
||||||
, actualWidth |
|
||||||
, actualHeight |
|
||||||
, placement |
|
||||||
, tp |
|
||||||
, e = $.Event('show') |
|
||||||
|
|
||||||
if (this.hasContent() && this.enabled) { |
|
||||||
this.$element.trigger(e) |
|
||||||
if (e.isDefaultPrevented()) return |
|
||||||
$tip = this.tip() |
|
||||||
this.setContent() |
|
||||||
|
|
||||||
if (this.options.animation) { |
|
||||||
$tip.addClass('fade') |
|
||||||
} |
|
||||||
|
|
||||||
placement = typeof this.options.placement == 'function' ? |
|
||||||
this.options.placement.call(this, $tip[0], this.$element[0]) : |
|
||||||
this.options.placement |
|
||||||
|
|
||||||
$tip |
|
||||||
.detach() |
|
||||||
.css({ top: 0, left: 0, display: 'block' }) |
|
||||||
|
|
||||||
this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element) |
|
||||||
|
|
||||||
pos = this.getPosition() |
|
||||||
|
|
||||||
actualWidth = $tip[0].offsetWidth |
|
||||||
actualHeight = $tip[0].offsetHeight |
|
||||||
|
|
||||||
switch (placement) { |
|
||||||
case 'bottom': |
|
||||||
tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2} |
|
||||||
break |
|
||||||
case 'top': |
|
||||||
tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2} |
|
||||||
break |
|
||||||
case 'left': |
|
||||||
tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth} |
|
||||||
break |
|
||||||
case 'right': |
|
||||||
tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width} |
|
||||||
break |
|
||||||
} |
|
||||||
|
|
||||||
this.applyPlacement(tp, placement) |
|
||||||
this.$element.trigger('shown') |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
, applyPlacement: function(offset, placement){ |
|
||||||
var $tip = this.tip() |
|
||||||
, width = $tip[0].offsetWidth |
|
||||||
, height = $tip[0].offsetHeight |
|
||||||
, actualWidth |
|
||||||
, actualHeight |
|
||||||
, delta |
|
||||||
, replace |
|
||||||
|
|
||||||
$tip |
|
||||||
.offset(offset) |
|
||||||
.addClass(placement) |
|
||||||
.addClass('in') |
|
||||||
|
|
||||||
actualWidth = $tip[0].offsetWidth |
|
||||||
actualHeight = $tip[0].offsetHeight |
|
||||||
|
|
||||||
if (placement == 'top' && actualHeight != height) { |
|
||||||
offset.top = offset.top + height - actualHeight |
|
||||||
replace = true |
|
||||||
} |
|
||||||
|
|
||||||
if (placement == 'bottom' || placement == 'top') { |
|
||||||
delta = 0 |
|
||||||
|
|
||||||
if (offset.left < 0){ |
|
||||||
delta = offset.left * -2 |
|
||||||
offset.left = 0 |
|
||||||
$tip.offset(offset) |
|
||||||
actualWidth = $tip[0].offsetWidth |
|
||||||
actualHeight = $tip[0].offsetHeight |
|
||||||
} |
|
||||||
|
|
||||||
this.replaceArrow(delta - width + actualWidth, actualWidth, 'left') |
|
||||||
} else { |
|
||||||
this.replaceArrow(actualHeight - height, actualHeight, 'top') |
|
||||||
} |
|
||||||
|
|
||||||
if (replace) $tip.offset(offset) |
|
||||||
} |
|
||||||
|
|
||||||
, replaceArrow: function(delta, dimension, position){ |
|
||||||
this |
|
||||||
.arrow() |
|
||||||
.css(position, delta ? (50 * (1 - delta / dimension) + "%") : '') |
|
||||||
} |
|
||||||
|
|
||||||
, setContent: function () { |
|
||||||
var $tip = this.tip() |
|
||||||
, title = this.getTitle() |
|
||||||
|
|
||||||
$tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title) |
|
||||||
$tip.removeClass('fade in top bottom left right') |
|
||||||
} |
|
||||||
|
|
||||||
, hide: function () { |
|
||||||
var that = this |
|
||||||
, $tip = this.tip() |
|
||||||
, e = $.Event('hide') |
|
||||||
|
|
||||||
this.$element.trigger(e) |
|
||||||
if (e.isDefaultPrevented()) return |
|
||||||
|
|
||||||
$tip.removeClass('in') |
|
||||||
|
|
||||||
function removeWithAnimation() { |
|
||||||
var timeout = setTimeout(function () { |
|
||||||
$tip.off($.support.transition.end).detach() |
|
||||||
}, 500) |
|
||||||
|
|
||||||
$tip.one($.support.transition.end, function () { |
|
||||||
clearTimeout(timeout) |
|
||||||
$tip.detach() |
|
||||||
}) |
|
||||||
} |
|
||||||
|
|
||||||
$.support.transition && this.$tip.hasClass('fade') ? |
|
||||||
removeWithAnimation() : |
|
||||||
$tip.detach() |
|
||||||
|
|
||||||
this.$element.trigger('hidden') |
|
||||||
|
|
||||||
return this |
|
||||||
} |
|
||||||
|
|
||||||
, 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', '') |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
, hasContent: function () { |
|
||||||
return this.getTitle() |
|
||||||
} |
|
||||||
|
|
||||||
, getPosition: function () { |
|
||||||
var el = this.$element[0] |
|
||||||
return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : { |
|
||||||
width: el.offsetWidth |
|
||||||
, height: el.offsetHeight |
|
||||||
}, this.$element.offset()) |
|
||||||
} |
|
||||||
|
|
||||||
, getTitle: function () { |
|
||||||
var title |
|
||||||
, $e = this.$element |
|
||||||
, o = this.options |
|
||||||
|
|
||||||
title = $e.attr('data-original-title') |
|
||||||
|| (typeof o.title == 'function' ? o.title.call($e[0]) : o.title) |
|
||||||
|
|
||||||
return title |
|
||||||
} |
|
||||||
|
|
||||||
, tip: function () { |
|
||||||
return this.$tip = this.$tip || $(this.options.template) |
|
||||||
} |
|
||||||
|
|
||||||
, arrow: function(){ |
|
||||||
return this.$arrow = this.$arrow || this.tip().find(".tooltip-arrow") |
|
||||||
} |
|
||||||
|
|
||||||
, validate: function () { |
|
||||||
if (!this.$element[0].parentNode) { |
|
||||||
this.hide() |
|
||||||
this.$element = null |
|
||||||
this.options = null |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
, enable: function () { |
|
||||||
this.enabled = true |
|
||||||
} |
|
||||||
|
|
||||||
, disable: function () { |
|
||||||
this.enabled = false |
|
||||||
} |
|
||||||
|
|
||||||
, toggleEnabled: function () { |
|
||||||
this.enabled = !this.enabled |
|
||||||
} |
|
||||||
|
|
||||||
, toggle: function (e) { |
|
||||||
var self = e ? $(e.currentTarget)[this.type](this._options).data(this.type) : this |
|
||||||
self.tip().hasClass('in') ? self.hide() : self.show() |
|
||||||
} |
|
||||||
|
|
||||||
, destroy: function () { |
|
||||||
this.hide().$element.off('.' + this.type).removeData(this.type) |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/* TOOLTIP PLUGIN DEFINITION |
|
||||||
* ========================= */ |
|
||||||
|
|
||||||
var old = $.fn.tooltip |
|
||||||
|
|
||||||
$.fn.tooltip = function ( option ) { |
|
||||||
return this.each(function () { |
|
||||||
var $this = $(this) |
|
||||||
, data = $this.data('tooltip') |
|
||||||
, options = typeof option == 'object' && option |
|
||||||
if (!data) $this.data('tooltip', (data = new Tooltip(this, options))) |
|
||||||
if (typeof option == 'string') data[option]() |
|
||||||
}) |
|
||||||
} |
|
||||||
|
|
||||||
$.fn.tooltip.Constructor = Tooltip |
|
||||||
|
|
||||||
$.fn.tooltip.defaults = { |
|
||||||
animation: true |
|
||||||
, placement: 'top' |
|
||||||
, selector: false |
|
||||||
, template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>' |
|
||||||
, trigger: 'hover focus' |
|
||||||
, title: '' |
|
||||||
, delay: 0 |
|
||||||
, html: false |
|
||||||
, container: false |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/* TOOLTIP NO CONFLICT |
|
||||||
* =================== */ |
|
||||||
|
|
||||||
$.fn.tooltip.noConflict = function () { |
|
||||||
$.fn.tooltip = old |
|
||||||
return this |
|
||||||
} |
|
||||||
|
|
||||||
}(window.jQuery); |
|
@ -1,60 +0,0 @@ |
|||||||
/* =================================================== |
|
||||||
* bootstrap-transition.js v2.3.2 |
|
||||||
* http://twitter.github.com/bootstrap/javascript.html#transitions
|
|
||||||
* =================================================== |
|
||||||
* Copyright 2012 Twitter, Inc. |
|
||||||
* |
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
||||||
* you may not use this file except in compliance with the License. |
|
||||||
* You may obtain a copy of the License at |
|
||||||
* |
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
* |
|
||||||
* Unless required by applicable law or agreed to in writing, software |
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, |
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
||||||
* See the License for the specific language governing permissions and |
|
||||||
* limitations under the License. |
|
||||||
* ========================================================== */ |
|
||||||
|
|
||||||
|
|
||||||
!function ($) { |
|
||||||
|
|
||||||
"use strict"; // jshint ;_;
|
|
||||||
|
|
||||||
|
|
||||||
/* CSS TRANSITION SUPPORT (http://www.modernizr.com/) |
|
||||||
* ======================================================= */ |
|
||||||
|
|
||||||
$(function () { |
|
||||||
|
|
||||||
$.support.transition = (function () { |
|
||||||
|
|
||||||
var transitionEnd = (function () { |
|
||||||
|
|
||||||
var el = document.createElement('bootstrap') |
|
||||||
, transEndEventNames = { |
|
||||||
'WebkitTransition' : 'webkitTransitionEnd' |
|
||||||
, 'MozTransition' : 'transitionend' |
|
||||||
, 'OTransition' : 'oTransitionEnd otransitionend' |
|
||||||
, 'transition' : 'transitionend' |
|
||||||
} |
|
||||||
, name |
|
||||||
|
|
||||||
for (name in transEndEventNames){ |
|
||||||
if (el.style[name] !== undefined) { |
|
||||||
return transEndEventNames[name] |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
}()) |
|
||||||
|
|
||||||
return transitionEnd && { |
|
||||||
end: transitionEnd |
|
||||||
} |
|
||||||
|
|
||||||
})() |
|
||||||
|
|
||||||
}) |
|
||||||
|
|
||||||
}(window.jQuery); |
|
@ -1,335 +0,0 @@ |
|||||||
/* ============================================================= |
|
||||||
* bootstrap-typeahead.js v2.3.2 |
|
||||||
* http://twitter.github.com/bootstrap/javascript.html#typeahead
|
|
||||||
* ============================================================= |
|
||||||
* Copyright 2012 Twitter, Inc. |
|
||||||
* |
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
||||||
* you may not use this file except in compliance with the License. |
|
||||||
* You may obtain a copy of the License at |
|
||||||
* |
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
* |
|
||||||
* Unless required by applicable law or agreed to in writing, software |
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, |
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
||||||
* See the License for the specific language governing permissions and |
|
||||||
* limitations under the License. |
|
||||||
* ============================================================ */ |
|
||||||
|
|
||||||
|
|
||||||
!function($){ |
|
||||||
|
|
||||||
"use strict"; // jshint ;_;
|
|
||||||
|
|
||||||
|
|
||||||
/* TYPEAHEAD PUBLIC CLASS DEFINITION |
|
||||||
* ================================= */ |
|
||||||
|
|
||||||
var Typeahead = function (element, options) { |
|
||||||
this.$element = $(element) |
|
||||||
this.options = $.extend({}, $.fn.typeahead.defaults, options) |
|
||||||
this.matcher = this.options.matcher || this.matcher |
|
||||||
this.sorter = this.options.sorter || this.sorter |
|
||||||
this.highlighter = this.options.highlighter || this.highlighter |
|
||||||
this.updater = this.options.updater || this.updater |
|
||||||
this.source = this.options.source |
|
||||||
this.$menu = $(this.options.menu) |
|
||||||
this.shown = false |
|
||||||
this.listen() |
|
||||||
} |
|
||||||
|
|
||||||
Typeahead.prototype = { |
|
||||||
|
|
||||||
constructor: Typeahead |
|
||||||
|
|
||||||
, select: function () { |
|
||||||
var val = this.$menu.find('.active').attr('data-value') |
|
||||||
this.$element |
|
||||||
.val(this.updater(val)) |
|
||||||
.change() |
|
||||||
return this.hide() |
|
||||||
} |
|
||||||
|
|
||||||
, updater: function (item) { |
|
||||||
return item |
|
||||||
} |
|
||||||
|
|
||||||
, show: function () { |
|
||||||
var pos = $.extend({}, this.$element.position(), { |
|
||||||
height: this.$element[0].offsetHeight |
|
||||||
}) |
|
||||||
|
|
||||||
this.$menu |
|
||||||
.insertAfter(this.$element) |
|
||||||
.css({ |
|
||||||
top: pos.top + pos.height |
|
||||||
, left: pos.left |
|
||||||
}) |
|
||||||
.show() |
|
||||||
|
|
||||||
this.shown = true |
|
||||||
return this |
|
||||||
} |
|
||||||
|
|
||||||
, hide: function () { |
|
||||||
this.$menu.hide() |
|
||||||
this.shown = false |
|
||||||
return this |
|
||||||
} |
|
||||||
|
|
||||||
, lookup: function (event) { |
|
||||||
var items |
|
||||||
|
|
||||||
this.query = this.$element.val() |
|
||||||
|
|
||||||
if (!this.query || this.query.length < this.options.minLength) { |
|
||||||
return this.shown ? this.hide() : this |
|
||||||
} |
|
||||||
|
|
||||||
items = $.isFunction(this.source) ? this.source(this.query, $.proxy(this.process, this)) : this.source |
|
||||||
|
|
||||||
return items ? this.process(items) : this |
|
||||||
} |
|
||||||
|
|
||||||
, process: function (items) { |
|
||||||
var that = this |
|
||||||
|
|
||||||
items = $.grep(items, function (item) { |
|
||||||
return that.matcher(item) |
|
||||||
}) |
|
||||||
|
|
||||||
items = this.sorter(items) |
|
||||||
|
|
||||||
if (!items.length) { |
|
||||||
return this.shown ? this.hide() : this |
|
||||||
} |
|
||||||
|
|
||||||
return this.render(items.slice(0, this.options.items)).show() |
|
||||||
} |
|
||||||
|
|
||||||
, matcher: function (item) { |
|
||||||
return ~item.toLowerCase().indexOf(this.query.toLowerCase()) |
|
||||||
} |
|
||||||
|
|
||||||
, sorter: function (items) { |
|
||||||
var beginswith = [] |
|
||||||
, caseSensitive = [] |
|
||||||
, caseInsensitive = [] |
|
||||||
, item |
|
||||||
|
|
||||||
while (item = items.shift()) { |
|
||||||
if (!item.toLowerCase().indexOf(this.query.toLowerCase())) beginswith.push(item) |
|
||||||
else if (~item.indexOf(this.query)) caseSensitive.push(item) |
|
||||||
else caseInsensitive.push(item) |
|
||||||
} |
|
||||||
|
|
||||||
return beginswith.concat(caseSensitive, caseInsensitive) |
|
||||||
} |
|
||||||
|
|
||||||
, highlighter: function (item) { |
|
||||||
var query = this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&') |
|
||||||
return item.replace(new RegExp('(' + query + ')', 'ig'), function ($1, match) { |
|
||||||
return '<strong>' + match + '</strong>' |
|
||||||
}) |
|
||||||
} |
|
||||||
|
|
||||||
, render: function (items) { |
|
||||||
var that = this |
|
||||||
|
|
||||||
items = $(items).map(function (i, item) { |
|
||||||
i = $(that.options.item).attr('data-value', item) |
|
||||||
i.find('a').html(that.highlighter(item)) |
|
||||||
return i[0] |
|
||||||
}) |
|
||||||
|
|
||||||
items.first().addClass('active') |
|
||||||
this.$menu.html(items) |
|
||||||
return this |
|
||||||
} |
|
||||||
|
|
||||||
, next: function (event) { |
|
||||||
var active = this.$menu.find('.active').removeClass('active') |
|
||||||
, next = active.next() |
|
||||||
|
|
||||||
if (!next.length) { |
|
||||||
next = $(this.$menu.find('li')[0]) |
|
||||||
} |
|
||||||
|
|
||||||
next.addClass('active') |
|
||||||
} |
|
||||||
|
|
||||||
, prev: function (event) { |
|
||||||
var active = this.$menu.find('.active').removeClass('active') |
|
||||||
, prev = active.prev() |
|
||||||
|
|
||||||
if (!prev.length) { |
|
||||||
prev = this.$menu.find('li').last() |
|
||||||
} |
|
||||||
|
|
||||||
prev.addClass('active') |
|
||||||
} |
|
||||||
|
|
||||||
, listen: function () { |
|
||||||
this.$element |
|
||||||
.on('focus', $.proxy(this.focus, this)) |
|
||||||
.on('blur', $.proxy(this.blur, this)) |
|
||||||
.on('keypress', $.proxy(this.keypress, this)) |
|
||||||
.on('keyup', $.proxy(this.keyup, this)) |
|
||||||
|
|
||||||
if (this.eventSupported('keydown')) { |
|
||||||
this.$element.on('keydown', $.proxy(this.keydown, this)) |
|
||||||
} |
|
||||||
|
|
||||||
this.$menu |
|
||||||
.on('click', $.proxy(this.click, this)) |
|
||||||
.on('mouseenter', 'li', $.proxy(this.mouseenter, this)) |
|
||||||
.on('mouseleave', 'li', $.proxy(this.mouseleave, this)) |
|
||||||
} |
|
||||||
|
|
||||||
, eventSupported: function(eventName) { |
|
||||||
var isSupported = eventName in this.$element |
|
||||||
if (!isSupported) { |
|
||||||
this.$element.setAttribute(eventName, 'return;') |
|
||||||
isSupported = typeof this.$element[eventName] === 'function' |
|
||||||
} |
|
||||||
return isSupported |
|
||||||
} |
|
||||||
|
|
||||||
, move: function (e) { |
|
||||||
if (!this.shown) return |
|
||||||
|
|
||||||
switch(e.keyCode) { |
|
||||||
case 9: // tab
|
|
||||||
case 13: // enter
|
|
||||||
case 27: // escape
|
|
||||||
e.preventDefault() |
|
||||||
break |
|
||||||
|
|
||||||
case 38: // up arrow
|
|
||||||
e.preventDefault() |
|
||||||
this.prev() |
|
||||||
break |
|
||||||
|
|
||||||
case 40: // down arrow
|
|
||||||
e.preventDefault() |
|
||||||
this.next() |
|
||||||
break |
|
||||||
} |
|
||||||
|
|
||||||
e.stopPropagation() |
|
||||||
} |
|
||||||
|
|
||||||
, keydown: function (e) { |
|
||||||
this.suppressKeyPressRepeat = ~$.inArray(e.keyCode, [40,38,9,13,27]) |
|
||||||
this.move(e) |
|
||||||
} |
|
||||||
|
|
||||||
, keypress: function (e) { |
|
||||||
if (this.suppressKeyPressRepeat) return |
|
||||||
this.move(e) |
|
||||||
} |
|
||||||
|
|
||||||
, keyup: function (e) { |
|
||||||
switch(e.keyCode) { |
|
||||||
case 40: // down arrow
|
|
||||||
case 38: // up arrow
|
|
||||||
case 16: // shift
|
|
||||||
case 17: // ctrl
|
|
||||||
case 18: // alt
|
|
||||||
break |
|
||||||
|
|
||||||
case 9: // tab
|
|
||||||
case 13: // enter
|
|
||||||
if (!this.shown) return |
|
||||||
this.select() |
|
||||||
break |
|
||||||
|
|
||||||
case 27: // escape
|
|
||||||
if (!this.shown) return |
|
||||||
this.hide() |
|
||||||
break |
|
||||||
|
|
||||||
default: |
|
||||||
this.lookup() |
|
||||||
} |
|
||||||
|
|
||||||
e.stopPropagation() |
|
||||||
e.preventDefault() |
|
||||||
} |
|
||||||
|
|
||||||
, focus: function (e) { |
|
||||||
this.focused = true |
|
||||||
} |
|
||||||
|
|
||||||
, blur: function (e) { |
|
||||||
this.focused = false |
|
||||||
if (!this.mousedover && this.shown) this.hide() |
|
||||||
} |
|
||||||
|
|
||||||
, click: function (e) { |
|
||||||
e.stopPropagation() |
|
||||||
e.preventDefault() |
|
||||||
this.select() |
|
||||||
this.$element.focus() |
|
||||||
} |
|
||||||
|
|
||||||
, mouseenter: function (e) { |
|
||||||
this.mousedover = true |
|
||||||
this.$menu.find('.active').removeClass('active') |
|
||||||
$(e.currentTarget).addClass('active') |
|
||||||
} |
|
||||||
|
|
||||||
, mouseleave: function (e) { |
|
||||||
this.mousedover = false |
|
||||||
if (!this.focused && this.shown) this.hide() |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/* TYPEAHEAD PLUGIN DEFINITION |
|
||||||
* =========================== */ |
|
||||||
|
|
||||||
var old = $.fn.typeahead |
|
||||||
|
|
||||||
$.fn.typeahead = function (option) { |
|
||||||
return this.each(function () { |
|
||||||
var $this = $(this) |
|
||||||
, data = $this.data('typeahead') |
|
||||||
, options = typeof option == 'object' && option |
|
||||||
if (!data) $this.data('typeahead', (data = new Typeahead(this, options))) |
|
||||||
if (typeof option == 'string') data[option]() |
|
||||||
}) |
|
||||||
} |
|
||||||
|
|
||||||
$.fn.typeahead.defaults = { |
|
||||||
source: [] |
|
||||||
, items: 8 |
|
||||||
, menu: '<ul class="typeahead dropdown-menu"></ul>' |
|
||||||
, item: '<li><a href="#"></a></li>' |
|
||||||
, minLength: 1 |
|
||||||
} |
|
||||||
|
|
||||||
$.fn.typeahead.Constructor = Typeahead |
|
||||||
|
|
||||||
|
|
||||||
/* TYPEAHEAD NO CONFLICT |
|
||||||
* =================== */ |
|
||||||
|
|
||||||
$.fn.typeahead.noConflict = function () { |
|
||||||
$.fn.typeahead = old |
|
||||||
return this |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/* TYPEAHEAD DATA-API |
|
||||||
* ================== */ |
|
||||||
|
|
||||||
$(document).on('focus.typeahead.data-api', '[data-provide="typeahead"]', function (e) { |
|
||||||
var $this = $(this) |
|
||||||
if ($this.data('typeahead')) return |
|
||||||
$this.typeahead($this.data()) |
|
||||||
}) |
|
||||||
|
|
||||||
}(window.jQuery); |
|
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue