├── addons
└── .gitignore
├── public
├── favicon.ico
├── assets
│ ├── .gitkeep
│ └── bootstrap
│ │ ├── fonts
│ │ ├── glyphicons-halflings-regular.eot
│ │ ├── glyphicons-halflings-regular.ttf
│ │ └── glyphicons-halflings-regular.woff
│ │ ├── js
│ │ ├── npm.js
│ │ └── bootstrap.min.js
│ │ └── css
│ │ ├── bootstrap-theme.min.css
│ │ └── bootstrap-theme.css
├── robots.txt
├── .htaccess
└── index.php
├── app
├── commands
│ └── .gitkeep
├── config
│ ├── packages
│ │ ├── .gitkeep
│ │ └── barryvdh
│ │ │ └── laravel-debugbar
│ │ │ └── config.php
│ ├── addon.php
│ ├── local
│ │ ├── app.php
│ │ └── database.php
│ ├── production
│ │ ├── app.php
│ │ └── database.php
│ ├── testing
│ │ ├── database.php
│ │ ├── cache.php
│ │ └── session.php
│ ├── compile.php
│ ├── services.php
│ ├── workbench.php
│ ├── view.php
│ ├── remote.php
│ ├── auth.php
│ ├── queue.php
│ ├── cache.php
│ ├── database.php
│ ├── mail.php
│ ├── session.php
│ └── app.php
├── controllers
│ ├── .gitkeep
│ ├── BaseController.php
│ └── TodosController.php
├── database
│ ├── seeds
│ │ ├── .gitkeep
│ │ └── DatabaseSeeder.php
│ ├── migrations
│ │ ├── .gitkeep
│ │ ├── 2015_01_01_000001_create_sessions_table.php
│ │ └── 2015_01_01_000002_create_todos_table.php
│ └── .gitignore
├── storage
│ ├── .gitignore
│ ├── cache
│ │ └── .gitignore
│ ├── database
│ │ └── .gitignore
│ ├── debugbar
│ │ └── .gitignore
│ ├── logs
│ │ └── .gitignore
│ ├── meta
│ │ └── .gitignore
│ ├── sessions
│ │ └── .gitignore
│ └── views
│ │ └── .gitignore
├── specs
│ ├── vocabulary.php
│ └── forms.php
├── lang
│ ├── en
│ │ ├── auth.php
│ │ ├── vocabulary.php
│ │ ├── pagination.php
│ │ ├── forms.php
│ │ ├── reminders.php
│ │ └── validation.php
│ └── ja
│ │ ├── auth.php
│ │ ├── vocabulary.php
│ │ ├── pagination.php
│ │ ├── forms.php
│ │ ├── reminders.php
│ │ └── validation.php
├── views
│ ├── partials
│ │ ├── footer.blade.php
│ │ └── todos
│ │ │ ├── 00_input_section.blade.php
│ │ │ ├── 03_trashed_section.blade.php
│ │ │ ├── 02_completed_section.blade.php
│ │ │ └── 01_incomplete_section.blade.php
│ ├── theme.php
│ ├── layouts
│ │ └── default.blade.php
│ └── pages
│ │ └── todos
│ │ └── index.blade.php
├── start
│ ├── local.php
│ ├── testing.php
│ ├── artisan.php
│ └── global.php
├── tests
│ ├── TestCase.php
│ └── RouteTest.php
├── models
│ └── Todo.php
├── routes.php
└── filters.php
├── .gitattributes
├── .gitignore
├── test
├── server.php
├── phpunit.xml
├── readme.md
├── composer.json
├── bootstrap
├── paths.php
├── start.php
└── autoload.php
└── artisan
/addons/.gitignore:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/commands/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/config/packages/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/controllers/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/database/seeds/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | * text=auto
2 |
--------------------------------------------------------------------------------
/app/database/migrations/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/database/.gitignore:
--------------------------------------------------------------------------------
1 | *.sqlite
2 |
--------------------------------------------------------------------------------
/app/storage/.gitignore:
--------------------------------------------------------------------------------
1 | services.manifest
--------------------------------------------------------------------------------
/app/storage/cache/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
--------------------------------------------------------------------------------
/app/storage/database/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
--------------------------------------------------------------------------------
/app/storage/debugbar/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
--------------------------------------------------------------------------------
/app/storage/logs/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
--------------------------------------------------------------------------------
/app/storage/meta/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
--------------------------------------------------------------------------------
/app/storage/sessions/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
--------------------------------------------------------------------------------
/app/storage/views/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
--------------------------------------------------------------------------------
/public/robots.txt:
--------------------------------------------------------------------------------
1 | User-agent: *
2 | Disallow:
3 |
--------------------------------------------------------------------------------
/app/config/addon.php:
--------------------------------------------------------------------------------
1 | 'addons',
5 | ];
6 |
--------------------------------------------------------------------------------
/app/specs/vocabulary.php:
--------------------------------------------------------------------------------
1 | 'required',
5 | ];
6 |
--------------------------------------------------------------------------------
/app/config/local/app.php:
--------------------------------------------------------------------------------
1 | true,
6 |
7 | );
8 |
--------------------------------------------------------------------------------
/app/config/production/app.php:
--------------------------------------------------------------------------------
1 | false,
6 |
7 | );
8 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | /bootstrap/compiled.php
2 | /vendor
3 | .env.*.php
4 | .env.php
5 | .DS_Store
6 | Thumbs.db
7 |
--------------------------------------------------------------------------------
/app/config/local/database.php:
--------------------------------------------------------------------------------
1 | 'sqlite',
6 |
7 | );
8 |
--------------------------------------------------------------------------------
/app/controllers/BaseController.php:
--------------------------------------------------------------------------------
1 | 'sqlite',
6 |
7 | );
8 |
--------------------------------------------------------------------------------
/app/lang/en/auth.php:
--------------------------------------------------------------------------------
1 | 'Invalid Credential',
5 | ];
6 |
--------------------------------------------------------------------------------
/app/lang/ja/auth.php:
--------------------------------------------------------------------------------
1 | 'ユーザー名かパスワードが間違っています。',
5 | ];
6 |
--------------------------------------------------------------------------------
/public/assets/bootstrap/fonts/glyphicons-halflings-regular.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jumilla/l4-sample-todo/HEAD/public/assets/bootstrap/fonts/glyphicons-halflings-regular.eot
--------------------------------------------------------------------------------
/public/assets/bootstrap/fonts/glyphicons-halflings-regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jumilla/l4-sample-todo/HEAD/public/assets/bootstrap/fonts/glyphicons-halflings-regular.ttf
--------------------------------------------------------------------------------
/public/assets/bootstrap/fonts/glyphicons-halflings-regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jumilla/l4-sample-todo/HEAD/public/assets/bootstrap/fonts/glyphicons-halflings-regular.woff
--------------------------------------------------------------------------------
/test:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | cd `dirname $0`
3 |
4 | # prepare data
5 | php artisan migrate --seed --env=testing
6 |
7 | # run test
8 | umask 002
9 | vendor/bin/phpunit $@
10 |
11 | # unprepare data
12 | php artisan migrate:rollback --env=testing
13 |
--------------------------------------------------------------------------------
/app/lang/en/vocabulary.php:
--------------------------------------------------------------------------------
1 | [
6 | '' => '',
7 | ],
8 |
9 | // モジュール共通のヘルプテキスト
10 | 'helptexts' => [
11 | '' => '',
12 | ],
13 |
14 | // モジュール共通のルールメッセージ
15 | 'rules' => [
16 | '' => '',
17 | ],
18 | ];
19 |
--------------------------------------------------------------------------------
/app/lang/ja/vocabulary.php:
--------------------------------------------------------------------------------
1 | [
6 | '' => '',
7 | ],
8 |
9 | // モジュール共通のヘルプテキスト
10 | 'helptexts' => [
11 | '' => '',
12 | ],
13 |
14 | // モジュール共通のルールメッセージ
15 | 'rules' => [
16 | '' => '',
17 | ],
18 | ];
19 |
--------------------------------------------------------------------------------
/app/database/seeds/DatabaseSeeder.php:
--------------------------------------------------------------------------------
1 | call('UserTableSeeder');
15 | }
16 |
17 | }
18 |
--------------------------------------------------------------------------------
/app/views/partials/footer.blade.php:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/app/start/local.php:
--------------------------------------------------------------------------------
1 |
2 |
3 | Options -MultiViews
4 |
5 |
6 | RewriteEngine On
7 |
8 | # Redirect Trailing Slashes...
9 | RewriteRule ^(.*)/$ /$1 [L,R=301]
10 |
11 | # Handle Front Controller...
12 | RewriteCond %{REQUEST_FILENAME} !-d
13 | RewriteCond %{REQUEST_FILENAME} !-f
14 | RewriteRule ^ index.php [L]
15 |
16 |
--------------------------------------------------------------------------------
/app/specs/forms.php:
--------------------------------------------------------------------------------
1 | [
9 | 'username' => '@username', // '@'で始まる値は、vocabulary.phpの値を参照する。
10 | 'password' => 'required',
11 | ],
12 |
13 | // 例
14 | 'example' => [
15 | 'title' => 'required',
16 | 'subtitle' => '', // オプションの場合は''で定義しておく。
17 | ],
18 | ];
19 |
--------------------------------------------------------------------------------
/app/start/artisan.php:
--------------------------------------------------------------------------------
1 | '« 前',
17 |
18 | 'next' => '次 »',
19 |
20 | );
--------------------------------------------------------------------------------
/server.php:
--------------------------------------------------------------------------------
1 | '« Previous',
17 |
18 | 'next' => 'Next »',
19 |
20 | );
21 |
--------------------------------------------------------------------------------
/app/config/testing/cache.php:
--------------------------------------------------------------------------------
1 | 'array',
19 |
20 | );
21 |
--------------------------------------------------------------------------------
/app/lang/ja/forms.php:
--------------------------------------------------------------------------------
1 | [
7 | 'rules' => '@rules',
8 | // フォーム固有のラベル
9 | 'attributes' => [
10 | 'username' => 'ユーザー名',
11 | 'password' => 'パスワード',
12 | 'submit' => 'ログイン',
13 | ],
14 | // フォーム固有のヘルプテキスト
15 | 'helptexts' => [
16 | 'password' => '6文字以上',
17 | ],
18 | ],
19 |
20 | // 例のテキスト
21 | 'example' => [
22 | 'rules' => '@rules',
23 | // フォーム固有のラベル
24 | 'attributes' => [
25 | 'title' => 'タイトル',
26 | 'subtitle' => 'サブタイトル',
27 | ],
28 | // フォーム固有のヘルプテキスト
29 | 'helptexts' => [
30 | ],
31 | ],
32 | ];
33 |
--------------------------------------------------------------------------------
/phpunit.xml:
--------------------------------------------------------------------------------
1 |
2 |
13 |
14 |
15 | ./app/tests/
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/app/config/testing/session.php:
--------------------------------------------------------------------------------
1 | 'array',
20 |
21 | );
22 |
--------------------------------------------------------------------------------
/app/lang/en/forms.php:
--------------------------------------------------------------------------------
1 | [
7 | 'rules' => '@rules',
8 | // フォーム固有のラベル
9 | 'attributes' => [
10 | 'username' => 'User Name',
11 | 'password' => 'Password',
12 | 'submit' => 'Login',
13 | ],
14 | // フォーム固有のヘルプテキスト
15 | 'helptexts' => [
16 | 'password' => 'over 6bytes.',
17 | ],
18 | ],
19 |
20 | // 例のテキスト
21 | 'example' => [
22 | 'rules' => '@rules',
23 | // フォーム固有のラベル
24 | 'attributes' => [
25 | 'title' => 'Title',
26 | 'subtitle' => 'Subtitle',
27 | ],
28 | // フォーム固有のヘルプテキスト
29 | 'helptexts' => [
30 | ],
31 | ],
32 | ];
33 |
--------------------------------------------------------------------------------
/app/database/migrations/2015_01_01_000001_create_sessions_table.php:
--------------------------------------------------------------------------------
1 | string('id')->unique();
17 | $table->text('payload');
18 | $table->integer('last_activity');
19 | });
20 | }
21 |
22 | /**
23 | * Reverse the migrations.
24 | *
25 | * @return void
26 | */
27 | public function down()
28 | {
29 | Schema::dropIfExists('sessions');
30 | }
31 |
32 | }
33 |
--------------------------------------------------------------------------------
/app/views/partials/todos/00_input_section.blade.php:
--------------------------------------------------------------------------------
1 | {{-- 新規TODO入力欄 --}}
2 |
3 |
4 | {{ Form::open(['url' => route('todos.store'), 'method' => 'POST']) }}
5 |
16 | {{ Form::close() }}
17 |
18 |
19 |
--------------------------------------------------------------------------------
/app/database/migrations/2015_01_01_000002_create_todos_table.php:
--------------------------------------------------------------------------------
1 | increments('id');
18 | $table->string('title');
19 | $table->integer('status');
20 | $table->timestamp('completed_at')->nullable();
21 | $table->timestamps();
22 | $table->softDeletes();
23 | });
24 | }
25 |
26 | /**
27 | * Reverse the migrations.
28 | *
29 | * @return void
30 | */
31 | public function down()
32 | {
33 | Schema::dropIfExists('todos');
34 | }
35 |
36 | }
37 |
--------------------------------------------------------------------------------
/app/views/theme.php:
--------------------------------------------------------------------------------
1 | key としてアクセスできます。
5 | $metadata = new \Illuminate\Support\Fluent([
6 | 'keywords' => [
7 | 'Laravel', 'Laravel4', 'Laravel4.2',
8 | 'Framework', 'WebFramework',
9 | 'Sample',
10 | ],
11 | 'description' => '',
12 | 'author' => 'Fumio Furukawa',
13 | 'url' => 'http://jumilla.me',
14 | ]);
15 |
16 |
17 |
18 | if (!function_exists('date_string')) {
19 | /**
20 | * ロケール 'ja' の日付表現を返します。
21 | * ex) 2015年1月1日(木)
22 | *
23 | * @param \Carbon\Carbon $datetime
24 | */
25 | function date_string($datetime) {
26 | $weekdaysJa = ['日', '月', '火', '水', '木', '金', '土'];
27 | return $datetime->format('Y年n月j日').'('.$weekdaysJa[$datetime->dayOfWeek].')';
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/app/config/services.php:
--------------------------------------------------------------------------------
1 | array(
18 | 'domain' => '',
19 | 'secret' => '',
20 | ),
21 |
22 | 'mandrill' => array(
23 | 'secret' => '',
24 | ),
25 |
26 | 'stripe' => array(
27 | 'model' => 'User',
28 | 'secret' => '',
29 | ),
30 |
31 | );
32 |
--------------------------------------------------------------------------------
/app/lang/ja/reminders.php:
--------------------------------------------------------------------------------
1 | "パスワードは6文字以上かつ確認フィールドと一致していなければなりません。",
17 |
18 | "user" => "このメールアドレスに一致するユーザーを見つけることが出来ませんでした。",
19 |
20 | "token" => "このパスワードリセットトークンは無効です。",
21 |
22 | "sent" => "パスワードリマインダーを送信しました。",
23 |
24 | "reset" => "パスワードをリセットしました。",
25 |
26 | );
27 |
--------------------------------------------------------------------------------
/app/lang/en/reminders.php:
--------------------------------------------------------------------------------
1 | "Passwords must be at least six characters and match the confirmation.",
17 |
18 | "user" => "We can't find a user with that e-mail address.",
19 |
20 | "token" => "This password reset token is invalid.",
21 |
22 | "sent" => "Password reminder sent!",
23 |
24 | "reset" => "Password has been reset!",
25 |
26 | );
27 |
--------------------------------------------------------------------------------
/app/tests/TestCase.php:
--------------------------------------------------------------------------------
1 | getStatusCode());
28 | }
29 | }
30 |
31 | }
32 |
--------------------------------------------------------------------------------
/app/models/Todo.php:
--------------------------------------------------------------------------------
1 | '',
17 |
18 | /*
19 | |--------------------------------------------------------------------------
20 | | Workbench Author E-Mail Address
21 | |--------------------------------------------------------------------------
22 | |
23 | | Like the option above, your e-mail address is used when generating new
24 | | workbench packages. The e-mail is placed in your composer.json file
25 | | automatically after the package is created by the workbench tool.
26 | |
27 | */
28 |
29 | 'email' => '',
30 |
31 | );
32 |
--------------------------------------------------------------------------------
/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "laravel-plus/laravel4",
3 | "description": "The Laravel Framework.",
4 | "keywords": ["framework", "laravel"],
5 | "type": "project",
6 | "license": "MIT",
7 | "require": {
8 | "laravel/framework": "4.2.*",
9 | "laravel-plus/extension": "1.*",
10 | "barryvdh/laravel-debugbar": "1.*"
11 | },
12 | "require-dev": {
13 | "phpunit/phpunit": "4.*"
14 | },
15 | "autoload": {
16 | "classmap": [
17 | "app/commands",
18 | "app/controllers",
19 | "app/models",
20 | "app/database/migrations",
21 | "app/database/seeds",
22 | "app/tests/TestCase.php"
23 | ]
24 | },
25 | "scripts": {
26 | "post-install-cmd": [
27 | "php artisan clear-compiled",
28 | "php artisan optimize"
29 | ],
30 | "post-update-cmd": [
31 | "php artisan clear-compiled",
32 | "php artisan optimize"
33 | ],
34 | "post-create-project-cmd": [
35 | "php artisan key:generate"
36 | ]
37 | },
38 | "config": {
39 | "preferred-install": "dist"
40 | },
41 | "minimum-stability": "stable"
42 | }
43 |
--------------------------------------------------------------------------------
/app/config/view.php:
--------------------------------------------------------------------------------
1 | array(__DIR__.'/../views'),
17 |
18 | /*
19 | |--------------------------------------------------------------------------
20 | | Pagination View
21 | |--------------------------------------------------------------------------
22 | |
23 | | This view will be used to render the pagination link output, and can
24 | | be easily customized here to show any view you like. A clean view
25 | | compatible with Twitter's Bootstrap is given to you by default.
26 | |
27 | */
28 |
29 | 'pagination' => 'pagination::slider-3',
30 |
31 | );
32 |
--------------------------------------------------------------------------------
/app/config/production/database.php:
--------------------------------------------------------------------------------
1 | array(
22 |
23 | 'mysql' => array(
24 | 'username' => '',
25 | 'password' => '',
26 | 'prefix' => '',
27 | ),
28 |
29 | 'pgsql' => array(
30 | 'username' => '',
31 | 'password' => '',
32 | 'prefix' => '',
33 | 'schema' => 'public',
34 | ),
35 |
36 | ),
37 |
38 | );
39 |
--------------------------------------------------------------------------------
/app/views/layouts/default.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | {{ $metadata->page_title }}
11 |
12 |
13 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 | {{-- 解説: ここに各ページの内容が展開されます。--}}
30 | @yield ('content')
31 |
32 | {{-- 解説: 'app/views/partials/footer.blade.php' の内容をこの箇所に展開します。 --}}
33 | @include ('partials.footer')
34 |
35 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/app/views/partials/todos/03_trashed_section.blade.php:
--------------------------------------------------------------------------------
1 | {{-- 削除済みTODOリスト --}}
2 |
3 |
4 |
アーカイブ {{ count($trashedTodos) }}
5 |
6 |
7 |
8 |
9 | タイトル
10 | 完了日
11 | 削除日
12 |
13 |
14 |
15 |
16 | @if (count($trashedTodos) > 0)
17 | @foreach ($trashedTodos as $todo)
18 |
19 |
20 | {{{ $todo->title }}}
21 |
22 |
23 | @if ($todo->completed_at)
24 | {{ date_string($todo->completed_at) }}
25 | @else
26 | @endif
27 |
28 |
29 | {{ date_string($todo->updated_at) }}
30 |
31 |
32 | {{ Form::open(['url' => route('todos.restore', $todo->id)]) }}
33 | 復元
34 | {{ Form::close() }}
35 |
36 |
37 | @endforeach
38 | @else
39 |
40 | まだありません。
41 |
42 | @endif
43 |
44 |
45 |
46 |
47 |
--------------------------------------------------------------------------------
/app/views/partials/todos/02_completed_section.blade.php:
--------------------------------------------------------------------------------
1 | {{-- 完了TODOリスト --}}
2 |
3 |
4 |
やったこと {{ count($completedTodos) }}
5 |
6 |
7 |
8 |
9 | タイトル
10 | 完了日
11 |
12 |
13 |
14 |
15 | @if (count($completedTodos) > 0)
16 | @foreach ($completedTodos as $todo)
17 |
18 |
19 | {{ Form::open(['url' => route('todos.update', $todo->id)]) }}
20 |
21 |
22 |
23 | {{{ $todo->title }}}
24 | {{ Form::close() }}
25 |
26 |
27 | {{ date_string($todo->completed_at) }}
28 |
29 |
30 | {{ Form::open(['url' => route('todos.delete', $todo->id)]) }}
31 |
32 | {{ Form::close() }}
33 |
34 |
35 | @endforeach
36 | @else
37 |
38 | まだありません。
39 |
40 | @endif
41 |
42 |
43 |
44 |
45 |
--------------------------------------------------------------------------------
/app/tests/RouteTest.php:
--------------------------------------------------------------------------------
1 | call('GET', '/');
13 |
14 | $this->assertEquals(302, $response->getStatusCode());
15 | }
16 |
17 | /**
18 | * TodosControllerのテスト
19 | *
20 | * @return void
21 | */
22 | public function testTodosRoutes()
23 | {
24 | // フィルタを有効にする
25 | Route::enableFilters();
26 |
27 | // GET /todos
28 | $response = $this->call('GET', '/todos');
29 | $this->assertEquals(200, $response->getStatusCode());
30 |
31 | // POST /todos
32 | $input = [
33 | '_token' => Session::token(),
34 | ];
35 | $response = $this->call('POST', '/todos', $input);
36 | $this->assertEquals(302, $response->getStatusCode());
37 | $this->assertHasOldInput();
38 |
39 | // POST /todos/1/update
40 | $input = [
41 | '_token' => Session::token(),
42 | ];
43 | $response = $this->call('POST', '/todos/1/update', $input);
44 | $this->assertEquals(404, $response->getStatusCode());
45 |
46 | // PUT /todos/1/title
47 | $input = [];
48 | $response = $this->call('PUT', '/todos/1/title', $input);
49 | $this->assertEquals(404, $response->getStatusCode());
50 |
51 | // POST /todos/1/delete
52 | $input = [
53 | '_token' => Session::token(),
54 | ];
55 | $response = $this->call('POST', '/todos/1/delete', $input);
56 | $this->assertEquals(404, $response->getStatusCode());
57 |
58 | // POST /todos/1/restore
59 | $input = [
60 | '_token' => Session::token(),
61 | ];
62 | $response = $this->call('POST', '/todos/1/restore', $input);
63 | $this->assertEquals(404, $response->getStatusCode());
64 | }
65 |
66 | }
67 |
--------------------------------------------------------------------------------
/app/routes.php:
--------------------------------------------------------------------------------
1 | 'todos'], function() {
24 | Route::get('', [
25 | 'as' => 'todos.index',
26 | 'uses' => 'TodosController@index',
27 | ]);
28 |
29 | Route::post('', [
30 | 'as' => 'todos.store',
31 | 'uses' => 'TodosController@store',
32 | ]);
33 |
34 | Route::post('{id}/update', [
35 | 'as' => 'todos.update',
36 | 'uses' => 'TodosController@update',
37 | // MEMO ルート単位のフィルタは’before', 'after'で指定する。
38 | // MEMO filter.php内の'todos.exists'フィルタ定義を有効にすること。
39 | // 'before' => 'todos.exists',
40 | ]);
41 | Route::put('{id}/title', [
42 | 'as' => 'todos.update-title',
43 | 'uses' => 'TodosController@ajaxUpdateTitle',
44 | // 'before' => 'todos.exists',
45 | ]);
46 |
47 | Route::post('{id}/delete', [
48 | 'as' => 'todos.delete',
49 | 'uses' => 'TodosController@delete',
50 | // 'before' => 'todos.exists',
51 | ]);
52 |
53 | Route::post('{id}/restore', [
54 | 'as' => 'todos.restore',
55 | 'uses' => 'TodosController@restore',
56 | // 'before' => 'todos.exists',
57 | ]);
58 | });
59 |
--------------------------------------------------------------------------------
/public/index.php:
--------------------------------------------------------------------------------
1 |
7 | */
8 |
9 | /*
10 | |--------------------------------------------------------------------------
11 | | Register The Auto Loader
12 | |--------------------------------------------------------------------------
13 | |
14 | | Composer provides a convenient, automatically generated class loader
15 | | for our application. We just need to utilize it! We'll require it
16 | | into the script here so that we do not have to worry about the
17 | | loading of any our classes "manually". Feels great to relax.
18 | |
19 | */
20 |
21 | require __DIR__.'/../bootstrap/autoload.php';
22 |
23 | /*
24 | |--------------------------------------------------------------------------
25 | | Turn On The Lights
26 | |--------------------------------------------------------------------------
27 | |
28 | | We need to illuminate PHP development, so let's turn on the lights.
29 | | This bootstraps the framework and gets it ready for use, then it
30 | | will load up this application so that we can run it and send
31 | | the responses back to the browser and delight these users.
32 | |
33 | */
34 |
35 | $app = require_once __DIR__.'/../bootstrap/start.php';
36 |
37 | /*
38 | |--------------------------------------------------------------------------
39 | | Run The Application
40 | |--------------------------------------------------------------------------
41 | |
42 | | Once we have the application, we can simply call the run method,
43 | | which will execute the request and send the response back to
44 | | the client's browser allowing them to enjoy the creative
45 | | and wonderful application we have whipped up for them.
46 | |
47 | */
48 |
49 | $app->run();
50 |
--------------------------------------------------------------------------------
/app/config/remote.php:
--------------------------------------------------------------------------------
1 | 'production',
17 |
18 | /*
19 | |--------------------------------------------------------------------------
20 | | Remote Server Connections
21 | |--------------------------------------------------------------------------
22 | |
23 | | These are the servers that will be accessible via the SSH task runner
24 | | facilities of Laravel. This feature radically simplifies executing
25 | | tasks on your servers, such as deploying out these applications.
26 | |
27 | */
28 |
29 | 'connections' => array(
30 |
31 | 'production' => array(
32 | 'host' => '',
33 | 'username' => '',
34 | 'password' => '',
35 | 'key' => '',
36 | 'keyphrase' => '',
37 | 'root' => '/var/www',
38 | ),
39 |
40 | ),
41 |
42 | /*
43 | |--------------------------------------------------------------------------
44 | | Remote Server Groups
45 | |--------------------------------------------------------------------------
46 | |
47 | | Here you may list connections under a single group name, which allows
48 | | you to easily access all of the servers at once using a short name
49 | | that is extremely easy to remember, such as "web" or "database".
50 | |
51 | */
52 |
53 | 'groups' => array(
54 |
55 | 'web' => array('production')
56 |
57 | ),
58 |
59 | );
60 |
--------------------------------------------------------------------------------
/bootstrap/paths.php:
--------------------------------------------------------------------------------
1 | __DIR__.'/../app',
17 |
18 | /*
19 | |--------------------------------------------------------------------------
20 | | Public Path
21 | |--------------------------------------------------------------------------
22 | |
23 | | The public path contains the assets for your web application, such as
24 | | your JavaScript and CSS files, and also contains the primary entry
25 | | point for web requests into these applications from the outside.
26 | |
27 | */
28 |
29 | 'public' => __DIR__.'/../public',
30 |
31 | /*
32 | |--------------------------------------------------------------------------
33 | | Base Path
34 | |--------------------------------------------------------------------------
35 | |
36 | | The base path is the root of the Laravel installation. Most likely you
37 | | will not need to change this value. But, if for some wild reason it
38 | | is necessary you will do so here, just proceed with some caution.
39 | |
40 | */
41 |
42 | 'base' => __DIR__.'/..',
43 |
44 | /*
45 | |--------------------------------------------------------------------------
46 | | Storage Path
47 | |--------------------------------------------------------------------------
48 | |
49 | | The storage path is used by Laravel to store cached Blade views, logs
50 | | and other pieces of information. You may modify the path here when
51 | | you want to change the location of this directory for your apps.
52 | |
53 | */
54 |
55 | 'storage' => __DIR__.'/../app/storage',
56 |
57 | );
58 |
--------------------------------------------------------------------------------
/app/config/auth.php:
--------------------------------------------------------------------------------
1 | 'eloquent',
19 |
20 | /*
21 | |--------------------------------------------------------------------------
22 | | Authentication Model
23 | |--------------------------------------------------------------------------
24 | |
25 | | When using the "Eloquent" authentication driver, we need to know which
26 | | Eloquent model should be used to retrieve your users. Of course, it
27 | | is often just the "User" model but you may use whatever you like.
28 | |
29 | */
30 |
31 | 'model' => 'User',
32 |
33 | /*
34 | |--------------------------------------------------------------------------
35 | | Authentication Table
36 | |--------------------------------------------------------------------------
37 | |
38 | | When using the "Database" authentication driver, we need to know which
39 | | table should be used to retrieve your users. We have chosen a basic
40 | | default value but you may easily change it to any table you like.
41 | |
42 | */
43 |
44 | 'table' => 'users',
45 |
46 | /*
47 | |--------------------------------------------------------------------------
48 | | Password Reminder Settings
49 | |--------------------------------------------------------------------------
50 | |
51 | | Here you may set the settings for password reminders, including a view
52 | | that should be used as your password reminder e-mail. You will also
53 | | be able to set the name of the table that holds the reset tokens.
54 | |
55 | | The "expire" time is the number of minutes that the reminder should be
56 | | considered valid. This security feature keeps tokens short-lived so
57 | | they have less time to be guessed. You may change this as needed.
58 | |
59 | */
60 |
61 | 'reminder' => array(
62 |
63 | 'email' => 'emails.auth.reminder',
64 |
65 | 'table' => 'password_reminders',
66 |
67 | 'expire' => 60,
68 |
69 | ),
70 |
71 | );
72 |
--------------------------------------------------------------------------------
/app/config/queue.php:
--------------------------------------------------------------------------------
1 | 'sync',
19 |
20 | /*
21 | |--------------------------------------------------------------------------
22 | | Queue Connections
23 | |--------------------------------------------------------------------------
24 | |
25 | | Here you may configure the connection information for each server that
26 | | is used by your application. A default configuration has been added
27 | | for each back-end shipped with Laravel. You are free to add more.
28 | |
29 | */
30 |
31 | 'connections' => array(
32 |
33 | 'sync' => array(
34 | 'driver' => 'sync',
35 | ),
36 |
37 | 'beanstalkd' => array(
38 | 'driver' => 'beanstalkd',
39 | 'host' => 'localhost',
40 | 'queue' => 'default',
41 | 'ttr' => 60,
42 | ),
43 |
44 | 'sqs' => array(
45 | 'driver' => 'sqs',
46 | 'key' => 'your-public-key',
47 | 'secret' => 'your-secret-key',
48 | 'queue' => 'your-queue-url',
49 | 'region' => 'us-east-1',
50 | ),
51 |
52 | 'iron' => array(
53 | 'driver' => 'iron',
54 | 'host' => 'mq-aws-us-east-1.iron.io',
55 | 'token' => 'your-token',
56 | 'project' => 'your-project-id',
57 | 'queue' => 'your-queue-name',
58 | 'encrypt' => true,
59 | ),
60 |
61 | 'redis' => array(
62 | 'driver' => 'redis',
63 | 'queue' => 'default',
64 | ),
65 |
66 | ),
67 |
68 | /*
69 | |--------------------------------------------------------------------------
70 | | Failed Queue Jobs
71 | |--------------------------------------------------------------------------
72 | |
73 | | These options configure the behavior of failed queue job logging so you
74 | | can control which database and table are used to store the jobs that
75 | | have failed. You may change them to any database / table you wish.
76 | |
77 | */
78 |
79 | 'failed' => array(
80 |
81 | 'database' => 'mysql', 'table' => 'failed_jobs',
82 |
83 | ),
84 |
85 | );
86 |
--------------------------------------------------------------------------------
/bootstrap/start.php:
--------------------------------------------------------------------------------
1 | detectEnvironment([
28 |
29 | 'local' => ['*.local', 'homestead'],
30 |
31 | // This setting is default enviroment
32 | 'local' => ['*'],
33 |
34 | ]);
35 |
36 | /*
37 | |--------------------------------------------------------------------------
38 | | Bind Paths
39 | |--------------------------------------------------------------------------
40 | |
41 | | Here we are binding the paths configured in paths.php to the app. You
42 | | should not be changing these here. If you need to change these you
43 | | may do so within the paths.php file and they will be bound here.
44 | |
45 | */
46 |
47 | $app->bindInstallPaths(require __DIR__.'/paths.php');
48 |
49 | /*
50 | |--------------------------------------------------------------------------
51 | | Load The Application
52 | |--------------------------------------------------------------------------
53 | |
54 | | Here we will load this Illuminate application. We will keep this in a
55 | | separate location so we can isolate the creation of an application
56 | | from the actual running of the application with a given request.
57 | |
58 | */
59 |
60 | $framework = $app['path.base'].
61 | '/vendor/laravel/framework/src';
62 |
63 | require $framework.'/Illuminate/Foundation/start.php';
64 |
65 | /*
66 | |--------------------------------------------------------------------------
67 | | Return The Application
68 | |--------------------------------------------------------------------------
69 | |
70 | | This script returns the application instance. The instance is given to
71 | | the calling script so we can separate the building of the instances
72 | | from the actual running of the application and sending responses.
73 | |
74 | */
75 |
76 | return $app;
77 |
--------------------------------------------------------------------------------
/app/filters.php:
--------------------------------------------------------------------------------
1 | setRequestForConsoleEnvironment();
45 |
46 | $artisan = Illuminate\Console\Application::start($app);
47 |
48 | /*
49 | |--------------------------------------------------------------------------
50 | | Run The Artisan Application
51 | |--------------------------------------------------------------------------
52 | |
53 | | When we run the console application, the current CLI command will be
54 | | executed in this console and the response sent back to a terminal
55 | | or another output device for the developers. Here goes nothing!
56 | |
57 | */
58 |
59 | $status = $artisan->run();
60 |
61 | /*
62 | |--------------------------------------------------------------------------
63 | | Shutdown The Application
64 | |--------------------------------------------------------------------------
65 | |
66 | | Once Artisan has finished running. We will fire off the shutdown events
67 | | so that any final work may be done by the application before we shut
68 | | down the process. This is the last thing to happen to the request.
69 | |
70 | */
71 |
72 | $app->shutdown();
73 |
74 | exit($status);
75 |
--------------------------------------------------------------------------------
/bootstrap/autoload.php:
--------------------------------------------------------------------------------
1 |
3 |
4 |
やること {{ count($incompleteTodos) }}
5 |
6 |
66 |
67 |
68 |
--------------------------------------------------------------------------------
/app/config/cache.php:
--------------------------------------------------------------------------------
1 | 'file',
19 |
20 | /*
21 | |--------------------------------------------------------------------------
22 | | File Cache Location
23 | |--------------------------------------------------------------------------
24 | |
25 | | When using the "file" cache driver, we need a location where the cache
26 | | files may be stored. A sensible default has been specified, but you
27 | | are free to change it to any other place on disk that you desire.
28 | |
29 | */
30 |
31 | 'path' => storage_path().'/cache',
32 |
33 | /*
34 | |--------------------------------------------------------------------------
35 | | Database Cache Connection
36 | |--------------------------------------------------------------------------
37 | |
38 | | When using the "database" cache driver you may specify the connection
39 | | that should be used to store the cached items. When this option is
40 | | null the default database connection will be utilized for cache.
41 | |
42 | */
43 |
44 | 'connection' => null,
45 |
46 | /*
47 | |--------------------------------------------------------------------------
48 | | Database Cache Table
49 | |--------------------------------------------------------------------------
50 | |
51 | | When using the "database" cache driver we need to know the table that
52 | | should be used to store the cached items. A default table name has
53 | | been provided but you're free to change it however you deem fit.
54 | |
55 | */
56 |
57 | 'table' => 'cache',
58 |
59 | /*
60 | |--------------------------------------------------------------------------
61 | | Memcached Servers
62 | |--------------------------------------------------------------------------
63 | |
64 | | Now you may specify an array of your Memcached servers that should be
65 | | used when utilizing the Memcached cache driver. All of the servers
66 | | should contain a value for "host", "port", and "weight" options.
67 | |
68 | */
69 |
70 | 'memcached' => array(
71 |
72 | array('host' => '127.0.0.1', 'port' => 11211, 'weight' => 100),
73 |
74 | ),
75 |
76 | /*
77 | |--------------------------------------------------------------------------
78 | | Cache Key Prefix
79 | |--------------------------------------------------------------------------
80 | |
81 | | When utilizing a RAM based store such as APC or Memcached, there might
82 | | be other applications utilizing the same cache. So, we'll specify a
83 | | value to get prefixed to all our keys so we can avoid collisions.
84 | |
85 | */
86 |
87 | 'prefix' => 'laravel',
88 |
89 | );
90 |
--------------------------------------------------------------------------------
/app/start/global.php:
--------------------------------------------------------------------------------
1 | page_title = '例2: TODOリスト';
7 | $metadata->page_description = 'Laravel4.2で作るWebアプリケーションのサンプルです。';
8 | $metadata->page_url = 'http://laravel4.samples.jumilla.me/todos';
9 | ?>
10 | {{-- 解説: レイアウトを指定しています。--}}
11 | @extends ('layouts.default')
12 |
13 |
14 | {{-- 解説: ここにインラインのCSSを記述します。--}}
15 | @section ('inline-style')
16 | {{-- 解説: レイアウト内のセクションに追記するために、@parentを指定します。 --}}
17 | @parent
18 | .todos-list form {
19 | display: inline-block;
20 | }
21 | #todos-incomplete th.title,
22 | #todos-completed th.title {
23 | padding-left: 48px;
24 | }
25 | @stop
26 |
27 |
28 | {{-- 解説: ここにインラインのJavaScriptを記述します。--}}
29 | @section ('inline-script')
30 | {{-- 解説: レイアウト内のセクションに追記するために、@parentを指定します。 --}}
31 | @parent
32 | $('.todos-list .edit').addClass('hidden')
33 |
34 | $('.todos-list .browse button[name="edit"]').on('click', function () {
35 | var id = $(this).data('id')
36 |
37 | var browseBlock = $('#' + id + ' .browse')
38 | var editBlock = $('#' + id + ' .edit')
39 |
40 | browseBlock.addClass('hidden')
41 | editBlock.removeClass('hidden')
42 | })
43 |
44 | $('.todos-list .edit button[name="update"]').on('click', function () {
45 | var id = $(this).data('id')
46 | var updateUrl = $(this).data('url')
47 |
48 | var browseBlock = $('#' + id + ' .browse')
49 | var editBlock = $('#' + id + ' .edit')
50 |
51 | var title = $('input[name="title"]', editBlock).val()
52 |
53 | if (title.trim() == '') {
54 | browseBlock.removeClass('hidden')
55 | editBlock.addClass('hidden')
56 | return;
57 | }
58 |
59 | $.ajax({
60 | type: 'PUT',
61 | url: updateUrl,
62 | data: {
63 | title: title,
64 | _token: '{{ Session::token() }}',
65 | },
66 | success: function () {
67 | $('[name="title"]', browseBlock).text(title)
68 | browseBlock.removeClass('hidden')
69 | editBlock.addClass('hidden')
70 | },
71 | error: function (XMLHttpRequest, textStatus, errorThrown) {
72 | if (XMLHttpRequest.status == 400) {
73 | response = JSON.parse(XMLHttpRequest.responseText)
74 | for (var field in response.errors) {
75 | alert(response.errors[field])
76 | }
77 | }
78 | else {
79 | alert('タイトル更新時にエラーが発生しました。')
80 | }
81 | },
82 | })
83 | })
84 |
85 | $('.todos-list .edit button[name="cancel"]').on('click', function () {
86 | var id = $(this).data('id')
87 |
88 | var browseBlock = $('#' + id + ' .browse')
89 | var editBlock = $('#' + id + ' .edit')
90 |
91 | browseBlock.removeClass('hidden')
92 | editBlock.addClass('hidden')
93 | })
94 | @stop
95 |
96 |
97 | {{-- 解説: ここにページのHTMLを記述します。--}}
98 | @section ('content')
99 |
107 |
108 |
109 | {{-- 新規TODO入力欄 --}}
110 | @include ('partials.todos.00_input_section')
111 |
112 |
113 |
114 | {{-- 未完了TODOリスト --}}
115 | @include ('partials.todos.01_incomplete_section')
116 |
117 | {{-- 完了TODOリスト --}}
118 | @include ('partials.todos.02_completed_section')
119 |
120 | {{-- 削除済みTODOリスト --}}
121 | @include ('partials.todos.03_trashed_section')
122 |
123 |
124 | @stop
125 |
--------------------------------------------------------------------------------
/app/config/database.php:
--------------------------------------------------------------------------------
1 | PDO::FETCH_CLASS,
17 |
18 | /*
19 | |--------------------------------------------------------------------------
20 | | Default Database Connection Name
21 | |--------------------------------------------------------------------------
22 | |
23 | | Here you may specify which of the database connections below you wish
24 | | to use as your default connection for all database work. Of course
25 | | you may use many connections at once using the Database library.
26 | |
27 | */
28 |
29 | 'default' => 'mysql',
30 |
31 | /*
32 | |--------------------------------------------------------------------------
33 | | Database Connections
34 | |--------------------------------------------------------------------------
35 | |
36 | | Here are each of the database connections setup for your application.
37 | | Of course, examples of configuring each database platform that is
38 | | supported by Laravel is shown below to make development simple.
39 | |
40 | |
41 | | All database work in Laravel is done through the PHP PDO facilities
42 | | so make sure you have the driver for your particular database of
43 | | choice installed on your machine before you begin development.
44 | |
45 | */
46 |
47 | 'connections' => array(
48 |
49 | 'sqlite' => array(
50 | 'driver' => 'sqlite',
51 | 'database' => storage_path().'/database/'.app('env').'.sqlite',
52 | 'prefix' => '',
53 | ),
54 |
55 | 'mysql' => array(
56 | 'driver' => 'mysql',
57 | 'host' => 'localhost',
58 | 'database' => '',
59 | 'username' => '',
60 | 'password' => '',
61 | 'charset' => 'utf8',
62 | 'collation' => 'utf8_unicode_ci',
63 | 'prefix' => '',
64 | ),
65 |
66 | 'pgsql' => array(
67 | 'driver' => 'pgsql',
68 | 'host' => 'localhost',
69 | 'database' => '',
70 | 'username' => '',
71 | 'password' => '',
72 | 'charset' => 'utf8',
73 | 'prefix' => '',
74 | 'schema' => 'public',
75 | ),
76 |
77 | 'sqlsrv' => array(
78 | 'driver' => 'sqlsrv',
79 | 'host' => 'localhost',
80 | 'database' => 'database',
81 | 'username' => 'root',
82 | 'password' => '',
83 | 'prefix' => '',
84 | ),
85 |
86 | ),
87 |
88 | /*
89 | |--------------------------------------------------------------------------
90 | | Migration Repository Table
91 | |--------------------------------------------------------------------------
92 | |
93 | | This table keeps track of all the migrations that have already run for
94 | | your application. Using this information, we can determine which of
95 | | the migrations on disk haven't actually been run in the database.
96 | |
97 | */
98 |
99 | 'migrations' => 'migrations',
100 |
101 | /*
102 | |--------------------------------------------------------------------------
103 | | Redis Databases
104 | |--------------------------------------------------------------------------
105 | |
106 | | Redis is an open source, fast, and advanced key-value store that also
107 | | provides a richer set of commands than a typical key-value systems
108 | | such as APC or Memcached. Laravel makes it easy to dig right in.
109 | |
110 | */
111 |
112 | 'redis' => array(
113 |
114 | 'cluster' => false,
115 |
116 | 'default' => array(
117 | 'host' => '127.0.0.1',
118 | 'port' => 6379,
119 | 'database' => 0,
120 | ),
121 |
122 | ),
123 |
124 | );
125 |
--------------------------------------------------------------------------------
/app/config/mail.php:
--------------------------------------------------------------------------------
1 | 'smtp',
19 |
20 | /*
21 | |--------------------------------------------------------------------------
22 | | SMTP Host Address
23 | |--------------------------------------------------------------------------
24 | |
25 | | Here you may provide the host address of the SMTP server used by your
26 | | applications. A default option is provided that is compatible with
27 | | the Mailgun mail service which will provide reliable deliveries.
28 | |
29 | */
30 |
31 | 'host' => 'smtp.mailgun.org',
32 |
33 | /*
34 | |--------------------------------------------------------------------------
35 | | SMTP Host Port
36 | |--------------------------------------------------------------------------
37 | |
38 | | This is the SMTP port used by your application to deliver e-mails to
39 | | users of the application. Like the host we have set this value to
40 | | stay compatible with the Mailgun e-mail application by default.
41 | |
42 | */
43 |
44 | 'port' => 587,
45 |
46 | /*
47 | |--------------------------------------------------------------------------
48 | | Global "From" Address
49 | |--------------------------------------------------------------------------
50 | |
51 | | You may wish for all e-mails sent by your application to be sent from
52 | | the same address. Here, you may specify a name and address that is
53 | | used globally for all e-mails that are sent by your application.
54 | |
55 | */
56 |
57 | 'from' => array('address' => null, 'name' => null),
58 |
59 | /*
60 | |--------------------------------------------------------------------------
61 | | E-Mail Encryption Protocol
62 | |--------------------------------------------------------------------------
63 | |
64 | | Here you may specify the encryption protocol that should be used when
65 | | the application send e-mail messages. A sensible default using the
66 | | transport layer security protocol should provide great security.
67 | |
68 | */
69 |
70 | 'encryption' => 'tls',
71 |
72 | /*
73 | |--------------------------------------------------------------------------
74 | | SMTP Server Username
75 | |--------------------------------------------------------------------------
76 | |
77 | | If your SMTP server requires a username for authentication, you should
78 | | set it here. This will get used to authenticate with your server on
79 | | connection. You may also set the "password" value below this one.
80 | |
81 | */
82 |
83 | 'username' => null,
84 |
85 | /*
86 | |--------------------------------------------------------------------------
87 | | SMTP Server Password
88 | |--------------------------------------------------------------------------
89 | |
90 | | Here you may set the password required by your SMTP server to send out
91 | | messages from your application. This will be given to the server on
92 | | connection so that the application will be able to send messages.
93 | |
94 | */
95 |
96 | 'password' => null,
97 |
98 | /*
99 | |--------------------------------------------------------------------------
100 | | Sendmail System Path
101 | |--------------------------------------------------------------------------
102 | |
103 | | When using the "sendmail" driver to send e-mails, we will need to know
104 | | the path to where Sendmail lives on this server. A default path has
105 | | been provided here, which will work well on most of your systems.
106 | |
107 | */
108 |
109 | 'sendmail' => '/usr/sbin/sendmail -bs',
110 |
111 | /*
112 | |--------------------------------------------------------------------------
113 | | Mail "Pretend"
114 | |--------------------------------------------------------------------------
115 | |
116 | | When this option is enabled, e-mail will not actually be sent over the
117 | | web and will instead be written to your application's logs files so
118 | | you may inspect the message. This is great for local development.
119 | |
120 | */
121 |
122 | 'pretend' => false,
123 |
124 | );
125 |
--------------------------------------------------------------------------------
/app/lang/ja/validation.php:
--------------------------------------------------------------------------------
1 | ":attributeを承認してください。",
17 | "active_url" => ":attributeは、有効なURLではありません。",
18 | "after" => ":attributeには、:date以降の日付を指定してください。",
19 | "alpha" => ":attributeには、アルファベッドのみ使用できます。",
20 | "alpha_dash" => ":attributeには、英数字('A-Z','a-z','0-9')とハイフンと下線('-','_')が使用できます。",
21 | "alpha_num" => ":attributeには、英数字('A-Z','a-z','0-9')が使用できます。",
22 | "array" => ":attributeには、配列を指定してください。",
23 | "before" => ":attributeには、:date以前の日付を指定してください。",
24 | "between" => array(
25 | "numeric" => ":attributeには、:minから、:maxまでの数字を指定してください。",
26 | "file" => ":attributeには、:min KBから:max KBまでのサイズのファイルを指定してください。",
27 | "string" => ":attributeは、:min文字から:max文字にしてください。",
28 | "array" => ":attributeの項目は、:min個から:max個にしてください。",
29 | ),
30 | "boolean" => ":attributeには、'true'か'false'を指定してください。",
31 | "confirmed" => ":attributeと:attribute確認が一致しません。",
32 | "date" => ":attributeは、正しい日付ではありません。",
33 | "date_format" => ":attributeの形式は、':format'と合いません。",
34 | "different" => ":attributeと:otherには、異なるものを指定してください。",
35 | "digits" => ":attributeは、:digits桁にしてください。",
36 | "digits_between" => ":attributeは、:min桁から:max桁にしてください。",
37 | "email" => ":attributeは、有効なメールアドレス形式で指定してください。",
38 | "exists" => "選択された:attributeは、有効ではありません。",
39 | "image" => ":attributeには、画像を指定してください。",
40 | "in" => "選択された:attributeは、有効ではありません。",
41 | "integer" => ":attributeには、整数を指定してください。",
42 | "ip" => ":attributeには、有効なIPアドレスを指定してください。",
43 | "max" => array(
44 | "numeric" => ":attributeには、:max以下の数字を指定してください。",
45 | "file" => ":attributeには、:max KB以下のファイルを指定してください。",
46 | "string" => ":attributeは、:max文字以下にしてください。",
47 | "array" => ":attributeの項目は、:max個以下にしてください。",
48 | ),
49 | "mimes" => ":attributeには、:valuesタイプのファイルを指定してください。",
50 | "min" => array(
51 | "numeric" => ":attributeには、:min以上の数字を指定してください。",
52 | "file" => ":attributeには、:min KB以上のファイルを指定してください。",
53 | "string" => ":attributeは、:min文字以上にしてください。",
54 | "array" => ":attributeの項目は、:max個以上にしてください。",
55 | ),
56 | "not_in" => "選択された:attributeは、有効ではありません。",
57 | "numeric" => ":attributeには、数字を指定してください。",
58 | "regex" => ":attributeには、有効な正規表現を指定してください。",
59 | "required" => ":attributeは、必ず指定してください。",
60 | "required_if" => ":otherが:valueの場合、:attributeを指定してください",
61 | "required_with" => ":valuesが指定されている場合、:attributeも指定してください。",
62 | "required_with_all" => ":valuesが全て指定されている場合、:attributeも指定してください。",
63 | "required_without" => ":valuesが指定されていない場合、:attributeを指定してください。",
64 | "required_without_all" => ":valuesが全て指定されていない場合、:attributeを指定してください。",
65 | "same" => ":attributeと:otherが一致しません。",
66 | "size" => array(
67 | "numeric" => ":attributeには、:sizeを指定してください。",
68 | "file" => ":attributeには、:size KBのファイルを指定してください。",
69 | "string" => ":attributeは、:size文字にしてください。",
70 | "array" => ":attributeの項目は、:size個にしてください。",
71 | ),
72 | "unique" => "指定の:attributeは既に使用されています。",
73 | "url" => ":attributeは、有効なURL形式で指定してください。",
74 | "timezone" => ":attributeには、有効なタイムゾーンを指定してください。",
75 |
76 | /*
77 | |--------------------------------------------------------------------------
78 | | Custom Validation Language Lines
79 | |--------------------------------------------------------------------------
80 | |
81 | | Here you may specify custom validation messages for attributes using the
82 | | convention "attribute.rule" to name the lines. This makes it quick to
83 | | specify a specific custom language line for a given attribute rule.
84 | |
85 | */
86 |
87 | 'custom' => array(
88 | 'attribute-name' => array(
89 | 'rule-name' => 'custom-message',
90 | ),
91 | ),
92 |
93 | /*
94 | |--------------------------------------------------------------------------
95 | | Custom Validation Attributes
96 | |--------------------------------------------------------------------------
97 | |
98 | | The following language lines are used to swap attribute place-holders
99 | | with something more reader friendly such as E-Mail Address instead
100 | | of "email". This simply helps us make messages a little cleaner.
101 | |
102 | */
103 |
104 | 'attributes' => array(
105 | 'title' => 'タイトル',
106 | ),
107 |
108 | );
109 |
--------------------------------------------------------------------------------
/app/config/session.php:
--------------------------------------------------------------------------------
1 | 'database',
20 |
21 | /*
22 | |--------------------------------------------------------------------------
23 | | Session Lifetime
24 | |--------------------------------------------------------------------------
25 | |
26 | | Here you may specify the number of minutes that you wish the session
27 | | to be allowed to remain idle before it expires. If you want them
28 | | to immediately expire on the browser closing, set that option.
29 | |
30 | */
31 |
32 | 'lifetime' => 120,
33 |
34 | 'expire_on_close' => false,
35 |
36 | /*
37 | |--------------------------------------------------------------------------
38 | | Session File Location
39 | |--------------------------------------------------------------------------
40 | |
41 | | When using the native session driver, we need a location where session
42 | | files may be stored. A default has been set for you but a different
43 | | location may be specified. This is only needed for file sessions.
44 | |
45 | */
46 |
47 | 'files' => storage_path().'/sessions',
48 |
49 | /*
50 | |--------------------------------------------------------------------------
51 | | Session Database Connection
52 | |--------------------------------------------------------------------------
53 | |
54 | | When using the "database" or "redis" session drivers, you may specify a
55 | | connection that should be used to manage these sessions. This should
56 | | correspond to a connection in your database configuration options.
57 | |
58 | */
59 |
60 | 'connection' => null,
61 |
62 | /*
63 | |--------------------------------------------------------------------------
64 | | Session Database Table
65 | |--------------------------------------------------------------------------
66 | |
67 | | When using the "database" session driver, you may specify the table we
68 | | should use to manage the sessions. Of course, a sensible default is
69 | | provided for you; however, you are free to change this as needed.
70 | |
71 | */
72 |
73 | 'table' => 'sessions',
74 |
75 | /*
76 | |--------------------------------------------------------------------------
77 | | Session Sweeping Lottery
78 | |--------------------------------------------------------------------------
79 | |
80 | | Some session drivers must manually sweep their storage location to get
81 | | rid of old sessions from storage. Here are the chances that it will
82 | | happen on a given request. By default, the odds are 2 out of 100.
83 | |
84 | */
85 |
86 | 'lottery' => array(2, 100),
87 |
88 | /*
89 | |--------------------------------------------------------------------------
90 | | Session Cookie Name
91 | |--------------------------------------------------------------------------
92 | |
93 | | Here you may change the name of the cookie used to identify a session
94 | | instance by ID. The name specified here will get used every time a
95 | | new session cookie is created by the framework for every driver.
96 | |
97 | */
98 |
99 | 'cookie' => 'laravel_session',
100 |
101 | /*
102 | |--------------------------------------------------------------------------
103 | | Session Cookie Path
104 | |--------------------------------------------------------------------------
105 | |
106 | | The session cookie path determines the path for which the cookie will
107 | | be regarded as available. Typically, this will be the root path of
108 | | your application but you are free to change this when necessary.
109 | |
110 | */
111 |
112 | 'path' => '/',
113 |
114 | /*
115 | |--------------------------------------------------------------------------
116 | | Session Cookie Domain
117 | |--------------------------------------------------------------------------
118 | |
119 | | Here you may change the domain of the cookie used to identify a session
120 | | in your application. This will determine which domains the cookie is
121 | | available to in your application. A sensible default has been set.
122 | |
123 | */
124 |
125 | 'domain' => null,
126 |
127 | /*
128 | |--------------------------------------------------------------------------
129 | | HTTPS Only Cookies
130 | |--------------------------------------------------------------------------
131 | |
132 | | By setting this option to true, session cookies will only be sent back
133 | | to the server if the browser has a HTTPS connection. This will keep
134 | | the cookie from being sent to you if it can not be done securely.
135 | |
136 | */
137 |
138 | 'secure' => false,
139 |
140 | );
141 |
--------------------------------------------------------------------------------
/app/lang/en/validation.php:
--------------------------------------------------------------------------------
1 | "The :attribute must be accepted.",
17 | "active_url" => "The :attribute is not a valid URL.",
18 | "after" => "The :attribute must be a date after :date.",
19 | "alpha" => "The :attribute may only contain letters.",
20 | "alpha_dash" => "The :attribute may only contain letters, numbers, and dashes.",
21 | "alpha_num" => "The :attribute may only contain letters and numbers.",
22 | "array" => "The :attribute must be an array.",
23 | "before" => "The :attribute must be a date before :date.",
24 | "between" => array(
25 | "numeric" => "The :attribute must be between :min and :max.",
26 | "file" => "The :attribute must be between :min and :max kilobytes.",
27 | "string" => "The :attribute must be between :min and :max characters.",
28 | "array" => "The :attribute must have between :min and :max items.",
29 | ),
30 | "boolean" => "The :attribute field must be true or false.",
31 | "confirmed" => "The :attribute confirmation does not match.",
32 | "date" => "The :attribute is not a valid date.",
33 | "date_format" => "The :attribute does not match the format :format.",
34 | "different" => "The :attribute and :other must be different.",
35 | "digits" => "The :attribute must be :digits digits.",
36 | "digits_between" => "The :attribute must be between :min and :max digits.",
37 | "email" => "The :attribute must be a valid email address.",
38 | "exists" => "The selected :attribute is invalid.",
39 | "image" => "The :attribute must be an image.",
40 | "in" => "The selected :attribute is invalid.",
41 | "integer" => "The :attribute must be an integer.",
42 | "ip" => "The :attribute must be a valid IP address.",
43 | "max" => array(
44 | "numeric" => "The :attribute may not be greater than :max.",
45 | "file" => "The :attribute may not be greater than :max kilobytes.",
46 | "string" => "The :attribute may not be greater than :max characters.",
47 | "array" => "The :attribute may not have more than :max items.",
48 | ),
49 | "mimes" => "The :attribute must be a file of type: :values.",
50 | "min" => array(
51 | "numeric" => "The :attribute must be at least :min.",
52 | "file" => "The :attribute must be at least :min kilobytes.",
53 | "string" => "The :attribute must be at least :min characters.",
54 | "array" => "The :attribute must have at least :min items.",
55 | ),
56 | "not_in" => "The selected :attribute is invalid.",
57 | "numeric" => "The :attribute must be a number.",
58 | "regex" => "The :attribute format is invalid.",
59 | "required" => "The :attribute field is required.",
60 | "required_if" => "The :attribute field is required when :other is :value.",
61 | "required_with" => "The :attribute field is required when :values is present.",
62 | "required_with_all" => "The :attribute field is required when :values is present.",
63 | "required_without" => "The :attribute field is required when :values is not present.",
64 | "required_without_all" => "The :attribute field is required when none of :values are present.",
65 | "same" => "The :attribute and :other must match.",
66 | "size" => array(
67 | "numeric" => "The :attribute must be :size.",
68 | "file" => "The :attribute must be :size kilobytes.",
69 | "string" => "The :attribute must be :size characters.",
70 | "array" => "The :attribute must contain :size items.",
71 | ),
72 | "unique" => "The :attribute has already been taken.",
73 | "url" => "The :attribute format is invalid.",
74 | "timezone" => "The :attribute must be a valid zone.",
75 |
76 | /*
77 | |--------------------------------------------------------------------------
78 | | Custom Validation Language Lines
79 | |--------------------------------------------------------------------------
80 | |
81 | | Here you may specify custom validation messages for attributes using the
82 | | convention "attribute.rule" to name the lines. This makes it quick to
83 | | specify a specific custom language line for a given attribute rule.
84 | |
85 | */
86 |
87 | 'custom' => array(
88 | 'attribute-name' => array(
89 | 'rule-name' => 'custom-message',
90 | ),
91 | ),
92 |
93 | /*
94 | |--------------------------------------------------------------------------
95 | | Custom Validation Attributes
96 | |--------------------------------------------------------------------------
97 | |
98 | | The following language lines are used to swap attribute place-holders
99 | | with something more reader friendly such as E-Mail Address instead
100 | | of "email". This simply helps us make messages a little cleaner.
101 | |
102 | */
103 |
104 | 'attributes' => array(),
105 |
106 | );
107 |
--------------------------------------------------------------------------------
/app/controllers/TodosController.php:
--------------------------------------------------------------------------------
1 | beforeFilter(
14 | '@existsFilter',
15 | ['on' => ['post', 'put']]
16 | );
17 | }
18 |
19 | /**
20 | * URLパラメータのidの存在をチェックする。
21 | *
22 | * @return void
23 | */
24 | public function existsFilter()
25 | {
26 | Log::info(__METHOD__.' called.');
27 |
28 | // URLにパラメータ'id'が存在したら
29 | $id = Route::input('id');
30 | if ($id) {
31 | Log::debug("todo id(${id}) checking...");
32 |
33 | // 指定のIDがtodosテーブルに存在しなかったら
34 | if (! Todo::exists($id)) {
35 | Log::debug('Nothing!');
36 |
37 | // Webブラウザに404 Not Foundを返す
38 | App::abort(404);
39 | }
40 |
41 | Log::debug('Exists!');
42 | }
43 | else {
44 | Log::debug('url was not contained $id.');
45 | }
46 | }
47 |
48 | /**
49 | * Todoリストページを表示する。
50 | *
51 | * @return void
52 | */
53 | public function index()
54 | {
55 | // 1. 3つのグループのデータを取得する
56 |
57 | // 1.1. 未完了リストを取得する
58 | {
59 | // クエリを作成する
60 | $query = Todo::query()->select('*')->where('status', '=', Todo::STATUS_INCOMPLETE)->orderBy('updated_at', 'desc');
61 |
62 | // クエリを実行し、結果を取得する
63 | // MEMO 1件の場合はfirst()を使う
64 | $incompleteTodos = $query->get();
65 | }
66 |
67 | // 1.2. 完了リストを取得する
68 | // MEMO シンタックスシュガーを使うとこのようにシンプルに書ける。
69 | $completedTodos = Todo::whereStatus(Todo::STATUS_COMPLETED)->orderBy('completed_at', 'desc')->get();
70 |
71 | // 1.3. 削除済みリストを取得する
72 | // MEMO ソフトデリートされたデータのフィルタリングはonlyTrashed()を使う。
73 | $trashedTodos = Todo::onlyTrashed()->get();
74 |
75 | // 2. ビューを生成する
76 | // MEMO 引数のための配列を生成するとき、compact()関数を使ってもいい。
77 | return View::make('pages.todos.index', [
78 | 'incompleteTodos' => $incompleteTodos,
79 | 'completedTodos' => $completedTodos,
80 | 'trashedTodos' => $trashedTodos,
81 | ]);
82 | }
83 |
84 | /**
85 | * 新規Todoを追加する。
86 | *
87 | * @return void
88 | */
89 | public function store()
90 | {
91 | // バリデーションルールの定義
92 | $rules = [
93 | 'title' => 'required|min:3|max:255', // 'title'は必須で3文字以上255文字以内。
94 | ];
95 |
96 | // フォームの入力データを項目名を指定して取得する
97 | $input = Input::only(['title']);
98 |
99 | // バリデーターを生成する
100 | $validator = Validator::make($input, $rules);
101 |
102 | // バリデーションを行う
103 | if ($validator->fails()) {
104 | // バリデーションに失敗したら、バリデーションのエラー情報とフォームの入力値を追加してリストページにリダイレクトする。
105 | return Redirect::route('todos.index')->withErrors($validator)->withInput();
106 | }
107 |
108 | // Todoデータを作成する(SQL発行)
109 | $todo = Todo::create([
110 | 'title' => $input['title'],
111 | 'status' => Todo::STATUS_INCOMPLETE,
112 | ]);
113 |
114 | // リストページにリダイレクトする
115 | return Redirect::route('todos.index');
116 | }
117 |
118 | /**
119 | * Todoを更新する。
120 | *
121 | * @param integer $id TodoのID
122 | * @return void
123 | */
124 | public function update($id)
125 | {
126 | // Todoモデルを取得する
127 | $todo = Todo::find($id);
128 |
129 | // バリデーションルールの定義
130 | // MEMO 文字列でルールを'|'で区切ることで複数指定できる。
131 | // MEMO 配列でルールを複数指定することもできる。
132 | $rules = [
133 | 'title' => 'required|min:3|max:255',
134 | 'status' => ['required', 'numeric', 'min:1', 'max:2'],
135 | 'dummy' => '', // ルールを指定しないとオプション扱いにできる
136 | ];
137 |
138 | // 入力データを取得する
139 | // MEMO $inputの内容をログに出力して確認してみる。dummyキーはあるが値は空(null)になっている。
140 | $input = Input::only(array_keys($rules));
141 | Log::debug(print_r($input, true));
142 |
143 | // バリデーションを実行する
144 | $validator = Validator::make($input, $rules);
145 | if ($validator->fails()) {
146 | return Redirect::route('todos.index')->withErrors($validator)->withInput();
147 | }
148 |
149 | // titleが指定されていたら
150 | if ($input['title'] !== null) {
151 | // titleカラムを更新する
152 | $todo->fill([
153 | 'title' => $input['title'],
154 | ]);
155 | }
156 |
157 | // statusが指定されていたら
158 | if ($input['status'] !== null) {
159 | // statusとcompleted_atカラムを更新する
160 | $todo->fill([
161 | 'status' => $input['status'],
162 | 'completed_at' => $input['status'] == Todo::STATUS_COMPLETED ? Carbon::now() : null,
163 | ]);
164 | }
165 |
166 | // データを更新する(SQL発行)
167 | $todo->save();
168 |
169 | // リストページにリダイレクトする
170 | return Redirect::route('todos.index');
171 | }
172 |
173 | /**
174 | * タイトルを更新する。
175 | *
176 | * @param integer $id TodoのID
177 | * @return void
178 | */
179 | public function ajaxUpdateTitle($id)
180 | {
181 | // Todoモデルを取得する
182 | $todo = Todo::find($id);
183 |
184 | // バリデーションルールの定義
185 | $rules = [
186 | 'title' => 'required|min:3|max:255',
187 | ];
188 |
189 | // 入力データを取得する
190 | $input = Input::only(['title']);
191 |
192 | // バリデーションを実行する
193 | $validator = Validator::make($input, $rules);
194 | if ($validator->fails()) {
195 | // Ajaxレスポンスを返す
196 | return Response::json(['result' => 'NG', 'errors' => $validator->errors()], 400);
197 | }
198 |
199 | // titleカラムを更新する
200 | $todo->fill([
201 | 'title' => $input['title'],
202 | ]);
203 |
204 | // データを更新する(SQL発行)
205 | $todo->save();
206 |
207 | // Ajaxレスポンスを返す
208 | return Response::json(['result' => 'OK'], 200);
209 | }
210 |
211 | /**
212 | * Todoを削除する。
213 | *
214 | * @param integer $id TodoのID
215 | * @return void
216 | */
217 | public function delete($id)
218 | {
219 | // Todoモデルを取得する
220 | $todo = Todo::find($id);
221 |
222 | // データを削除する(SQL発行)
223 | $todo->delete();
224 |
225 | // リストページにリダイレクトする
226 | return Redirect::route('todos.index');
227 | }
228 |
229 | public function restore($id)
230 | {
231 | // 削除されたTodoモデルを取得する
232 | $todo = Todo::onlyTrashed()->find($id);
233 |
234 | // データを復元する(SQL発行)
235 | $todo->restore();
236 |
237 | // リストページにリダイレクトする
238 | return Redirect::route('todos.index');
239 | }
240 |
241 | }
242 |
--------------------------------------------------------------------------------
/app/config/packages/barryvdh/laravel-debugbar/config.php:
--------------------------------------------------------------------------------
1 | Config::get('app.debug'),
17 |
18 | /*
19 | |--------------------------------------------------------------------------
20 | | Storage settings
21 | |--------------------------------------------------------------------------
22 | |
23 | | DebugBar stores data for session/ajax requests.
24 | | You can disable this, so the debugbar stores data in headers/session,
25 | | but this can cause problems with large data collectors.
26 | | By default, file storage (in the storage folder) is used. Redis and PDO
27 | | can also be used. For PDO, run the package migrations first.
28 | |
29 | */
30 | 'storage' => array(
31 | 'enabled' => true,
32 | 'driver' => 'file', // redis, file, pdo
33 | 'path' => storage_path() . '/debugbar', // For file driver
34 | 'connection' => null, // Leave null for default connection (Redis/PDO)
35 | ),
36 |
37 | /*
38 | |--------------------------------------------------------------------------
39 | | Vendors
40 | |--------------------------------------------------------------------------
41 | |
42 | | Vendor files are included by default, but can be set to false.
43 | | This can also be set to 'js' or 'css', to only include javascript or css vendor files.
44 | | Vendor files are for css: font-awesome (including fonts) and highlight.js (css files)
45 | | and for js: jquery and and highlight.js
46 | | So if you want syntax highlighting, set it to true.
47 | | jQuery is set to not conflict with existing jQuery scripts.
48 | |
49 | */
50 |
51 | 'include_vendors' => true,
52 |
53 | /*
54 | |--------------------------------------------------------------------------
55 | | Capture Ajax Requests
56 | |--------------------------------------------------------------------------
57 | |
58 | | The Debugbar can capture Ajax requests and display them. If you don't want this (ie. because of errors),
59 | | you can use this option to disable sending the data through the headers.
60 | |
61 | */
62 |
63 | 'capture_ajax' => true,
64 |
65 | /*
66 | |--------------------------------------------------------------------------
67 | | Capture Console Commands
68 | |--------------------------------------------------------------------------
69 | |
70 | | The Debugbar can listen to Artisan commands. You can view them with the browse button in the Debugbar.
71 | |
72 | */
73 |
74 | 'capture_console' => false,
75 |
76 | /*
77 | |--------------------------------------------------------------------------
78 | | DataCollectors
79 | |--------------------------------------------------------------------------
80 | |
81 | | Enable/disable DataCollectors
82 | |
83 | */
84 |
85 | 'collectors' => array(
86 | 'phpinfo' => true, // Php version
87 | 'messages' => true, // Messages
88 | 'time' => true, // Time Datalogger
89 | 'memory' => true, // Memory usage
90 | 'exceptions' => true, // Exception displayer
91 | 'log' => true, // Logs from Monolog (merged in messages if enabled)
92 | 'db' => true, // Show database (PDO) queries and bindings
93 | 'views' => true, // Views with their data
94 | 'route' => true, // Current route information
95 | 'laravel' => false, // Laravel version and environment
96 | 'events' => false, // All events fired
97 | 'default_request' => false, // Regular or special Symfony request logger
98 | 'symfony_request' => true, // Only one can be enabled..
99 | 'mail' => true, // Catch mail messages
100 | 'logs' => false, // Add the latest log messages
101 | 'files' => false, // Show the included files
102 | 'config' => false, // Display config settings
103 | 'auth' => false, // Display Laravel authentication status
104 | 'session' => false, // Display session data in a separate tab
105 | ),
106 |
107 | /*
108 | |--------------------------------------------------------------------------
109 | | Extra options
110 | |--------------------------------------------------------------------------
111 | |
112 | | Configure some DataCollectors
113 | |
114 | */
115 |
116 | 'options' => array(
117 | 'auth' => array(
118 | 'show_name' => false, // Also show the users name/email in the debugbar
119 | ),
120 | 'db' => array(
121 | 'with_params' => true, // Render SQL with the parameters substituted
122 | 'timeline' => false, // Add the queries to the timeline
123 | 'backtrace' => false, // EXPERIMENTAL: Use a backtrace to find the origin of the query in your files.
124 | 'explain' => array( // EXPERIMENTAL: Show EXPLAIN output on queries
125 | 'enabled' => false,
126 | 'types' => array('SELECT'), // array('SELECT', 'INSERT', 'UPDATE', 'DELETE'); for MySQL 5.6.3+
127 | ),
128 | 'hints' => true, // Show hints for common mistakes
129 | ),
130 | 'mail' => array(
131 | 'full_log' => false
132 | ),
133 | 'views' => array(
134 | 'data' => false, //Note: Can slow down the application, because the data can be quite large..
135 | ),
136 | 'route' => array(
137 | 'label' => true // show complete route on bar
138 | ),
139 | 'logs' => array(
140 | 'file' => null
141 | ),
142 | ),
143 |
144 | /*
145 | |--------------------------------------------------------------------------
146 | | Inject Debugbar in Response
147 | |--------------------------------------------------------------------------
148 | |
149 | | Usually, the debugbar is added just before , by listening to the
150 | | Response after the App is done. If you disable this, you have to add them
151 | | in your template yourself. See http://phpdebugbar.com/docs/rendering.html
152 | |
153 | */
154 |
155 | 'inject' => true,
156 |
157 | );
158 |
--------------------------------------------------------------------------------
/app/config/app.php:
--------------------------------------------------------------------------------
1 | false,
17 |
18 | /*
19 | |--------------------------------------------------------------------------
20 | | Application URL
21 | |--------------------------------------------------------------------------
22 | |
23 | | This URL is used by the console to properly generate URLs when using
24 | | the Artisan command line tool. You should set this to the root of
25 | | your application so that it is used when running Artisan tasks.
26 | |
27 | */
28 |
29 | 'url' => 'http://localhost',
30 |
31 | /*
32 | |--------------------------------------------------------------------------
33 | | Application Timezone
34 | |--------------------------------------------------------------------------
35 | |
36 | | Here you may specify the default timezone for your application, which
37 | | will be used by the PHP date and date-time functions. We have gone
38 | | ahead and set this to a sensible default for you out of the box.
39 | |
40 | */
41 |
42 | 'timezone' => 'UTC',
43 |
44 | /*
45 | |--------------------------------------------------------------------------
46 | | Application Locale Configuration
47 | |--------------------------------------------------------------------------
48 | |
49 | | The application locale determines the default locale that will be used
50 | | by the translation service provider. You are free to set this value
51 | | to any of the locales which will be supported by the application.
52 | |
53 | */
54 |
55 | 'locale' => 'ja',
56 |
57 | /*
58 | |--------------------------------------------------------------------------
59 | | Application Fallback Locale
60 | |--------------------------------------------------------------------------
61 | |
62 | | The fallback locale determines the locale to use when the current one
63 | | is not available. You may change the value to correspond to any of
64 | | the language folders that are provided through your application.
65 | |
66 | */
67 |
68 | 'fallback_locale' => 'en',
69 |
70 | /*
71 | |--------------------------------------------------------------------------
72 | | Encryption Key
73 | |--------------------------------------------------------------------------
74 | |
75 | | This key is used by the Illuminate encrypter service and should be set
76 | | to a random, 32 character string, otherwise these encrypted strings
77 | | will not be safe. Please do this before deploying an application!
78 | |
79 | */
80 |
81 | 'key' => 'GxKkJVBZ6yTXD25cbA8PbJ9ovLKMGU5D',
82 |
83 | 'cipher' => MCRYPT_RIJNDAEL_128,
84 |
85 | /*
86 | |--------------------------------------------------------------------------
87 | | Autoloaded Service Providers
88 | |--------------------------------------------------------------------------
89 | |
90 | | The service providers listed here will be automatically loaded on the
91 | | request to your application. Feel free to add your own services to
92 | | this array to grant expanded functionality to your applications.
93 | |
94 | */
95 |
96 | 'providers' => array(
97 |
98 | 'Illuminate\Foundation\Providers\ArtisanServiceProvider',
99 | 'Illuminate\Auth\AuthServiceProvider',
100 | 'Illuminate\Cache\CacheServiceProvider',
101 | 'Illuminate\Session\CommandsServiceProvider',
102 | 'Illuminate\Foundation\Providers\ConsoleSupportServiceProvider',
103 | 'Illuminate\Routing\ControllerServiceProvider',
104 | 'Illuminate\Cookie\CookieServiceProvider',
105 | 'Illuminate\Database\DatabaseServiceProvider',
106 | 'Illuminate\Encryption\EncryptionServiceProvider',
107 | 'Illuminate\Filesystem\FilesystemServiceProvider',
108 | 'Illuminate\Hashing\HashServiceProvider',
109 | 'Illuminate\Html\HtmlServiceProvider',
110 | 'Illuminate\Log\LogServiceProvider',
111 | 'Illuminate\Mail\MailServiceProvider',
112 | 'Illuminate\Database\MigrationServiceProvider',
113 | 'Illuminate\Pagination\PaginationServiceProvider',
114 | 'Illuminate\Queue\QueueServiceProvider',
115 | 'Illuminate\Redis\RedisServiceProvider',
116 | 'Illuminate\Remote\RemoteServiceProvider',
117 | 'Illuminate\Auth\Reminders\ReminderServiceProvider',
118 | 'Illuminate\Database\SeedServiceProvider',
119 | 'Illuminate\Session\SessionServiceProvider',
120 | 'Illuminate\Translation\TranslationServiceProvider',
121 | 'Illuminate\Validation\ValidationServiceProvider',
122 | 'Illuminate\View\ViewServiceProvider',
123 | 'Illuminate\Workbench\WorkbenchServiceProvider',
124 |
125 | 'LaravelPlus\Extension\ServiceProvider',
126 | 'Barryvdh\Debugbar\ServiceProvider',
127 |
128 | ),
129 |
130 | /*
131 | |--------------------------------------------------------------------------
132 | | Service Provider Manifest
133 | |--------------------------------------------------------------------------
134 | |
135 | | The service provider manifest is used by Laravel to lazy load service
136 | | providers which are not needed for each request, as well to keep a
137 | | list of all of the services. Here, you may set its storage spot.
138 | |
139 | */
140 |
141 | 'manifest' => storage_path().'/meta',
142 |
143 | /*
144 | |--------------------------------------------------------------------------
145 | | Class Aliases
146 | |--------------------------------------------------------------------------
147 | |
148 | | This array of class aliases will be registered when this application
149 | | is started. However, feel free to register as many as you wish as
150 | | the aliases are "lazy" loaded so they don't hinder performance.
151 | |
152 | */
153 |
154 | 'aliases' => array(
155 |
156 | 'App' => 'Illuminate\Support\Facades\App',
157 | 'Artisan' => 'Illuminate\Support\Facades\Artisan',
158 | 'Auth' => 'Illuminate\Support\Facades\Auth',
159 | 'Blade' => 'Illuminate\Support\Facades\Blade',
160 | 'Cache' => 'Illuminate\Support\Facades\Cache',
161 | 'ClassLoader' => 'Illuminate\Support\ClassLoader',
162 | 'Config' => 'Illuminate\Support\Facades\Config',
163 | 'Controller' => 'Illuminate\Routing\Controller',
164 | 'Cookie' => 'Illuminate\Support\Facades\Cookie',
165 | 'Crypt' => 'Illuminate\Support\Facades\Crypt',
166 | 'DB' => 'Illuminate\Support\Facades\DB',
167 | 'Eloquent' => 'Illuminate\Database\Eloquent\Model',
168 | 'Event' => 'Illuminate\Support\Facades\Event',
169 | 'File' => 'Illuminate\Support\Facades\File',
170 | 'Form' => 'Illuminate\Support\Facades\Form',
171 | 'Hash' => 'Illuminate\Support\Facades\Hash',
172 | 'HTML' => 'Illuminate\Support\Facades\HTML',
173 | 'Input' => 'Illuminate\Support\Facades\Input',
174 | 'Lang' => 'Illuminate\Support\Facades\Lang',
175 | 'Log' => 'Illuminate\Support\Facades\Log',
176 | 'Mail' => 'Illuminate\Support\Facades\Mail',
177 | 'Paginator' => 'Illuminate\Support\Facades\Paginator',
178 | 'Password' => 'Illuminate\Support\Facades\Password',
179 | 'Queue' => 'Illuminate\Support\Facades\Queue',
180 | 'Redirect' => 'Illuminate\Support\Facades\Redirect',
181 | 'Redis' => 'Illuminate\Support\Facades\Redis',
182 | 'Request' => 'Illuminate\Support\Facades\Request',
183 | 'Response' => 'Illuminate\Support\Facades\Response',
184 | 'Route' => 'Illuminate\Support\Facades\Route',
185 | 'Schema' => 'Illuminate\Support\Facades\Schema',
186 | 'Seeder' => 'Illuminate\Database\Seeder',
187 | 'Session' => 'Illuminate\Support\Facades\Session',
188 | 'SoftDeletingTrait' => 'Illuminate\Database\Eloquent\SoftDeletingTrait',
189 | 'SSH' => 'Illuminate\Support\Facades\SSH',
190 | 'URL' => 'Illuminate\Support\Facades\URL',
191 | 'Validator' => 'Illuminate\Support\Facades\Validator',
192 | 'View' => 'Illuminate\Support\Facades\View',
193 |
194 | 'Carbon' => 'Carbon\Carbon',
195 | 'InputModel' => 'LaravelPlus\Extension\Specs\InputModel',
196 | 'FormModel' => 'LaravelPlus\Extension\Specs\FormModel',
197 |
198 | ),
199 |
200 | );
201 |
--------------------------------------------------------------------------------
/public/assets/bootstrap/css/bootstrap-theme.min.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap v3.3.1 (http://getbootstrap.com)
3 | * Copyright 2011-2014 Twitter, Inc.
4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5 | */.btn-default,.btn-primary,.btn-success,.btn-info,.btn-warning,.btn-danger{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-default:active,.btn-primary:active,.btn-success:active,.btn-info:active,.btn-warning:active,.btn-danger:active,.btn-default.active,.btn-primary.active,.btn-success.active,.btn-info.active,.btn-warning.active,.btn-danger.active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-default .badge,.btn-primary .badge,.btn-success .badge,.btn-info .badge,.btn-warning .badge,.btn-danger .badge{text-shadow:none}.btn:active,.btn.active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-o-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e0e0e0));background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;border-color:#ccc}.btn-default:hover,.btn-default:focus{background-color:#e0e0e0;background-position:0 -15px}.btn-default:active,.btn-default.active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default:disabled,.btn-default[disabled]{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-o-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#265a88));background-image:linear-gradient(to bottom,#337ab7 0,#265a88 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#245580}.btn-primary:hover,.btn-primary:focus{background-color:#265a88;background-position:0 -15px}.btn-primary:active,.btn-primary.active{background-color:#265a88;border-color:#245580}.btn-primary:disabled,.btn-primary[disabled]{background-color:#265a88;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#419641));background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:hover,.btn-success:focus{background-color:#419641;background-position:0 -15px}.btn-success:active,.btn-success.active{background-color:#419641;border-color:#3e8f3e}.btn-success:disabled,.btn-success[disabled]{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#2aabd2));background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:hover,.btn-info:focus{background-color:#2aabd2;background-position:0 -15px}.btn-info:active,.btn-info.active{background-color:#2aabd2;border-color:#28a4c9}.btn-info:disabled,.btn-info[disabled]{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#eb9316));background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:hover,.btn-warning:focus{background-color:#eb9316;background-position:0 -15px}.btn-warning:active,.btn-warning.active{background-color:#eb9316;border-color:#e38d13}.btn-warning:disabled,.btn-warning[disabled]{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c12e2a));background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:hover,.btn-danger:focus{background-color:#c12e2a;background-position:0 -15px}.btn-danger:active,.btn-danger.active{background-color:#c12e2a;border-color:#b92c28}.btn-danger:disabled,.btn-danger[disabled]{background-color:#c12e2a;background-image:none}.thumbnail,.img-thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{background-color:#e8e8e8;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{background-color:#2e6da4;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-o-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f8f8f8));background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-o-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dbdbdb),to(#e2e2e2));background-image:linear-gradient(to bottom,#dbdbdb 0,#e2e2e2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-o-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#222));background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-o-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#080808),to(#0f0f0f));background-image:linear-gradient(to bottom,#080808 0,#0f0f0f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-static-top,.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}@media (max-width:767px){.navbar .navbar-nav .open .dropdown-menu>.active>a,.navbar .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#c8e5bc));background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);background-repeat:repeat-x;border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#b9def0));background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);background-repeat:repeat-x;border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#f8efc0));background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);background-repeat:repeat-x;border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-o-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#e7c3c3));background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);background-repeat:repeat-x;border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f5f5f5));background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x}.progress-bar{background-image:-webkit-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-o-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#286090));background-image:linear-gradient(to bottom,#337ab7 0,#286090 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);background-repeat:repeat-x}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#449d44));background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);background-repeat:repeat-x}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#31b0d5));background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);background-repeat:repeat-x}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#ec971f));background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);background-repeat:repeat-x}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c9302c));background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);background-repeat:repeat-x}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{text-shadow:0 -1px 0 #286090;background-image:-webkit-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2b669a));background-image:linear-gradient(to bottom,#337ab7 0,#2b669a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);background-repeat:repeat-x;border-color:#2b669a}.list-group-item.active .badge,.list-group-item.active:hover .badge,.list-group-item.active:focus .badge{text-shadow:none}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#d0e9c6));background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);background-repeat:repeat-x}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#c4e3f3));background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);background-repeat:repeat-x}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#faf2cc));background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);background-repeat:repeat-x}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-o-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#ebcccc));background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);background-repeat:repeat-x}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#e8e8e8),to(#f5f5f5));background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x;border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)}
--------------------------------------------------------------------------------
/public/assets/bootstrap/css/bootstrap-theme.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap v3.3.1 (http://getbootstrap.com)
3 | * Copyright 2011-2014 Twitter, Inc.
4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5 | */
6 |
7 | .btn-default,
8 | .btn-primary,
9 | .btn-success,
10 | .btn-info,
11 | .btn-warning,
12 | .btn-danger {
13 | text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);
14 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
15 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
16 | }
17 | .btn-default:active,
18 | .btn-primary:active,
19 | .btn-success:active,
20 | .btn-info:active,
21 | .btn-warning:active,
22 | .btn-danger:active,
23 | .btn-default.active,
24 | .btn-primary.active,
25 | .btn-success.active,
26 | .btn-info.active,
27 | .btn-warning.active,
28 | .btn-danger.active {
29 | -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
30 | box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
31 | }
32 | .btn-default .badge,
33 | .btn-primary .badge,
34 | .btn-success .badge,
35 | .btn-info .badge,
36 | .btn-warning .badge,
37 | .btn-danger .badge {
38 | text-shadow: none;
39 | }
40 | .btn:active,
41 | .btn.active {
42 | background-image: none;
43 | }
44 | .btn-default {
45 | text-shadow: 0 1px 0 #fff;
46 | background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);
47 | background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);
48 | background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));
49 | background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);
50 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);
51 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
52 | background-repeat: repeat-x;
53 | border-color: #dbdbdb;
54 | border-color: #ccc;
55 | }
56 | .btn-default:hover,
57 | .btn-default:focus {
58 | background-color: #e0e0e0;
59 | background-position: 0 -15px;
60 | }
61 | .btn-default:active,
62 | .btn-default.active {
63 | background-color: #e0e0e0;
64 | border-color: #dbdbdb;
65 | }
66 | .btn-default:disabled,
67 | .btn-default[disabled] {
68 | background-color: #e0e0e0;
69 | background-image: none;
70 | }
71 | .btn-primary {
72 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);
73 | background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);
74 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88));
75 | background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);
76 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);
77 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
78 | background-repeat: repeat-x;
79 | border-color: #245580;
80 | }
81 | .btn-primary:hover,
82 | .btn-primary:focus {
83 | background-color: #265a88;
84 | background-position: 0 -15px;
85 | }
86 | .btn-primary:active,
87 | .btn-primary.active {
88 | background-color: #265a88;
89 | border-color: #245580;
90 | }
91 | .btn-primary:disabled,
92 | .btn-primary[disabled] {
93 | background-color: #265a88;
94 | background-image: none;
95 | }
96 | .btn-success {
97 | background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);
98 | background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);
99 | background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));
100 | background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);
101 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);
102 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
103 | background-repeat: repeat-x;
104 | border-color: #3e8f3e;
105 | }
106 | .btn-success:hover,
107 | .btn-success:focus {
108 | background-color: #419641;
109 | background-position: 0 -15px;
110 | }
111 | .btn-success:active,
112 | .btn-success.active {
113 | background-color: #419641;
114 | border-color: #3e8f3e;
115 | }
116 | .btn-success:disabled,
117 | .btn-success[disabled] {
118 | background-color: #419641;
119 | background-image: none;
120 | }
121 | .btn-info {
122 | background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
123 | background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
124 | background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));
125 | background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);
126 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);
127 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
128 | background-repeat: repeat-x;
129 | border-color: #28a4c9;
130 | }
131 | .btn-info:hover,
132 | .btn-info:focus {
133 | background-color: #2aabd2;
134 | background-position: 0 -15px;
135 | }
136 | .btn-info:active,
137 | .btn-info.active {
138 | background-color: #2aabd2;
139 | border-color: #28a4c9;
140 | }
141 | .btn-info:disabled,
142 | .btn-info[disabled] {
143 | background-color: #2aabd2;
144 | background-image: none;
145 | }
146 | .btn-warning {
147 | background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
148 | background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
149 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));
150 | background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);
151 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);
152 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
153 | background-repeat: repeat-x;
154 | border-color: #e38d13;
155 | }
156 | .btn-warning:hover,
157 | .btn-warning:focus {
158 | background-color: #eb9316;
159 | background-position: 0 -15px;
160 | }
161 | .btn-warning:active,
162 | .btn-warning.active {
163 | background-color: #eb9316;
164 | border-color: #e38d13;
165 | }
166 | .btn-warning:disabled,
167 | .btn-warning[disabled] {
168 | background-color: #eb9316;
169 | background-image: none;
170 | }
171 | .btn-danger {
172 | background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
173 | background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
174 | background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));
175 | background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);
176 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);
177 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
178 | background-repeat: repeat-x;
179 | border-color: #b92c28;
180 | }
181 | .btn-danger:hover,
182 | .btn-danger:focus {
183 | background-color: #c12e2a;
184 | background-position: 0 -15px;
185 | }
186 | .btn-danger:active,
187 | .btn-danger.active {
188 | background-color: #c12e2a;
189 | border-color: #b92c28;
190 | }
191 | .btn-danger:disabled,
192 | .btn-danger[disabled] {
193 | background-color: #c12e2a;
194 | background-image: none;
195 | }
196 | .thumbnail,
197 | .img-thumbnail {
198 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
199 | box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
200 | }
201 | .dropdown-menu > li > a:hover,
202 | .dropdown-menu > li > a:focus {
203 | background-color: #e8e8e8;
204 | background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
205 | background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
206 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
207 | background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
208 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
209 | background-repeat: repeat-x;
210 | }
211 | .dropdown-menu > .active > a,
212 | .dropdown-menu > .active > a:hover,
213 | .dropdown-menu > .active > a:focus {
214 | background-color: #2e6da4;
215 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
216 | background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
217 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
218 | background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
219 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
220 | background-repeat: repeat-x;
221 | }
222 | .navbar-default {
223 | background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);
224 | background-image: -o-linear-gradient(top, #fff 0%, #f8f8f8 100%);
225 | background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));
226 | background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);
227 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
228 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
229 | background-repeat: repeat-x;
230 | border-radius: 4px;
231 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
232 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
233 | }
234 | .navbar-default .navbar-nav > .open > a,
235 | .navbar-default .navbar-nav > .active > a {
236 | background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
237 | background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
238 | background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));
239 | background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);
240 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);
241 | background-repeat: repeat-x;
242 | -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
243 | box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
244 | }
245 | .navbar-brand,
246 | .navbar-nav > li > a {
247 | text-shadow: 0 1px 0 rgba(255, 255, 255, .25);
248 | }
249 | .navbar-inverse {
250 | background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);
251 | background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%);
252 | background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));
253 | background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);
254 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
255 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
256 | background-repeat: repeat-x;
257 | }
258 | .navbar-inverse .navbar-nav > .open > a,
259 | .navbar-inverse .navbar-nav > .active > a {
260 | background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);
261 | background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);
262 | background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));
263 | background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);
264 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);
265 | background-repeat: repeat-x;
266 | -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
267 | box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
268 | }
269 | .navbar-inverse .navbar-brand,
270 | .navbar-inverse .navbar-nav > li > a {
271 | text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);
272 | }
273 | .navbar-static-top,
274 | .navbar-fixed-top,
275 | .navbar-fixed-bottom {
276 | border-radius: 0;
277 | }
278 | @media (max-width: 767px) {
279 | .navbar .navbar-nav .open .dropdown-menu > .active > a,
280 | .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,
281 | .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {
282 | color: #fff;
283 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
284 | background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
285 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
286 | background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
287 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
288 | background-repeat: repeat-x;
289 | }
290 | }
291 | .alert {
292 | text-shadow: 0 1px 0 rgba(255, 255, 255, .2);
293 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
294 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
295 | }
296 | .alert-success {
297 | background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
298 | background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
299 | background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));
300 | background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);
301 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
302 | background-repeat: repeat-x;
303 | border-color: #b2dba1;
304 | }
305 | .alert-info {
306 | background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
307 | background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
308 | background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));
309 | background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
310 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
311 | background-repeat: repeat-x;
312 | border-color: #9acfea;
313 | }
314 | .alert-warning {
315 | background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
316 | background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
317 | background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));
318 | background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);
319 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);
320 | background-repeat: repeat-x;
321 | border-color: #f5e79e;
322 | }
323 | .alert-danger {
324 | background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
325 | background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
326 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));
327 | background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);
328 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
329 | background-repeat: repeat-x;
330 | border-color: #dca7a7;
331 | }
332 | .progress {
333 | background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
334 | background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
335 | background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));
336 | background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
337 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
338 | background-repeat: repeat-x;
339 | }
340 | .progress-bar {
341 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);
342 | background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);
343 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090));
344 | background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);
345 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);
346 | background-repeat: repeat-x;
347 | }
348 | .progress-bar-success {
349 | background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);
350 | background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);
351 | background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));
352 | background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
353 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
354 | background-repeat: repeat-x;
355 | }
356 | .progress-bar-info {
357 | background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
358 | background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
359 | background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));
360 | background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
361 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
362 | background-repeat: repeat-x;
363 | }
364 | .progress-bar-warning {
365 | background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
366 | background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
367 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));
368 | background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
369 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
370 | background-repeat: repeat-x;
371 | }
372 | .progress-bar-danger {
373 | background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);
374 | background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);
375 | background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));
376 | background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
377 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
378 | background-repeat: repeat-x;
379 | }
380 | .progress-bar-striped {
381 | background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
382 | background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
383 | background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
384 | }
385 | .list-group {
386 | border-radius: 4px;
387 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
388 | box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
389 | }
390 | .list-group-item.active,
391 | .list-group-item.active:hover,
392 | .list-group-item.active:focus {
393 | text-shadow: 0 -1px 0 #286090;
394 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);
395 | background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);
396 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a));
397 | background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);
398 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);
399 | background-repeat: repeat-x;
400 | border-color: #2b669a;
401 | }
402 | .list-group-item.active .badge,
403 | .list-group-item.active:hover .badge,
404 | .list-group-item.active:focus .badge {
405 | text-shadow: none;
406 | }
407 | .panel {
408 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
409 | box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
410 | }
411 | .panel-default > .panel-heading {
412 | background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
413 | background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
414 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
415 | background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
416 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
417 | background-repeat: repeat-x;
418 | }
419 | .panel-primary > .panel-heading {
420 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
421 | background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
422 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
423 | background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
424 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
425 | background-repeat: repeat-x;
426 | }
427 | .panel-success > .panel-heading {
428 | background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
429 | background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
430 | background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));
431 | background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
432 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
433 | background-repeat: repeat-x;
434 | }
435 | .panel-info > .panel-heading {
436 | background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
437 | background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
438 | background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));
439 | background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
440 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
441 | background-repeat: repeat-x;
442 | }
443 | .panel-warning > .panel-heading {
444 | background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
445 | background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
446 | background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));
447 | background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
448 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
449 | background-repeat: repeat-x;
450 | }
451 | .panel-danger > .panel-heading {
452 | background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
453 | background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
454 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));
455 | background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
456 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
457 | background-repeat: repeat-x;
458 | }
459 | .well {
460 | background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
461 | background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
462 | background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));
463 | background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
464 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
465 | background-repeat: repeat-x;
466 | border-color: #dcdcdc;
467 | -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
468 | box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
469 | }
470 | /*# sourceMappingURL=bootstrap-theme.css.map */
471 |
--------------------------------------------------------------------------------
/public/assets/bootstrap/js/bootstrap.min.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap v3.3.1 (http://getbootstrap.com)
3 | * Copyright 2011-2014 Twitter, Inc.
4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5 | */
6 | if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.1",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a(f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.1",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active"));a&&this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),c.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.1",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c="prev"==a?-1:1,d=this.getItemIndex(b),e=(d+c)%this.$items.length;return this.$items.eq(e)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));return a>this.$items.length-1||0>a?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i="next"==b?"first":"last",j=this;if(!f.length){if(!this.options.wrap)return;f=this.$element.find(".item")[i]()}if(f.hasClass("active"))return this.sliding=!1;var k=f[0],l=a.Event("slide.bs.carousel",{relatedTarget:k,direction:h});if(this.$element.trigger(l),!l.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var m=a(this.$indicators.children()[this.getItemIndex(f)]);m&&m.addClass("active")}var n=a.Event("slid.bs.carousel",{relatedTarget:k,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),j.sliding=!1,setTimeout(function(){j.$element.trigger(n)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(n)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&"show"==b&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a(this.options.trigger).filter('[href="#'+b.id+'"], [data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.1",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0,trigger:'[data-toggle="collapse"]'},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.find("> .panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":a.extend({},e.data(),{trigger:this});c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){b&&3===b.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=c(d),f={relatedTarget:this};e.hasClass("open")&&(e.trigger(b=a.Event("hide.bs.dropdown",f)),b.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger("hidden.bs.dropdown",f)))}))}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.1",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('
').insertAfter(a(this)).on("click",b);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(b){if(/(38|40|27|32)/.test(b.which)&&!/input|textarea/i.test(b.target.tagName)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var e=c(d),g=e.hasClass("open");if(!g&&27!=b.which||g&&27==b.which)return 27==b.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.divider):visible a",i=e.find('[role="menu"]'+h+', [role="listbox"]'+h);if(i.length){var j=i.index(b.target);38==b.which&&j>0&&j--,40==b.which&&j ').prependTo(this.$element).on("click.dismiss.bs.modal",a.proxy(function(a){a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus.call(this.$element[0]):this.hide.call(this))},this)),f&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;f?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var g=function(){d.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):g()}else b&&b()},c.prototype.handleUpdate=function(){this.options.backdrop&&this.adjustBackdrop(),this.adjustDialog()},c.prototype.adjustBackdrop=function(){this.$backdrop.css("height",0).css("height",this.$element[0].scrollHeight)},c.prototype.adjustDialog=function(){var a=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){this.bodyIsOverflowing=document.body.scrollHeight>document.documentElement.clientHeight,this.scrollbarWidth=this.measureScrollbar()},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.bodyIsOverflowing&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right","")},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b,g=f&&f.selector;(e||"destroy"!=b)&&(g?(e||d.data("bs.tooltip",e={}),e[g]||(e[g]=new c(this,f))):e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};c.VERSION="3.3.1",c.TRANSITION_DURATION=150,c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(this.options.viewport.selector||this.options.viewport);for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c&&c.$tip&&c.$tip.is(":visible")?void(c.hoverState="in"):(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.options.container?a(this.options.container):this.$element.parent(),p=this.getPosition(o);h="bottom"==h&&k.bottom+m>p.bottom?"top":"top"==h&&k.top-mp.width?"left":"left"==h&&k.left-lg.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;jg.width&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type)})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b,g=f&&f.selector;(e||"destroy"!=b)&&(g?(e||d.data("bs.popover",e={}),e[g]||(e[g]=new c(this,f))):e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.1",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},c.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){var e=a.proxy(this.process,this);this.$body=a("body"),this.$scrollElement=a(a(c).is("body")?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",e),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.1",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b="offset",c=0;a.isWindow(this.$scrollElement[0])||(b="position",c=this.$scrollElement.scrollTop()),this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight();var d=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[b]().top+c,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){d.offsets.push(this[0]),d.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,this.clear();var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.3.1",c.TRANSITION_DURATION=150,c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a"),f=a.Event("hide.bs.tab",{relatedTarget:b[0]}),g=a.Event("show.bs.tab",{relatedTarget:e[0]});if(e.trigger(f),b.trigger(g),!g.isDefaultPrevented()&&!f.isDefaultPrevented()){var h=a(d);this.activate(b.closest("li"),c),this.activate(h,h.parent(),function(){e.trigger({type:"hidden.bs.tab",relatedTarget:b[0]}),b.trigger({type:"shown.bs.tab",relatedTarget:e[0]})
7 | })}}},c.prototype.activate=function(b,d,e){function f(){g.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=this.unpin=this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.1",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return c>e?"top":!1;if("bottom"==this.affixed)return null!=c?e+this.unpin<=f.top?!1:"bottom":a-d>=e+g?!1:"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&c>=i?"top":null!=d&&i+j>=a-d?"bottom":!1},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=a("body").height();"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);
--------------------------------------------------------------------------------