diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 0000000..48e8c3b --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +laravel \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..96cc43e --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml new file mode 100644 index 0000000..e7bedf3 --- /dev/null +++ b/.idea/copyright/profiles_settings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..964d03d --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..c46c7c1 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..6564d52 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000..c7eb4f4 --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,455 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + 1455194570916 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/Console/Commands/Inspire.php b/app/Console/Commands/Inspire.php new file mode 100644 index 0000000..db9ab85 --- /dev/null +++ b/app/Console/Commands/Inspire.php @@ -0,0 +1,33 @@ +comment(PHP_EOL.Inspiring::quote().PHP_EOL); + } +} diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php new file mode 100644 index 0000000..5e4a31b --- /dev/null +++ b/app/Console/Kernel.php @@ -0,0 +1,30 @@ +command('inspire') + ->hourly(); + } +} diff --git a/app/Events/Event.php b/app/Events/Event.php new file mode 100644 index 0000000..ba2f888 --- /dev/null +++ b/app/Events/Event.php @@ -0,0 +1,8 @@ + $title, + 'body' => $blog, + 'tag' => $keywords, + 'category' => $theme, + 'type' => $type, + 'created_at' => date('Y-m-d H:i:s') + ]; + + // DB::table('blog')->insert($data); + Blog::insert($data); + + return redirect()->back(); + + } + + public function toLogin() { + return view('Admin/index'); + } + + public function logout() { + session('userid',null); + return redirect("/login"); + } + + public function newBlog() { + $themes = DB::table('category')->select('id','theme')->where('status','1')->get(); + return view('Admin/newBlog',['themes' => $themes]); + } + +} diff --git a/app/Http/Controllers/Auth/AuthController.php b/app/Http/Controllers/Auth/AuthController.php new file mode 100644 index 0000000..d96635b --- /dev/null +++ b/app/Http/Controllers/Auth/AuthController.php @@ -0,0 +1,72 @@ +middleware('guest', ['except' => 'logout']); + } + + /** + * Get a validator for an incoming registration request. + * + * @param array $data + * @return \Illuminate\Contracts\Validation\Validator + */ + protected function validator(array $data) + { + return Validator::make($data, [ + 'name' => 'required|max:255', + 'email' => 'required|email|max:255|unique:users', + 'password' => 'required|confirmed|min:6', + ]); + } + + /** + * Create a new user instance after a valid registration. + * + * @param array $data + * @return User + */ + protected function create(array $data) + { + return User::create([ + 'name' => $data['name'], + 'email' => $data['email'], + 'password' => bcrypt($data['password']), + ]); + } +} diff --git a/app/Http/Controllers/Auth/PasswordController.php b/app/Http/Controllers/Auth/PasswordController.php new file mode 100644 index 0000000..1ceed97 --- /dev/null +++ b/app/Http/Controllers/Auth/PasswordController.php @@ -0,0 +1,32 @@ +middleware('guest'); + } +} diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php new file mode 100644 index 0000000..03e02a2 --- /dev/null +++ b/app/Http/Controllers/Controller.php @@ -0,0 +1,13 @@ +orderBy('created_at', 'desc')->get(); + + for($i = 0; $i < count($blogs); $i++ ) { + + $body = $blogs[$i]->body; + $abs = mb_substr( strip_tags($body),0,400,"utf-8"); + // 博客摘要 + $blogs[$i]->abstract = $abs; + } + + return view('Index/index', ['blogs' => $blogs]); + } + + public function detail($id) { + + $blog = Blog::where('id', $id)->where('status','1')->get(); + + return view('Index/detail', ['blog' => $blog[0]]); + } + + public function archive() { + $blogs = Blog::where('status', '1')->select('id','title','category','created_at') + ->orderBy('created_at', 'desc')->get(); + + $n = 0; + $m = 0; + + $types = DB::table('category')->where('status', '1')->get(); + + if(count($blogs) === 0) { + return view('Index/archive',['date_sum' => [],'archive_blog' => [],'types' => $types]); + } + + for($i = 0; $i < count($blogs); $i++ ) { + + $created_time = $blogs[$i]->created_at; + + $timestamp = strtotime($created_time); + $mYear = date('Y', $timestamp); + $mMonth = date('m', $timestamp); + + if($i === 0) { + $cur_year = $mYear; + $cur_month = $mMonth; + } + + if($mYear === $cur_year && $mMonth === $cur_month) { + $b['id'] = $blogs[$i]->id; + $b['title'] = $blogs[$i]->title; + $b['category'] = $blogs[$i]->category; + + $blog_date[$n++] = $b; + } + else { + $archive_blog[$cur_year.''. $cur_month] = $blog_date; + $date_sum[$m++] = $cur_year.''. $cur_month; + unset($blog_date); + $n = 0; + $cur_year = $mYear; + $cur_month = $mMonth; + + $b['id'] = $blogs[$i]->id; + $b['title'] = $blogs[$i]->title; + $b['category'] = $blogs[$i]->category; + + $blog_date[$n++] = $b; + } + } + + $archive_blog[$cur_year.''. $cur_month] = $blog_date; + $date_sum[$m] = $cur_year.''. $cur_month; + + + + return view('Index/archive', ['archive_blog' => $archive_blog,'date_sum' => $date_sum,'types' => $types]); + + } + + public function resume() { + + $resume = DB::table('resume')->where('status', '1')->get(); + + for($i = 0;$i < count($resume);$i++) { + $personInfo[$resume[$i]->name] = $resume[$i]->value; + } + + + $firstLevel = DB::table('skill')->select('name','id')->where('status', '1')->where('level','1')->get(); + for($i = 0;$i < count($firstLevel);$i++) { + $child = DB::table('skill')->select('name','score')->where('status', '1')->where('parent',$firstLevel[$i]->id)->get(); + + $skill[$i]['name'] = $firstLevel[$i]->name; + $skill[$i]['childSkill'] = $child; + } + + // dd($skill); + return view('Index/resume',['personInfo' => $personInfo,'skill' => $skill]); + } + + public function contact() { + return view('Index/contact'); + } + + public function mail() { + $email = Input::get('email'); + $name = Input::get('name'); + $mess = Input::get('message'); + + if(trim($email) === '' || trim($name) === '' || trim($mess) === '') { + return redirect('contact')->with('message', '不能为空'); + } + + $pattern = "/^([0-9A-Za-z\\-_\\.]+)@([0-9a-z]+\\.[a-z]{2,3}(\\.[a-z]{2})?)$/i"; + if ( !preg_match( $pattern, $email ) ) + { + return redirect('contact')->with('message', '邮箱格式不正确'); + } + + $myMail = DB::table('config')->where('name','my_mail')->where('status', '1')->get(); + $mailTitle = DB::table('config')->where('name','mail_title')->where('status', '1')->get(); + + $data = ['email'=>$email, 'name'=>$name, 'mess'=>$mess]; + $temp = [ 'my_mail' => $myMail,'mail_title' => $mailTitle]; + + Mail::send('Static/mail', $data, function($message) use($temp) + { + for($i = 0;$i < count($temp['my_mail']);$i++) { + $message->to($temp['my_mail'][$i]->value, 'Marco')->subject($temp['mail_title'][0]->value); + } + }); + + return redirect()->back(); + + } + + public function category($id) { + + $blogs = Blog::where('status', '1')->where('category',$id)->orderBy('created_at', 'desc')->get(); + + for($i = 0; $i < count($blogs); $i++ ) { + + $body = $blogs[$i]->body; + $abs = mb_substr($body,0,400,"utf-8"); + + // 博客摘要 + $blogs[$i]->abstract = $abs; + } + + return view('Index/category',['blogs' => $blogs]); + } + + public function search() { + + $keyword = Input::get('keyword'); + $keyword = trim($keyword); + + if($keyword === '') { + redirect()->back(); + } + + $blogs = Blog::where('status', '1')->where('body','like','%'.$keyword.'%')->orWhere('title','like','%'.$keyword.'%')->orderBy('created_at', 'desc')->get(); + + for($i = 0; $i < count($blogs); $i++ ) { + + $body = $blogs[$i]->body; + $abs = mb_substr($body,0,400,"utf-8"); + + // 博客摘要 + $blogs[$i]->abstract = $abs; + } + + return view('Index/index', ['blogs' => $blogs]); + } + + public function welcome(){ + return view('welcome'); + } +} diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php new file mode 100644 index 0000000..f0d8083 --- /dev/null +++ b/app/Http/Kernel.php @@ -0,0 +1,52 @@ + [ + \App\Http\Middleware\EncryptCookies::class, + \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, + \Illuminate\Session\Middleware\StartSession::class, + \Illuminate\View\Middleware\ShareErrorsFromSession::class, + \App\Http\Middleware\VerifyCsrfToken::class, + ], + + 'api' => [ + 'throttle:60,1', + ], + ]; + + /** + * The application's route middleware. + * + * These middleware may be assigned to groups or used individually. + * + * @var array + */ + protected $routeMiddleware = [ + 'auth' => \App\Http\Middleware\Authenticate::class, + 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, + 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, + 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, + ]; +} diff --git a/app/Http/Middleware/Authenticate.php b/app/Http/Middleware/Authenticate.php new file mode 100644 index 0000000..d670fbf --- /dev/null +++ b/app/Http/Middleware/Authenticate.php @@ -0,0 +1,30 @@ +guest()) { + if ($request->ajax()) { + return response('Unauthorized.', 401); + } else { + return redirect()->guest('login'); + } + } + + return $next($request); + } +} diff --git a/app/Http/Middleware/EncryptCookies.php b/app/Http/Middleware/EncryptCookies.php new file mode 100644 index 0000000..3aa15f8 --- /dev/null +++ b/app/Http/Middleware/EncryptCookies.php @@ -0,0 +1,17 @@ +check()) { + return redirect('/'); + } + + return $next($request); + } +} diff --git a/app/Http/Middleware/VerifyCsrfToken.php b/app/Http/Middleware/VerifyCsrfToken.php new file mode 100644 index 0000000..a2c3541 --- /dev/null +++ b/app/Http/Middleware/VerifyCsrfToken.php @@ -0,0 +1,17 @@ + ['web']], function () { + // +}); diff --git a/app/Jobs/Job.php b/app/Jobs/Job.php new file mode 100644 index 0000000..55ece29 --- /dev/null +++ b/app/Jobs/Job.php @@ -0,0 +1,21 @@ +orderBy('created_at', 'desc')->select('id','title')->take(10)->get(); + + $types = DB::table('category')->where('status', '1')->get(); + + $links = DB::table('link')->where('status', '1')->get(); + + $wise_words = DB::table('config')->where('status', '1')->where('name','wise_words')->get(); + $name = DB::table('config')->where('status', '1')->where('name','name')->get(); + $pre_name = DB::table('config')->where('status', '1')->where('name','pre_name')->get(); + $sub_title = DB::table('config')->where('status', '1')->where('name','sub_title')->get(); + + view()->share(['newBlog' => $newest,'types' => $types,'links' => $links,'wise_words' => $wise_words,'name' => $name,'pre_name' => $pre_name,'sub_title' => $sub_title]); + } + + /** + * Register any application services. + * + * @return void + */ + public function register() + { + // + } +} diff --git a/app/Providers/AuthServiceProvider.php b/app/Providers/AuthServiceProvider.php new file mode 100644 index 0000000..57d88ea --- /dev/null +++ b/app/Providers/AuthServiceProvider.php @@ -0,0 +1,31 @@ + 'App\Policies\ModelPolicy', + ]; + + /** + * Register any application authentication / authorization services. + * + * @param \Illuminate\Contracts\Auth\Access\Gate $gate + * @return void + */ + public function boot(GateContract $gate) + { + $this->registerPolicies($gate); + + // + } +} diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php new file mode 100644 index 0000000..58ce962 --- /dev/null +++ b/app/Providers/EventServiceProvider.php @@ -0,0 +1,33 @@ + [ + 'App\Listeners\EventListener', + ], + ]; + + /** + * Register any other events for your application. + * + * @param \Illuminate\Contracts\Events\Dispatcher $events + * @return void + */ + public function boot(DispatcherContract $events) + { + parent::boot($events); + + // + } +} diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php new file mode 100644 index 0000000..d50b1c0 --- /dev/null +++ b/app/Providers/RouteServiceProvider.php @@ -0,0 +1,44 @@ +group(['namespace' => $this->namespace], function ($router) { + require app_path('Http/routes.php'); + }); + } +} diff --git a/app/User.php b/app/User.php new file mode 100644 index 0000000..ef6fe91 --- /dev/null +++ b/app/User.php @@ -0,0 +1,26 @@ +singleton( + Illuminate\Contracts\Http\Kernel::class, + App\Http\Kernel::class +); + +$app->singleton( + Illuminate\Contracts\Console\Kernel::class, + App\Console\Kernel::class +); + +$app->singleton( + Illuminate\Contracts\Debug\ExceptionHandler::class, + App\Exceptions\Handler::class +); + +/* +|-------------------------------------------------------------------------- +| Return The Application +|-------------------------------------------------------------------------- +| +| This script returns the application instance. The instance is given to +| the calling script so we can separate the building of the instances +| from the actual running of the application and sending responses. +| +*/ + +return $app; diff --git a/bootstrap/autoload.php b/bootstrap/autoload.php new file mode 100644 index 0000000..3830137 --- /dev/null +++ b/bootstrap/autoload.php @@ -0,0 +1,34 @@ + env('APP_ENV', 'production'), + + /* + |-------------------------------------------------------------------------- + | Application Debug Mode + |-------------------------------------------------------------------------- + | + | When your application is in debug mode, detailed error messages with + | stack traces will be shown on every error that occurs within your + | application. If disabled, a simple generic error page is shown. + | + */ + + 'debug' => env('APP_DEBUG', false), + + /* + |-------------------------------------------------------------------------- + | Application URL + |-------------------------------------------------------------------------- + | + | This URL is used by the console to properly generate URLs when using + | the Artisan command line tool. You should set this to the root of + | your application so that it is used when running Artisan tasks. + | + */ + + 'url' => 'http://localhost', + + /* + |-------------------------------------------------------------------------- + | Application Timezone + |-------------------------------------------------------------------------- + | + | Here you may specify the default timezone for your application, which + | will be used by the PHP date and date-time functions. We have gone + | ahead and set this to a sensible default for you out of the box. + | + */ + + 'timezone' => 'UTC', + + /* + |-------------------------------------------------------------------------- + | Application Locale Configuration + |-------------------------------------------------------------------------- + | + | The application locale determines the default locale that will be used + | by the translation service provider. You are free to set this value + | to any of the locales which will be supported by the application. + | + */ + + 'locale' => 'en', + + /* + |-------------------------------------------------------------------------- + | Application Fallback Locale + |-------------------------------------------------------------------------- + | + | The fallback locale determines the locale to use when the current one + | is not available. You may change the value to correspond to any of + | the language folders that are provided through your application. + | + */ + + 'fallback_locale' => 'en', + + /* + |-------------------------------------------------------------------------- + | Encryption Key + |-------------------------------------------------------------------------- + | + | This key is used by the Illuminate encrypter service and should be set + | to a random, 32 character string, otherwise these encrypted strings + | will not be safe. Please do this before deploying an application! + | + */ + + 'key' => env('APP_KEY'), + + 'cipher' => 'AES-256-CBC', + + /* + |-------------------------------------------------------------------------- + | Logging Configuration + |-------------------------------------------------------------------------- + | + | Here you may configure the log settings for your application. Out of + | the box, Laravel uses the Monolog PHP logging library. This gives + | you a variety of powerful log handlers / formatters to utilize. + | + | Available Settings: "single", "daily", "syslog", "errorlog" + | + */ + + 'log' => env('APP_LOG', 'single'), + + /* + |-------------------------------------------------------------------------- + | Autoloaded Service Providers + |-------------------------------------------------------------------------- + | + | The service providers listed here will be automatically loaded on the + | request to your application. Feel free to add your own services to + | this array to grant expanded functionality to your applications. + | + */ + + 'providers' => [ + + /* + * Laravel Framework Service Providers... + */ + Illuminate\Auth\AuthServiceProvider::class, + Illuminate\Broadcasting\BroadcastServiceProvider::class, + Illuminate\Bus\BusServiceProvider::class, + Illuminate\Cache\CacheServiceProvider::class, + Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class, + Illuminate\Cookie\CookieServiceProvider::class, + Illuminate\Database\DatabaseServiceProvider::class, + Illuminate\Encryption\EncryptionServiceProvider::class, + Illuminate\Filesystem\FilesystemServiceProvider::class, + Illuminate\Foundation\Providers\FoundationServiceProvider::class, + Illuminate\Hashing\HashServiceProvider::class, + Illuminate\Mail\MailServiceProvider::class, + Illuminate\Pagination\PaginationServiceProvider::class, + Illuminate\Pipeline\PipelineServiceProvider::class, + Illuminate\Queue\QueueServiceProvider::class, + Illuminate\Redis\RedisServiceProvider::class, + Illuminate\Auth\Passwords\PasswordResetServiceProvider::class, + Illuminate\Session\SessionServiceProvider::class, + Illuminate\Translation\TranslationServiceProvider::class, + Illuminate\Validation\ValidationServiceProvider::class, + Illuminate\View\ViewServiceProvider::class, + + /* + * Application Service Providers... + */ + App\Providers\AppServiceProvider::class, + App\Providers\AuthServiceProvider::class, + App\Providers\EventServiceProvider::class, + App\Providers\RouteServiceProvider::class, + + ], + + /* + |-------------------------------------------------------------------------- + | Class Aliases + |-------------------------------------------------------------------------- + | + | This array of class aliases will be registered when this application + | is started. However, feel free to register as many as you wish as + | the aliases are "lazy" loaded so they don't hinder performance. + | + */ + + 'aliases' => [ + + 'App' => Illuminate\Support\Facades\App::class, + 'Artisan' => Illuminate\Support\Facades\Artisan::class, + 'Auth' => Illuminate\Support\Facades\Auth::class, + 'Blade' => Illuminate\Support\Facades\Blade::class, + 'Cache' => Illuminate\Support\Facades\Cache::class, + 'Config' => Illuminate\Support\Facades\Config::class, + 'Cookie' => Illuminate\Support\Facades\Cookie::class, + 'Crypt' => Illuminate\Support\Facades\Crypt::class, + 'DB' => Illuminate\Support\Facades\DB::class, + 'Eloquent' => Illuminate\Database\Eloquent\Model::class, + 'Event' => Illuminate\Support\Facades\Event::class, + 'File' => Illuminate\Support\Facades\File::class, + 'Gate' => Illuminate\Support\Facades\Gate::class, + 'Hash' => Illuminate\Support\Facades\Hash::class, + 'Lang' => Illuminate\Support\Facades\Lang::class, + 'Log' => Illuminate\Support\Facades\Log::class, + 'Mail' => Illuminate\Support\Facades\Mail::class, + 'Password' => Illuminate\Support\Facades\Password::class, + 'Queue' => Illuminate\Support\Facades\Queue::class, + 'Redirect' => Illuminate\Support\Facades\Redirect::class, + 'Redis' => Illuminate\Support\Facades\Redis::class, + 'Request' => Illuminate\Support\Facades\Request::class, + 'Response' => Illuminate\Support\Facades\Response::class, + 'Route' => Illuminate\Support\Facades\Route::class, + 'Schema' => Illuminate\Support\Facades\Schema::class, + 'Session' => Illuminate\Support\Facades\Session::class, + 'Storage' => Illuminate\Support\Facades\Storage::class, + 'URL' => Illuminate\Support\Facades\URL::class, + 'Validator' => Illuminate\Support\Facades\Validator::class, + 'View' => Illuminate\Support\Facades\View::class, + 'Input' => Illuminate\Support\Facades\Input::class, + ], + +]; diff --git a/config/auth.php b/config/auth.php new file mode 100644 index 0000000..3fa7f49 --- /dev/null +++ b/config/auth.php @@ -0,0 +1,107 @@ + [ + 'guard' => 'web', + 'passwords' => 'users', + ], + + /* + |-------------------------------------------------------------------------- + | Authentication Guards + |-------------------------------------------------------------------------- + | + | Next, you may define every authentication guard for your application. + | Of course, a great default configuration has been defined for you + | here which uses session storage and the Eloquent user provider. + | + | All authentication drivers have a user provider. This defines how the + | users are actually retrieved out of your database or other storage + | mechanisms used by this application to persist your user's data. + | + | Supported: "session", "token" + | + */ + + 'guards' => [ + 'web' => [ + 'driver' => 'session', + 'provider' => 'users', + ], + + 'api' => [ + 'driver' => 'token', + 'provider' => 'users', + ], + ], + + /* + |-------------------------------------------------------------------------- + | User Providers + |-------------------------------------------------------------------------- + | + | All authentication drivers have a user provider. This defines how the + | users are actually retrieved out of your database or other storage + | mechanisms used by this application to persist your user's data. + | + | If you have multiple user tables or models you may configure multiple + | sources which represent each model / table. These sources may then + | be assigned to any extra authentication guards you have defined. + | + | Supported: "database", "eloquent" + | + */ + + 'providers' => [ + 'users' => [ + 'driver' => 'eloquent', + 'model' => App\User::class, + ], + + // 'users' => [ + // 'driver' => 'database', + // 'table' => 'users', + // ], + ], + + /* + |-------------------------------------------------------------------------- + | Resetting Passwords + |-------------------------------------------------------------------------- + | + | Here you may set the options for resetting passwords including the view + | that is your password reset e-mail. You may also set the name of the + | table that maintains all of the reset tokens for your application. + | + | You may specify multiple password reset configurations if you have more + | than one user table or model in the application and you want to have + | separate password reset settings based on the specific user types. + | + | The expire time is the number of minutes that the reset token should be + | considered valid. This security feature keeps tokens short-lived so + | they have less time to be guessed. You may change this as needed. + | + */ + + 'passwords' => [ + 'users' => [ + 'provider' => 'users', + 'email' => 'auth.emails.password', + 'table' => 'password_resets', + 'expire' => 60, + ], + ], + +]; diff --git a/config/broadcasting.php b/config/broadcasting.php new file mode 100644 index 0000000..abaaac3 --- /dev/null +++ b/config/broadcasting.php @@ -0,0 +1,52 @@ + env('BROADCAST_DRIVER', 'pusher'), + + /* + |-------------------------------------------------------------------------- + | Broadcast Connections + |-------------------------------------------------------------------------- + | + | Here you may define all of the broadcast connections that will be used + | to broadcast events to other systems or over websockets. Samples of + | each available type of connection are provided inside this array. + | + */ + + 'connections' => [ + + 'pusher' => [ + 'driver' => 'pusher', + 'key' => env('PUSHER_KEY'), + 'secret' => env('PUSHER_SECRET'), + 'app_id' => env('PUSHER_APP_ID'), + 'options' => [ + // + ], + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'default', + ], + + 'log' => [ + 'driver' => 'log', + ], + + ], + +]; diff --git a/config/cache.php b/config/cache.php new file mode 100644 index 0000000..379135b --- /dev/null +++ b/config/cache.php @@ -0,0 +1,79 @@ + env('CACHE_DRIVER', 'file'), + + /* + |-------------------------------------------------------------------------- + | Cache Stores + |-------------------------------------------------------------------------- + | + | Here you may define all of the cache "stores" for your application as + | well as their drivers. You may even define multiple stores for the + | same cache driver to group types of items stored in your caches. + | + */ + + 'stores' => [ + + 'apc' => [ + 'driver' => 'apc', + ], + + 'array' => [ + 'driver' => 'array', + ], + + 'database' => [ + 'driver' => 'database', + 'table' => 'cache', + 'connection' => null, + ], + + 'file' => [ + 'driver' => 'file', + 'path' => storage_path('framework/cache'), + ], + + 'memcached' => [ + 'driver' => 'memcached', + 'servers' => [ + [ + 'host' => '127.0.0.1', 'port' => 11211, 'weight' => 100, + ], + ], + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'default', + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Cache Key Prefix + |-------------------------------------------------------------------------- + | + | When utilizing a RAM based store such as APC or Memcached, there might + | be other applications utilizing the same cache. So, we'll specify a + | value to get prefixed to all our keys so we can avoid collisions. + | + */ + + 'prefix' => 'laravel', + +]; diff --git a/config/compile.php b/config/compile.php new file mode 100644 index 0000000..04807ea --- /dev/null +++ b/config/compile.php @@ -0,0 +1,35 @@ + [ + // + ], + + /* + |-------------------------------------------------------------------------- + | Compiled File Providers + |-------------------------------------------------------------------------- + | + | Here you may list service providers which define a "compiles" function + | that returns additional files that should be compiled, providing an + | easy way to get common files from any packages you are utilizing. + | + */ + + 'providers' => [ + // + ], + +]; diff --git a/config/database.php b/config/database.php new file mode 100644 index 0000000..66e88a9 --- /dev/null +++ b/config/database.php @@ -0,0 +1,127 @@ + PDO::FETCH_CLASS, + + /* + |-------------------------------------------------------------------------- + | Default Database Connection Name + |-------------------------------------------------------------------------- + | + | Here you may specify which of the database connections below you wish + | to use as your default connection for all database work. Of course + | you may use many connections at once using the Database library. + | + */ + + 'default' => env('DB_CONNECTION', 'mysql'), + + /* + |-------------------------------------------------------------------------- + | Database Connections + |-------------------------------------------------------------------------- + | + | Here are each of the database connections setup for your application. + | Of course, examples of configuring each database platform that is + | supported by Laravel is shown below to make development simple. + | + | + | All database work in Laravel is done through the PHP PDO facilities + | so make sure you have the driver for your particular database of + | choice installed on your machine before you begin development. + | + */ + + 'connections' => [ + + 'sqlite' => [ + 'driver' => 'sqlite', + 'database' => database_path('database.sqlite'), + 'prefix' => '', + ], + + 'mysql' => [ + 'driver' => 'mysql', + 'host' => env('DB_HOST', 'localhost'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => 'utf8', + 'collation' => 'utf8_unicode_ci', + 'prefix' => '', + 'strict' => false, + ], + + 'pgsql' => [ + 'driver' => 'pgsql', + 'host' => env('DB_HOST', 'localhost'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => 'utf8', + 'prefix' => '', + 'schema' => 'public', + ], + + 'sqlsrv' => [ + 'driver' => 'sqlsrv', + 'host' => env('DB_HOST', 'localhost'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => 'utf8', + 'prefix' => '', + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Migration Repository Table + |-------------------------------------------------------------------------- + | + | This table keeps track of all the migrations that have already run for + | your application. Using this information, we can determine which of + | the migrations on disk haven't actually been run in the database. + | + */ + + 'migrations' => 'migrations', + + /* + |-------------------------------------------------------------------------- + | Redis Databases + |-------------------------------------------------------------------------- + | + | Redis is an open source, fast, and advanced key-value store that also + | provides a richer set of commands than a typical key-value systems + | such as APC or Memcached. Laravel makes it easy to dig right in. + | + */ + + 'redis' => [ + + 'cluster' => false, + + 'default' => [ + 'host' => env('REDIS_HOST', 'localhost'), + 'password' => env('REDIS_PASSWORD', null), + 'port' => env('REDIS_PORT', 6379), + 'database' => 0, + ], + + ], + +]; diff --git a/config/filesystems.php b/config/filesystems.php new file mode 100644 index 0000000..3fffcf0 --- /dev/null +++ b/config/filesystems.php @@ -0,0 +1,85 @@ + 'local', + + /* + |-------------------------------------------------------------------------- + | Default Cloud Filesystem Disk + |-------------------------------------------------------------------------- + | + | Many applications store files both locally and in the cloud. For this + | reason, you may specify a default "cloud" driver here. This driver + | will be bound as the Cloud disk implementation in the container. + | + */ + + 'cloud' => 's3', + + /* + |-------------------------------------------------------------------------- + | Filesystem Disks + |-------------------------------------------------------------------------- + | + | Here you may configure as many filesystem "disks" as you wish, and you + | may even configure multiple disks of the same driver. Defaults have + | been setup for each driver as an example of the required options. + | + */ + + 'disks' => [ + + 'local' => [ + 'driver' => 'local', + 'root' => storage_path('app'), + ], + + 'ftp' => [ + 'driver' => 'ftp', + 'host' => 'ftp.example.com', + 'username' => 'your-username', + 'password' => 'your-password', + + // Optional FTP Settings... + // 'port' => 21, + // 'root' => '', + // 'passive' => true, + // 'ssl' => true, + // 'timeout' => 30, + ], + + 's3' => [ + 'driver' => 's3', + 'key' => 'your-key', + 'secret' => 'your-secret', + 'region' => 'your-region', + 'bucket' => 'your-bucket', + ], + + 'rackspace' => [ + 'driver' => 'rackspace', + 'username' => 'your-username', + 'key' => 'your-key', + 'container' => 'your-container', + 'endpoint' => 'https://identity.api.rackspacecloud.com/v2.0/', + 'region' => 'IAD', + 'url_type' => 'publicURL', + ], + + ], + +]; diff --git a/config/mail.php b/config/mail.php new file mode 100644 index 0000000..74208be --- /dev/null +++ b/config/mail.php @@ -0,0 +1,111 @@ + env('MAIL_DRIVER', 'smtp'), + + /* + |-------------------------------------------------------------------------- + | SMTP Host Address + |-------------------------------------------------------------------------- + | + | Here you may provide the host address of the SMTP server used by your + | applications. A default option is provided that is compatible with + | the Mailgun mail service which will provide reliable deliveries. + | + */ + + 'host' => env('MAIL_HOST', 'smtp.mailgun.org'), + + /* + |-------------------------------------------------------------------------- + | SMTP Host Port + |-------------------------------------------------------------------------- + | + | This is the SMTP port used by your application to deliver e-mails to + | users of the application. Like the host we have set this value to + | stay compatible with the Mailgun e-mail application by default. + | + */ + + 'port' => env('MAIL_PORT', 587), + + /* + |-------------------------------------------------------------------------- + | Global "From" Address + |-------------------------------------------------------------------------- + | + | You may wish for all e-mails sent by your application to be sent from + | the same address. Here, you may specify a name and address that is + | used globally for all e-mails that are sent by your application. + | + */ + + 'from' => ['address' => 'mrwhoareyou@126.com', 'name' => 'Mr Marco'], + + /* + |-------------------------------------------------------------------------- + | E-Mail Encryption Protocol + |-------------------------------------------------------------------------- + | + | Here you may specify the encryption protocol that should be used when + | the application send e-mail messages. A sensible default using the + | transport layer security protocol should provide great security. + | + */ + + 'encryption' => env('MAIL_ENCRYPTION', 'tls'), + + /* + |-------------------------------------------------------------------------- + | SMTP Server Username + |-------------------------------------------------------------------------- + | + | If your SMTP server requires a username for authentication, you should + | set it here. This will get used to authenticate with your server on + | connection. You may also set the "password" value below this one. + | + */ + + 'username' => env('MAIL_USERNAME'), + + /* + |-------------------------------------------------------------------------- + | SMTP Server Password + |-------------------------------------------------------------------------- + | + | Here you may set the password required by your SMTP server to send out + | messages from your application. This will be given to the server on + | connection so that the application will be able to send messages. + | + */ + + 'password' => env('MAIL_PASSWORD'), + + /* + |-------------------------------------------------------------------------- + | Sendmail System Path + |-------------------------------------------------------------------------- + | + | When using the "sendmail" driver to send e-mails, we will need to know + | the path to where Sendmail lives on this server. A default path has + | been provided here, which will work well on most of your systems. + | + */ + + 'sendmail' => '/usr/sbin/sendmail -bs', + +]; diff --git a/config/queue.php b/config/queue.php new file mode 100644 index 0000000..6c2b7d2 --- /dev/null +++ b/config/queue.php @@ -0,0 +1,86 @@ + env('QUEUE_DRIVER', 'sync'), + + /* + |-------------------------------------------------------------------------- + | Queue Connections + |-------------------------------------------------------------------------- + | + | Here you may configure the connection information for each server that + | is used by your application. A default configuration has been added + | for each back-end shipped with Laravel. You are free to add more. + | + */ + + 'connections' => [ + + 'sync' => [ + 'driver' => 'sync', + ], + + 'database' => [ + 'driver' => 'database', + 'table' => 'jobs', + 'queue' => 'default', + 'expire' => 60, + ], + + 'beanstalkd' => [ + 'driver' => 'beanstalkd', + 'host' => 'localhost', + 'queue' => 'default', + 'ttr' => 60, + ], + + 'sqs' => [ + 'driver' => 'sqs', + 'key' => 'your-public-key', + 'secret' => 'your-secret-key', + 'prefix' => 'https://sqs.us-east-1.amazonaws.com/your-account-id', + 'queue' => 'your-queue-name', + 'region' => 'us-east-1', + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'default', + 'queue' => 'default', + 'expire' => 60, + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Failed Queue Jobs + |-------------------------------------------------------------------------- + | + | These options configure the behavior of failed queue job logging so you + | can control which database and table are used to store the jobs that + | have failed. You may change them to any database / table you wish. + | + */ + + 'failed' => [ + 'database' => env('DB_CONNECTION', 'mysql'), + 'table' => 'failed_jobs', + ], + +]; diff --git a/config/services.php b/config/services.php new file mode 100644 index 0000000..93eec86 --- /dev/null +++ b/config/services.php @@ -0,0 +1,38 @@ + [ + 'domain' => env('MAILGUN_DOMAIN'), + 'secret' => env('MAILGUN_SECRET'), + ], + + 'mandrill' => [ + 'secret' => env('MANDRILL_SECRET'), + ], + + 'ses' => [ + 'key' => env('SES_KEY'), + 'secret' => env('SES_SECRET'), + 'region' => 'us-east-1', + ], + + 'stripe' => [ + 'model' => App\User::class, + 'key' => env('STRIPE_KEY'), + 'secret' => env('STRIPE_SECRET'), + ], + +]; diff --git a/config/session.php b/config/session.php new file mode 100644 index 0000000..f1b0042 --- /dev/null +++ b/config/session.php @@ -0,0 +1,153 @@ + env('SESSION_DRIVER', 'file'), + + /* + |-------------------------------------------------------------------------- + | Session Lifetime + |-------------------------------------------------------------------------- + | + | Here you may specify the number of minutes that you wish the session + | to be allowed to remain idle before it expires. If you want them + | to immediately expire on the browser closing, set that option. + | + */ + + 'lifetime' => 120, + + 'expire_on_close' => false, + + /* + |-------------------------------------------------------------------------- + | Session Encryption + |-------------------------------------------------------------------------- + | + | This option allows you to easily specify that all of your session data + | should be encrypted before it is stored. All encryption will be run + | automatically by Laravel and you can use the Session like normal. + | + */ + + 'encrypt' => false, + + /* + |-------------------------------------------------------------------------- + | Session File Location + |-------------------------------------------------------------------------- + | + | When using the native session driver, we need a location where session + | files may be stored. A default has been set for you but a different + | location may be specified. This is only needed for file sessions. + | + */ + + 'files' => storage_path('framework/sessions'), + + /* + |-------------------------------------------------------------------------- + | Session Database Connection + |-------------------------------------------------------------------------- + | + | When using the "database" or "redis" session drivers, you may specify a + | connection that should be used to manage these sessions. This should + | correspond to a connection in your database configuration options. + | + */ + + 'connection' => null, + + /* + |-------------------------------------------------------------------------- + | Session Database Table + |-------------------------------------------------------------------------- + | + | When using the "database" session driver, you may specify the table we + | should use to manage the sessions. Of course, a sensible default is + | provided for you; however, you are free to change this as needed. + | + */ + + 'table' => 'sessions', + + /* + |-------------------------------------------------------------------------- + | Session Sweeping Lottery + |-------------------------------------------------------------------------- + | + | Some session drivers must manually sweep their storage location to get + | rid of old sessions from storage. Here are the chances that it will + | happen on a given request. By default, the odds are 2 out of 100. + | + */ + + 'lottery' => [2, 100], + + /* + |-------------------------------------------------------------------------- + | Session Cookie Name + |-------------------------------------------------------------------------- + | + | Here you may change the name of the cookie used to identify a session + | instance by ID. The name specified here will get used every time a + | new session cookie is created by the framework for every driver. + | + */ + + 'cookie' => 'laravel_session', + + /* + |-------------------------------------------------------------------------- + | Session Cookie Path + |-------------------------------------------------------------------------- + | + | The session cookie path determines the path for which the cookie will + | be regarded as available. Typically, this will be the root path of + | your application but you are free to change this when necessary. + | + */ + + 'path' => '/', + + /* + |-------------------------------------------------------------------------- + | Session Cookie Domain + |-------------------------------------------------------------------------- + | + | Here you may change the domain of the cookie used to identify a session + | in your application. This will determine which domains the cookie is + | available to in your application. A sensible default has been set. + | + */ + + 'domain' => null, + + /* + |-------------------------------------------------------------------------- + | HTTPS Only Cookies + |-------------------------------------------------------------------------- + | + | By setting this option to true, session cookies will only be sent back + | to the server if the browser has a HTTPS connection. This will keep + | the cookie from being sent to you if it can not be done securely. + | + */ + + 'secure' => false, + +]; diff --git a/config/view.php b/config/view.php new file mode 100644 index 0000000..e193ab6 --- /dev/null +++ b/config/view.php @@ -0,0 +1,33 @@ + [ + realpath(base_path('resources/views')), + ], + + /* + |-------------------------------------------------------------------------- + | Compiled View Path + |-------------------------------------------------------------------------- + | + | This option determines where all the compiled Blade templates will be + | stored for your application. Typically, this is within the storage + | directory. However, as usual, you are free to change this value. + | + */ + + 'compiled' => realpath(storage_path('framework/views')), + +]; diff --git a/database/.gitignore b/database/.gitignore new file mode 100644 index 0000000..9b1dffd --- /dev/null +++ b/database/.gitignore @@ -0,0 +1 @@ +*.sqlite diff --git a/database/factories/ModelFactory.php b/database/factories/ModelFactory.php new file mode 100644 index 0000000..0876c70 --- /dev/null +++ b/database/factories/ModelFactory.php @@ -0,0 +1,21 @@ +define(App\User::class, function (Faker\Generator $faker) { + return [ + 'name' => $faker->name, + 'email' => $faker->email, + 'password' => bcrypt(str_random(10)), + 'remember_token' => str_random(10), + ]; +}); diff --git a/database/migrations/.gitkeep b/database/migrations/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/database/migrations/2014_10_12_000000_create_users_table.php b/database/migrations/2014_10_12_000000_create_users_table.php new file mode 100644 index 0000000..65d3d08 --- /dev/null +++ b/database/migrations/2014_10_12_000000_create_users_table.php @@ -0,0 +1,34 @@ +increments('id'); + $table->string('name'); + $table->string('email')->unique(); + $table->string('password', 60); + $table->rememberToken(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::drop('users'); + } +} diff --git a/database/migrations/2014_10_12_100000_create_password_resets_table.php b/database/migrations/2014_10_12_100000_create_password_resets_table.php new file mode 100644 index 0000000..00057f9 --- /dev/null +++ b/database/migrations/2014_10_12_100000_create_password_resets_table.php @@ -0,0 +1,31 @@ +string('email')->index(); + $table->string('token')->index(); + $table->timestamp('created_at'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::drop('password_resets'); + } +} diff --git a/database/seeds/.gitkeep b/database/seeds/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/database/seeds/DatabaseSeeder.php b/database/seeds/DatabaseSeeder.php new file mode 100644 index 0000000..2a28edd --- /dev/null +++ b/database/seeds/DatabaseSeeder.php @@ -0,0 +1,16 @@ +call(UserTableSeeder::class); + } +} diff --git a/public/.htaccess b/public/.htaccess new file mode 100644 index 0000000..8eb2dd0 --- /dev/null +++ b/public/.htaccess @@ -0,0 +1,16 @@ + + + Options -MultiViews + + + RewriteEngine On + + # Redirect Trailing Slashes If Not A Folder... + RewriteCond %{REQUEST_FILENAME} !-d + RewriteRule ^(.*)/$ /$1 [L,R=301] + + # Handle Front Controller... + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^ index.php [L] + diff --git a/public/css/admin.css b/public/css/admin.css new file mode 100644 index 0000000..e09226e --- /dev/null +++ b/public/css/admin.css @@ -0,0 +1,344 @@ +@charset "utf-8"; + +* { + box-sizing:border-box; + -moz-box-sizing:border-box; /* Firefox */ + -webkit-box-sizing:border-box; /* Safari */ +} + +#admin-sidebar { + width: 180px; + height: 100%; + background-color: #f0f0f0; + position: absolute; + border-right: 1px solid #ddd; +} +.main-content { + margin-left: 180px; +} +.main-container { + position: relative; +} +.page-content { + position: relative; + overflow: hidden; +} +.page-content iframe { + width: 100%; + height: 100%; + border: none; + position: absolute; + left: 0; + top: 0; +} +.page-content .current { + z-index: 99; +} +.sub-list { + display: none; +} +.tab-nav { + height: 40px; + min-width: 800px; + padding: 10px 7px 0 7px; + background-color: #fafafa; + border-bottom: 1px solid #e0e0e0; +} +.tab-nav li { + float: left; + height: 29px; + margin: 0 4px; + border: 1px solid #e0e0e0; + border-bottom: none; + background-color: #fff; + display: inline-block; + line-height: 28px; + font-size: 13px; + font-weight: bold; + position: relative; +} +.tab-nav li a { + color: #444; + display: inline-block; + padding: 0 16px; +} +.tab-nav li:hover a, +.tab-nav li.active a { + text-decoration: none; + color: #0073ea; +} +.tab-nav li.active { + color: #0073ea; +} +.tab-nav li .icon-remove { + margin-left: 10px; +} +.tab-nav li.active { + height: 30px; + border-radius: 2px; +} +.tab-nav li .icon-remove:hover { + color: #ee6356; +} +.close-tab { + padding: 0 9px 0 2px; + float: right; + cursor: pointer; + font-size: 16px; +} + +/*nava-side*/ +.nav-side { + background-color: #f0f0f0; +} +.nav-list-item a { + color: #555; + display: inline-block; + width: 100%; + height: 40px; + border-bottom: 1px solid #ddd; + font-size: 14px; + line-height: 40px; +} +.nav-list-item a:hover { + cursor: pointer; + text-decoration: none; + color: #1abc9c; +} +.nav-list-item.active > a { + color: #1abc9c; +} +.sub-list li.active a { + color: #1abc9c; +} +.nav-list-item.active > a .fa-angle-right { + transform: rotate(90deg); + transition: all 251ms; + -moz-transition: all 251ms; + -webkit-transition: all 251ms; + -o-transition: all 251ms; + -ms-transition: all 251ms; +} +.nav-list-item .fa-angle-right { + font-size: 16px; + margin-top: 11px; + margin-right: 10px; +} +.nav-list-item > a { + padding-left: 10px; +} +.sub-list li a { + color: #555; + padding-left: 26px; + background-color: #f8f8f8; +} +.nav-list-item > a i:first-child { + font-size: 16px; + margin: 0 5px; +} + +/*top*/ +#nav-top { + min-width: 1265px; + height: 40px; + background-color: #444; + background-repeat: repeat-x; +} +#nav-top a { + color: #fff; + margin-left: 10px; +} +#nav-top a:hover { + color: #f00; +} +.system-name { + margin-top: 8px; + margin-left: 16px; + color: #fff; + font-size: 16px; + display: inline-block; +} +.system-name .system-name-logo { + margin-right: 5px; +} +#nav-top-pinfo { + height: 40px; + max-width: 240px; + margin-right: 25px; + padding: 0 12px; + line-height: 40px; + color: #fff; + cursor: pointer; + font-size: 13px; + font-family: "Microsoft YaHei"; +} +#nav-top-pinfo .fa { + font-size: 16px; +} +.user-logout { + color: #d11; + margin: 0 5px; + font-family: "SimHei"; +} + +/*login*/ +#admin-log-button > span { + width: 34px; + height: 34px; + line-height: 32px; + text-align: center; + display: inline-block; + position: relative; + margin-top: 10px; + margin-left: 15px; + border: 1px solid #aaa; + border-radius: 100%; + -webkit-transition: all 0.2s ease-in-out; + -ms-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} +#admin-log-button > span:hover { + font-size: 13px; + background-color: #bbb; + color: #fff; +} +#admin-log-button input[type='submit'] { + left: 0; + top: 0; + position: absolute; + width: 100%; + height: 100%; +} +#admin-log-wrapper { + width: 330px; + height: 240px; + padding: 18px; + box-shadow: 0 0 20px rgb(180,180,180); + border-radius: 6px; + background-color: #fff; +} +.main-container { + position: relative; +} +.admin-log-title { + border-bottom: 1px solid #eee; + text-align: center; +} +.admin-log-title h2 { + font-size: 18px; + margin-bottom: 10px; + font-family: "SimHei"; +} +.admin-log-body .admin-user-info { + border: 1px solid #eee; + border-radius: 3px; + height: 34px; +} +.admin-user-info { + margin: 20px 0; +} +.admin-user-info span { + display: inline-block; + height: 100%; + width: 15%; + float: left; + text-align: center; + font-size: 17px; + padding-top: 7px; + border-right: 1px solid #eee; +} +.admin-user-info input[type='text'], +.admin-user-info input[type='password'] { + height: 100%; + width: 82%; + float: left; + border: none; + font-family: "Microsoft YaHei"; + outline: none; + padding-left: 5px; +} + +/*newBlog*/ +.col-5 { + width: 50% !important; + float: left; +} +#new-blog-wrapper { + width: 100%; + max-width: 1100px; + padding: 30px 60px; +} +#new-blog-front { + margin-bottom: 15px; +} +#new-blog-front label { + margin-right: 4px; + font-size: 15px; +} +#blog-title { + width: 280px; + height: 32px; + margin-right: 20px; + border: 1px solid #ddd; + text-indent: 6px; + outline: none; + border-radius: 1px; + font-family: "Microsoft YaHei"; +} +#blog-type { + width: 60px; + height: 31px; + outline: none; + border: 1px solid #ccc; + font-family: "Microsoft YaHei"; +} +#blog-theme { + width: 80px; + height: 31px; + margin-right: 15px; + outline: none; + border: 1px solid #ccc; + font-family: "Microsoft YaHei"; +} +#blog-keywords { + width: 140px; + height: 32px; + margin-right: 18px; + border: 1px solid #ddd; + text-indent: 6px; + outline: none; + border-radius: 1px; + font-family: "Microsoft YaHei"; +} +#new-blog-submit { + width: 88px; + height: 33px; + margin-top: 15px; + border: 1px solid #ddd; + background-color: #fff; + outline: none; + border-radius: 2px; + font-family: "Microsoft YaHei"; +} +#new-blog-submit:hover { + color: #fff; + border: none; + background-color: #ee2323; +} + +#blog-preview { + float: left; + display: inline-block; + min-height: 300px; + padding: 10px 18px; + font-size: 16px; + line-height: 22px; + overflow: auto; + font-family: "Microsoft YaHei"; +} +.half-devide { + display: inline-block; + border-right: 1px solid #ddd; +} \ No newline at end of file diff --git a/public/css/common.css b/public/css/common.css new file mode 100644 index 0000000..513c1fb --- /dev/null +++ b/public/css/common.css @@ -0,0 +1,300 @@ +@charset "utf-8"; +/* =============== + * Css reset(重新定义Html元素) + * =============== */ +html, body, div, span, iframe, +h1, h2, h3, h4, h5, h6, p, a, +del, dfn, em, img, +small, strong, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td, +article, aside, canvas, details, embed, +figure, figcaption, footer, header, hgroup, +menu, nav, section, summary { + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; +} +/* HTML5 display-role reset for older browsers */ +article, aside, details, figcaption, figure, +footer, header, hgroup, menu, nav, section { + display: block; +} +body { + font-family: "MicroSoft YaHei", Helvetica, Arial, sans-serif; + font-size: 12px; +} +ol, ul { + list-style: none outside none; +} +audio,canvas,video { + display:inline-block; + *display:inline; + *zoom:1; +} +blockquote, q { + quotes: none; +} +blockquote:before, blockquote:after, +q:before, q:after { + content: ''; +} +table { + border-collapse: collapse; + border-spacing: 0; +} +strong { + font-weight: bold; +} +fieldset, img { + border: medium none; +} +caption, th { + text-align: left; +} +a:link, a:visited, a:active { + color: #3399ff; + text-decoration: none; +} +/* ============================================ + * 常用宽度、高度、边距、字体、颜色、布局等样式 + * ============================================*/ +.w { + width: 100% +} +.h { + height: 100%; +} +.w-none { + width: 0; +} +.h-none { + height: 0; +} +.wrapper { + width: 1100px; + margin: 0 auto; +} +.fl { + float: left; +} +.fr { + float: right; +} +.block { + display: block; + zoom: 1; +} +.iblock{ + display: inline-block; +} +.none { + display: none; +} +.none-important { + display: none !important; +} +.b{ + font-weight: bold; +} +.cl{ + clear: left; +} +.cr{ + clear: right; +} +.cb{ + clear: both; +} +.pr { + position: relative; +} +.pa { + position: absolute; +} +.pf { + position: fixed; +} +.text-w{ + color: #fff; +} +.text-b{ + color:#000; +} +.text-l { + color: #aaa; +} +.bg-white { + background-color: #fff; +} +.bg-black { + background-color: #000; +} +.text-left{ + text-align: left; +} +.text-center{ + text-align: center; +} +.text-right{ + text-align: right; +} +.ucase { + text-transform:uppercase; +} /*文字大写*/ +.lcase{ + text-transform:lowercase; +} /*文字小写*/ +.capitalize{ + text-transform:capitalize; +} /*首字母大写*/ +.spliter { + border-left:1px solid #aaa; +} +.clearfix{ + *zoom:1; +} +.clearfix:after { + content:""; + display:table; + clear:both; +} +.box-shadow{ + -webkit-box-shadow:0 1px 2px rgba(0,0,0,0.1); + box-shadow:0 1px 2px rgba(0,0,0,0.1); +} +.text-shadow{ + -webkit-text-shadow:0 0 2px rgba(0,0,0,0.2); + text-shadow:0 0 2px rgba(0,0,0,0.2); +} +sub,sup +.sub,.sup{ + position:relative; + font-size:75%; + line-height:0; + vertical-align:baseline; +} +sup,.sup{ + top:-0.5em; +} +sub,.sub{ + bottom:-0.25em; +} +.mask { + width: 100%; + height: 100%; + position: fixed; + left: 0; + top: 0; + background: rgba(0,0,0,.4); + z-index: 99; +} +.error-info { + color: #F90B0B!important; + font-size: 12px; + font-family: "SimHei"; +} +.one-line { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.opacity-none { + -webkit-opacity: 0; + -moz-opacity: 0; + -khtml-opacity: 0; + opacity: 0; + filter:alpha(opacity=0); + -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=0); +} +.file { + width: 80px; + height: 28px; + line-height: 26px; + position: relative; + display: inline-block; + border: 1px solid #EF7C5A; + border-radius: 2px; + text-align: center; + overflow: hidden; + color: #EF7C5A; + text-decoration: none; + text-indent: 0; + font-weight: 700; +} +.file input { + position: absolute; + font-size: 100px; + right: 0; + top: 0; + opacity: 0; +} +.file:hover { + background: #EF7C5A; + color: #fff; + border: 1px solid rgba(1,1,1,0); + text-decoration: none; +} +.page { + margin-top: 16px; +} +.page span { + margin: 0 4px; +} +.page a { + text-align: center; + border: 1px solid #1dccaa; + width: 26px; + height: 26px; + margin: 0 4px; + display: inline-block; + padding-top: 3px; +} +.info-tips { + padding: 6px 12px; + position: fixed; + background: rgba(1,1,1,.6); + border-radius: 5px; + color: #fff; + overflow: hidden; + text-align: center; +} +.loder { + width: 45px; + height: 45px; + display: inline-block; + padding: 0px; + border-radius: 100%; + border: 5px solid; + border-top-color: rgba(246, 36, 89, 1); + border-bottom-color: rgba(0,0,0, 0.1); + border-left-color: rgba(246, 36, 89, 1); + border-right-color: rgba(0,0,0, 0.1); + -webkit-animation: loader4 1s ease-in-out infinite; + animation: loader 1s ease-in-out infinite; +} +@keyframes loader { + from {transform: rotate(0deg);} + to {transform: rotate(360deg);} +} +@-webkit-keyframes loader { + from {-webkit-transform: rotate(0deg);} + to {-webkit-transform: rotate(360deg);} +} +.center { + left: 50%; + top: 50%; + position: absolute; + -webkit-transform: translate3D(-50%,-50%,0); + -ms-transform: translate3D(-50%,-50%,0); + -moz-transform: translate3D(-50%,-50%,0); + -o-transform: translate3D(-50%,-50%,0); + transform: translate3D(-50%,-50%,0); + z-index: 100; +} + diff --git a/public/css/ie.css b/public/css/ie.css new file mode 100644 index 0000000..55cfd4e --- /dev/null +++ b/public/css/ie.css @@ -0,0 +1 @@ +@charset "utf-8"; \ No newline at end of file diff --git a/public/css/ie678.css b/public/css/ie678.css new file mode 100644 index 0000000..55cfd4e --- /dev/null +++ b/public/css/ie678.css @@ -0,0 +1 @@ +@charset "utf-8"; \ No newline at end of file diff --git a/public/css/ie9.css b/public/css/ie9.css new file mode 100644 index 0000000..55cfd4e --- /dev/null +++ b/public/css/ie9.css @@ -0,0 +1 @@ +@charset "utf-8"; \ No newline at end of file diff --git a/public/css/resume/darkblue.css b/public/css/resume/darkblue.css new file mode 100644 index 0000000..5dad132 --- /dev/null +++ b/public/css/resume/darkblue.css @@ -0,0 +1,51 @@ +@charset "utf-8"; + +.head-image img { + border-color: #4C70BA; +} +#widget-profile { + background-color: #3B5998; +} +#tab-nav-list { + background-color: #3B5998; +} +#tab-nav-list li { + background-color: #3B5998; +} +#tab-nav-list ul > li:hover .fa, +#tab-nav-list ul > li.active .fa { + background-color: #3B5998; +} +.section-title { + color: #3B5998; +} +.section-body tr td:first-child { + color: #3B5998; +} +.skillbar-title, +.skillbar-bar { + background: rgba(59, 89, 152, 0.8); +} +#profile-social a { + background-color: #3B5998; +} +#profile_social a:hover { + color: #3B5998; +} +#profile-social a:hover { + border-color: #3B5998; + color: #fff; + background-color: #3B5998; +} +#profile-social a { + color: #3B5998; +} +.tab-title { + background: #3B5998; +} +.tab-title .glyphicon { + color: #3B5998; +} +.tab-title:hover { + background: rgba(59, 89, 152, 0.8) !important; +} \ No newline at end of file diff --git a/public/css/resume/default.css b/public/css/resume/default.css new file mode 100644 index 0000000..55cfd4e --- /dev/null +++ b/public/css/resume/default.css @@ -0,0 +1 @@ +@charset "utf-8"; \ No newline at end of file diff --git a/public/css/style.css b/public/css/style.css new file mode 100644 index 0000000..962a361 --- /dev/null +++ b/public/css/style.css @@ -0,0 +1,561 @@ +@charset "utf-8"; + +.form-control { + border-radius: 1px !important; +} +/*header*/ +.header-logo { + height: 120px; + background-color: #333; +} +.header-nav { + background-color: #777; +} +.header-nav input { + border-radius: 2px; +} +.header-logo .logo { + padding-left: 15px; +} +.header-logo .logo h2 { + padding-top: 8px; + font-size: 38px; + color: #fff; + font-weight: bold; +} +.header-logo .logo h2 span:first-child { + margin-right: 15px; + color: #1f7fbb; +} +.header-logo .logo p { + margin: -5px 0 0 3px; + color: #fff; +} +.header-nav li a { + padding: 11px 15px; + font-size: 15px; + color: #fff; +} +.header-nav .nav > li > a:hover, +.header-nav .nav > li > a:focus { + background-color: #555; + text-decoration: none; +} +.header-nav .dropdown-menu { + background-color: #555; + padding: 0; +} +.header-nav .dropdown-menu>li>a:focus, +.header-nav .dropdown-menu>li>a:hover { + background-color: #666; + color: #fff; +} +.header-nav .nav .open > a { + background-color: #555; +} +.navbar-form { + margin-top: 4px; + margin-bottom: 4px; +} + +/*响应式导航*/ +.navbar-toggle { + margin-top: 18px; +} +.navbar-toggle .icon-bar { + background-color: #eee; +} + +/*main-content*/ +.main-content { + /*margin: 8px 0;*/ + padding: 10px 0; +} +.content-wrapper { + margin-bottom: 10px; + background-color: #fff; + box-shadow: 0 0 13px #888; +} +.blog { + padding: 0 28px; + border-bottom: 1px dashed #ddd; +} +.blog:last-child { + border-bottom: none; +} +.blog-title { + padding: 20px 0; + color: #444; + font-size: 28px; +} +.blog-abstract { + padding-bottom: 5px; + font-size: 14px; + word-spacing: 2px; + line-height: 22px; +} +.blog-abstract a { + margin-left: 8px; + color: #3399FF; +} +.blog-abstract a:hover { + text-decoration: underline; +} +.blog-info { + padding: 16px 0; + color: #777; + text-align: right; +} +.blog-info .glyphicon { + margin: 0 5px; +} +.panel { + border-radius: 2px; + box-shadow: 1px 1px 5px #aaa; +} +.panel-body { + background-color: #f9f9f9; +} +.panel a:hover { + text-decoration: underline; +} +#side-bar li { + line-height: 20px; +} +#side-bar ol li { + color: #3399ff; + list-style: inside decimal; +} +#side-bar ul li { + color: #3399ff; + list-style: inside square; +} + +/*detail*/ +#blog-detail { + padding: 10px 28px; + overflow: auto; +} +.blog-content { + font-size: 14px; + word-spacing: 2px; + line-height: 22px; + text-indent: 25px; + word-wrap: break-word; +} +.blog-date { + margin-top: -10px; + font-size: 12px; + color: #888; + padding-bottom: 30px; +} +/*archive*/ +#archive-header { + padding: 18px 10px; + border-bottom: 1px dashed #ccc; +} +#archive-header span { + font-size: 19px; + color: #3399ff; + font-weight: bold; + margin-right: 15px; +} +#archive-header select { + outline: none; + height: 25px; + margin-left: 3px; + margin-right: 15px; +} +#archive-body { + padding: 15px 26px; +} +#archive-body .list-item { + list-style: inside disc; + font-size: 19px; +} +#archive-body .list-item > span { + font-size: 19px; +} +#archive-body .sub-list { + margin: 10px 25px; +} +#archive-body .sub-list li { + list-style: inside square; + font-size: 15px; + line-height: 24px; +} +#archive-body .sub-list a { + color: #444; +} +#archive-body .sub-list a:hover { + color: #3399ff; + text-decoration: underline; +} + + +/*resume*/ +#resume-wrapper { + padding: 20px 10px; +} +.head-image { + margin: 15px auto; + width: 160px; + height: 160px; +} +.head-image img { + width: 160px; + height: 160px; + border: 10px solid; + border-radius: 100%; + -webkit-transition: all 0.6s ease-in-out; + -ms-transition: all 0.6s ease-in-out; + -moz-transition: all 0.6s ease-in-out; + -o-transition: all 0.6s ease-in-out; + transition: all 0.6s ease-in-out; +} +.head-image img:hover { + transform: rotate(360deg); +} +#widget-profile { + height: 550px; + margin-bottom: 10px; + background-color: #222; +} +.profile { + color: #ccc; +} +#profile-words { + padding: 15px 5px; + font-size: 13px; + color: #666; + text-indent: 10px; + line-height: 20px; +} +#profile-img .item img { + margin: 0 auto; +} +#profile-info h1 { + font-size: 25px +} +#profile-info h3 { + font-size: 14px; + margin: 6px 0; +} +#profile-info h4 { + font-size: 13px; +} +#profile-desc { + height: 130px; + margin-top: 22px; + padding: 10px 3px; + text-indent: 16px; + line-height: 16px; + color: #ccc; + word-spacing: 4px; + letter-spacing: 1px; + border-top: 1px solid #aaa; +} +#profile-social { + border-top: 1px solid #aaa; + padding: 8px 5px; +} +#profile-social p { + padding: 10px 0; + font-size: 15px; + text-align: center; +} +#tab-nav-list { + width: 9%; + max-width: 68px; + height: 550px; + float: left; + background-color: #333; +} +#tab-item-print { + position: absolute; + bottom: 0; + left: 0; + width: 100%; + +} +#tab-item-print li { + background-color: rgba(20,20,20,.3) !important; +} +#tab-nav-list li { + padding: 15px 5px; + text-align: center; + background-color: #333; + -webkit-transition: all 0.3s ease-in-out; + -ms-transition: all 0.3s ease-in-out; + -moz-transition: all 0.3s ease-in-out; + -o-transition: all 0.3s ease-in-out; + transition: all 0.3s ease-in-out; +} +#tab-nav-list li .fa { + display: inline-block; + width: 40px; + height: 40px; + margin: 0; + text-align: center; + border-radius: 50%; + color: #fff; + font-size: 22px; + line-height: 43px; + cursor: pointer; + -webkit-transition: all 0.3s ease-in-out; + -ms-transition: all 0.3s ease-in-out; + -moz-transition: all 0.3s ease-in-out; + -o-transition: all 0.3s ease-in-out; + transition: all 0.3s ease-in-out; +} +#tab-nav-list ul > li:hover .fa, +#tab-nav-list ul > li.active .fa { + background-color: #333; +} +#tab-nav-list li:hover, +#tab-nav-list li.active { + background-color: #fff; +} +#tab-body-container { + width: 90%; + height: 550px; + overflow-x: hidden; + overflow-y: auto; + float: right; +} +.tab-title { + margin: 0; + padding: 10px 15px; + font-size: 17px; + text-transform: uppercase; + color: #fff; + cursor: pointer; + border-bottom: 1px solid rgba(255, 255, 255, 0.1); + line-height: 0px; + cursor: pointer; + display: none; + background: #333; +} +.tab-title:hover { + background: #444; +} +.tab-title .glyphicon { + display: inline-block; + width: 42px; + height: 42px; + font-size: 22px; + text-align: center; + position: relative; + z-index: 2; + cursor: pointer; + border-radius: 50%; + line-height: 43px; + background: #fff !important; + color: #333; + -webkit-transition: background 0.3s, color 0.3s, box-shadow 0.3s; + -moz-transition: background 0.3s, color 0.3s, box-shadow 0.3s; + transition: background 0.3s, color 0.3s, box-shadow 0.3s; +} +.section-title { + margin-bottom: 15px; + padding-bottom: 5px; + font-size: 22px; + color: #333; + font-weight: bold; + border-bottom: 1px solid #ddd; +} +#tab-profile .section-body table td { + padding: 8px 10px; + border-bottom: 1px solid #ddd; +} +.section-body tr td:first-child { + width: 70%; + color: #333; +} +.skillbar { + position: relative; + display: block; + width: 100%; + height: 22px; + margin-bottom: 15px; + background: #eee; + -webkit-transition: 0.4s linear; + -moz-transition: 0.4s linear; + -ms-transition: 0.4s linear; + -o-transition: 0.4s linear; + transition: 0.4s linear; + -webkit-transition-property: width, background-color; + -moz-transition-property: width, background-color; + -ms-transition-property: width, background-color; + -o-transition-property: width, background-color; + transition-property: width, background-color; +} +.skillbar-title { + position: absolute; + top: 0; + left: 0; + font-size: 11px; + color: #fff; + text-transform: capitalize; +} +.skillbar-title span { + display: block; + background: rgba(0, 0, 0, 0.1); + padding: 0 20px; + height: 22px; + line-height: 22px; +} +.skill-bar-percent { + position: absolute; + right: 10px; + top: 0; + font-size: 11px; + height: 22px; + line-height: 22px; + color: #444; + color: rgba(0, 0, 0, 0.4); +} +.skillbar-bar { + width: 0; + height: 22px; +} +.skillbar-title, +.skillbar-bar { + background: rgba(59, 59, 59, 0.8); +} +/*life*/ +#tab-life .section-body img { + width: 100%; +} +#allmap-wrapper { + width: 300px; + height: 240px; + padding: 6px; + border: 1px solid #eee; + margin: 0 auto; + top: 125px; + background-color: #fff; +} +#allmap { + width: 100%; + height: 225px; + margin-top: 6px; +} +#tab-contact td { + padding: 4px 0; +} +#contactform p label { + display: block; + color: #999; + margin-bottom: 8px; + font-size: 13px; +} +#contactform > input { + margin: 5px 10px; + border-radius: 1px; +} +.profile-social { + padding: 15px 0; +} +.profile-social a { + padding: 0; + margin: 0px 0px 0px 5px; + border-width: 1px; + border-style: solid; + text-align: center; + float: left; + display: block; + -webkit-transition: all .3s ease-in; + -moz-transition: all .3s ease-in; + -o-transition: all .3s ease-in; + transition: all .3s ease-in; +} +#profile-social a { + width: 38px; + height: 38px; + line-height: 38px; + font-size: 22px; + color: #333; + background-color: #fff; +} +#profile_social a { + width: 45px; + height: 45px; + line-height: 45px; + font-size: 24px; + color: #fff; + background-color: #333; +} +#profile_social a:hover { + color: #333; + background-color: #fff; +} +#profile-social a:hover { + border-color: #333; + color: #fff; + background-color: #333; +} + +/*contact*/ +#contact-detail .section-title { + font-size: 15px; + margin-top: 15px; +} +#contact-detail .section-body td { + padding: 7px 0; + font-size: 13px; +} + + + + + +/*footer*/ +.footer { + border-top: 1px solid #ddd; + padding: 12px 32px; + color: #888; + font-size: 14px; +} + +/*media query*/ +@media screen and (max-width: 767px) { + .header-logo { + height: 70px; + } + .header-logo .logo { + padding-left: 0; + } + .header-logo .logo h2 { + font-size: 28px; + font-weight: bold; + } + #tab-body-container { + width: 100%; + height: auto; + /*max-height: 550px;*/ + } + .tab-title { + display: block; + } + #tab-body-container .mCSB_container { + padding-left: 0; + padding-right: 0; + } + #tab-wrapper { + padding-left: 0; + padding-right: 0; + } +} +@media (max-width: 992px) { + #profile-desc { + height: auto; + } + #tab-nav-list { + margin-left: -15px; + } + #widget-profile { + height: auto; + padding: 10px 0; + } +} \ No newline at end of file diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..e69de29 diff --git a/public/images/bg/bg1.png b/public/images/bg/bg1.png new file mode 100644 index 0000000..c75a05a Binary files /dev/null and b/public/images/bg/bg1.png differ diff --git a/public/images/bg/bg2.png b/public/images/bg/bg2.png new file mode 100644 index 0000000..d54e889 Binary files /dev/null and b/public/images/bg/bg2.png differ diff --git a/public/images/bg/bg3.png b/public/images/bg/bg3.png new file mode 100644 index 0000000..22f2450 Binary files /dev/null and b/public/images/bg/bg3.png differ diff --git a/public/images/bg/bg4.png b/public/images/bg/bg4.png new file mode 100644 index 0000000..1932277 Binary files /dev/null and b/public/images/bg/bg4.png differ diff --git a/public/images/bg/bg5.png b/public/images/bg/bg5.png new file mode 100644 index 0000000..7de5940 Binary files /dev/null and b/public/images/bg/bg5.png differ diff --git a/public/images/life/1.jpg b/public/images/life/1.jpg new file mode 100644 index 0000000..60e0d1d Binary files /dev/null and b/public/images/life/1.jpg differ diff --git a/public/images/life/10.jpg b/public/images/life/10.jpg new file mode 100644 index 0000000..bc25b11 Binary files /dev/null and b/public/images/life/10.jpg differ diff --git a/public/images/life/11.jpg b/public/images/life/11.jpg new file mode 100644 index 0000000..a1ed7e3 Binary files /dev/null and b/public/images/life/11.jpg differ diff --git a/public/images/life/12.jpg b/public/images/life/12.jpg new file mode 100644 index 0000000..eb0b435 Binary files /dev/null and b/public/images/life/12.jpg differ diff --git a/public/images/life/2.jpg b/public/images/life/2.jpg new file mode 100644 index 0000000..54357b7 Binary files /dev/null and b/public/images/life/2.jpg differ diff --git a/public/images/life/3.jpg b/public/images/life/3.jpg new file mode 100644 index 0000000..9ca6ccd Binary files /dev/null and b/public/images/life/3.jpg differ diff --git a/public/images/life/4.jpg b/public/images/life/4.jpg new file mode 100644 index 0000000..0d39fb4 Binary files /dev/null and b/public/images/life/4.jpg differ diff --git a/public/images/life/5.jpg b/public/images/life/5.jpg new file mode 100644 index 0000000..e1729b9 Binary files /dev/null and b/public/images/life/5.jpg differ diff --git a/public/images/life/6.jpg b/public/images/life/6.jpg new file mode 100644 index 0000000..70f942a Binary files /dev/null and b/public/images/life/6.jpg differ diff --git a/public/images/life/7.jpg b/public/images/life/7.jpg new file mode 100644 index 0000000..4fd8d16 Binary files /dev/null and b/public/images/life/7.jpg differ diff --git a/public/images/life/8.jpg b/public/images/life/8.jpg new file mode 100644 index 0000000..296a788 Binary files /dev/null and b/public/images/life/8.jpg differ diff --git a/public/images/life/9.jpg b/public/images/life/9.jpg new file mode 100644 index 0000000..201a421 Binary files /dev/null and b/public/images/life/9.jpg differ diff --git a/public/images/me.jpg b/public/images/me.jpg new file mode 100644 index 0000000..aed8db6 Binary files /dev/null and b/public/images/me.jpg differ diff --git a/public/images/profile/1.jpg b/public/images/profile/1.jpg new file mode 100644 index 0000000..b1c2a98 Binary files /dev/null and b/public/images/profile/1.jpg differ diff --git a/public/images/profile/2.png b/public/images/profile/2.png new file mode 100644 index 0000000..2216b04 Binary files /dev/null and b/public/images/profile/2.png differ diff --git a/public/images/profile/3.png b/public/images/profile/3.png new file mode 100644 index 0000000..eee8664 Binary files /dev/null and b/public/images/profile/3.png differ diff --git a/public/index.php b/public/index.php new file mode 100644 index 0000000..c582053 --- /dev/null +++ b/public/index.php @@ -0,0 +1,58 @@ + + */ + +/* +|-------------------------------------------------------------------------- +| Register The Auto Loader +|-------------------------------------------------------------------------- +| +| Composer provides a convenient, automatically generated class loader for +| our application. We just need to utilize it! We'll simply require it +| into the script here so that we don't have to worry about manual +| loading any of our classes later on. It feels nice to relax. +| +*/ + +require __DIR__.'/../bootstrap/autoload.php'; + +/* +|-------------------------------------------------------------------------- +| Turn On The Lights +|-------------------------------------------------------------------------- +| +| We need to illuminate PHP development, so let us turn on the lights. +| This bootstraps the framework and gets it ready for use, then it +| will load up this application so that we can run it and send +| the responses back to the browser and delight our users. +| +*/ + +$app = require_once __DIR__.'/../bootstrap/app.php'; + +/* +|-------------------------------------------------------------------------- +| Run The Application +|-------------------------------------------------------------------------- +| +| Once we have the application, we can handle the incoming request +| through the kernel, and send the associated response back to +| the client's browser allowing them to enjoy the creative +| and wonderful application we have prepared for them. +| +*/ + +$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class); + +$response = $kernel->handle( + $request = Illuminate\Http\Request::capture() +); + +$response->send(); + +$kernel->terminate($request, $response); diff --git a/public/plugins/DD_belatedPNG_0.0.8a-min.js b/public/plugins/DD_belatedPNG_0.0.8a-min.js new file mode 100644 index 0000000..6062fb3 --- /dev/null +++ b/public/plugins/DD_belatedPNG_0.0.8a-min.js @@ -0,0 +1,13 @@ +/** +* DD_belatedPNG: Adds IE6 support: PNG images for CSS background-image and HTML . +* Author: Drew Diller +* Email: drew.diller@gmail.com +* URL: http://www.dillerdesign.com/experiment/DD_belatedPNG/ +* Version: 0.0.8a +* Licensed under the MIT License: http://dillerdesign.com/experiment/DD_belatedPNG/#license +* +* Example usage: +* DD_belatedPNG.fix('.png_bg'); // argument is a CSS selector +* DD_belatedPNG.fixPng( someNode ); // argument is an HTMLDomElement +**/ +var DD_belatedPNG={ns:"DD_belatedPNG",imgSize:{},delay:10,nodesFixed:0,createVmlNameSpace:function(){if(document.namespaces&&!document.namespaces[this.ns]){document.namespaces.add(this.ns,"urn:schemas-microsoft-com:vml")}},createVmlStyleSheet:function(){var b,a;b=document.createElement("style");b.setAttribute("media","screen");document.documentElement.firstChild.insertBefore(b,document.documentElement.firstChild.firstChild);if(b.styleSheet){b=b.styleSheet;b.addRule(this.ns+"\\:*","{behavior:url(#default#VML)}");b.addRule(this.ns+"\\:shape","position:absolute;");b.addRule("img."+this.ns+"_sizeFinder","behavior:none; border:none; position:absolute; z-index:-1; top:-10000px; visibility:hidden;");this.screenStyleSheet=b;a=document.createElement("style");a.setAttribute("media","print");document.documentElement.firstChild.insertBefore(a,document.documentElement.firstChild.firstChild);a=a.styleSheet;a.addRule(this.ns+"\\:*","{display: none !important;}");a.addRule("img."+this.ns+"_sizeFinder","{display: none !important;}")}},readPropertyChange:function(){var b,c,a;b=event.srcElement;if(!b.vmlInitiated){return}if(event.propertyName.search("background")!=-1||event.propertyName.search("border")!=-1){DD_belatedPNG.applyVML(b)}if(event.propertyName=="style.display"){c=(b.currentStyle.display=="none")?"none":"block";for(a in b.vml){if(b.vml.hasOwnProperty(a)){b.vml[a].shape.style.display=c}}}if(event.propertyName.search("filter")!=-1){DD_belatedPNG.vmlOpacity(b)}},vmlOpacity:function(b){if(b.currentStyle.filter.search("lpha")!=-1){var a=b.currentStyle.filter;a=parseInt(a.substring(a.lastIndexOf("=")+1,a.lastIndexOf(")")),10)/100;b.vml.color.shape.style.filter=b.currentStyle.filter;b.vml.image.fill.opacity=a}},handlePseudoHover:function(a){setTimeout(function(){DD_belatedPNG.applyVML(a)},1)},fix:function(a){if(this.screenStyleSheet){var c,b;c=a.split(",");for(b=0;bn.H){i.B=n.H}d.vml.image.shape.style.clip="rect("+i.T+"px "+(i.R+a)+"px "+i.B+"px "+(i.L+a)+"px)"}else{d.vml.image.shape.style.clip="rect("+f.T+"px "+f.R+"px "+f.B+"px "+f.L+"px)"}},figurePercentage:function(d,c,f,a){var b,e;e=true;b=(f=="X");switch(a){case"left":case"top":d[f]=0;break;case"center":d[f]=0.5;break;case"right":case"bottom":d[f]=1;break;default:if(a.search("%")!=-1){d[f]=parseInt(a,10)/100}else{e=false}}d[f]=Math.ceil(e?((c[b?"W":"H"]*d[f])-(c[b?"w":"h"]*d[f])):parseInt(a,10));if(d[f]%2===0){d[f]++}return d[f]},fixPng:function(c){c.style.behavior="none";var g,b,f,a,d;if(c.nodeName=="BODY"||c.nodeName=="TD"||c.nodeName=="TR"){return}c.isImg=false;if(c.nodeName=="IMG"){if(c.src.toLowerCase().search(/\.png$/)!=-1){c.isImg=true;c.style.visibility="hidden"}else{return}}else{if(c.currentStyle.backgroundImage.toLowerCase().search(".png")==-1){return}}g=DD_belatedPNG;c.vml={color:{},image:{}};b={shape:{},fill:{}};for(a in c.vml){if(c.vml.hasOwnProperty(a)){for(d in b){if(b.hasOwnProperty(d)){f=g.ns+":"+d;c.vml[a][d]=document.createElement(f)}}c.vml[a].shape.stroked=false;c.vml[a].shape.appendChild(c.vml[a].fill);c.parentNode.insertBefore(c.vml[a].shape,c)}}c.vml.image.shape.fillcolor="none";c.vml.image.fill.type="tile";c.vml.color.fill.on=false;g.attachHandlers(c);g.giveLayout(c);g.giveLayout(c.offsetParent);c.vmlInitiated=true;g.applyVML(c)}};try{document.execCommand("BackgroundImageCache",false,true)}catch(r){}DD_belatedPNG.createVmlNameSpace();DD_belatedPNG.createVmlStyleSheet(); \ No newline at end of file diff --git a/public/plugins/ajaxupload.3.6.js b/public/plugins/ajaxupload.3.6.js new file mode 100644 index 0000000..f2c9b8b --- /dev/null +++ b/public/plugins/ajaxupload.3.6.js @@ -0,0 +1,572 @@ +/** + * Ajax upload + * Project page - http://valums.com/ajax-upload/ + * Copyright (c) 2008 Andris Valums, http://valums.com + * Licensed under the MIT license (http://valums.com/mit-license/) + * Version 3.6 (26.06.2009) + */ + +/** + * Changes from the previous version: + * 1. Fixed minor bug where click outside the button + * would open the file browse window + * + * For the full changelog please visit: + * http://valums.com/ajax-upload-changelog/ + */ + +(function(){ + +var d = document, w = window; + +/** + * Get element by id + */ +function get(element){ + if (typeof element == "string") + element = d.getElementById(element); + return element; +} + +/** + * Attaches event to a dom element + */ +function addEvent(el, type, fn){ + if (w.addEventListener){ + el.addEventListener(type, fn, false); + } else if (w.attachEvent){ + var f = function(){ + fn.call(el, w.event); + }; + el.attachEvent('on' + type, f) + } +} + + +/** + * Creates and returns element from html chunk + */ +var toElement = function(){ + var div = d.createElement('div'); + return function(html){ + div.innerHTML = html; + var el = div.childNodes[0]; + div.removeChild(el); + return el; + } +}(); + +function hasClass(ele,cls){ + return ele.className.match(new RegExp('(\\s|^)'+cls+'(\\s|$)')); +} +function addClass(ele,cls) { + if (!hasClass(ele,cls)) ele.className += " "+cls; +} +function removeClass(ele,cls) { + var reg = new RegExp('(\\s|^)'+cls+'(\\s|$)'); + ele.className=ele.className.replace(reg,' '); +} + +// getOffset function copied from jQuery lib (http://jquery.com/) +if (document.documentElement["getBoundingClientRect"]){ + // Get Offset using getBoundingClientRect + // http://ejohn.org/blog/getboundingclientrect-is-awesome/ + var getOffset = function(el){ + var box = el.getBoundingClientRect(), + doc = el.ownerDocument, + body = doc.body, + docElem = doc.documentElement, + + // for ie + clientTop = docElem.clientTop || body.clientTop || 0, + clientLeft = docElem.clientLeft || body.clientLeft || 0, + + // In Internet Explorer 7 getBoundingClientRect property is treated as physical, + // while others are logical. Make all logical, like in IE8. + + + zoom = 1; + if (body.getBoundingClientRect) { + var bound = body.getBoundingClientRect(); + zoom = (bound.right - bound.left)/body.clientWidth; + } + if (zoom > 1){ + clientTop = 0; + clientLeft = 0; + } + var top = box.top/zoom + (window.pageYOffset || docElem && docElem.scrollTop/zoom || body.scrollTop/zoom) - clientTop, + left = box.left/zoom + (window.pageXOffset|| docElem && docElem.scrollLeft/zoom || body.scrollLeft/zoom) - clientLeft; + + return { + top: top, + left: left + }; + } + +} else { + // Get offset adding all offsets + var getOffset = function(el){ + if (w.jQuery){ + return jQuery(el).offset(); + } + + var top = 0, left = 0; + do { + top += el.offsetTop || 0; + left += el.offsetLeft || 0; + } + while (el = el.offsetParent); + + return { + left: left, + top: top + }; + } +} + +function getBox(el){ + var left, right, top, bottom; + var offset = getOffset(el); + left = offset.left; + top = offset.top; + + right = left + el.offsetWidth; + bottom = top + el.offsetHeight; + + return { + left: left, + right: right, + top: top, + bottom: bottom + }; +} + +/** + * Crossbrowser mouse coordinates + */ +function getMouseCoords(e){ + // pageX/Y is not supported in IE + // http://www.quirksmode.org/dom/w3c_cssom.html + if (!e.pageX && e.clientX){ + // In Internet Explorer 7 some properties (mouse coordinates) are treated as physical, + // while others are logical (offset). + var zoom = 1; + var body = document.body; + + if (body.getBoundingClientRect) { + var bound = body.getBoundingClientRect(); + zoom = (bound.right - bound.left)/body.clientWidth; + } + + return { + x: e.clientX / zoom + d.body.scrollLeft + d.documentElement.scrollLeft, + y: e.clientY / zoom + d.body.scrollTop + d.documentElement.scrollTop + }; + } + + return { + x: e.pageX, + y: e.pageY + }; + +} +/** + * Function generates unique id + */ +var getUID = function(){ + var id = 0; + return function(){ + return 'ValumsAjaxUpload' + id++; + } +}(); + +function fileFromPath(file) { + return file.replace(/.*(\/|\\)/, ""); +} + +function getExt(file){ + return (/[.]/.exec(file)) ? /[^.]+$/.exec(file.toLowerCase()) : ''; +} + +// Please use AjaxUpload , Ajax_upload will be removed in the next version +Ajax_upload = AjaxUpload = function(button, options){ + if (button.jquery){ + // jquery object was passed + button = button[0]; + } else if (typeof button == "string" && /^#.*/.test(button)){ + button = button.slice(1); + } + button = get(button); + + this._input = null; + this._button = button; + this._disabled = false; + this._submitting = false; + // Variable changes to true if the button was clicked + // 3 seconds ago (requred to fix Safari on Mac error) + this._justClicked = false; + this._parentDialog = d.body; + + if (window.jQuery && jQuery.ui && jQuery.ui.dialog){ + var parentDialog = jQuery(this._button).parents('.ui-dialog'); + if (parentDialog.length){ + this._parentDialog = parentDialog[0]; + } + } + + this._settings = { + // Location of the server-side upload script + action: 'upload.php', + // File upload name + name: 'userfile', + // Additional data to send + data: {}, + + multiple: false, + + // Submit file as soon as it's selected + autoSubmit: true, + // The type of data that you're expecting back from the server. + // Html and xml are detected automatically. + // Only useful when you are using json data as a response. + // Set to "json" in that case. + responseType: false, + // When user selects a file, useful with autoSubmit disabled + onChange: function(file, extension){}, + // Callback to fire before file is uploaded + // You can return false to cancel upload + onSubmit: function(file, extension){}, + // Fired when file upload is completed + // WARNING! DO NOT USE "FALSE" STRING AS A RESPONSE! + onComplete: function(file, response) {} + }; + + // Merge the users options with our defaults + for (var i in options) { + this._settings[i] = options[i]; + } + + this._createInput(); + this._rerouteClicks(); +} + +// assigning methods to our class +AjaxUpload.prototype = { + setData : function(data){ + this._settings.data = data; + }, + disable : function(){ + this._disabled = true; + }, + enable : function(){ + this._disabled = false; + }, + // removes ajaxupload + destroy : function(){ + if(this._input){ + if(this._input.parentNode){ + this._input.parentNode.removeChild(this._input); + } + this._input = null; + } + }, + /** + * Creates invisible file input above the button + */ + _createInput : function(){ + var self = this; + var input = d.createElement("input"); + input.setAttribute('type', 'file'); + + if(this._settings.multiple != false && this._settings.multiple !== "false") { + input.setAttribute('multiple', 'multiple'); + } + + input.setAttribute('name', this._settings.name); + var styles = { + 'position' : 'absolute' + ,'margin': '-5px 0 0 -175px' + ,'padding': 0 + ,'width': '220px' + ,'height': '30px' + ,'fontSize': '14px' + ,'opacity': 0 + ,'cursor': 'pointer' + ,'display' : 'none' + ,'zIndex' : 2147483583 //Max zIndex supported by Opera 9.0-9.2x + // Strange, I expected 2147483647 + }; + for (var i in styles){ + input.style[i] = styles[i]; + } + + // Make sure that element opacity exists + // (IE uses filter instead) + if ( ! (input.style.opacity === "0")){ + input.style.filter = "alpha(opacity=0)"; + } + + this._parentDialog.appendChild(input); + + addEvent(input, 'change', function(){ + // get filename from input + var file = fileFromPath(this.value); + if(self._settings.onChange.call(self, file, getExt(file)) == false ){ + return; + } + // Submit form when value is changed + if (self._settings.autoSubmit){ + self.submit(); + } + }); + + // Fixing problem with Safari + // The problem is that if you leave input before the file select dialog opens + // it does not upload the file. + // As dialog opens slowly (it is a sheet dialog which takes some time to open) + // there is some time while you can leave the button. + // So we should not change display to none immediately + addEvent(input, 'click', function(){ + self.justClicked = true; + setTimeout(function(){ + // we will wait 3 seconds for dialog to open + self.justClicked = false; + }, 2500); + }); + + this._input = input; + }, + _rerouteClicks : function (){ + var self = this; + + // IE displays 'access denied' error when using this method + // other browsers just ignore click() + // addEvent(this._button, 'click', function(e){ + // self._input.click(); + // }); + + var box, dialogOffset = {top:0, left:0}, over = false; + + addEvent(self._button, 'mouseover', function(e){ + if (!self._input || over) return; + + over = true; + box = getBox(self._button); + + if (self._parentDialog != d.body){ + dialogOffset = getOffset(self._parentDialog); + } + }); + + + // We can't use mouseout on the button, + // because invisible input is over it + addEvent(document, 'mousemove', function(e){ + var input = self._input; + if (!input || !over) return; + + if (self._disabled){ + removeClass(self._button, 'hover'); + input.style.display = 'none'; + return; + } + + var c = getMouseCoords(e); + + if ((c.x >= box.left) && (c.x <= box.right) && + (c.y >= box.top) && (c.y <= box.bottom)){ + + input.style.top = c.y - dialogOffset.top + 'px'; + input.style.left = c.x - dialogOffset.left + 'px'; + input.style.display = 'block'; + addClass(self._button, 'hover'); + + } else { + // mouse left the button + over = false; + + var check = setInterval(function(){ + // if input was just clicked do not hide it + // to prevent safari bug + + if (self.justClicked){ + return; + } + + if ( !over ){ + input.style.display = 'none'; + } + + clearInterval(check); + + }, 25); + + + removeClass(self._button, 'hover'); + } + }); + + }, + /** + * Creates iframe with unique name + */ + _createIframe : function(){ + // unique name + // We cannot use getTime, because it sometimes return + // same value in safari :( + var id = getUID(); + + // Remove ie6 "This page contains both secure and nonsecure items" prompt + // http://tinyurl.com/77w9wh + var iframe = toElement('").attr("data-id",$appid).prop("src",$url).appendTo($(".page-content")); + } + + +} + +function closeApp($id) { + + var $tab = $(".tab-nav li a"); + var $iframe = $(".page-content iframe"); + + for(var i = 0;i < $tab.length;i++) { + if($($tab[i]).attr("data-id") == $id) { + if($($tab[i]).parent('li').hasClass('active')) { + var nextTab = $($tab[i]).parent('li').next('li'); + + if(nextTab.length !== 0) { + nextTab.addClass('active'); + } + else { + $($tab[i]).parent('li').prev('li').addClass('active'); + } + + $($tab[i]).parent('li').remove(); + break; + } + else { + $($tab[i]).parent('li').remove(); + } + } + } + + for(var i = 0;i < $iframe.length;i++) { + if($($iframe[i]).attr("data-id") == $id) { + if($($iframe[i]).hasClass('current')) { + var nextFrame = $($iframe[i]).next('iframe'); + + if(nextFrame.length !== 0) { + nextFrame.removeClass('none').addClass('current'); + } + else { + $($iframe[i]).prev('iframe').removeClass('none').addClass('current'); + } + + $($iframe[i]).remove(); + break; + } + else { + $($iframe[i]).remove(); + } + } + } +} \ No newline at end of file diff --git a/public/script/common.js b/public/script/common.js new file mode 100644 index 0000000..842d13a --- /dev/null +++ b/public/script/common.js @@ -0,0 +1,8 @@ +$(document).ready(function(){ + +}); + + +String.prototype.trim = function() { + return this.replace(/(^\s*)|(\s*$)/g, ''); +} \ No newline at end of file diff --git a/public/script/index.js b/public/script/index.js new file mode 100644 index 0000000..9407ef6 --- /dev/null +++ b/public/script/index.js @@ -0,0 +1,3 @@ +$(document).ready(function(){ + +}); diff --git a/public/script/login.js b/public/script/login.js new file mode 100644 index 0000000..3f7d95b --- /dev/null +++ b/public/script/login.js @@ -0,0 +1,36 @@ +$(document).ready(function(){ + $("#login-form").validate({ + rules:{ + name:{ + required:true, + maxlength:10 + // remote:"../Login/checkUserExist" + }, + password:{ + required:true, + minlength:6, + maxlength:20 + } + }, + messages:{ + name:{ + required:"用户名不能为空", + maxlength:"用户名长度不能超过10位" + }, + password:{ + required:"密码不能为空", + minlength:"密码长度不能低于6位", + maxlength:"密码长度不能超过20位" + } + }, + errorPlacement:function(error, element) { + //error是错误提示元素span对象 element是触发错误的input对象 + //发现即使通过验证 本方法仍被触发 + //当通过验证时 error是一个内容为空的span元素 + element.next(".userinfo-behind").html(""); + error.appendTo(element.next(".userinfo-behind")); + }, + errorClass:"error-info" + }); + +}); diff --git a/public/static/DataTables-1.10.8/css/dataTables.bootstrap.css b/public/static/DataTables-1.10.8/css/dataTables.bootstrap.css new file mode 100644 index 0000000..a80d7af --- /dev/null +++ b/public/static/DataTables-1.10.8/css/dataTables.bootstrap.css @@ -0,0 +1,161 @@ +table.dataTable { + clear: both; + margin-top: 6px !important; + margin-bottom: 6px !important; + max-width: none !important; +} +table.dataTable td, +table.dataTable th { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} +table.dataTable.nowrap th, +table.dataTable.nowrap td { + white-space: nowrap; +} + +div.dataTables_wrapper div.dataTables_length label { + font-weight: normal; + text-align: left; + white-space: nowrap; +} +div.dataTables_wrapper div.dataTables_length select { + width: 75px; + display: inline-block; +} +div.dataTables_wrapper div.dataTables_filter { + text-align: right; +} +div.dataTables_wrapper div.dataTables_filter label { + font-weight: normal; + white-space: nowrap; + text-align: left; +} +div.dataTables_wrapper div.dataTables_filter input { + margin-left: 0.5em; + display: inline-block; + width: auto; +} +div.dataTables_wrapper div.dataTables_info { + padding-top: 8px; + white-space: nowrap; +} +div.dataTables_wrapper div.dataTables_paginate { + margin: 0; + white-space: nowrap; + text-align: right; +} +div.dataTables_wrapper div.dataTables_paginate ul.pagination { + margin: 2px 0; + white-space: nowrap; +} + +table.dataTable thead > tr > th, +table.dataTable thead > tr > td { + padding-right: 30px; +} +table.dataTable thead > tr > th:active, +table.dataTable thead > tr > td:active { + outline: none; +} +table.dataTable thead .sorting, +table.dataTable thead .sorting_asc, +table.dataTable thead .sorting_desc, +table.dataTable thead .sorting_asc_disabled, +table.dataTable thead .sorting_desc_disabled { + cursor: pointer; + position: relative; +} +table.dataTable thead .sorting:after, +table.dataTable thead .sorting_asc:after, +table.dataTable thead .sorting_desc:after, +table.dataTable thead .sorting_asc_disabled:after, +table.dataTable thead .sorting_desc_disabled:after { + position: absolute; + bottom: 8px; + right: 8px; + display: block; + font-family: 'Glyphicons Halflings'; + opacity: 0.5; +} +table.dataTable thead .sorting:after { + opacity: 0.2; + content: "\e150"; + /* sort */ +} +table.dataTable thead .sorting_asc:after { + content: "\e155"; + /* sort-by-attributes */ +} +table.dataTable thead .sorting_desc:after { + content: "\e156"; + /* sort-by-attributes-alt */ +} +table.dataTable thead .sorting_asc_disabled:after, +table.dataTable thead .sorting_desc_disabled:after { + color: #eee; +} + +div.dataTables_scrollHead table.dataTable { + margin-bottom: 0 !important; +} + +div.dataTables_scrollBody table { + border-top: none; + margin-top: 0 !important; + margin-bottom: 0 !important; +} +div.dataTables_scrollBody table thead .sorting:after, +div.dataTables_scrollBody table thead .sorting_asc:after, +div.dataTables_scrollBody table thead .sorting_desc:after { + display: none; +} +div.dataTables_scrollBody table tbody tr:first-child th, +div.dataTables_scrollBody table tbody tr:first-child td { + border-top: none; +} + +div.dataTables_scrollFoot table { + margin-top: 0 !important; + border-top: none; +} + +@media screen and (max-width: 767px) { + div.dataTables_wrapper div.dataTables_length, + div.dataTables_wrapper div.dataTables_filter, + div.dataTables_wrapper div.dataTables_info, + div.dataTables_wrapper div.dataTables_paginate { + text-align: center; + } +} +table.dataTable.table-condensed > thead > tr > th { + padding-right: 20px; +} +table.dataTable.table-condensed .sorting:after, +table.dataTable.table-condensed .sorting_asc:after, +table.dataTable.table-condensed .sorting_desc:after { + top: 6px; + right: 6px; +} + +table.table-bordered.dataTable { + border-collapse: separate !important; +} +table.table-bordered.dataTable th, +table.table-bordered.dataTable td { + border-left-width: 0; +} +table.table-bordered.dataTable th:last-child, table.table-bordered.dataTable th:last-child, +table.table-bordered.dataTable td:last-child, +table.table-bordered.dataTable td:last-child { + border-right-width: 0; +} +table.table-bordered.dataTable tbody th, +table.table-bordered.dataTable tbody td { + border-bottom-width: 0; +} + +div.dataTables_scrollHead table.table-bordered { + border-bottom-width: 0; +} diff --git a/public/static/DataTables-1.10.8/css/dataTables.bootstrap.min.css b/public/static/DataTables-1.10.8/css/dataTables.bootstrap.min.css new file mode 100644 index 0000000..f473ba1 --- /dev/null +++ b/public/static/DataTables-1.10.8/css/dataTables.bootstrap.min.css @@ -0,0 +1 @@ +table.dataTable{clear:both;margin-top:6px !important;margin-bottom:6px !important;max-width:none !important}table.dataTable td,table.dataTable th{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}div.dataTables_wrapper div.dataTables_length label{font-weight:normal;text-align:left;white-space:nowrap}div.dataTables_wrapper div.dataTables_length select{width:75px;display:inline-block}div.dataTables_wrapper div.dataTables_filter{text-align:right}div.dataTables_wrapper div.dataTables_filter label{font-weight:normal;white-space:nowrap;text-align:left}div.dataTables_wrapper div.dataTables_filter input{margin-left:0.5em;display:inline-block;width:auto}div.dataTables_wrapper div.dataTables_info{padding-top:8px;white-space:nowrap}div.dataTables_wrapper div.dataTables_paginate{margin:0;white-space:nowrap;text-align:right}div.dataTables_wrapper div.dataTables_paginate ul.pagination{margin:2px 0;white-space:nowrap}table.dataTable thead>tr>th,table.dataTable thead>tr>td{padding-right:30px}table.dataTable thead>tr>th:active,table.dataTable thead>tr>td:active{outline:none}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc_disabled{cursor:pointer;position:relative}table.dataTable thead .sorting:after,table.dataTable thead .sorting_asc:after,table.dataTable thead .sorting_desc:after,table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc_disabled:after{position:absolute;bottom:8px;right:8px;display:block;font-family:'Glyphicons Halflings';opacity:0.5}table.dataTable thead .sorting:after{opacity:0.2;content:"\e150"}table.dataTable thead .sorting_asc:after{content:"\e155"}table.dataTable thead .sorting_desc:after{content:"\e156"}table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc_disabled:after{color:#eee}div.dataTables_scrollHead table.dataTable{margin-bottom:0 !important}div.dataTables_scrollBody table{border-top:none;margin-top:0 !important;margin-bottom:0 !important}div.dataTables_scrollBody table thead .sorting:after,div.dataTables_scrollBody table thead .sorting_asc:after,div.dataTables_scrollBody table thead .sorting_desc:after{display:none}div.dataTables_scrollBody table tbody tr:first-child th,div.dataTables_scrollBody table tbody tr:first-child td{border-top:none}div.dataTables_scrollFoot table{margin-top:0 !important;border-top:none}@media screen and (max-width: 767px){div.dataTables_wrapper div.dataTables_length,div.dataTables_wrapper div.dataTables_filter,div.dataTables_wrapper div.dataTables_info,div.dataTables_wrapper div.dataTables_paginate{text-align:center}}table.dataTable.table-condensed>thead>tr>th{padding-right:20px}table.dataTable.table-condensed .sorting:after,table.dataTable.table-condensed .sorting_asc:after,table.dataTable.table-condensed .sorting_desc:after{top:6px;right:6px}table.table-bordered.dataTable{border-collapse:separate !important}table.table-bordered.dataTable th,table.table-bordered.dataTable td{border-left-width:0}table.table-bordered.dataTable th:last-child,table.table-bordered.dataTable th:last-child,table.table-bordered.dataTable td:last-child,table.table-bordered.dataTable td:last-child{border-right-width:0}table.table-bordered.dataTable tbody th,table.table-bordered.dataTable tbody td{border-bottom-width:0}div.dataTables_scrollHead table.table-bordered{border-bottom-width:0} diff --git a/public/static/DataTables-1.10.8/css/dataTables.foundation.css b/public/static/DataTables-1.10.8/css/dataTables.foundation.css new file mode 100644 index 0000000..48c8b18 --- /dev/null +++ b/public/static/DataTables-1.10.8/css/dataTables.foundation.css @@ -0,0 +1,98 @@ +table.dataTable { + clear: both; + margin: 0.5em 0 !important; + max-width: none !important; + width: 100%; +} +table.dataTable td, +table.dataTable th { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} +table.dataTable.nowrap th, table.dataTable.nowrap td { + white-space: nowrap; +} + +div.dataTables_wrapper div.dataTables_length label { + float: left; + text-align: left; + margin-bottom: 0; +} +div.dataTables_wrapper div.dataTables_length select { + width: 75px; + margin-bottom: 0; +} +div.dataTables_wrapper div.dataTables_filter label { + float: right; + margin-bottom: 0; +} +div.dataTables_wrapper div.dataTables_filter input { + display: inline-block !important; + width: auto !important; + margin-bottom: 0; + margin-left: 0.5em; +} +div.dataTables_wrapper div.dataTables_info { + padding-top: 2px; +} +div.dataTables_wrapper div.dataTables_paginate { + float: right; + margin: 0; +} + +table.dataTable thead th, +table.dataTable thead td { + padding-right: 1.5rem; +} +table.dataTable thead th:active, +table.dataTable thead td:active { + outline: none; +} +table.dataTable thead .sorting, +table.dataTable thead .sorting_asc, +table.dataTable thead .sorting_desc { + cursor: pointer; +} +table.dataTable thead .sorting, +table.dataTable thead .sorting_asc, +table.dataTable thead .sorting_desc, +table.dataTable thead .sorting_asc_disabled, +table.dataTable thead .sorting_desc_disabled { + background-repeat: no-repeat; + background-position: center right; +} +table.dataTable thead .sorting { + background-image: url("../images/sort_both.png"); +} +table.dataTable thead .sorting_asc { + background-image: url("../images/sort_asc.png"); +} +table.dataTable thead .sorting_desc { + background-image: url("../images/sort_desc.png"); +} +table.dataTable thead .sorting_asc_disabled { + background-image: url("../images/sort_asc_disabled.png"); +} +table.dataTable thead .sorting_desc_disabled { + background-image: url("../images/sort_desc_disabled.png"); +} + +div.dataTables_scrollHead table { + margin-bottom: 0 !important; +} + +div.dataTables_scrollBody table { + border-top: none; + margin-top: 0 !important; + margin-bottom: 0 !important; +} +div.dataTables_scrollBody table tbody tr:first-child th, +div.dataTables_scrollBody table tbody tr:first-child td { + border-top: none; +} + +div.dataTables_scrollFoot table { + margin-top: 0 !important; + border-top: none; +} diff --git a/public/static/DataTables-1.10.8/css/dataTables.foundation.min.css b/public/static/DataTables-1.10.8/css/dataTables.foundation.min.css new file mode 100644 index 0000000..1d6a558 --- /dev/null +++ b/public/static/DataTables-1.10.8/css/dataTables.foundation.min.css @@ -0,0 +1 @@ +table.dataTable{clear:both;margin:0.5em 0 !important;max-width:none !important;width:100%}table.dataTable td,table.dataTable th{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}div.dataTables_wrapper div.dataTables_length label{float:left;text-align:left;margin-bottom:0}div.dataTables_wrapper div.dataTables_length select{width:75px;margin-bottom:0}div.dataTables_wrapper div.dataTables_filter label{float:right;margin-bottom:0}div.dataTables_wrapper div.dataTables_filter input{display:inline-block !important;width:auto !important;margin-bottom:0;margin-left:0.5em}div.dataTables_wrapper div.dataTables_info{padding-top:2px}div.dataTables_wrapper div.dataTables_paginate{float:right;margin:0}table.dataTable thead th,table.dataTable thead td{padding-right:1.5rem}table.dataTable thead th:active,table.dataTable thead td:active{outline:none}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc{cursor:pointer}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc_disabled{background-repeat:no-repeat;background-position:center right}table.dataTable thead .sorting{background-image:url("../images/sort_both.png")}table.dataTable thead .sorting_asc{background-image:url("../images/sort_asc.png")}table.dataTable thead .sorting_desc{background-image:url("../images/sort_desc.png")}table.dataTable thead .sorting_asc_disabled{background-image:url("../images/sort_asc_disabled.png")}table.dataTable thead .sorting_desc_disabled{background-image:url("../images/sort_desc_disabled.png")}div.dataTables_scrollHead table{margin-bottom:0 !important}div.dataTables_scrollBody table{border-top:none;margin-top:0 !important;margin-bottom:0 !important}div.dataTables_scrollBody table tbody tr:first-child th,div.dataTables_scrollBody table tbody tr:first-child td{border-top:none}div.dataTables_scrollFoot table{margin-top:0 !important;border-top:none} diff --git a/public/static/DataTables-1.10.8/css/dataTables.jqueryui.css b/public/static/DataTables-1.10.8/css/dataTables.jqueryui.css new file mode 100644 index 0000000..881ed30 --- /dev/null +++ b/public/static/DataTables-1.10.8/css/dataTables.jqueryui.css @@ -0,0 +1,473 @@ +/* + * Table styles + */ +table.dataTable { + width: 100%; + margin: 0 auto; + clear: both; + border-collapse: separate; + border-spacing: 0; + /* + * Header and footer styles + */ + /* + * Body styles + */ +} +table.dataTable thead th, +table.dataTable tfoot th { + font-weight: bold; +} +table.dataTable thead th, +table.dataTable thead td { + padding: 10px 18px; +} +table.dataTable thead th:active, +table.dataTable thead td:active { + outline: none; +} +table.dataTable tfoot th, +table.dataTable tfoot td { + padding: 10px 18px 6px 18px; +} +table.dataTable tbody tr { + background-color: #ffffff; +} +table.dataTable tbody tr.selected { + background-color: #B0BED9; +} +table.dataTable tbody th, +table.dataTable tbody td { + padding: 8px 10px; +} +table.dataTable.row-border tbody th, table.dataTable.row-border tbody td, table.dataTable.display tbody th, table.dataTable.display tbody td { + border-top: 1px solid #ddd; +} +table.dataTable.row-border tbody tr:first-child th, +table.dataTable.row-border tbody tr:first-child td, table.dataTable.display tbody tr:first-child th, +table.dataTable.display tbody tr:first-child td { + border-top: none; +} +table.dataTable.cell-border tbody th, table.dataTable.cell-border tbody td { + border-top: 1px solid #ddd; + border-right: 1px solid #ddd; +} +table.dataTable.cell-border tbody tr th:first-child, +table.dataTable.cell-border tbody tr td:first-child { + border-left: 1px solid #ddd; +} +table.dataTable.cell-border tbody tr:first-child th, +table.dataTable.cell-border tbody tr:first-child td { + border-top: none; +} +table.dataTable.stripe tbody tr.odd, table.dataTable.display tbody tr.odd { + background-color: #f9f9f9; +} +table.dataTable.stripe tbody tr.odd.selected, table.dataTable.display tbody tr.odd.selected { + background-color: #acbad4; +} +table.dataTable.hover tbody tr:hover, table.dataTable.display tbody tr:hover { + background-color: #f6f6f6; +} +table.dataTable.hover tbody tr:hover.selected, table.dataTable.display tbody tr:hover.selected { + background-color: #aab7d1; +} +table.dataTable.order-column tbody tr > .sorting_1, +table.dataTable.order-column tbody tr > .sorting_2, +table.dataTable.order-column tbody tr > .sorting_3, table.dataTable.display tbody tr > .sorting_1, +table.dataTable.display tbody tr > .sorting_2, +table.dataTable.display tbody tr > .sorting_3 { + background-color: #fafafa; +} +table.dataTable.order-column tbody tr.selected > .sorting_1, +table.dataTable.order-column tbody tr.selected > .sorting_2, +table.dataTable.order-column tbody tr.selected > .sorting_3, table.dataTable.display tbody tr.selected > .sorting_1, +table.dataTable.display tbody tr.selected > .sorting_2, +table.dataTable.display tbody tr.selected > .sorting_3 { + background-color: #acbad5; +} +table.dataTable.display tbody tr.odd > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd > .sorting_1 { + background-color: #f1f1f1; +} +table.dataTable.display tbody tr.odd > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd > .sorting_2 { + background-color: #f3f3f3; +} +table.dataTable.display tbody tr.odd > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd > .sorting_3 { + background-color: whitesmoke; +} +table.dataTable.display tbody tr.odd.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_1 { + background-color: #a6b4cd; +} +table.dataTable.display tbody tr.odd.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_2 { + background-color: #a8b5cf; +} +table.dataTable.display tbody tr.odd.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_3 { + background-color: #a9b7d1; +} +table.dataTable.display tbody tr.even > .sorting_1, table.dataTable.order-column.stripe tbody tr.even > .sorting_1 { + background-color: #fafafa; +} +table.dataTable.display tbody tr.even > .sorting_2, table.dataTable.order-column.stripe tbody tr.even > .sorting_2 { + background-color: #fcfcfc; +} +table.dataTable.display tbody tr.even > .sorting_3, table.dataTable.order-column.stripe tbody tr.even > .sorting_3 { + background-color: #fefefe; +} +table.dataTable.display tbody tr.even.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_1 { + background-color: #acbad5; +} +table.dataTable.display tbody tr.even.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_2 { + background-color: #aebcd6; +} +table.dataTable.display tbody tr.even.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_3 { + background-color: #afbdd8; +} +table.dataTable.display tbody tr:hover > .sorting_1, table.dataTable.order-column.hover tbody tr:hover > .sorting_1 { + background-color: #eaeaea; +} +table.dataTable.display tbody tr:hover > .sorting_2, table.dataTable.order-column.hover tbody tr:hover > .sorting_2 { + background-color: #ececec; +} +table.dataTable.display tbody tr:hover > .sorting_3, table.dataTable.order-column.hover tbody tr:hover > .sorting_3 { + background-color: #efefef; +} +table.dataTable.display tbody tr:hover.selected > .sorting_1, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_1 { + background-color: #a2aec7; +} +table.dataTable.display tbody tr:hover.selected > .sorting_2, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_2 { + background-color: #a3b0c9; +} +table.dataTable.display tbody tr:hover.selected > .sorting_3, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_3 { + background-color: #a5b2cb; +} +table.dataTable.no-footer { + border-bottom: 1px solid #111; +} +table.dataTable.nowrap th, table.dataTable.nowrap td { + white-space: nowrap; +} +table.dataTable.compact thead th, +table.dataTable.compact thead td { + padding: 4px 17px 4px 4px; +} +table.dataTable.compact tfoot th, +table.dataTable.compact tfoot td { + padding: 4px; +} +table.dataTable.compact tbody th, +table.dataTable.compact tbody td { + padding: 4px; +} +table.dataTable th.dt-left, +table.dataTable td.dt-left { + text-align: left; +} +table.dataTable th.dt-center, +table.dataTable td.dt-center, +table.dataTable td.dataTables_empty { + text-align: center; +} +table.dataTable th.dt-right, +table.dataTable td.dt-right { + text-align: right; +} +table.dataTable th.dt-justify, +table.dataTable td.dt-justify { + text-align: justify; +} +table.dataTable th.dt-nowrap, +table.dataTable td.dt-nowrap { + white-space: nowrap; +} +table.dataTable thead th.dt-head-left, +table.dataTable thead td.dt-head-left, +table.dataTable tfoot th.dt-head-left, +table.dataTable tfoot td.dt-head-left { + text-align: left; +} +table.dataTable thead th.dt-head-center, +table.dataTable thead td.dt-head-center, +table.dataTable tfoot th.dt-head-center, +table.dataTable tfoot td.dt-head-center { + text-align: center; +} +table.dataTable thead th.dt-head-right, +table.dataTable thead td.dt-head-right, +table.dataTable tfoot th.dt-head-right, +table.dataTable tfoot td.dt-head-right { + text-align: right; +} +table.dataTable thead th.dt-head-justify, +table.dataTable thead td.dt-head-justify, +table.dataTable tfoot th.dt-head-justify, +table.dataTable tfoot td.dt-head-justify { + text-align: justify; +} +table.dataTable thead th.dt-head-nowrap, +table.dataTable thead td.dt-head-nowrap, +table.dataTable tfoot th.dt-head-nowrap, +table.dataTable tfoot td.dt-head-nowrap { + white-space: nowrap; +} +table.dataTable tbody th.dt-body-left, +table.dataTable tbody td.dt-body-left { + text-align: left; +} +table.dataTable tbody th.dt-body-center, +table.dataTable tbody td.dt-body-center { + text-align: center; +} +table.dataTable tbody th.dt-body-right, +table.dataTable tbody td.dt-body-right { + text-align: right; +} +table.dataTable tbody th.dt-body-justify, +table.dataTable tbody td.dt-body-justify { + text-align: justify; +} +table.dataTable tbody th.dt-body-nowrap, +table.dataTable tbody td.dt-body-nowrap { + white-space: nowrap; +} + +table.dataTable, +table.dataTable th, +table.dataTable td { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} + +/* + * Control feature layout + */ +.dataTables_wrapper { + position: relative; + clear: both; + *zoom: 1; + zoom: 1; +} +.dataTables_wrapper .dataTables_length { + float: left; +} +.dataTables_wrapper .dataTables_filter { + float: right; + text-align: right; +} +.dataTables_wrapper .dataTables_filter input { + margin-left: 0.5em; +} +.dataTables_wrapper .dataTables_info { + clear: both; + float: left; + padding-top: 0.755em; +} +.dataTables_wrapper .dataTables_paginate { + float: right; + text-align: right; + padding-top: 0.25em; +} +.dataTables_wrapper .dataTables_paginate .paginate_button { + box-sizing: border-box; + display: inline-block; + min-width: 1.5em; + padding: 0.5em 1em; + margin-left: 2px; + text-align: center; + text-decoration: none !important; + cursor: pointer; + *cursor: hand; + color: #333 !important; + border: 1px solid transparent; + border-radius: 2px; +} +.dataTables_wrapper .dataTables_paginate .paginate_button.current, .dataTables_wrapper .dataTables_paginate .paginate_button.current:hover { + color: #333 !important; + border: 1px solid #979797; + background-color: white; + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, white), color-stop(100%, #dcdcdc)); + /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, white 0%, #dcdcdc 100%); + /* Chrome10+,Safari5.1+ */ + background: -moz-linear-gradient(top, white 0%, #dcdcdc 100%); + /* FF3.6+ */ + background: -ms-linear-gradient(top, white 0%, #dcdcdc 100%); + /* IE10+ */ + background: -o-linear-gradient(top, white 0%, #dcdcdc 100%); + /* Opera 11.10+ */ + background: linear-gradient(to bottom, white 0%, #dcdcdc 100%); + /* W3C */ +} +.dataTables_wrapper .dataTables_paginate .paginate_button.disabled, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active { + cursor: default; + color: #666 !important; + border: 1px solid transparent; + background: transparent; + box-shadow: none; +} +.dataTables_wrapper .dataTables_paginate .paginate_button:hover { + color: white !important; + border: 1px solid #111; + background-color: #585858; + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111)); + /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #585858 0%, #111 100%); + /* Chrome10+,Safari5.1+ */ + background: -moz-linear-gradient(top, #585858 0%, #111 100%); + /* FF3.6+ */ + background: -ms-linear-gradient(top, #585858 0%, #111 100%); + /* IE10+ */ + background: -o-linear-gradient(top, #585858 0%, #111 100%); + /* Opera 11.10+ */ + background: linear-gradient(to bottom, #585858 0%, #111 100%); + /* W3C */ +} +.dataTables_wrapper .dataTables_paginate .paginate_button:active { + outline: none; + background-color: #2b2b2b; + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c)); + /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); + /* Chrome10+,Safari5.1+ */ + background: -moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); + /* FF3.6+ */ + background: -ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); + /* IE10+ */ + background: -o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); + /* Opera 11.10+ */ + background: linear-gradient(to bottom, #2b2b2b 0%, #0c0c0c 100%); + /* W3C */ + box-shadow: inset 0 0 3px #111; +} +.dataTables_wrapper .dataTables_paginate .ellipsis { + padding: 0 1em; +} +.dataTables_wrapper .dataTables_processing { + position: absolute; + top: 50%; + left: 50%; + width: 100%; + height: 40px; + margin-left: -50%; + margin-top: -25px; + padding-top: 20px; + text-align: center; + font-size: 1.2em; + background-color: white; + background: -webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255, 255, 255, 0)), color-stop(25%, rgba(255, 255, 255, 0.9)), color-stop(75%, rgba(255, 255, 255, 0.9)), color-stop(100%, rgba(255, 255, 255, 0))); + background: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); + background: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); + background: -ms-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); + background: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); + background: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); +} +.dataTables_wrapper .dataTables_length, +.dataTables_wrapper .dataTables_filter, +.dataTables_wrapper .dataTables_info, +.dataTables_wrapper .dataTables_processing, +.dataTables_wrapper .dataTables_paginate { + color: #333; +} +.dataTables_wrapper .dataTables_scroll { + clear: both; +} +.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody { + *margin-top: -1px; + -webkit-overflow-scrolling: touch; +} +.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th > div.dataTables_sizing, +.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td > div.dataTables_sizing { + height: 0; + overflow: hidden; + margin: 0 !important; + padding: 0 !important; +} +.dataTables_wrapper.no-footer .dataTables_scrollBody { + border-bottom: 1px solid #111; +} +.dataTables_wrapper.no-footer div.dataTables_scrollHead table, +.dataTables_wrapper.no-footer div.dataTables_scrollBody table { + border-bottom: none; +} +.dataTables_wrapper:after { + visibility: hidden; + display: block; + content: ""; + clear: both; + height: 0; +} + +@media screen and (max-width: 767px) { + .dataTables_wrapper .dataTables_info, + .dataTables_wrapper .dataTables_paginate { + float: none; + text-align: center; + } + .dataTables_wrapper .dataTables_paginate { + margin-top: 0.5em; + } +} +@media screen and (max-width: 640px) { + .dataTables_wrapper .dataTables_length, + .dataTables_wrapper .dataTables_filter { + float: none; + text-align: center; + } + .dataTables_wrapper .dataTables_filter { + margin-top: 0.5em; + } +} +table.dataTable thead th div.DataTables_sort_wrapper { + position: relative; +} +table.dataTable thead th div.DataTables_sort_wrapper span { + position: absolute; + top: 50%; + margin-top: -8px; + right: -18px; +} +table.dataTable thead th.ui-state-default, +table.dataTable tfoot th.ui-state-default { + border-right-width: 0; +} +table.dataTable thead th.ui-state-default:last-child, +table.dataTable tfoot th.ui-state-default:last-child { + border-right-width: 1px; +} + +/* + * Control feature layout + */ +.dataTables_wrapper .dataTables_paginate .fg-button { + box-sizing: border-box; + display: inline-block; + min-width: 1.5em; + padding: 0.5em; + margin-left: 2px; + text-align: center; + text-decoration: none !important; + cursor: pointer; + *cursor: hand; + color: #333 !important; + border: 1px solid transparent; +} +.dataTables_wrapper .dataTables_paginate .fg-button:active { + outline: none; +} +.dataTables_wrapper .dataTables_paginate .fg-button:first-child { + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; +} +.dataTables_wrapper .dataTables_paginate .fg-button:last-child { + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} +.dataTables_wrapper .ui-widget-header { + font-weight: normal; +} +.dataTables_wrapper .ui-toolbar { + padding: 8px; +} +.dataTables_wrapper.no-footer .dataTables_scrollBody { + border-bottom: none; +} diff --git a/public/static/DataTables-1.10.8/css/dataTables.jqueryui.min.css b/public/static/DataTables-1.10.8/css/dataTables.jqueryui.min.css new file mode 100644 index 0000000..65f9d48 --- /dev/null +++ b/public/static/DataTables-1.10.8/css/dataTables.jqueryui.min.css @@ -0,0 +1 @@ +table.dataTable{width:100%;margin:0 auto;clear:both;border-collapse:separate;border-spacing:0}table.dataTable thead th,table.dataTable tfoot th{font-weight:bold}table.dataTable thead th,table.dataTable thead td{padding:10px 18px}table.dataTable thead th:active,table.dataTable thead td:active{outline:none}table.dataTable tfoot th,table.dataTable tfoot td{padding:10px 18px 6px 18px}table.dataTable tbody tr{background-color:#ffffff}table.dataTable tbody tr.selected{background-color:#B0BED9}table.dataTable tbody th,table.dataTable tbody td{padding:8px 10px}table.dataTable.row-border tbody th,table.dataTable.row-border tbody td,table.dataTable.display tbody th,table.dataTable.display tbody td{border-top:1px solid #ddd}table.dataTable.row-border tbody tr:first-child th,table.dataTable.row-border tbody tr:first-child td,table.dataTable.display tbody tr:first-child th,table.dataTable.display tbody tr:first-child td{border-top:none}table.dataTable.cell-border tbody th,table.dataTable.cell-border tbody td{border-top:1px solid #ddd;border-right:1px solid #ddd}table.dataTable.cell-border tbody tr th:first-child,table.dataTable.cell-border tbody tr td:first-child{border-left:1px solid #ddd}table.dataTable.cell-border tbody tr:first-child th,table.dataTable.cell-border tbody tr:first-child td{border-top:none}table.dataTable.stripe tbody tr.odd,table.dataTable.display tbody tr.odd{background-color:#f9f9f9}table.dataTable.stripe tbody tr.odd.selected,table.dataTable.display tbody tr.odd.selected{background-color:#acbad4}table.dataTable.hover tbody tr:hover,table.dataTable.display tbody tr:hover{background-color:#f6f6f6}table.dataTable.hover tbody tr:hover.selected,table.dataTable.display tbody tr:hover.selected{background-color:#aab7d1}table.dataTable.order-column tbody tr>.sorting_1,table.dataTable.order-column tbody tr>.sorting_2,table.dataTable.order-column tbody tr>.sorting_3,table.dataTable.display tbody tr>.sorting_1,table.dataTable.display tbody tr>.sorting_2,table.dataTable.display tbody tr>.sorting_3{background-color:#fafafa}table.dataTable.order-column tbody tr.selected>.sorting_1,table.dataTable.order-column tbody tr.selected>.sorting_2,table.dataTable.order-column tbody tr.selected>.sorting_3,table.dataTable.display tbody tr.selected>.sorting_1,table.dataTable.display tbody tr.selected>.sorting_2,table.dataTable.display tbody tr.selected>.sorting_3{background-color:#acbad5}table.dataTable.display tbody tr.odd>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd>.sorting_1{background-color:#f1f1f1}table.dataTable.display tbody tr.odd>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd>.sorting_2{background-color:#f3f3f3}table.dataTable.display tbody tr.odd>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd>.sorting_3{background-color:whitesmoke}table.dataTable.display tbody tr.odd.selected>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_1{background-color:#a6b4cd}table.dataTable.display tbody tr.odd.selected>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_2{background-color:#a8b5cf}table.dataTable.display tbody tr.odd.selected>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_3{background-color:#a9b7d1}table.dataTable.display tbody tr.even>.sorting_1,table.dataTable.order-column.stripe tbody tr.even>.sorting_1{background-color:#fafafa}table.dataTable.display tbody tr.even>.sorting_2,table.dataTable.order-column.stripe tbody tr.even>.sorting_2{background-color:#fcfcfc}table.dataTable.display tbody tr.even>.sorting_3,table.dataTable.order-column.stripe tbody tr.even>.sorting_3{background-color:#fefefe}table.dataTable.display tbody tr.even.selected>.sorting_1,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_1{background-color:#acbad5}table.dataTable.display tbody tr.even.selected>.sorting_2,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_2{background-color:#aebcd6}table.dataTable.display tbody tr.even.selected>.sorting_3,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_3{background-color:#afbdd8}table.dataTable.display tbody tr:hover>.sorting_1,table.dataTable.order-column.hover tbody tr:hover>.sorting_1{background-color:#eaeaea}table.dataTable.display tbody tr:hover>.sorting_2,table.dataTable.order-column.hover tbody tr:hover>.sorting_2{background-color:#ececec}table.dataTable.display tbody tr:hover>.sorting_3,table.dataTable.order-column.hover tbody tr:hover>.sorting_3{background-color:#efefef}table.dataTable.display tbody tr:hover.selected>.sorting_1,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_1{background-color:#a2aec7}table.dataTable.display tbody tr:hover.selected>.sorting_2,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_2{background-color:#a3b0c9}table.dataTable.display tbody tr:hover.selected>.sorting_3,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_3{background-color:#a5b2cb}table.dataTable.no-footer{border-bottom:1px solid #111}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}table.dataTable.compact thead th,table.dataTable.compact thead td{padding:4px 17px 4px 4px}table.dataTable.compact tfoot th,table.dataTable.compact tfoot td{padding:4px}table.dataTable.compact tbody th,table.dataTable.compact tbody td{padding:4px}table.dataTable th.dt-left,table.dataTable td.dt-left{text-align:left}table.dataTable th.dt-center,table.dataTable td.dt-center,table.dataTable td.dataTables_empty{text-align:center}table.dataTable th.dt-right,table.dataTable td.dt-right{text-align:right}table.dataTable th.dt-justify,table.dataTable td.dt-justify{text-align:justify}table.dataTable th.dt-nowrap,table.dataTable td.dt-nowrap{white-space:nowrap}table.dataTable thead th.dt-head-left,table.dataTable thead td.dt-head-left,table.dataTable tfoot th.dt-head-left,table.dataTable tfoot td.dt-head-left{text-align:left}table.dataTable thead th.dt-head-center,table.dataTable thead td.dt-head-center,table.dataTable tfoot th.dt-head-center,table.dataTable tfoot td.dt-head-center{text-align:center}table.dataTable thead th.dt-head-right,table.dataTable thead td.dt-head-right,table.dataTable tfoot th.dt-head-right,table.dataTable tfoot td.dt-head-right{text-align:right}table.dataTable thead th.dt-head-justify,table.dataTable thead td.dt-head-justify,table.dataTable tfoot th.dt-head-justify,table.dataTable tfoot td.dt-head-justify{text-align:justify}table.dataTable thead th.dt-head-nowrap,table.dataTable thead td.dt-head-nowrap,table.dataTable tfoot th.dt-head-nowrap,table.dataTable tfoot td.dt-head-nowrap{white-space:nowrap}table.dataTable tbody th.dt-body-left,table.dataTable tbody td.dt-body-left{text-align:left}table.dataTable tbody th.dt-body-center,table.dataTable tbody td.dt-body-center{text-align:center}table.dataTable tbody th.dt-body-right,table.dataTable tbody td.dt-body-right{text-align:right}table.dataTable tbody th.dt-body-justify,table.dataTable tbody td.dt-body-justify{text-align:justify}table.dataTable tbody th.dt-body-nowrap,table.dataTable tbody td.dt-body-nowrap{white-space:nowrap}table.dataTable,table.dataTable th,table.dataTable td{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.dataTables_wrapper{position:relative;clear:both;*zoom:1;zoom:1}.dataTables_wrapper .dataTables_length{float:left}.dataTables_wrapper .dataTables_filter{float:right;text-align:right}.dataTables_wrapper .dataTables_filter input{margin-left:0.5em}.dataTables_wrapper .dataTables_info{clear:both;float:left;padding-top:0.755em}.dataTables_wrapper .dataTables_paginate{float:right;text-align:right;padding-top:0.25em}.dataTables_wrapper .dataTables_paginate .paginate_button{box-sizing:border-box;display:inline-block;min-width:1.5em;padding:0.5em 1em;margin-left:2px;text-align:center;text-decoration:none !important;cursor:pointer;*cursor:hand;color:#333 !important;border:1px solid transparent;border-radius:2px}.dataTables_wrapper .dataTables_paginate .paginate_button.current,.dataTables_wrapper .dataTables_paginate .paginate_button.current:hover{color:#333 !important;border:1px solid #979797;background-color:white;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #fff), color-stop(100%, #dcdcdc));background:-webkit-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-moz-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-ms-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-o-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:linear-gradient(to bottom, #fff 0%, #dcdcdc 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button.disabled,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active{cursor:default;color:#666 !important;border:1px solid transparent;background:transparent;box-shadow:none}.dataTables_wrapper .dataTables_paginate .paginate_button:hover{color:white !important;border:1px solid #111;background-color:#585858;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111));background:-webkit-linear-gradient(top, #585858 0%, #111 100%);background:-moz-linear-gradient(top, #585858 0%, #111 100%);background:-ms-linear-gradient(top, #585858 0%, #111 100%);background:-o-linear-gradient(top, #585858 0%, #111 100%);background:linear-gradient(to bottom, #585858 0%, #111 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button:active{outline:none;background-color:#2b2b2b;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c));background:-webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:linear-gradient(to bottom, #2b2b2b 0%, #0c0c0c 100%);box-shadow:inset 0 0 3px #111}.dataTables_wrapper .dataTables_paginate .ellipsis{padding:0 1em}.dataTables_wrapper .dataTables_processing{position:absolute;top:50%;left:50%;width:100%;height:40px;margin-left:-50%;margin-top:-25px;padding-top:20px;text-align:center;font-size:1.2em;background-color:white;background:-webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255,255,255,0)), color-stop(25%, rgba(255,255,255,0.9)), color-stop(75%, rgba(255,255,255,0.9)), color-stop(100%, rgba(255,255,255,0)));background:-webkit-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-moz-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-ms-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-o-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:linear-gradient(to right, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%)}.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter,.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_processing,.dataTables_wrapper .dataTables_paginate{color:#333}.dataTables_wrapper .dataTables_scroll{clear:both}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody{*margin-top:-1px;-webkit-overflow-scrolling:touch}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td>div.dataTables_sizing{height:0;overflow:hidden;margin:0 !important;padding:0 !important}.dataTables_wrapper.no-footer .dataTables_scrollBody{border-bottom:1px solid #111}.dataTables_wrapper.no-footer div.dataTables_scrollHead table,.dataTables_wrapper.no-footer div.dataTables_scrollBody table{border-bottom:none}.dataTables_wrapper:after{visibility:hidden;display:block;content:"";clear:both;height:0}@media screen and (max-width: 767px){.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_paginate{float:none;text-align:center}.dataTables_wrapper .dataTables_paginate{margin-top:0.5em}}@media screen and (max-width: 640px){.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter{float:none;text-align:center}.dataTables_wrapper .dataTables_filter{margin-top:0.5em}}table.dataTable thead th div.DataTables_sort_wrapper{position:relative}table.dataTable thead th div.DataTables_sort_wrapper span{position:absolute;top:50%;margin-top:-8px;right:-18px}table.dataTable thead th.ui-state-default,table.dataTable tfoot th.ui-state-default{border-right-width:0}table.dataTable thead th.ui-state-default:last-child,table.dataTable tfoot th.ui-state-default:last-child{border-right-width:1px}.dataTables_wrapper .dataTables_paginate .fg-button{box-sizing:border-box;display:inline-block;min-width:1.5em;padding:0.5em;margin-left:2px;text-align:center;text-decoration:none !important;cursor:pointer;*cursor:hand;color:#333 !important;border:1px solid transparent}.dataTables_wrapper .dataTables_paginate .fg-button:active{outline:none}.dataTables_wrapper .dataTables_paginate .fg-button:first-child{border-top-left-radius:3px;border-bottom-left-radius:3px}.dataTables_wrapper .dataTables_paginate .fg-button:last-child{border-top-right-radius:3px;border-bottom-right-radius:3px}.dataTables_wrapper .ui-widget-header{font-weight:normal}.dataTables_wrapper .ui-toolbar{padding:8px}.dataTables_wrapper.no-footer .dataTables_scrollBody{border-bottom:none} diff --git a/public/static/DataTables-1.10.8/css/jquery.dataTables.css b/public/static/DataTables-1.10.8/css/jquery.dataTables.css new file mode 100644 index 0000000..83a7dc8 --- /dev/null +++ b/public/static/DataTables-1.10.8/css/jquery.dataTables.css @@ -0,0 +1,361 @@ +/* + * Table styles + */ +table.dataTable { + width: 100%; + margin: 0 auto; + clear: both; + border-collapse: separate; + border-spacing: 0; + /* + * Header and footer styles + */ + /* + * Body styles + */ } + table.dataTable thead th, + table.dataTable tfoot th { + font-weight: bold; } + table.dataTable thead th, + table.dataTable thead td { + padding: 10px 18px; + border-bottom: 1px solid #aaaaaa; } + table.dataTable thead th:active, + table.dataTable thead td:active { + outline: none; } + table.dataTable tfoot th, + table.dataTable tfoot td { + padding: 10px 18px 6px 18px; + border-top: 1px solid #aaaaaa; } + table.dataTable thead .sorting, + table.dataTable thead .sorting_asc, + table.dataTable thead .sorting_desc { + cursor: pointer; + *cursor: hand; } + table.dataTable thead .sorting, + table.dataTable thead .sorting_asc, + table.dataTable thead .sorting_desc, + table.dataTable thead .sorting_asc_disabled, + table.dataTable thead .sorting_desc_disabled { + background-repeat: no-repeat; + background-position: center right; } + table.dataTable thead .sorting { + background-image: url("../images/sort_both.png"); } + table.dataTable thead .sorting_asc { + background-image: url("../images/sort_asc.png"); } + table.dataTable thead .sorting_desc { + background-image: url("../images/sort_desc.png"); } + table.dataTable thead .sorting_asc_disabled { + background-image: url("../images/sort_asc_disabled.png"); } + table.dataTable thead .sorting_desc_disabled { + background-image: url("../images/sort_desc_disabled.png"); } + table.dataTable tbody tr { + background-color: white; } + table.dataTable tbody tr.selected { + background-color: #b0bed9; } + table.dataTable tbody th, + table.dataTable tbody td { + padding: 8px 10px; } + table.dataTable.row-border tbody th, table.dataTable.row-border tbody td, table.dataTable.display tbody th, table.dataTable.display tbody td { + border-top: 1px solid #dddddd; } + table.dataTable.row-border tbody tr:first-child th, + table.dataTable.row-border tbody tr:first-child td, table.dataTable.display tbody tr:first-child th, + table.dataTable.display tbody tr:first-child td { + border-top: none; } + table.dataTable.cell-border tbody th, table.dataTable.cell-border tbody td { + border-top: 1px solid #dddddd; + border-right: 1px solid #dddddd; } + table.dataTable.cell-border tbody tr th:first-child, + table.dataTable.cell-border tbody tr td:first-child { + border-left: 1px solid #dddddd; } + table.dataTable.cell-border tbody tr:first-child th, + table.dataTable.cell-border tbody tr:first-child td { + border-top: none; } + table.dataTable.stripe tbody tr.odd, table.dataTable.display tbody tr.odd { + background-color: #f9f9f9; } + table.dataTable.stripe tbody tr.odd.selected, table.dataTable.display tbody tr.odd.selected { + background-color: #abb9d3; } + table.dataTable.hover tbody tr:hover, table.dataTable.display tbody tr:hover { + background-color: whitesmoke; } + table.dataTable.hover tbody tr:hover.selected, table.dataTable.display tbody tr:hover.selected { + background-color: #a9b7d1; } + table.dataTable.order-column tbody tr > .sorting_1, + table.dataTable.order-column tbody tr > .sorting_2, + table.dataTable.order-column tbody tr > .sorting_3, table.dataTable.display tbody tr > .sorting_1, + table.dataTable.display tbody tr > .sorting_2, + table.dataTable.display tbody tr > .sorting_3 { + background-color: #f9f9f9; } + table.dataTable.order-column tbody tr.selected > .sorting_1, + table.dataTable.order-column tbody tr.selected > .sorting_2, + table.dataTable.order-column tbody tr.selected > .sorting_3, table.dataTable.display tbody tr.selected > .sorting_1, + table.dataTable.display tbody tr.selected > .sorting_2, + table.dataTable.display tbody tr.selected > .sorting_3 { + background-color: #acbad4; } + table.dataTable.display tbody tr.odd > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd > .sorting_1 { + background-color: #f1f1f1; } + table.dataTable.display tbody tr.odd > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd > .sorting_2 { + background-color: #f3f3f3; } + table.dataTable.display tbody tr.odd > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd > .sorting_3 { + background-color: whitesmoke; } + table.dataTable.display tbody tr.odd.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_1 { + background-color: #a6b3cd; } + table.dataTable.display tbody tr.odd.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_2 { + background-color: #a7b5ce; } + table.dataTable.display tbody tr.odd.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_3 { + background-color: #a9b6d0; } + table.dataTable.display tbody tr.even > .sorting_1, table.dataTable.order-column.stripe tbody tr.even > .sorting_1 { + background-color: #f9f9f9; } + table.dataTable.display tbody tr.even > .sorting_2, table.dataTable.order-column.stripe tbody tr.even > .sorting_2 { + background-color: #fbfbfb; } + table.dataTable.display tbody tr.even > .sorting_3, table.dataTable.order-column.stripe tbody tr.even > .sorting_3 { + background-color: #fdfdfd; } + table.dataTable.display tbody tr.even.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_1 { + background-color: #acbad4; } + table.dataTable.display tbody tr.even.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_2 { + background-color: #adbbd6; } + table.dataTable.display tbody tr.even.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_3 { + background-color: #afbdd8; } + table.dataTable.display tbody tr:hover > .sorting_1, table.dataTable.order-column.hover tbody tr:hover > .sorting_1 { + background-color: #eaeaea; } + table.dataTable.display tbody tr:hover > .sorting_2, table.dataTable.order-column.hover tbody tr:hover > .sorting_2 { + background-color: #ebebeb; } + table.dataTable.display tbody tr:hover > .sorting_3, table.dataTable.order-column.hover tbody tr:hover > .sorting_3 { + background-color: #eeeeee; } + table.dataTable.display tbody tr:hover.selected > .sorting_1, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_1 { + background-color: #a1aec7; } + table.dataTable.display tbody tr:hover.selected > .sorting_2, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_2 { + background-color: #a2afc8; } + table.dataTable.display tbody tr:hover.selected > .sorting_3, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_3 { + background-color: #a4b2cb; } + table.dataTable.no-footer { + border-bottom: 1px solid #aaaaaa; } + table.dataTable.nowrap th, table.dataTable.nowrap td { + white-space: nowrap; } + table.dataTable.compact thead th, + table.dataTable.compact thead td { + padding: 4px 17px 4px 4px; } + table.dataTable.compact tfoot th, + table.dataTable.compact tfoot td { + padding: 4px; } + table.dataTable.compact tbody th, + table.dataTable.compact tbody td { + padding: 4px; } + table.dataTable th.dt-left, + table.dataTable td.dt-left { + text-align: left; } + table.dataTable th.dt-center, + table.dataTable td.dt-center, + table.dataTable td.dataTables_empty { + text-align: center; } + table.dataTable th.dt-right, + table.dataTable td.dt-right { + text-align: right; } + table.dataTable th.dt-justify, + table.dataTable td.dt-justify { + text-align: justify; } + table.dataTable th.dt-nowrap, + table.dataTable td.dt-nowrap { + white-space: nowrap; } + table.dataTable thead th.dt-head-left, + table.dataTable thead td.dt-head-left, + table.dataTable tfoot th.dt-head-left, + table.dataTable tfoot td.dt-head-left { + text-align: left; } + table.dataTable thead th.dt-head-center, + table.dataTable thead td.dt-head-center, + table.dataTable tfoot th.dt-head-center, + table.dataTable tfoot td.dt-head-center { + text-align: center; } + table.dataTable thead th.dt-head-right, + table.dataTable thead td.dt-head-right, + table.dataTable tfoot th.dt-head-right, + table.dataTable tfoot td.dt-head-right { + text-align: right; } + table.dataTable thead th.dt-head-justify, + table.dataTable thead td.dt-head-justify, + table.dataTable tfoot th.dt-head-justify, + table.dataTable tfoot td.dt-head-justify { + text-align: justify; } + table.dataTable thead th.dt-head-nowrap, + table.dataTable thead td.dt-head-nowrap, + table.dataTable tfoot th.dt-head-nowrap, + table.dataTable tfoot td.dt-head-nowrap { + white-space: nowrap; } + table.dataTable tbody th.dt-body-left, + table.dataTable tbody td.dt-body-left { + text-align: left; } + table.dataTable tbody th.dt-body-center, + table.dataTable tbody td.dt-body-center { + text-align: center; } + table.dataTable tbody th.dt-body-right, + table.dataTable tbody td.dt-body-right { + text-align: right; } + table.dataTable tbody th.dt-body-justify, + table.dataTable tbody td.dt-body-justify { + text-align: justify; } + table.dataTable tbody th.dt-body-nowrap, + table.dataTable tbody td.dt-body-nowrap { + white-space: nowrap; } + +table.dataTable, +table.dataTable th, +table.dataTable td { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; } + +/* + * Control feature layout + */ +.dataTables_wrapper { + position: relative; + clear: both; + *zoom: 1; + zoom: 1; } + .dataTables_wrapper .dataTables_length { + float: left; } + .dataTables_wrapper .dataTables_filter { + float: right; + text-align: right; } + .dataTables_wrapper .dataTables_filter input { + margin-left: 0.5em; } + .dataTables_wrapper .dataTables_info { + clear: both; + float: left; + padding-top: 0.755em; } + .dataTables_wrapper .dataTables_paginate { + float: right; + text-align: right; + padding-top: 0.25em; } + .dataTables_wrapper .dataTables_paginate .paginate_button { + box-sizing: border-box; + display: inline-block; + min-width: 1.5em; + padding: 0.5em 1em; + margin-left: 2px; + text-align: center; + text-decoration: none !important; + cursor: pointer; + *cursor: hand; + color: #555555 !important; + border: 1px solid transparent; + border-radius: 2px; } + .dataTables_wrapper .dataTables_paginate .paginate_button.current, .dataTables_wrapper .dataTables_paginate .paginate_button.current:hover { + color: #555555 !important; + border: 1px solid #bababa; + background-color: white; + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, white), color-stop(100%, white)); + /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, white 0%, white 100%); + /* Chrome10+,Safari5.1+ */ + background: -moz-linear-gradient(top, white 0%, white 100%); + /* FF3.6+ */ + background: -ms-linear-gradient(top, white 0%, white 100%); + /* IE10+ */ + background: -o-linear-gradient(top, white 0%, white 100%); + /* Opera 11.10+ */ + background: linear-gradient(to bottom, white 0%, white 100%); + /* W3C */ } + .dataTables_wrapper .dataTables_paginate .paginate_button.disabled, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active { + cursor: default; + color: #666 !important; + border: 1px solid transparent; + background: transparent; + box-shadow: none; } + .dataTables_wrapper .dataTables_paginate .paginate_button:hover { + color: white !important; + border: 1px solid #1abc9c; + background-color: #78ecd5; + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #78ecd5), color-stop(100%, #1abc9c)); + /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #78ecd5 0%, #1abc9c 100%); + /* Chrome10+,Safari5.1+ */ + background: -moz-linear-gradient(top, #78ecd5 0%, #1abc9c 100%); + /* FF3.6+ */ + background: -ms-linear-gradient(top, #78ecd5 0%, #1abc9c 100%); + /* IE10+ */ + background: -o-linear-gradient(top, #78ecd5 0%, #1abc9c 100%); + /* Opera 11.10+ */ + background: linear-gradient(to bottom, #78ecd5 0%, #1abc9c 100%); + /* W3C */ } + .dataTables_wrapper .dataTables_paginate .paginate_button:active { + outline: none; + background-color: #28e1bd; + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #28e1bd), color-stop(100%, #19b395)); + /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #28e1bd 0%, #19b395 100%); + /* Chrome10+,Safari5.1+ */ + background: -moz-linear-gradient(top, #28e1bd 0%, #19b395 100%); + /* FF3.6+ */ + background: -ms-linear-gradient(top, #28e1bd 0%, #19b395 100%); + /* IE10+ */ + background: -o-linear-gradient(top, #28e1bd 0%, #19b395 100%); + /* Opera 11.10+ */ + background: linear-gradient(to bottom, #28e1bd 0%, #19b395 100%); + /* W3C */ + box-shadow: inset 0 0 3px #111; } + .dataTables_wrapper .dataTables_paginate .ellipsis { + padding: 0 1em; } + .dataTables_wrapper .dataTables_processing { + position: absolute; + top: 50%; + left: 50%; + width: 100%; + height: 40px; + margin-left: -50%; + margin-top: -25px; + padding-top: 20px; + text-align: center; + font-size: 1.2em; + background-color: white; + background: -webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255, 255, 255, 0)), color-stop(25%, rgba(255, 255, 255, 0.9)), color-stop(75%, rgba(255, 255, 255, 0.9)), color-stop(100%, rgba(255, 255, 255, 0))); + background: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); + background: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); + background: -ms-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); + background: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); + background: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); } + .dataTables_wrapper .dataTables_length, + .dataTables_wrapper .dataTables_filter, + .dataTables_wrapper .dataTables_info, + .dataTables_wrapper .dataTables_processing, + .dataTables_wrapper .dataTables_paginate { + color: #555555; } + .dataTables_wrapper .dataTables_scroll { + clear: both; } + .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody { + *margin-top: -1px; + -webkit-overflow-scrolling: touch; } + .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th, .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td { + vertical-align: middle; } + .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th > div.dataTables_sizing, + .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td > div.dataTables_sizing { + height: 0; + overflow: hidden; + margin: 0 !important; + padding: 0 !important; } + .dataTables_wrapper.no-footer .dataTables_scrollBody { + border-bottom: 1px solid #aaaaaa; } + .dataTables_wrapper.no-footer div.dataTables_scrollHead table, + .dataTables_wrapper.no-footer div.dataTables_scrollBody table { + border-bottom: none; } + .dataTables_wrapper:after { + visibility: hidden; + display: block; + content: ""; + clear: both; + height: 0; } + +@media screen and (max-width: 767px) { + .dataTables_wrapper .dataTables_info, + .dataTables_wrapper .dataTables_paginate { + float: none; + text-align: center; } + .dataTables_wrapper .dataTables_paginate { + margin-top: 0.5em; } } +@media screen and (max-width: 640px) { + .dataTables_wrapper .dataTables_length, + .dataTables_wrapper .dataTables_filter { + float: none; + text-align: center; } + .dataTables_wrapper .dataTables_filter { + margin-top: 0.5em; } } \ No newline at end of file diff --git a/public/static/DataTables-1.10.8/css/jquery.dataTables.min.css b/public/static/DataTables-1.10.8/css/jquery.dataTables.min.css new file mode 100644 index 0000000..e6b3680 --- /dev/null +++ b/public/static/DataTables-1.10.8/css/jquery.dataTables.min.css @@ -0,0 +1 @@ +table.dataTable{width:100%;margin:0 auto;clear:both;border-collapse:separate;border-spacing:0}table.dataTable thead th,table.dataTable tfoot th{font-weight:bold}table.dataTable thead th,table.dataTable thead td{padding:10px 18px;border-bottom:1px solid #111}table.dataTable thead th:active,table.dataTable thead td:active{outline:none}table.dataTable tfoot th,table.dataTable tfoot td{padding:10px 18px 6px 18px;border-top:1px solid #111}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc{cursor:pointer;*cursor:hand}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc_disabled{background-repeat:no-repeat;background-position:center right}table.dataTable thead .sorting{background-image:url("../images/sort_both.png")}table.dataTable thead .sorting_asc{background-image:url("../images/sort_asc.png")}table.dataTable thead .sorting_desc{background-image:url("../images/sort_desc.png")}table.dataTable thead .sorting_asc_disabled{background-image:url("../images/sort_asc_disabled.png")}table.dataTable thead .sorting_desc_disabled{background-image:url("../images/sort_desc_disabled.png")}table.dataTable tbody tr{background-color:#ffffff}table.dataTable tbody tr.selected{background-color:#B0BED9}table.dataTable tbody th,table.dataTable tbody td{padding:8px 10px}table.dataTable.row-border tbody th,table.dataTable.row-border tbody td,table.dataTable.display tbody th,table.dataTable.display tbody td{border-top:1px solid #ddd}table.dataTable.row-border tbody tr:first-child th,table.dataTable.row-border tbody tr:first-child td,table.dataTable.display tbody tr:first-child th,table.dataTable.display tbody tr:first-child td{border-top:none}table.dataTable.cell-border tbody th,table.dataTable.cell-border tbody td{border-top:1px solid #ddd;border-right:1px solid #ddd}table.dataTable.cell-border tbody tr th:first-child,table.dataTable.cell-border tbody tr td:first-child{border-left:1px solid #ddd}table.dataTable.cell-border tbody tr:first-child th,table.dataTable.cell-border tbody tr:first-child td{border-top:none}table.dataTable.stripe tbody tr.odd,table.dataTable.display tbody tr.odd{background-color:#f9f9f9}table.dataTable.stripe tbody tr.odd.selected,table.dataTable.display tbody tr.odd.selected{background-color:#acbad4}table.dataTable.hover tbody tr:hover,table.dataTable.display tbody tr:hover{background-color:#f6f6f6}table.dataTable.hover tbody tr:hover.selected,table.dataTable.display tbody tr:hover.selected{background-color:#aab7d1}table.dataTable.order-column tbody tr>.sorting_1,table.dataTable.order-column tbody tr>.sorting_2,table.dataTable.order-column tbody tr>.sorting_3,table.dataTable.display tbody tr>.sorting_1,table.dataTable.display tbody tr>.sorting_2,table.dataTable.display tbody tr>.sorting_3{background-color:#fafafa}table.dataTable.order-column tbody tr.selected>.sorting_1,table.dataTable.order-column tbody tr.selected>.sorting_2,table.dataTable.order-column tbody tr.selected>.sorting_3,table.dataTable.display tbody tr.selected>.sorting_1,table.dataTable.display tbody tr.selected>.sorting_2,table.dataTable.display tbody tr.selected>.sorting_3{background-color:#acbad5}table.dataTable.display tbody tr.odd>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd>.sorting_1{background-color:#f1f1f1}table.dataTable.display tbody tr.odd>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd>.sorting_2{background-color:#f3f3f3}table.dataTable.display tbody tr.odd>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd>.sorting_3{background-color:whitesmoke}table.dataTable.display tbody tr.odd.selected>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_1{background-color:#a6b4cd}table.dataTable.display tbody tr.odd.selected>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_2{background-color:#a8b5cf}table.dataTable.display tbody tr.odd.selected>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_3{background-color:#a9b7d1}table.dataTable.display tbody tr.even>.sorting_1,table.dataTable.order-column.stripe tbody tr.even>.sorting_1{background-color:#fafafa}table.dataTable.display tbody tr.even>.sorting_2,table.dataTable.order-column.stripe tbody tr.even>.sorting_2{background-color:#fcfcfc}table.dataTable.display tbody tr.even>.sorting_3,table.dataTable.order-column.stripe tbody tr.even>.sorting_3{background-color:#fefefe}table.dataTable.display tbody tr.even.selected>.sorting_1,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_1{background-color:#acbad5}table.dataTable.display tbody tr.even.selected>.sorting_2,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_2{background-color:#aebcd6}table.dataTable.display tbody tr.even.selected>.sorting_3,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_3{background-color:#afbdd8}table.dataTable.display tbody tr:hover>.sorting_1,table.dataTable.order-column.hover tbody tr:hover>.sorting_1{background-color:#eaeaea}table.dataTable.display tbody tr:hover>.sorting_2,table.dataTable.order-column.hover tbody tr:hover>.sorting_2{background-color:#ececec}table.dataTable.display tbody tr:hover>.sorting_3,table.dataTable.order-column.hover tbody tr:hover>.sorting_3{background-color:#efefef}table.dataTable.display tbody tr:hover.selected>.sorting_1,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_1{background-color:#a2aec7}table.dataTable.display tbody tr:hover.selected>.sorting_2,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_2{background-color:#a3b0c9}table.dataTable.display tbody tr:hover.selected>.sorting_3,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_3{background-color:#a5b2cb}table.dataTable.no-footer{border-bottom:1px solid #111}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}table.dataTable.compact thead th,table.dataTable.compact thead td{padding:4px 17px 4px 4px}table.dataTable.compact tfoot th,table.dataTable.compact tfoot td{padding:4px}table.dataTable.compact tbody th,table.dataTable.compact tbody td{padding:4px}table.dataTable th.dt-left,table.dataTable td.dt-left{text-align:left}table.dataTable th.dt-center,table.dataTable td.dt-center,table.dataTable td.dataTables_empty{text-align:center}table.dataTable th.dt-right,table.dataTable td.dt-right{text-align:right}table.dataTable th.dt-justify,table.dataTable td.dt-justify{text-align:justify}table.dataTable th.dt-nowrap,table.dataTable td.dt-nowrap{white-space:nowrap}table.dataTable thead th.dt-head-left,table.dataTable thead td.dt-head-left,table.dataTable tfoot th.dt-head-left,table.dataTable tfoot td.dt-head-left{text-align:left}table.dataTable thead th.dt-head-center,table.dataTable thead td.dt-head-center,table.dataTable tfoot th.dt-head-center,table.dataTable tfoot td.dt-head-center{text-align:center}table.dataTable thead th.dt-head-right,table.dataTable thead td.dt-head-right,table.dataTable tfoot th.dt-head-right,table.dataTable tfoot td.dt-head-right{text-align:right}table.dataTable thead th.dt-head-justify,table.dataTable thead td.dt-head-justify,table.dataTable tfoot th.dt-head-justify,table.dataTable tfoot td.dt-head-justify{text-align:justify}table.dataTable thead th.dt-head-nowrap,table.dataTable thead td.dt-head-nowrap,table.dataTable tfoot th.dt-head-nowrap,table.dataTable tfoot td.dt-head-nowrap{white-space:nowrap}table.dataTable tbody th.dt-body-left,table.dataTable tbody td.dt-body-left{text-align:left}table.dataTable tbody th.dt-body-center,table.dataTable tbody td.dt-body-center{text-align:center}table.dataTable tbody th.dt-body-right,table.dataTable tbody td.dt-body-right{text-align:right}table.dataTable tbody th.dt-body-justify,table.dataTable tbody td.dt-body-justify{text-align:justify}table.dataTable tbody th.dt-body-nowrap,table.dataTable tbody td.dt-body-nowrap{white-space:nowrap}table.dataTable,table.dataTable th,table.dataTable td{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.dataTables_wrapper{position:relative;clear:both;*zoom:1;zoom:1}.dataTables_wrapper .dataTables_length{float:left}.dataTables_wrapper .dataTables_filter{float:right;text-align:right}.dataTables_wrapper .dataTables_filter input{margin-left:0.5em}.dataTables_wrapper .dataTables_info{clear:both;float:left;padding-top:0.755em}.dataTables_wrapper .dataTables_paginate{float:right;text-align:right;padding-top:0.25em}.dataTables_wrapper .dataTables_paginate .paginate_button{box-sizing:border-box;display:inline-block;min-width:1.5em;padding:0.5em 1em;margin-left:2px;text-align:center;text-decoration:none !important;cursor:pointer;*cursor:hand;color:#333 !important;border:1px solid transparent;border-radius:2px}.dataTables_wrapper .dataTables_paginate .paginate_button.current,.dataTables_wrapper .dataTables_paginate .paginate_button.current:hover{color:#333 !important;border:1px solid #979797;background-color:white;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #fff), color-stop(100%, #dcdcdc));background:-webkit-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-moz-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-ms-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-o-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:linear-gradient(to bottom, #fff 0%, #dcdcdc 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button.disabled,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active{cursor:default;color:#666 !important;border:1px solid transparent;background:transparent;box-shadow:none}.dataTables_wrapper .dataTables_paginate .paginate_button:hover{color:white !important;border:1px solid #111;background-color:#585858;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111));background:-webkit-linear-gradient(top, #585858 0%, #111 100%);background:-moz-linear-gradient(top, #585858 0%, #111 100%);background:-ms-linear-gradient(top, #585858 0%, #111 100%);background:-o-linear-gradient(top, #585858 0%, #111 100%);background:linear-gradient(to bottom, #585858 0%, #111 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button:active{outline:none;background-color:#2b2b2b;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c));background:-webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:linear-gradient(to bottom, #2b2b2b 0%, #0c0c0c 100%);box-shadow:inset 0 0 3px #111}.dataTables_wrapper .dataTables_paginate .ellipsis{padding:0 1em}.dataTables_wrapper .dataTables_processing{position:absolute;top:50%;left:50%;width:100%;height:40px;margin-left:-50%;margin-top:-25px;padding-top:20px;text-align:center;font-size:1.2em;background-color:white;background:-webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255,255,255,0)), color-stop(25%, rgba(255,255,255,0.9)), color-stop(75%, rgba(255,255,255,0.9)), color-stop(100%, rgba(255,255,255,0)));background:-webkit-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-moz-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-ms-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-o-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:linear-gradient(to right, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%)}.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter,.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_processing,.dataTables_wrapper .dataTables_paginate{color:#333}.dataTables_wrapper .dataTables_scroll{clear:both}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody{*margin-top:-1px;-webkit-overflow-scrolling:touch}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td>div.dataTables_sizing{height:0;overflow:hidden;margin:0 !important;padding:0 !important}.dataTables_wrapper.no-footer .dataTables_scrollBody{border-bottom:1px solid #111}.dataTables_wrapper.no-footer div.dataTables_scrollHead table,.dataTables_wrapper.no-footer div.dataTables_scrollBody table{border-bottom:none}.dataTables_wrapper:after{visibility:hidden;display:block;content:"";clear:both;height:0}@media screen and (max-width: 767px){.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_paginate{float:none;text-align:center}.dataTables_wrapper .dataTables_paginate{margin-top:0.5em}}@media screen and (max-width: 640px){.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter{float:none;text-align:center}.dataTables_wrapper .dataTables_filter{margin-top:0.5em}} diff --git a/public/static/DataTables-1.10.8/css/jquery.dataTables_themeroller.css b/public/static/DataTables-1.10.8/css/jquery.dataTables_themeroller.css new file mode 100644 index 0000000..1426a44 --- /dev/null +++ b/public/static/DataTables-1.10.8/css/jquery.dataTables_themeroller.css @@ -0,0 +1,416 @@ +/* + * Table styles + */ +table.dataTable { + width: 100%; + margin: 0 auto; + clear: both; + border-collapse: separate; + border-spacing: 0; + /* + * Header and footer styles + */ + /* + * Body styles + */ +} +table.dataTable thead th, +table.dataTable thead td, +table.dataTable tfoot th, +table.dataTable tfoot td { + padding: 4px 10px; +} +table.dataTable thead th, +table.dataTable tfoot th { + font-weight: bold; +} +table.dataTable thead th:active, +table.dataTable thead td:active { + outline: none; +} +table.dataTable thead .sorting_asc, +table.dataTable thead .sorting_desc, +table.dataTable thead .sorting { + cursor: pointer; + *cursor: hand; +} +table.dataTable thead th div.DataTables_sort_wrapper { + position: relative; + padding-right: 10px; +} +table.dataTable thead th div.DataTables_sort_wrapper span { + position: absolute; + top: 50%; + margin-top: -8px; + right: -5px; +} +table.dataTable thead th.ui-state-default { + border-right-width: 0; +} +table.dataTable thead th.ui-state-default:last-child { + border-right-width: 1px; +} +table.dataTable tbody tr { + background-color: #ffffff; +} +table.dataTable tbody tr.selected { + background-color: #B0BED9; +} +table.dataTable tbody th, +table.dataTable tbody td { + padding: 8px 10px; +} +table.dataTable th.center, +table.dataTable td.center, +table.dataTable td.dataTables_empty { + text-align: center; +} +table.dataTable th.right, +table.dataTable td.right { + text-align: right; +} +table.dataTable.row-border tbody th, table.dataTable.row-border tbody td, table.dataTable.display tbody th, table.dataTable.display tbody td { + border-top: 1px solid #ddd; +} +table.dataTable.row-border tbody tr:first-child th, +table.dataTable.row-border tbody tr:first-child td, table.dataTable.display tbody tr:first-child th, +table.dataTable.display tbody tr:first-child td { + border-top: none; +} +table.dataTable.cell-border tbody th, table.dataTable.cell-border tbody td { + border-top: 1px solid #ddd; + border-right: 1px solid #ddd; +} +table.dataTable.cell-border tbody tr th:first-child, +table.dataTable.cell-border tbody tr td:first-child { + border-left: 1px solid #ddd; +} +table.dataTable.cell-border tbody tr:first-child th, +table.dataTable.cell-border tbody tr:first-child td { + border-top: none; +} +table.dataTable.stripe tbody tr.odd, table.dataTable.display tbody tr.odd { + background-color: #f9f9f9; +} +table.dataTable.stripe tbody tr.odd.selected, table.dataTable.display tbody tr.odd.selected { + background-color: #abb9d3; +} +table.dataTable.hover tbody tr:hover, +table.dataTable.hover tbody tr.odd:hover, +table.dataTable.hover tbody tr.even:hover, table.dataTable.display tbody tr:hover, +table.dataTable.display tbody tr.odd:hover, +table.dataTable.display tbody tr.even:hover { + background-color: whitesmoke; +} +table.dataTable.hover tbody tr:hover.selected, +table.dataTable.hover tbody tr.odd:hover.selected, +table.dataTable.hover tbody tr.even:hover.selected, table.dataTable.display tbody tr:hover.selected, +table.dataTable.display tbody tr.odd:hover.selected, +table.dataTable.display tbody tr.even:hover.selected { + background-color: #a9b7d1; +} +table.dataTable.order-column tbody tr > .sorting_1, +table.dataTable.order-column tbody tr > .sorting_2, +table.dataTable.order-column tbody tr > .sorting_3, table.dataTable.display tbody tr > .sorting_1, +table.dataTable.display tbody tr > .sorting_2, +table.dataTable.display tbody tr > .sorting_3 { + background-color: #f9f9f9; +} +table.dataTable.order-column tbody tr.selected > .sorting_1, +table.dataTable.order-column tbody tr.selected > .sorting_2, +table.dataTable.order-column tbody tr.selected > .sorting_3, table.dataTable.display tbody tr.selected > .sorting_1, +table.dataTable.display tbody tr.selected > .sorting_2, +table.dataTable.display tbody tr.selected > .sorting_3 { + background-color: #acbad4; +} +table.dataTable.display tbody tr.odd > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd > .sorting_1 { + background-color: #f1f1f1; +} +table.dataTable.display tbody tr.odd > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd > .sorting_2 { + background-color: #f3f3f3; +} +table.dataTable.display tbody tr.odd > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd > .sorting_3 { + background-color: whitesmoke; +} +table.dataTable.display tbody tr.odd.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_1 { + background-color: #a6b3cd; +} +table.dataTable.display tbody tr.odd.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_2 { + background-color: #a7b5ce; +} +table.dataTable.display tbody tr.odd.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_3 { + background-color: #a9b6d0; +} +table.dataTable.display tbody tr.even > .sorting_1, table.dataTable.order-column.stripe tbody tr.even > .sorting_1 { + background-color: #f9f9f9; +} +table.dataTable.display tbody tr.even > .sorting_2, table.dataTable.order-column.stripe tbody tr.even > .sorting_2 { + background-color: #fbfbfb; +} +table.dataTable.display tbody tr.even > .sorting_3, table.dataTable.order-column.stripe tbody tr.even > .sorting_3 { + background-color: #fdfdfd; +} +table.dataTable.display tbody tr.even.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_1 { + background-color: #acbad4; +} +table.dataTable.display tbody tr.even.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_2 { + background-color: #adbbd6; +} +table.dataTable.display tbody tr.even.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_3 { + background-color: #afbdd8; +} +table.dataTable.display tbody tr:hover > .sorting_1, +table.dataTable.display tbody tr.odd:hover > .sorting_1, +table.dataTable.display tbody tr.even:hover > .sorting_1, table.dataTable.order-column.hover tbody tr:hover > .sorting_1, +table.dataTable.order-column.hover tbody tr.odd:hover > .sorting_1, +table.dataTable.order-column.hover tbody tr.even:hover > .sorting_1 { + background-color: #eaeaea; +} +table.dataTable.display tbody tr:hover > .sorting_2, +table.dataTable.display tbody tr.odd:hover > .sorting_2, +table.dataTable.display tbody tr.even:hover > .sorting_2, table.dataTable.order-column.hover tbody tr:hover > .sorting_2, +table.dataTable.order-column.hover tbody tr.odd:hover > .sorting_2, +table.dataTable.order-column.hover tbody tr.even:hover > .sorting_2 { + background-color: #ebebeb; +} +table.dataTable.display tbody tr:hover > .sorting_3, +table.dataTable.display tbody tr.odd:hover > .sorting_3, +table.dataTable.display tbody tr.even:hover > .sorting_3, table.dataTable.order-column.hover tbody tr:hover > .sorting_3, +table.dataTable.order-column.hover tbody tr.odd:hover > .sorting_3, +table.dataTable.order-column.hover tbody tr.even:hover > .sorting_3 { + background-color: #eeeeee; +} +table.dataTable.display tbody tr:hover.selected > .sorting_1, +table.dataTable.display tbody tr.odd:hover.selected > .sorting_1, +table.dataTable.display tbody tr.even:hover.selected > .sorting_1, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_1, +table.dataTable.order-column.hover tbody tr.odd:hover.selected > .sorting_1, +table.dataTable.order-column.hover tbody tr.even:hover.selected > .sorting_1 { + background-color: #a1aec7; +} +table.dataTable.display tbody tr:hover.selected > .sorting_2, +table.dataTable.display tbody tr.odd:hover.selected > .sorting_2, +table.dataTable.display tbody tr.even:hover.selected > .sorting_2, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_2, +table.dataTable.order-column.hover tbody tr.odd:hover.selected > .sorting_2, +table.dataTable.order-column.hover tbody tr.even:hover.selected > .sorting_2 { + background-color: #a2afc8; +} +table.dataTable.display tbody tr:hover.selected > .sorting_3, +table.dataTable.display tbody tr.odd:hover.selected > .sorting_3, +table.dataTable.display tbody tr.even:hover.selected > .sorting_3, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_3, +table.dataTable.order-column.hover tbody tr.odd:hover.selected > .sorting_3, +table.dataTable.order-column.hover tbody tr.even:hover.selected > .sorting_3 { + background-color: #a4b2cb; +} +table.dataTable.nowrap th, table.dataTable.nowrap td { + white-space: nowrap; +} +table.dataTable.compact thead th, +table.dataTable.compact thead td { + padding: 5px 9px; +} +table.dataTable.compact tfoot th, +table.dataTable.compact tfoot td { + padding: 5px 9px 3px 9px; +} +table.dataTable.compact tbody th, +table.dataTable.compact tbody td { + padding: 4px 5px; +} +table.dataTable th.dt-left, +table.dataTable td.dt-left { + text-align: left; +} +table.dataTable th.dt-center, +table.dataTable td.dt-center, +table.dataTable td.dataTables_empty { + text-align: center; +} +table.dataTable th.dt-right, +table.dataTable td.dt-right { + text-align: right; +} +table.dataTable th.dt-justify, +table.dataTable td.dt-justify { + text-align: justify; +} +table.dataTable th.dt-nowrap, +table.dataTable td.dt-nowrap { + white-space: nowrap; +} +table.dataTable thead th.dt-head-left, +table.dataTable thead td.dt-head-left, +table.dataTable tfoot th.dt-head-left, +table.dataTable tfoot td.dt-head-left { + text-align: left; +} +table.dataTable thead th.dt-head-center, +table.dataTable thead td.dt-head-center, +table.dataTable tfoot th.dt-head-center, +table.dataTable tfoot td.dt-head-center { + text-align: center; +} +table.dataTable thead th.dt-head-right, +table.dataTable thead td.dt-head-right, +table.dataTable tfoot th.dt-head-right, +table.dataTable tfoot td.dt-head-right { + text-align: right; +} +table.dataTable thead th.dt-head-justify, +table.dataTable thead td.dt-head-justify, +table.dataTable tfoot th.dt-head-justify, +table.dataTable tfoot td.dt-head-justify { + text-align: justify; +} +table.dataTable thead th.dt-head-nowrap, +table.dataTable thead td.dt-head-nowrap, +table.dataTable tfoot th.dt-head-nowrap, +table.dataTable tfoot td.dt-head-nowrap { + white-space: nowrap; +} +table.dataTable tbody th.dt-body-left, +table.dataTable tbody td.dt-body-left { + text-align: left; +} +table.dataTable tbody th.dt-body-center, +table.dataTable tbody td.dt-body-center { + text-align: center; +} +table.dataTable tbody th.dt-body-right, +table.dataTable tbody td.dt-body-right { + text-align: right; +} +table.dataTable tbody th.dt-body-justify, +table.dataTable tbody td.dt-body-justify { + text-align: justify; +} +table.dataTable tbody th.dt-body-nowrap, +table.dataTable tbody td.dt-body-nowrap { + white-space: nowrap; +} + +table.dataTable, +table.dataTable th, +table.dataTable td { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} + +/* + * Control feature layout + */ +.dataTables_wrapper { + position: relative; + clear: both; + *zoom: 1; + zoom: 1; +} +.dataTables_wrapper .dataTables_length { + float: left; +} +.dataTables_wrapper .dataTables_filter { + float: right; + text-align: right; +} +.dataTables_wrapper .dataTables_filter input { + margin-left: 0.5em; +} +.dataTables_wrapper .dataTables_info { + clear: both; + float: left; + padding-top: 0.55em; +} +.dataTables_wrapper .dataTables_paginate { + float: right; + text-align: right; +} +.dataTables_wrapper .dataTables_paginate .fg-button { + box-sizing: border-box; + display: inline-block; + min-width: 1.5em; + padding: 0.5em; + margin-left: 2px; + text-align: center; + text-decoration: none !important; + cursor: pointer; + *cursor: hand; + color: #333 !important; + border: 1px solid transparent; +} +.dataTables_wrapper .dataTables_paginate .fg-button:active { + outline: none; +} +.dataTables_wrapper .dataTables_paginate .fg-button:first-child { + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; +} +.dataTables_wrapper .dataTables_paginate .fg-button:last-child { + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} +.dataTables_wrapper .dataTables_processing { + position: absolute; + top: 50%; + left: 50%; + width: 100%; + height: 40px; + margin-left: -50%; + margin-top: -25px; + padding-top: 20px; + text-align: center; + font-size: 1.2em; + background-color: white; + background: -webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255, 255, 255, 0)), color-stop(25%, rgba(255, 255, 255, 0.9)), color-stop(75%, rgba(255, 255, 255, 0.9)), color-stop(100%, rgba(255, 255, 255, 0))); + /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); + /* Chrome10+,Safari5.1+ */ + background: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); + /* FF3.6+ */ + background: -ms-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); + /* IE10+ */ + background: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); + /* Opera 11.10+ */ + background: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); + /* W3C */ +} +.dataTables_wrapper .dataTables_length, +.dataTables_wrapper .dataTables_filter, +.dataTables_wrapper .dataTables_info, +.dataTables_wrapper .dataTables_processing, +.dataTables_wrapper .dataTables_paginate { + color: #333; +} +.dataTables_wrapper .dataTables_scroll { + clear: both; +} +.dataTables_wrapper .dataTables_scrollBody { + *margin-top: -1px; + -webkit-overflow-scrolling: touch; +} +.dataTables_wrapper .ui-widget-header { + font-weight: normal; +} +.dataTables_wrapper .ui-toolbar { + padding: 8px; +} +.dataTables_wrapper:after { + visibility: hidden; + display: block; + content: ""; + clear: both; + height: 0; +} + +@media screen and (max-width: 767px) { + .dataTables_wrapper .dataTables_length, + .dataTables_wrapper .dataTables_filter, + .dataTables_wrapper .dataTables_info, + .dataTables_wrapper .dataTables_paginate { + float: none; + text-align: center; + } + .dataTables_wrapper .dataTables_filter, + .dataTables_wrapper .dataTables_paginate { + margin-top: 0.5em; + } +} diff --git a/public/static/DataTables-1.10.8/images/Sorting icons.psd b/public/static/DataTables-1.10.8/images/Sorting icons.psd new file mode 100644 index 0000000..53b2e06 Binary files /dev/null and b/public/static/DataTables-1.10.8/images/Sorting icons.psd differ diff --git a/public/static/DataTables-1.10.8/images/favicon.ico b/public/static/DataTables-1.10.8/images/favicon.ico new file mode 100644 index 0000000..6eeaa2a Binary files /dev/null and b/public/static/DataTables-1.10.8/images/favicon.ico differ diff --git a/public/static/DataTables-1.10.8/images/sort_asc.png b/public/static/DataTables-1.10.8/images/sort_asc.png new file mode 100644 index 0000000..e1ba61a Binary files /dev/null and b/public/static/DataTables-1.10.8/images/sort_asc.png differ diff --git a/public/static/DataTables-1.10.8/images/sort_asc_disabled.png b/public/static/DataTables-1.10.8/images/sort_asc_disabled.png new file mode 100644 index 0000000..fb11dfe Binary files /dev/null and b/public/static/DataTables-1.10.8/images/sort_asc_disabled.png differ diff --git a/public/static/DataTables-1.10.8/images/sort_both.png b/public/static/DataTables-1.10.8/images/sort_both.png new file mode 100644 index 0000000..af5bc7c Binary files /dev/null and b/public/static/DataTables-1.10.8/images/sort_both.png differ diff --git a/public/static/DataTables-1.10.8/images/sort_desc.png b/public/static/DataTables-1.10.8/images/sort_desc.png new file mode 100644 index 0000000..0e156de Binary files /dev/null and b/public/static/DataTables-1.10.8/images/sort_desc.png differ diff --git a/public/static/DataTables-1.10.8/images/sort_desc_disabled.png b/public/static/DataTables-1.10.8/images/sort_desc_disabled.png new file mode 100644 index 0000000..c9fdd8a Binary files /dev/null and b/public/static/DataTables-1.10.8/images/sort_desc_disabled.png differ diff --git a/public/static/DataTables-1.10.8/js/dataTables.bootstrap.js b/public/static/DataTables-1.10.8/js/dataTables.bootstrap.js new file mode 100644 index 0000000..cce2d6e --- /dev/null +++ b/public/static/DataTables-1.10.8/js/dataTables.bootstrap.js @@ -0,0 +1,206 @@ +/*! DataTables Bootstrap 3 integration + * ©2011-2014 SpryMedia Ltd - datatables.net/license + */ + +/** + * DataTables integration for Bootstrap 3. This requires Bootstrap 3 and + * DataTables 1.10 or newer. + * + * This file sets the defaults and adds options to DataTables to style its + * controls using Bootstrap. See http://datatables.net/manual/styling/bootstrap + * for further information. + */ +(function(window, document, undefined){ + +var factory = function( $, DataTable ) { +"use strict"; + + +/* Set the defaults for DataTables initialisation */ +$.extend( true, DataTable.defaults, { + dom: + "<'row'<'col-sm-6'l><'col-sm-6'f>>" + + "<'row'<'col-sm-12'tr>>" + + "<'row'<'col-sm-5'i><'col-sm-7'p>>", + renderer: 'bootstrap' +} ); + + +/* Default class modification */ +$.extend( DataTable.ext.classes, { + sWrapper: "dataTables_wrapper form-inline dt-bootstrap", + sFilterInput: "form-control input-sm", + sLengthSelect: "form-control input-sm" +} ); + + +/* Bootstrap paging button renderer */ +DataTable.ext.renderer.pageButton.bootstrap = function ( settings, host, idx, buttons, page, pages ) { + var api = new DataTable.Api( settings ); + var classes = settings.oClasses; + var lang = settings.oLanguage.oPaginate; + var btnDisplay, btnClass, counter=0; + + var attach = function( container, buttons ) { + var i, ien, node, button; + var clickHandler = function ( e ) { + e.preventDefault(); + if ( !$(e.currentTarget).hasClass('disabled') ) { + api.page( e.data.action ).draw( 'page' ); + } + }; + + for ( i=0, ien=buttons.length ; i 0 ? + '' : ' disabled'); + break; + + case 'previous': + btnDisplay = lang.sPrevious; + btnClass = button + (page > 0 ? + '' : ' disabled'); + break; + + case 'next': + btnDisplay = lang.sNext; + btnClass = button + (page < pages-1 ? + '' : ' disabled'); + break; + + case 'last': + btnDisplay = lang.sLast; + btnClass = button + (page < pages-1 ? + '' : ' disabled'); + break; + + default: + btnDisplay = button + 1; + btnClass = page === button ? + 'active' : ''; + break; + } + + if ( btnDisplay ) { + node = $('
  • ', { + 'class': classes.sPageButton+' '+btnClass, + 'id': idx === 0 && typeof button === 'string' ? + settings.sTableId +'_'+ button : + null + } ) + .append( $('', { + 'href': '#', + 'aria-controls': settings.sTableId, + 'data-dt-idx': counter, + 'tabindex': settings.iTabIndex + } ) + .html( btnDisplay ) + ) + .appendTo( container ); + + settings.oApi._fnBindAction( + node, {action: button}, clickHandler + ); + + counter++; + } + } + } + }; + + // IE9 throws an 'unknown error' if document.activeElement is used + // inside an iframe or frame. + var activeEl; + + try { + // Because this approach is destroying and recreating the paging + // elements, focus is lost on the select button which is bad for + // accessibility. So we want to restore focus once the draw has + // completed + activeEl = $(host).find(document.activeElement).data('dt-idx'); + } + catch (e) {} + + attach( + $(host).empty().html('